Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

String intern #2431

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions jadx-core/src/main/java/jadx/core/dex/info/ClassInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,11 @@ private void splitAndApplyNames(RootNode root, ArgType type, boolean canBeInner)
}
}
if (!innerCls) {
pkg = clsPkg;
pkg = clsPkg.intern();
parentClass = null;
}
this.name = clsName;
this.fullName = makeFullName();
this.name = clsName.intern();
this.fullName = makeFullName().intern();
}

private static String makeFullClsName(String pkg, String shortName, ClassInfo parentClass, boolean alias, boolean raw) {
Expand Down
4 changes: 2 additions & 2 deletions jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ public final class FieldInfo implements IFieldInfoRef {

private FieldInfo(ClassInfo declClass, String name, ArgType type) {
this.declClass = declClass;
this.name = name;
this.name = name.intern();
this.type = type;
this.alias = name;
this.alias = name.intern();
}

public static FieldInfo from(RootNode root, ClassInfo declClass, String name, ArgType type) {
Expand Down
10 changes: 4 additions & 6 deletions jadx-core/src/main/java/jadx/core/dex/info/MethodInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,17 @@ public final class MethodInfo implements Comparable<MethodInfo> {
private final List<ArgType> argTypes;
private final ClassInfo declClass;
private final String shortId;
private final String rawFullId;
private final int hash;

private String alias;

private MethodInfo(ClassInfo declClass, String name, List<ArgType> args, ArgType retType) {
this.name = name;
this.alias = name;
this.name = name.intern();
this.alias = name.intern();
this.declClass = declClass;
this.argTypes = args;
this.retType = retType;
this.shortId = makeShortId(name, argTypes, retType);
this.rawFullId = declClass.makeRawFullName() + '.' + shortId;
this.shortId = makeShortId(name, argTypes, retType).intern();
this.hash = calcHashCode();
}

Expand Down Expand Up @@ -115,7 +113,7 @@ public String getFullId() {
}

public String getRawFullId() {
return rawFullId;
return declClass.makeRawFullName() + '.' + shortId;
}

/**
Expand Down
4 changes: 2 additions & 2 deletions jadx-core/src/main/java/jadx/core/dex/info/PackageInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ public static synchronized PackageInfo fromShortName(RootNode root, @Nullable Pa
}

private PackageInfo(String fullName, @Nullable PackageInfo parentPkg, String name) {
this.fullName = fullName;
this.fullName = fullName.intern();
this.parentPkg = parentPkg;
this.name = name;
this.name = name.intern();
}

public boolean isRoot() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ private static class ObjectType extends KnownType {
protected final String objName;

public ObjectType(String obj) {
this.objName = obj;
this.objName = obj.intern();
this.hash = objName.hashCode();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public String getParentClassType() {
}

public void setParentClassType(String parentClassType) {
this.parentClassType = parentClassType;
this.parentClassType = parentClassType.intern();
}

@Override
Expand All @@ -42,7 +42,7 @@ public String getType() {
}

public void setType(String type) {
this.type = type;
this.type = type.intern();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public static IAnnotation readAnnotation(SectionReader in, SectionReader ext, bo
int size = in.readUleb128();
Map<String, EncodedValue> values = new LinkedHashMap<>(size);
for (int i = 0; i < size; i++) {
String name = ext.getString(in.readUleb128());
String name = ext.getString(in.readUleb128()).intern();
values.put(name, EncodedValueParser.parseValue(in, ext));
}
String type = ext.getType(typeIndex);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ public class EncodedValue extends PinnedAttribute {

public EncodedValue(EncodedType type, Object value) {
this.type = type;
this.value = value;
if (type == EncodedType.ENCODED_STRING) {
this.value = ((String) value).intern();
} else {
this.value = value;
}
}

public EncodedType getType() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class JadxAnnotation implements IAnnotation {

public JadxAnnotation(AnnotationVisibility visibility, String type, Map<String, EncodedValue> values) {
this.visibility = visibility;
this.type = type;
this.type = type.intern();
this.values = values;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static AnnotationsAttr pack(List<IAnnotation> annotationList) {
Map<String, IAnnotation> annMap = new HashMap<>(annotationList.size());
for (IAnnotation ann : annotationList) {
if (ann.getVisibility() != AnnotationVisibility.SYSTEM) {
annMap.put(ann.getAnnotationClass(), ann);
annMap.put(ann.getAnnotationClass().intern(), ann);
}
}
if (annMap.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public List<String> readClassesList(ConstPoolReader constPool) {
}
List<String> list = new ArrayList<>(len);
for (int i = 0; i < len; i++) {
list.add(constPool.getClass(readU2()));
list.add(constPool.getClass(readU2()).intern());
}
return list;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@ public static EncodedValue read(JavaClassData clsData, DataReader reader) {
case 'Z':
return new EncodedValue(EncodedType.ENCODED_BOOLEAN, 1 == constPool.getInt(reader.readU2()));
case 's':
return new EncodedValue(EncodedType.ENCODED_STRING, constPool.getUtf8(reader.readU2()));
return new EncodedValue(EncodedType.ENCODED_STRING, constPool.getUtf8(reader.readU2()).intern());

case 'e':
String cls = constPool.getUtf8(reader.readU2());
String name = constPool.getUtf8(reader.readU2());
String cls = constPool.getUtf8(reader.readU2()).intern();
String name = constPool.getUtf8(reader.readU2()).intern();
return new EncodedValue(EncodedType.ENCODED_ENUM, new JadxFieldRef(cls, name, cls));

case 'c':
return new EncodedValue(EncodedType.ENCODED_TYPE, constPool.getUtf8(reader.readU2()));
return new EncodedValue(EncodedType.ENCODED_TYPE, constPool.getUtf8(reader.readU2()).intern());

case '@':
return new EncodedValue(EncodedType.ENCODED_ANNOTATION,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public static JadxAnnotation readAnnotation(AnnotationVisibility visibility, Jav
for (int j = 0; j < pairsCount; j++) {
String name = constPool.getUtf8(reader.readU2());
EncodedValue value = EncodedValueReader.read(clsData, reader);
pairs.put(name, value);
pairs.put(name.intern(), value);
}
return new JadxAnnotation(visibility, type, pairs);
}
Expand Down