private MethodReference buildMethodReference(java.lang.reflect.Method method) { String className = ClassNameUtils.toInternal(method.getDeclaringClass()); String name = method.getName(); List<String> parameterTypes = ClassNameUtils.toInternal(method.getParameterTypes()); String returnType = ClassNameUtils.toInternal(method.getReturnType()); ImmutableMethodReference immutableMethodRef = new ImmutableMethodReference(className, name, parameterTypes, returnType); MethodReference methodRef = manipulator.getDexBuilder().internMethodReference(immutableMethodRef); return methodRef; }
public static ImmutableMethodEncodedValue of(@Nonnull MethodEncodedValue methodEncodedValue) { if (methodEncodedValue instanceof ImmutableMethodEncodedValue) { return (ImmutableMethodEncodedValue)methodEncodedValue; } return new ImmutableMethodEncodedValue(ImmutableMethodReference.of(methodEncodedValue.getValue())); }
public static ImmutableMethodEncodedValue of(@Nonnull MethodEncodedValue methodEncodedValue) { if (methodEncodedValue instanceof ImmutableMethodEncodedValue) { return (ImmutableMethodEncodedValue)methodEncodedValue; } return new ImmutableMethodEncodedValue(ImmutableMethodReference.of(methodEncodedValue.getValue())); }
private Annotation buildEnclosingMethodTag(EnclosingMethodTag t, Set<String> skipList) { if (!skipList.add("Ldalvik/annotation/EnclosingMethod;")) { return null; } if (t.getEnclosingMethod() == null) { return null; } String[] split1 = t.getEnclosingMethodSig().split("\\)"); String parametersS = split1[0].replaceAll("\\(", ""); String returnTypeS = split1[1]; List<String> typeList = new ArrayList<String>(); if (!parametersS.equals("")) { for (String p : Util.splitParameters(parametersS)) { if (!p.isEmpty()) { typeList.add(p); } } } ImmutableMethodReference mRef = new ImmutableMethodReference(SootToDexUtils.getDexClassName(t.getEnclosingClass()), t.getEnclosingMethod(), typeList, returnTypeS); ImmutableMethodEncodedValue methodRef = new ImmutableMethodEncodedValue(mRef); AnnotationElement methodElement = new ImmutableAnnotationElement("value", methodRef); return new ImmutableAnnotation(AnnotationVisibility.SYSTEM, "Ldalvik/annotation/EnclosingMethod;", Collections.singleton(methodElement)); }
@Nonnull public static ImmutableReference of(int referenceType, Reference reference) { switch (referenceType) { case ReferenceType.STRING: return ImmutableStringReference.of((StringReference)reference); case ReferenceType.TYPE: return ImmutableTypeReference.of((TypeReference)reference); case ReferenceType.FIELD: return ImmutableFieldReference.of((FieldReference)reference); case ReferenceType.METHOD: return ImmutableMethodReference.of((MethodReference)reference); } throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } }
protected static MethodReference toMethodReference(SootMethodRef m) { List<String> parameters = new ArrayList<String>(); for (Type t : m.parameterTypes()) { parameters.add(SootToDexUtils.getDexTypeDescriptor(t)); } MethodReference methodRef = new ImmutableMethodReference(SootToDexUtils.getDexClassName(m.declaringClass().getName()), m.name(), parameters, SootToDexUtils.getDexTypeDescriptor(m.returnType())); return methodRef; }
@Nonnull public static ImmutableReference of(Reference reference) { if (reference instanceof StringReference) { return ImmutableStringReference.of((StringReference)reference); } if (reference instanceof TypeReference) { return ImmutableTypeReference.of((TypeReference)reference); } if (reference instanceof FieldReference) { return ImmutableFieldReference.of((FieldReference)reference); } if (reference instanceof MethodReference) { return ImmutableMethodReference.of((MethodReference)reference); } throw new ExceptionWithContext("Invalid reference type"); }
new ImmutableMethodReference(classString, methodNameString, paramTypeList, returnType));
@Nonnull public static ImmutableMethodHandleReference of(@Nonnull MethodHandleReference methodHandleReference) { if (methodHandleReference instanceof ImmutableMethodHandleReference) { return (ImmutableMethodHandleReference) methodHandleReference; } int methodHandleType = methodHandleReference.getMethodHandleType(); ImmutableReference memberReference; switch (methodHandleType) { case MethodHandleType.STATIC_PUT: case MethodHandleType.STATIC_GET: case MethodHandleType.INSTANCE_PUT: case MethodHandleType.INSTANCE_GET: memberReference = ImmutableFieldReference.of( (FieldReference) methodHandleReference.getMemberReference()); break; case MethodHandleType.INVOKE_STATIC: case MethodHandleType.INVOKE_INSTANCE: case MethodHandleType.INVOKE_CONSTRUCTOR: case MethodHandleType.INVOKE_DIRECT: case MethodHandleType.INVOKE_INTERFACE: memberReference = ImmutableMethodReference.of( (MethodReference) methodHandleReference.getMemberReference()); break; default: throw new ExceptionWithContext("Invalid method handle type: %d", methodHandleType); } return new ImmutableMethodHandleReference(methodHandleType, memberReference); }
type = (reference_type_descriptor86!=null?((smaliTreeWalker.reference_type_descriptor_return)reference_type_descriptor86).type:null); methodReference = new ImmutableMethodReference(type, (SIMPLE_NAME87!=null?SIMPLE_NAME87.getText():null), method_prototype88.getParameterTypes(), method_prototype88.getReturnType());
@Nonnull public static ImmutableMethodHandleReference of(@Nonnull MethodHandleReference methodHandleReference) { if (methodHandleReference instanceof ImmutableMethodHandleReference) { return (ImmutableMethodHandleReference) methodHandleReference; } int methodHandleType = methodHandleReference.getMethodHandleType(); ImmutableReference memberReference; switch (methodHandleType) { case MethodHandleType.STATIC_PUT: case MethodHandleType.STATIC_GET: case MethodHandleType.INSTANCE_PUT: case MethodHandleType.INSTANCE_GET: memberReference = ImmutableFieldReference.of( (FieldReference) methodHandleReference.getMemberReference()); break; case MethodHandleType.INVOKE_STATIC: case MethodHandleType.INVOKE_INSTANCE: case MethodHandleType.INVOKE_CONSTRUCTOR: case MethodHandleType.INVOKE_DIRECT: case MethodHandleType.INVOKE_INTERFACE: memberReference = ImmutableMethodReference.of( (MethodReference) methodHandleReference.getMemberReference()); break; default: throw new ExceptionWithContext("Invalid method handle type: %d", methodHandleType); } return new ImmutableMethodHandleReference(methodHandleType, memberReference); }
resolvedMethod = new ImmutableMethodReference(methodClass.getType(), resolvedMethod.getName(), resolvedMethod.getParameterTypes(), resolvedMethod.getReturnType());
@Nonnull public static ImmutableReference of(int referenceType, Reference reference) { switch (referenceType) { case ReferenceType.STRING: return ImmutableStringReference.of((StringReference)reference); case ReferenceType.TYPE: return ImmutableTypeReference.of((TypeReference)reference); case ReferenceType.FIELD: return ImmutableFieldReference.of((FieldReference)reference); case ReferenceType.METHOD: return ImmutableMethodReference.of((MethodReference)reference); case ReferenceType.METHOD_PROTO: return ImmutableMethodProtoReference.of((MethodProtoReference)reference); case ReferenceType.CALL_SITE: return ImmutableCallSiteReference.of((CallSiteReference) reference); case ReferenceType.METHOD_HANDLE: return ImmutableMethodHandleReference.of((MethodHandleReference) reference); } throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } }
@Nonnull public static ImmutableMethodReference of(@Nonnull MethodReference methodReference) { if (methodReference instanceof ImmutableMethodReference) { return (ImmutableMethodReference)methodReference; } return new ImmutableMethodReference( methodReference.getDefiningClass(), methodReference.getName(), methodReference.getParameterTypes(), methodReference.getReturnType()); }
@Nonnull public static ImmutableReference of(int referenceType, Reference reference) { switch (referenceType) { case ReferenceType.STRING: return ImmutableStringReference.of((StringReference)reference); case ReferenceType.TYPE: return ImmutableTypeReference.of((TypeReference)reference); case ReferenceType.FIELD: return ImmutableFieldReference.of((FieldReference)reference); case ReferenceType.METHOD: return ImmutableMethodReference.of((MethodReference)reference); case ReferenceType.METHOD_PROTO: return ImmutableMethodProtoReference.of((MethodProtoReference)reference); case ReferenceType.CALL_SITE: return ImmutableCallSiteReference.of((CallSiteReference) reference); case ReferenceType.METHOD_HANDLE: return ImmutableMethodHandleReference.of((MethodHandleReference) reference); } throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } }
@Nonnull public static ImmutableMethodReference of(@Nonnull MethodReference methodReference) { if (methodReference instanceof ImmutableMethodReference) { return (ImmutableMethodReference)methodReference; } return new ImmutableMethodReference( methodReference.getDefiningClass(), methodReference.getName(), methodReference.getParameterTypes(), methodReference.getReturnType()); }
@Nonnull public static ImmutableReference of(Reference reference) { if (reference instanceof StringReference) { return ImmutableStringReference.of((StringReference)reference); } if (reference instanceof TypeReference) { return ImmutableTypeReference.of((TypeReference)reference); } if (reference instanceof FieldReference) { return ImmutableFieldReference.of((FieldReference)reference); } if (reference instanceof MethodReference) { return ImmutableMethodReference.of((MethodReference)reference); } if (reference instanceof MethodProtoReference) { return ImmutableMethodProtoReference.of((MethodProtoReference) reference); } if (reference instanceof CallSiteReference) { return ImmutableCallSiteReference.of((CallSiteReference) reference); } if (reference instanceof MethodHandleReference) { return ImmutableMethodHandleReference.of((MethodHandleReference) reference); } throw new ExceptionWithContext("Invalid reference type"); }
@Nonnull public static ImmutableMethodReference of(@Nonnull MethodReference methodReference) { if (methodReference instanceof ImmutableMethodReference) { return (ImmutableMethodReference)methodReference; } return new ImmutableMethodReference( methodReference.getDefiningClass(), methodReference.getName(), methodReference.getParameterTypes(), methodReference.getReturnType()); }
@Nonnull public static ImmutableReference of(Reference reference) { if (reference instanceof StringReference) { return ImmutableStringReference.of((StringReference)reference); } if (reference instanceof TypeReference) { return ImmutableTypeReference.of((TypeReference)reference); } if (reference instanceof FieldReference) { return ImmutableFieldReference.of((FieldReference)reference); } if (reference instanceof MethodReference) { return ImmutableMethodReference.of((MethodReference)reference); } if (reference instanceof MethodProtoReference) { return ImmutableMethodProtoReference.of((MethodProtoReference) reference); } if (reference instanceof CallSiteReference) { return ImmutableCallSiteReference.of((CallSiteReference) reference); } if (reference instanceof MethodHandleReference) { return ImmutableMethodHandleReference.of((MethodHandleReference) reference); } throw new ExceptionWithContext("Invalid reference type"); }
Iterable<ImmutableMethodParameter> methodParams = ParamUtil.parseParamString(m.group(3)); String methodRet = m.group(4); ImmutableMethodReference methodRef = new ImmutableMethodReference(className, methodName, methodParams, methodRet);