org.jf.dexlib2.iface.Method类的使用及代码示例

x33g5p2x  于2022-01-25 转载在 其他  
字(9.8k)|赞(0)|评价(0)|浏览(216)

本文整理了Java中org.jf.dexlib2.iface.Method类的一些代码示例,展示了Method类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Method类的具体详情如下:
包路径:org.jf.dexlib2.iface.Method
类名称:Method

Method介绍

[英]This class represents a specific method definition in a class. It also acts as a MethodReference to itself. Any equality/comparison is based on its identity as a MethodReference, and shouldn't take into account any non-MethodReference specifics of this method.
[中]此类表示类中的特定方法定义。它还充当对自身的方法参考。任何相等/比较都基于其作为MethodReference的身份,不应考虑此方法的任何非MethodReference细节。

代码示例

代码示例来源:origin: Tencent/tinker

MethodImplementation methodImpl = method.getImplementation();
if (methodImpl != null) {
  methodImpl = new BuilderMutableMethodImplementation(dexBuilder, methodImpl);
    method.getDefiningClass(),
    method.getName(),
    method.getParameters(),
    method.getReturnType(),
    method.getAccessFlags(),
    method.getAnnotations(),
    methodImpl
);

代码示例来源:origin: CalebFenton/simplify

private String buildDescriptor(Method method) {
  StringBuilder sb = new StringBuilder();
  sb.append('(');
  method.getParameterTypes().forEach(sb::append);
  sb.append(')');
  sb.append(method.getReturnType());
  return sb.toString();
}

代码示例来源:origin: Sable/soot

protected List<Type> getParameterTypes(final Method method) {
 // retrieve all parameter types
 List<Type> parameterTypes = new ArrayList<Type>();
 if (method.getParameters() != null) {
  List<? extends CharSequence> parameters = method.getParameterTypes();
  for (CharSequence t : parameters) {
   Type type = DexType.toSoot(t.toString());
   parameterTypes.add(type);
  }
 }
 return parameterTypes;
}

代码示例来源:origin: CalebFenton/simplify

private void visitMethod(ClassDef classDef, Method method, MethodVisitor mv) {
  mv.visitCode();
  String methodName = method.getName();
  if (methodName.equals("<clinit>")) {
    visitClInitStub(mv);
  } else if (methodName.equals("<init>")) {
    visitInitStub(classDef, mv);
  } else if (methodName.equals("hashCode") && method.getReturnType().equals("I")) {
    visitCallObjectHashCode(mv);
  } else {
    visitMethodStub(mv);
  }
  // Do this at the end so ASM can calculate max stack and locals sizes
  mv.visitMaxs(0, 0);
  mv.visitEnd();
}

代码示例来源:origin: testwhat/SmaliEx

private void listClassVtable(ClassProto classProto) throws IOException {
  List<Method> methods = classProto.getVtable();
  String className = "Class " + classProto.getType() + " extends " + classProto.getSuperclass() +
      " : " + methods.size() + " methods\n";
  System.out.write(className.getBytes());
  for (int i = 0; i < methods.size(); i++) {
    Method method = methods.get(i);
    String methodString = i + ":" + method.getDefiningClass() + "->" + method.getName() + "(";
    for (CharSequence parameter : method.getParameterTypes()) {
      methodString += parameter;
    }
    methodString += ")" + method.getReturnType() + "\n";
    System.out.write(methodString.getBytes());
  }
  System.out.write("\n".getBytes());
}

代码示例来源:origin: Sable/soot

