break; case ReferenceType.TYPE: dexPool.typeSection.intern((TypeReference)reference); break; case ReferenceType.FIELD: dexPool.typeSection.internNullable(handler.getExceptionType());
public void internNullable(@Nullable CharSequence type) { if (type != null) { intern(type); } }
private void internDebug(@Nonnull Method method) { for (MethodParameter param: method.getParameters()) { String paramName = param.getName(); if (paramName != null) { dexPool.stringSection.intern(paramName); } } MethodImplementation methodImpl = method.getImplementation(); if (methodImpl != null) { for (DebugItem debugItem: methodImpl.getDebugItems()) { switch (debugItem.getDebugItemType()) { case DebugItemType.START_LOCAL: StartLocal startLocal = (StartLocal)debugItem; dexPool.stringSection.internNullable(startLocal.getName()); dexPool.typeSection.internNullable(startLocal.getType()); dexPool.stringSection.internNullable(startLocal.getSignature()); break; case DebugItemType.SET_SOURCE_FILE: dexPool.stringSection.internNullable(((SetSourceFile) debugItem).getSourceFile()); break; } } } }
@Override public int getItemIndex(@Nonnull TypeReference key) { return getItemIndex(key.getType()); }
@Nonnull @Override public TypePool getTypeSection() { return new TypePool(DexPool.this); }
public void internNullable(@Nullable CharSequence type) { if (type != null) { intern(type); } }
private void internDebug(@Nonnull Method method) { for (MethodParameter param: method.getParameters()) { String paramName = param.getName(); if (paramName != null) { dexPool.stringSection.intern(paramName); } } MethodImplementation methodImpl = method.getImplementation(); if (methodImpl != null) { for (DebugItem debugItem: methodImpl.getDebugItems()) { switch (debugItem.getDebugItemType()) { case DebugItemType.START_LOCAL: StartLocal startLocal = (StartLocal)debugItem; dexPool.stringSection.internNullable(startLocal.getName()); dexPool.typeSection.internNullable(startLocal.getType()); dexPool.stringSection.internNullable(startLocal.getSignature()); break; case DebugItemType.SET_SOURCE_FILE: dexPool.stringSection.internNullable(((SetSourceFile) debugItem).getSourceFile()); break; } } } }
@Override public int getItemIndex(@Nonnull TypeReference key) { return getItemIndex(key.getType()); }
@Nonnull @Override public TypePool getTypeSection() { return new TypePool(DexPool.this); }
dexPool.typeSection.intern(poolClassDef.getType()); dexPool.typeSection.internNullable(poolClassDef.getSuperclass()); dexPool.typeListSection.intern(poolClassDef.getInterfaces()); dexPool.stringSection.internNullable(poolClassDef.getSourceFile());
public void internNullable(@Nullable CharSequence type) { if (type != null) { intern(type); } }
private void internDebug(@Nonnull Method method) { for (MethodParameter param: method.getParameters()) { String paramName = param.getName(); if (paramName != null) { stringPool.intern(paramName); } } MethodImplementation methodImpl = method.getImplementation(); if (methodImpl != null) { for (DebugItem debugItem: methodImpl.getDebugItems()) { switch (debugItem.getDebugItemType()) { case DebugItemType.START_LOCAL: StartLocal startLocal = (StartLocal)debugItem; stringPool.internNullable(startLocal.getName()); typePool.internNullable(startLocal.getType()); stringPool.internNullable(startLocal.getSignature()); break; case DebugItemType.SET_SOURCE_FILE: stringPool.internNullable(((SetSourceFile) debugItem).getSourceFile()); break; } } } }
@Override public int getItemIndex(@Nonnull TypeReference key) { return getItemIndex(key.getType()); }
public static DexPool makeDexPool(int api) { StringPool stringPool = new StringPool(); TypePool typePool = new TypePool(stringPool); FieldPool fieldPool = new FieldPool(stringPool, typePool); TypeListPool typeListPool = new TypeListPool(typePool); ProtoPool protoPool = new ProtoPool(stringPool, typePool, typeListPool); MethodPool methodPool = new MethodPool(stringPool, typePool, protoPool); AnnotationPool annotationPool = new AnnotationPool(stringPool, typePool, fieldPool, methodPool); AnnotationSetPool annotationSetPool = new AnnotationSetPool(annotationPool); ClassPool classPool = new ClassPool(stringPool, typePool, fieldPool, methodPool, annotationSetPool, typeListPool); return new DexPool(api, stringPool, typePool, protoPool, fieldPool, methodPool, classPool, typeListPool, annotationPool, annotationSetPool); }
break; case ReferenceType.TYPE: typePool.intern((TypeReference)reference); break; case ReferenceType.FIELD: typePool.internNullable(handler.getExceptionType());
public void intern(@Nonnull Collection<? extends CharSequence> types) { if (types.size() > 0) { Key<? extends Collection<? extends CharSequence>> key = new Key<Collection<? extends CharSequence>>(types); Integer prev = internedItems.put(key, 0); if (prev == null) { for (CharSequence type: types) { dexPool.typeSection.intern(type); } } } }
break; case ReferenceType.TYPE: dexPool.typeSection.intern((TypeReference)reference); break; case ReferenceType.FIELD: dexPool.typeSection.internNullable(handler.getExceptionType());
public void intern(@Nonnull Collection<? extends CharSequence> types) { if (types.size() > 0) { Key<? extends Collection<? extends CharSequence>> key = new Key<Collection<? extends CharSequence>>(types); Integer prev = internedItems.put(key, 0); if (prev == null) { for (CharSequence type: types) { dexPool.typeSection.intern(type); } } } }
typePool.intern(poolClassDef.getType()); typePool.internNullable(poolClassDef.getSuperclass()); typeListPool.intern(poolClassDef.getInterfaces()); stringPool.internNullable(poolClassDef.getSourceFile());
public void intern(@Nonnull Collection<? extends CharSequence> types) { if (types.size() > 0) { Key<? extends Collection<? extends CharSequence>> key = new Key<Collection<? extends CharSequence>>(types); Integer prev = internedItems.put(key, 0); if (prev == null) { for (CharSequence type: types) { typePool.intern(type); } } } }