public void intern(@Nonnull ClassDef classDef) { PoolClassDef poolClassDef = new PoolClassDef(classDef); PoolClassDef prev = internedItems.put(poolClassDef.getType(), poolClassDef); if (prev != null) { throw new ExceptionWithContext("Class %s has already been interned", poolClassDef.getType()); dexPool.typeSection.intern(poolClassDef.getType()); dexPool.typeSection.internNullable(poolClassDef.getSuperclass()); dexPool.typeListSection.intern(poolClassDef.getInterfaces()); dexPool.stringSection.internNullable(poolClassDef.getSourceFile()); for (Field field: poolClassDef.getFields()) { String fieldDescriptor = ReferenceUtil.getShortFieldDescriptor(field); if (!fields.add(fieldDescriptor)) { throw new ExceptionWithContext("Multiple definitions for field %s->%s", poolClassDef.getType(), fieldDescriptor); for (PoolMethod method: poolClassDef.getMethods()) { String methodDescriptor = ReferenceUtil.getMethodDescriptor(method, true); if (!methods.add(methodDescriptor)) { throw new ExceptionWithContext("Multiple definitions for method %s->%s", poolClassDef.getType(), methodDescriptor); dexPool.annotationSetSection.intern(poolClassDef.getAnnotations());
@Override public int getAccessFlags(@Nonnull PoolClassDef classDef) { return classDef.getAccessFlags(); }
@Nonnull @Override public Collection<PoolMethod> getSortedDirectMethods(@Nonnull PoolClassDef classDef) { return classDef.getDirectMethods(); }
@Nonnull @Override public Collection<? extends Field> getSortedStaticFields(@Nonnull PoolClassDef classDef) { return classDef.getStaticFields(); }
@Nullable @Override public Set<? extends Annotation> getClassAnnotations(@Nonnull PoolClassDef classDef) { Set<? extends Annotation> annotations = classDef.getAnnotations(); if (annotations.size() == 0) { return null; } return annotations; }
@Nonnull @Override public Collection<? extends Field> getSortedInstanceFields(@Nonnull PoolClassDef classDef) { return classDef.getInstanceFields(); }
@Nullable @Override public CharSequence getSourceFile(@Nonnull PoolClassDef classDef) { return classDef.getSourceFile(); }
@Nonnull @Override public Collection<? extends Field> getSortedFields(@Nonnull PoolClassDef classDef) { return classDef.getFields(); }
@Nonnull @Override public Collection<? extends PoolMethod> getSortedMethods(@Nonnull PoolClassDef classDef) { return classDef.getMethods(); }
@Nullable @Override public ArrayEncodedValue getStaticInitializers( @Nonnull PoolClassDef classDef) { return StaticInitializerUtil.getStaticInitializers(classDef.getStaticFields()); }
@Nullable @Override public Set<? extends Annotation> getClassAnnotations(@Nonnull PoolClassDef classDef) { Set<? extends Annotation> annotations = classDef.getAnnotations(); if (annotations.size() == 0) { return null; } return annotations; }
@Nonnull @Override public Collection<? extends Field> getSortedInstanceFields(@Nonnull PoolClassDef classDef) { return classDef.getInstanceFields(); }
@Nullable @Override public CharSequence getSourceFile(@Nonnull PoolClassDef classDef) { return classDef.getSourceFile(); }
@Nonnull @Override public Collection<? extends Field> getSortedFields(@Nonnull PoolClassDef classDef) { return classDef.getFields(); }
@Nonnull @Override public Collection<? extends PoolMethod> getSortedMethods(@Nonnull PoolClassDef classDef) { return classDef.getMethods(); }
public void intern(@Nonnull ClassDef classDef) { PoolClassDef poolClassDef = new PoolClassDef(classDef); PoolClassDef prev = internedItems.put(poolClassDef.getType(), poolClassDef); if (prev != null) { throw new ExceptionWithContext("Class %s has already been interned", poolClassDef.getType()); typePool.intern(poolClassDef.getType()); typePool.internNullable(poolClassDef.getSuperclass()); typeListPool.intern(poolClassDef.getInterfaces()); stringPool.internNullable(poolClassDef.getSourceFile()); for (Field field: poolClassDef.getFields()) { String fieldDescriptor = ReferenceUtil.getShortFieldDescriptor(field); if (!fields.add(fieldDescriptor)) { throw new ExceptionWithContext("Multiple definitions for field %s->%s", poolClassDef.getType(), fieldDescriptor); for (PoolMethod method: poolClassDef.getMethods()) { String methodDescriptor = ReferenceUtil.getShortMethodDescriptor(method); if (!methods.add(methodDescriptor)) { throw new ExceptionWithContext("Multiple definitions for method %s->%s", poolClassDef.getType(), methodDescriptor); annotationSetPool.intern(poolClassDef.getAnnotations());
@Nonnull @Override public Collection<? extends Field> getSortedStaticFields(@Nonnull PoolClassDef classDef) { return classDef.getStaticFields(); }
@Nullable @Override public Set<? extends Annotation> getClassAnnotations(@Nonnull PoolClassDef classDef) { Set<? extends Annotation> annotations = classDef.getAnnotations(); if (annotations.size() == 0) { return null; } return annotations; }
@Nonnull @Override public Collection<? extends Field> getSortedInstanceFields(@Nonnull PoolClassDef classDef) { return classDef.getInstanceFields(); }
@Nonnull @Override public Collection<PoolMethod> getSortedDirectMethods(@Nonnull PoolClassDef classDef) { return classDef.getDirectMethods(); }