MethodImplementation code = method.getImplementation();
if (code == null) {
 throw new RuntimeException("error: no code for method " + method.getName());
List<? extends MethodParameter> parameters = method.getParameters();
if (parameters != null) {
 parameterNames = new ArrayList<String>();
 parameterTypes = new ArrayList<Type>();
 for (MethodParameter param : method.getParameters()) {
  parameterNames.add(param.getName());
  parameterTypes.add(DexType.toSoot(param.getType()));
isStatic = Modifier.isStatic(method.getAccessFlags());
numRegisters = code.getRegisterCount();
numParameterRegisters = MethodUtil.getParameterRegisterCount(method);

代码示例来源:origin: JesusFreke/smali

@Nullable @Override public MethodImplementation getImplementation() {
    return method.getImplementation();
  }
}

代码示例来源:origin: CalebFenton/simplify

boolean hasDefaultConstructor = false;
for (Method method : methods) {
  int access = method.getAccessFlags();
  String name = method.getName();
  String desc = buildDescriptor(method);
  String signature = null;
  String[] exceptions = buildExceptions(method);
  MethodVisitor mv = classWriter.visitMethod(access, name, desc, signature, exceptions);
  if (method.getImplementation() != null) {
    if (method.getName().equals("<init>") && desc.equals("()V")) {
      hasDefaultConstructor = true;

代码示例来源:origin: JesusFreke/smali

if (!AccessFlags.ABSTRACT.isSet(interfaceMethod.getAccessFlags())) {
    ClassProto existingInterface = (ClassProto)classPath.getClass(
        defaultMethods.get(defaultMethodIndex).getDefiningClass());
    if (!existingInterface.implementsInterface(interfaceMethod.getDefiningClass())) {
      Method removedMethod = defaultMethods.remove(defaultMethodIndex);
      defaultConflictMethods.add(removedMethod);
  if (!AccessFlags.ABSTRACT.isSet(interfaceMethod.getAccessFlags())) {
        mirandaMethods.get(mirandaMethodIndex).getDefiningClass());
    if (!existingInterface.implementsInterface(interfaceMethod.getDefiningClass())) {
      Method oldMethod = mirandaMethods.remove(mirandaMethodIndex);
      int methodOrderValue = methodOrder.get(oldMethod);
if (!AccessFlags.ABSTRACT.isSet(interfaceMethod.getAccessFlags())) {
  defaultMethods.add(interfaceMethod);
  methodOrder.put(interfaceMethod, methodOrder.size());

代码示例来源:origin: Sable/soot

/**
 * Retrieve the SootMethod equivalent of this method
 *
 * @return the SootMethod of this method
 */
public SootMethod makeSootMethod(final Method method) {
 int accessFlags = method.getAccessFlags();
 // get the name of the method
 String name = method.getName();
 List<SootClass> thrownExceptions = getThrownExceptions(method);
 List<Type> parameterTypes = getParameterTypes(method);
 // retrieve the return type of this method
 Type returnType = DexType.toSoot(method.getReturnType());
 // Build soot method by all available parameters
 SootMethod sm = declaringClass.getMethodUnsafe(name, parameterTypes, returnType);
 if (sm == null) {
  sm = Scene.v().makeSootMethod(name, parameterTypes, returnType, accessFlags, thrownExceptions);
 }
 // if the method is abstract or native, no code needs to be transformed
 int flags = method.getAccessFlags();
 if (Modifier.isAbstract(flags) || Modifier.isNative(flags)) {
  return sm;
 }
 if (Options.v().oaat() && declaringClass.resolvingLevel() <= SootClass.SIGNATURES) {
  return sm;
 }
 // sets the method source by adding its body as the active body
 sm.setSource(createMethodSource(method));
 return sm;
}

代码示例来源:origin: JesusFreke/smali

@Nonnull @Override public String getName() {
  return method.getName();
}

代码示例来源:origin: TACIXAT/CFGScanDroid

public ControlFlowGraph(Method method) {
  this(getFlatMethod(method));
  String definingClass = method.getDefiningClass();
  this.identifier = definingClass + "." + method.getName() + "()" + method.getReturnType();
  // this.identifier = definingClass.substring(definingClass.lastIndexOf("/")+1) + method.getName() + "(" + method.getReturnType() + ")";
  this.identifier = this.identifier.replace(";", "");
  this.shortIdentifier = identifier.substring(definingClass.lastIndexOf("/")+1);
}

代码示例来源:origin: KB5201314/ZjDroid

private boolean methodSignaturesMatch(@Nonnull Method a, @Nonnull Method b) {
  return (a.getName().equals(b.getName()) &&
      a.getReturnType().equals(b.getReturnType()) &&
      a.getParameters().equals(b.getParameters()));
}

代码示例来源:origin: JesusFreke/smali

/**
 * Checks if the interface method overrides the virtual or interface method2
 * @param method A Method from an interface
 * @param method2 A Method from an interface or a class
 * @return true if the interface method overrides the virtual or interface method2
 */
private boolean interfaceMethodOverrides(@Nonnull Method method, @Nonnull Method method2) {
  ClassProto classProto = (ClassProto)classPath.getClass(method2.getDefiningClass());
  if (classProto.isInterface()) {
    ClassProto targetClassProto = (ClassProto)classPath.getClass(method.getDefiningClass());
    return targetClassProto.implementsInterface(method2.getDefiningClass());
  } else {
    return false;
  }
}

代码示例来源:origin: JesusFreke/smali

@Override public int getAccessFlags() {
  return method.getAccessFlags();
}

代码示例来源:origin: JesusFreke/smali

@Nonnull @Override public Set<? extends Annotation> getAnnotations() {
  return method.getAnnotations();
}

代码示例来源:origin: JesusFreke/smali

@Nonnull @Override public List<? extends MethodParameter> getParameters() {
  return method.getParameters();
}

代码示例来源:origin: com.taobao.android/dex_patch

private String getMethodFullName(Method method) {
  StringBuilder stringBuilder = new StringBuilder();
  String methodName = method.getName();
  stringBuilder.append(methodName).append("(");
  for (CharSequence c:method.getParameterTypes()){
    stringBuilder.append(c);
  }
  stringBuilder.append(")").append(method.getReturnType());
  return stringBuilder.toString();
}

代码示例来源:origin: testwhat/SmaliEx

private void verifyDexFile(DexFile dexFile) {
    Assert.assertEquals(1, dexFile.getClasses().size());
    ClassDef cls = Lists.newArrayList(dexFile.getClasses()).get(0);
    Assert.assertEquals("Lcls1;", cls.getType());
    Assert.assertEquals(1, Lists.newArrayList(cls.getMethods()).size());
    Method method = Iterators.getNext(cls.getMethods().iterator(), null);
    Assert.assertEquals("method1", method.getName());
    Assert.assertEquals(1, Lists.newArrayList(method.getImplementation().getInstructions()).size());
    Instruction instruction = Lists.newArrayList(method.getImplementation().getInstructions().iterator()).get(0);
    Assert.assertEquals(Opcode.INVOKE_CUSTOM, instruction.getOpcode());
    Assert.assertTrue(((Instruction35c) instruction).getReference() instanceof CallSiteReference);
  }
}

代码示例来源:origin: JesusFreke/smali

private void internDebug(@Nonnull Method method) {
  for (MethodParameter param: method.getParameters()) {
    String paramName = param.getName();
    if (paramName != null) {
      dexPool.stringSection.intern(paramName);
    }
  }
  MethodImplementation methodImpl = method.getImplementation();
  if (methodImpl != null) {
    for (DebugItem debugItem: methodImpl.getDebugItems()) {
      switch (debugItem.getDebugItemType()) {
        case DebugItemType.START_LOCAL:
          StartLocal startLocal = (StartLocal)debugItem;
          dexPool.stringSection.internNullable(startLocal.getName());
          dexPool.typeSection.internNullable(startLocal.getType());
          dexPool.stringSection.internNullable(startLocal.getSignature());
          break;
        case DebugItemType.SET_SOURCE_FILE:
          dexPool.stringSection.internNullable(((SetSourceFile) debugItem).getSourceFile());
          break;
      }
    }
  }
}

相关文章