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; } } } }
switch (instruction.getOpcode().referenceType) { case ReferenceType.STRING: dexPool.stringSection.intern((StringReference)reference); break; case ReferenceType.TYPE:
public void internNullable(@Nullable CharSequence string) { if (string != null) { intern(string); } }
public void internNullable(@Nullable CharSequence string) { if (string != null) { intern(string); } }
public void internNullable(@Nullable CharSequence string) { if (string != null) { intern(string); } }
public void intern(@Nonnull CharSequence type) { String typeString = type.toString(); Integer prev = internedItems.put(typeString, 0); if (prev == null) { dexPool.stringSection.intern(typeString); } }
public void intern(@Nonnull CharSequence type) { String typeString = type.toString(); Integer prev = internedItems.put(typeString, 0); if (prev == null) { dexPool.stringSection.intern(typeString); } }
public void intern(@Nonnull CharSequence type) { String typeString = type.toString(); Integer prev = internedItems.put(typeString, 0); if (prev == null) { stringPool.intern(typeString); } }
public void intern(@Nonnull MethodReference method) { Integer prev = internedItems.put(method, 0); if (prev == null) { typePool.intern(method.getDefiningClass()); protoPool.intern(method); stringPool.intern(method.getName()); } }
public void intern(@Nonnull FieldReference field) { Integer prev = internedItems.put(field, 0); if (prev == null) { dexPool.typeSection.intern(field.getDefiningClass()); dexPool.stringSection.intern(field.getName()); dexPool.typeSection.intern(field.getType()); } }
public void intern(@Nonnull FieldReference field) { Integer prev = internedItems.put(field, 0); if (prev == null) { typePool.intern(field.getDefiningClass()); stringPool.intern(field.getName()); typePool.intern(field.getType()); } }
public void intern(@Nonnull MethodProtoReference reference) { Integer prev = internedItems.put(reference, 0); if (prev == null) { dexPool.stringSection.intern(getShorty(reference)); dexPool.typeSection.intern(reference.getReturnType()); dexPool.typeListSection.intern(reference.getParameterTypes()); } }
public void intern(@Nonnull MethodReference method) { Integer prev = internedItems.put(method, 0); if (prev == null) { dexPool.typeSection.intern(method.getDefiningClass()); dexPool.protoSection.intern(new PoolMethodProto(method)); dexPool.stringSection.intern(method.getName()); } }
public void intern(@Nonnull MethodProtoReference reference) { Integer prev = internedItems.put(reference, 0); if (prev == null) { dexPool.stringSection.intern(getShorty(reference)); dexPool.typeSection.intern(reference.getReturnType()); dexPool.typeListSection.intern(reference.getParameterTypes()); } }
public void intern(@Nonnull MethodReference method) { Integer prev = internedItems.put(method, 0); if (prev == null) { dexPool.typeSection.intern(method.getDefiningClass()); dexPool.protoSection.intern(new PoolMethodProto(method)); dexPool.stringSection.intern(method.getName()); } }
public void intern(@Nonnull FieldReference field) { Integer prev = internedItems.put(field, 0); if (prev == null) { dexPool.typeSection.intern(field.getDefiningClass()); dexPool.stringSection.intern(field.getName()); dexPool.typeSection.intern(field.getType()); } }
public void intern(@Nonnull Annotation annotation) { Integer prev = internedItems.put(annotation, 0); if (prev == null) { dexPool.typeSection.intern(annotation.getType()); for (AnnotationElement element: annotation.getElements()) { dexPool.stringSection.intern(element.getName()); dexPool.internEncodedValue(element.getValue()); } } }
public void intern(@Nonnull Annotation annotation) { Integer prev = internedItems.put(annotation, 0); if (prev == null) { dexPool.typeSection.intern(annotation.getType()); for (AnnotationElement element: annotation.getElements()) { dexPool.stringSection.intern(element.getName()); dexPool.internEncodedValue(element.getValue()); } } }
public void intern(@Nonnull Annotation annotation) { Integer prev = internedItems.put(annotation, 0); if (prev == null) { typePool.intern(annotation.getType()); for (AnnotationElement element: annotation.getElements()) { stringPool.intern(element.getName()); DexPool.internEncodedValue(element.getValue(), stringPool, typePool, fieldPool, methodPool); } } }
public void intern(@Nonnull MethodReference method) { // We can't use method directly, because it is likely a full MethodReference. We use a wrapper that computes // hashCode and equals based only on the prototype fields Key key = new Key(method); Integer prev = internedItems.put(key, 0); if (prev == null) { stringPool.intern(key.getShorty()); typePool.intern(method.getReturnType()); typeListPool.intern(method.getParameterTypes()); } }