private void replaceObfuscatedMethodNames(AsmagicDiffVisitor dv) { for (MethodNode mn : dv.newMethods) { if (mn.visibleAnnotations != null) { for (Object oan : mn.visibleAnnotations) { AnnotationNode an = (AnnotationNode) oan; if (an.desc.contains("AsmagicMethodReplace")) { List<Object> vals = an.values; String alias = null; if (vals != null || vals.size() > 1) { alias = (String) vals.get(1); dv.methodsToReplace.put(alias, 1); mn.name = alias; } } } } } }
/** * It is assumed that ALL CLASSES regardless of nesting, have unique names In addition, it is * assumed that there is not multi-level nesting A SOURCE STRUCTURE OBJECT CAN ONLY HANDLE ONE * LEVEL OF CLASS NESTING * * @param targetClass * @param depth * @throws IOException */ private void findNestedInnerClasses(ClassNode2 targetClass, int depth) throws IOException { // saves the depth of a particular inner class depth++; // get the inner classes of a class List<InnerClassNode2> innerClassNodes = targetClass.innerClasses; // returns if there are no inner classes if (innerClassNodes == null) { return; } else { // if there are inner classes, each inner class is converted to a ClassStructure // object and stored in an ArrayList for (int i = 0; i < innerClassNodes.size(); i++) { classStructures.add(new ClassStructure(innerClassNodes.get(i).name, depth)); } } }