private Index readClasses(PackedDataInputStream stream, int annotationsSize, int implementorsSize, int subclassesSize) throws IOException { int classesSize = stream.readPackedU32(); HashMap<DotName, ClassInfo> classes = new HashMap<DotName, ClassInfo>(classesSize); HashMap<DotName, List<ClassInfo>> subclasses = new HashMap<DotName, List<ClassInfo>>(subclassesSize); HashMap<DotName, List<ClassInfo>> implementors = new HashMap<DotName, List<ClassInfo>>(implementorsSize); HashMap<DotName, List<AnnotationInstance>> masterAnnotations = new HashMap<DotName, List<AnnotationInstance>>(annotationsSize); for (int i = 0; i < classesSize; i++) { ClassInfo clazz = readClassEntry(stream, masterAnnotations); addClassToMap(subclasses, clazz.superName(), clazz); for (Type interfaceType : clazz.interfaceTypeArray()) { addClassToMap(implementors, interfaceType.name(), clazz); } classes.put(clazz.name(), clazz); } return new Index(masterAnnotations, subclasses, implementors, classes); }
private void addClass(ClassInfo clazz) { addClassName(clazz.name()); if (clazz.superName() != null) addClassName(clazz.superName()); addTypeList(clazz.typeParameterArray()); addTypeList(clazz.interfaceTypeArray()); addType(clazz.superClassType()); // Inner class data DotName enclosingClass = clazz.enclosingClass(); if (enclosingClass != null) { addClassName(enclosingClass); } String name = clazz.simpleName(); if (name != null) { addString(name); } addEnclosingMethod(clazz.enclosingMethod()); addMethodList(clazz.methodArray()); addFieldList(clazz.fieldArray()); for (Entry<DotName, List<AnnotationInstance>> entry : clazz.annotations().entrySet()) { addClassName(entry.getKey()); for (AnnotationInstance instance: entry.getValue()) { addAnnotation(instance); } } }
ClassInfo clazz = (ClassInfo) enclosingTarget; int position = target.asClassExtends().position(); type = position == 65535 ? clazz.superClassType() : clazz.interfaceTypeArray()[position]; break;
stream.writePackedU32(positionOf(clazz.interfaceTypeArray()));