@Nonnull @Override public List<? extends MethodParameter> getParameters() { int parametersOffset = getParametersOffset(); if (parametersOffset > 0) { final List<String> parameterTypes = getParameterTypes(); return new AbstractForwardSequentialList<MethodParameter>() { @Nonnull @Override public Iterator<MethodParameter> iterator() { return new ParameterIterator(parameterTypes, getParameterAnnotations(), getParameterNames()); } @Override public int size() { return parameterTypes.size(); } }; } return ImmutableList.of(); }
@Nonnull @Override public List<? extends MethodParameter> getParameters() { int parametersOffset = getParametersOffset(); if (parametersOffset > 0) { final List<String> parameterTypes = getParameterTypes(); return new AbstractForwardSequentialList<MethodParameter>() { @Nonnull @Override public Iterator<MethodParameter> iterator() { return new ParameterIterator(parameterTypes, getParameterAnnotations(), getParameterNames()); } @Override public int size() { return parameterTypes.size(); } }; } return ImmutableList.of(); }
@Nonnull @Override public List<? extends MethodParameter> getParameters() { int parametersOffset = getParametersOffset(); if (parametersOffset > 0) { final List<String> parameterTypes = getParameterTypes(); return new AbstractForwardSequentialList<MethodParameter>() { @Nonnull @Override public Iterator<MethodParameter> iterator() { return new ParameterIterator(parameterTypes, getParameterAnnotations(), getParameterNames()); } @Override public int size() { return parameterTypes.size(); } }; } return ImmutableList.of(); }
private static boolean compare(DexBackedMethod dexBackedMethod, DexBackedMethod sDexBackedMethod) { if (dexBackedMethod == null || sDexBackedMethod == null || dexBackedMethod.getName() == null || sDexBackedMethod.getName() == null) { return false; } if (dexBackedMethod.getName().equals(sDexBackedMethod.getName())) { List<String> parameters = dexBackedMethod.getParameterTypes(); List<String> sParameters = sDexBackedMethod.getParameterTypes(); if (parameters.size() != sParameters.size()) { return false; } for (String param : parameters) { if (!sParameters.contains(param)) { return false; } } return true; } return false; }
public void addModifiedMethods(DexBackedMethod method) throws PatchException { System.out.println("add modified Method:" + method.getReturnType() + " " + method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ") in Class:" + method.getDefiningClass()); this.modifiedMethods.add(method); if (!modifiedClasses.contains(method.classDef)) { modifiedClasses.add(method.classDef); String className = method.classDef.getType(); addManifestModifiedClass(className); } }
@Override public boolean filterMethod(MethodDiffInfo methodDiffInfo) throws PatchException { DexBackedMethod dexBackedMethod = methodDiffInfo.getBackedMethod(); if (dexBackedMethod.getName().equals("<clinit>") || dexBackedMethod.getName().contains("ajc$preClinit")||dexBackedMethod.getName().equals("<init>")||dexBackedMethod.getName().contains("access$")) { return true; } if (methodDiffInfo.getType().equals(DiffType.REMOVE)) { return true; } else if (methodDiffInfo.getType().equals(DiffType.ADD)){ throw new PatchException("can't add method:" + dexBackedMethod.getName() + " in class:" + dexBackedMethod.getDefiningClass()); } if (dexBackedMethod.getParameters().size() > 8) { throw new PatchException("can't patch method:" + dexBackedMethod.getName() + "has Parameters above 8 in class:"+dexBackedMethod.getDefiningClass()); } if (dexBackedMethod.getParameterTypes().contains("J") || dexBackedMethod.getParameterTypes().contains("D") || dexBackedMethod.getParameterTypes().contains("F")) { throw new PatchException("can't patch method:" + dexBackedMethod.getName() + "has ParameterType long,double or float in class:"+dexBackedMethod.getDefiningClass()); } return false; }
addMethods.add("[add new Method:]" + method.getReturnType() + " " + method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ") in Class:" + method.getDefiningClass()); MethodDiffInfoObject diffInfoObject = new MethodDiffInfoObject(); diffInfoObject.setReturnType(method.getReturnType()); diffInfoObject.setMethodDeclaration(method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ")"); diffInfoObject.setInClass(method.getDefiningClass()); modifyMethods.add("[modify Method:]" + method.getReturnType() + " " + method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ") in Class:" + method.getDefiningClass()); MethodDiffInfoObject diffInfoObject = new MethodDiffInfoObject(); diffInfoObject.setReturnType(method.getReturnType()); diffInfoObject.setMethodDeclaration(method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ")"); diffInfoObject.setInClass(method.getDefiningClass());
new ParameterIterator(method.getParameterTypes(), method.getParameterAnnotations(), getParameterNames(reader));
new ParameterIterator(method.getParameterTypes(), method.getParameterAnnotations(), getParameterNames(reader));
new ParameterIterator(method.getParameterTypes(), method.getParameterAnnotations(), getParameterNames(reader));