@Nullable private String getContainingClassForImplicitReference() { if (classDef.options.implicitReferences) { return classDef.classDef.getType(); } return null; }
public static Set<String> classesOfDex(DexBackedDexFile dexFile) { Set<String> classes = new HashSet<String>(); for (ClassDef c : dexFile.getClasses()) { String name = Util.dottedClassName(c.getType()); classes.add(name); } return classes; }
private void visitEnumMethods(ClassDef classDef, Iterable<? extends Field> fields, ClassWriter classWriter) { String name = stripName(classDef.getType()); classWriter.visitField(access, "$shadow_instance", classDef.getType(), null, null); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, name, "<init>", "(Ljava/lang/String;I)V", false); mv.visitFieldInsn(Opcodes.PUTSTATIC, name, fieldName, classDef.getType()); mv.visitInsn(Opcodes.DUP); mv.visitIntInsn(Opcodes.BIPUSH, i); mv.visitFieldInsn(Opcodes.GETSTATIC, name, fieldName, classDef.getType()); mv.visitInsn(Opcodes.AASTORE); mv.visitFieldInsn(Opcodes.PUTSTATIC, name, valuesFieldName, "[" + classDef.getType()); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(0, 0); "()[" + classDef.getType(), null, null); mv.visitCode(); mv.visitFieldInsn(Opcodes.GETSTATIC, name, valuesFieldName, "[" + classDef.getType()); mv.visitInsn(Opcodes.DUP); mv.visitVarInsn(Opcodes.ASTORE, 0); "(Ljava/lang/String;)" + classDef.getType(), null, null); mv.visitCode(); mv.visitLdcInsn(Type.getType(classDef.getType())); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Enum", "valueOf",
boolean isCurrentDexHasChangedClass = false; for (org.jf.dexlib2.iface.ClassDef classDef : dexFile.getClasses()) { if (descOfChangedClassesInCurrDex.contains(classDef.getType())) { isCurrentDexHasChangedClass = true; break; if (!descOfChangedClassesInCurrDex.contains(classDef.getType())) { continue; Logger.d("Class %s will be added into changed classes dex ...", classDef.getType()); classDef.getType(), classDef.getAccessFlags(), classDef.getSuperclass(),
String forClassName = Util.dottedClassName(defItem.getType()); classesToDefItems.put(forClassName, new ClassInformation(dexFile, defItem));
List<Tag> tags = handleAnnotation(aSet, classDef.getType()); if (tags == null) { return;
private void visitClass(ClassDef classDef, ClassWriter classWriter) { int version = Opcodes.V1_8; int access = classDef.getAccessFlags(); String name = stripName(classDef.getType()); // Signature should be type signature for the class, which is uncommon. String signature = buildASMSignature(classDef); String superName = null; if (classDef.getSuperclass() != null) { superName = stripName(classDef.getSuperclass()); } String[] interfaces = buildInterfaces(classDef); classWriter.visit(version, access, name, signature, superName, interfaces); classWriter.visitSource(classDef.getSourceFile(), null); visitClassAnnotations(classDef.getAnnotations(), classWriter); }
if (!TypeUtils.canAccessClass(thisClass.getType(), classPath.getClassDef(resolvedField.getDefiningClass()))) { while (!TypeUtils.canAccessClass(thisClass.getType(), fieldClass)) { String superclass = fieldClass.getSuperclass(); if (superclass == null) { FieldReference newResolvedField = classPath.getClass(fieldClass.getType()).getFieldByOffset(fieldOffset); if (newResolvedField == null) { throw new ExceptionWithContext("Couldn't find accessible class while resolving field %s", ReferenceUtil.getShortFieldDescriptor(resolvedField)); resolvedField = new ImmutableFieldReference(fieldClass.getType(), newResolvedField.getName(), newResolvedField.getType());
resolvedMethod = new ReparentedMethodReference(resolvedMethod, objectRegisterTypeProto.getType()); } else if (!isSuper && !TypeUtils.canAccessClass( thisClass.getType(), classPath.getClassDef(resolvedMethod.getDefiningClass()))) { while (!TypeUtils.canAccessClass(thisClass.getType(), methodClass)) { String superclass = methodClass.getSuperclass(); if (superclass == null) { classPath.getClass(methodClass.getType()).getMethodByVtableIndex(methodIndex); if (newResolvedMethod == null) { throw new ExceptionWithContext("Couldn't find accessible class while resolving method %s", resolvedMethod = new ImmutableMethodReference(methodClass.getType(), resolvedMethod.getName(), resolvedMethod.getParameterTypes(), resolvedMethod.getReturnType());
public DexModuleEntry(ClassDef cdefitems, DexFileModule container) { classDefItem = cdefitems; this.container = container; String temp =cdefitems.getType(); // className = temp; if (temp.endsWith(";")) className = temp.substring(0,temp.length()-1); //remove last ';' else className = temp; // System.out.println(className); }
public DexModuleEntry(ClassDef cdefitems, DexFileModule container) { classDefItem = cdefitems; this.container = container; String temp =cdefitems.getType(); // className = temp; if (temp.endsWith(";")) className = temp.substring(0,temp.length()-1); //remove last ';' else className = temp; // System.out.println(className); }
public SyntheticAccessorResolver(@Nonnull Opcodes opcodes, @Nonnull Iterable<? extends ClassDef> classDefs) { this.syntheticAccessorFSM = new SyntheticAccessorFSM(opcodes); ImmutableMap.Builder<String, ClassDef> builder = ImmutableMap.builder(); for (ClassDef classDef: classDefs) { builder.put(classDef.getType(), classDef); } this.classDefMap = builder.build(); }
public SyntheticAccessorResolver(Opcodes opcodes, Iterable<? extends ClassDef> classDefs) { this.syntheticAccessorFSM = new SyntheticAccessorFSM(opcodes); ImmutableMap.Builder<String, ClassDef> builder = ImmutableMap.builder(); for (ClassDef classDef : classDefs) { builder.put(classDef.getType(), classDef); } this.classDefMap = builder.build(); }
public void reset() { if (additionalDexFiles != null) { for (DexFile dexFile : additionalDexFiles) { for (ClassDef classDef : dexFile.getClasses()) { availableClasses.remove(classDef.getType()); } } additionalDexFiles.clear(); } loadedClasses = CacheBuilder.newBuilder().build(classLoader); }
public DexClassProvider(DexFile dexFile) { this.dexFile = dexFile; for (ClassDef classDef: dexFile.getClasses()) { classMap.put(classDef.getType(), classDef); } }
private static Map<String, ClassDef> getBundleClassDef(File file) throws IOException { HashMap<String, ClassDef> classDefMap = new HashMap<String, ClassDef>(); File[] dexFiles = getDexFiles(file); HashSet<ClassDef> classDefs = new HashSet<ClassDef>(); for (File dexFile : dexFiles) { classDefs.addAll(DexFileFactory.loadDexFile(dexFile, 19, true).getClasses()); } for (ClassDef classDef : classDefs) { classDefMap.put(classDef.getType(), classDef); } return classDefMap; }
private void writeAnnotations(IndentingWriter writer) throws IOException { Collection<? extends Annotation> classAnnotations = classDef.getAnnotations(); if (classAnnotations.size() != 0) { writer.write("\n\n"); writer.write("# annotations\n"); String containingClass = null; if (options.implicitReferences) { containingClass = classDef.getType(); } AnnotationFormatter.writeTo(writer, classAnnotations, containingClass); } }
private void writeClass(IndentingWriter writer) throws IOException { writer.write(".class "); writeAccessFlags(writer); writer.write(classDef.getType()); writer.write('\n'); }
private void writeClass(IndentingWriter writer) throws IOException { writer.write(".class "); writeAccessFlags(writer); writer.write(classDef.getType()); writer.write('\n'); }
private static ClassDef reDexClass(@Nonnull ClassDef classDef) { return new ImmutableClassDef(classDef.getType(), classDef.getAccessFlags(), classDef.getSuperclass(), classDef.getInterfaces(), classDef.getSourceFile(), classDef.getAnnotations(), classDef.getFields(), reDexMethods(classDef)); }