From bb20ce047a2e20866b9532c441c7433b1973ba5b Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 23 Feb 2019 19:42:00 +0200 Subject: Fix #110 and remap indices with matched bridge method names --- .../translation/representation/entry/ClassDefEntry.java | 5 +++++ .../enigma/translation/representation/entry/ClassEntry.java | 12 +++++++++++- .../enigma/translation/representation/entry/Entry.java | 2 ++ .../translation/representation/entry/FieldDefEntry.java | 5 +++++ .../enigma/translation/representation/entry/FieldEntry.java | 5 +++++ .../representation/entry/LocalVariableDefEntry.java | 5 +++++ .../translation/representation/entry/LocalVariableEntry.java | 5 +++++ .../translation/representation/entry/MethodDefEntry.java | 5 +++++ .../enigma/translation/representation/entry/MethodEntry.java | 5 +++++ .../translation/representation/entry/ParentedEntry.java | 3 +++ 10 files changed, 51 insertions(+), 1 deletion(-) (limited to 'src/main/java/cuchaz/enigma/translation/representation') diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java index b9391b0..c4df891 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/ClassDefEntry.java @@ -85,6 +85,11 @@ public class ClassDefEntry extends ClassEntry implements DefEntry { return new ClassDefEntry(parent, translatedName, translatedSignature, translatedAccess, translatedSuper, translatedInterfaces); } + @Override + public ClassDefEntry withName(String name) { + return new ClassDefEntry(parent, name, signature, access, superClass, interfaces); + } + @Override public ClassDefEntry withParent(ClassEntry parent) { return new ClassDefEntry(parent, name, signature, access, superClass, interfaces); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java index 644658f..9bfcd8a 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/ClassEntry.java @@ -95,6 +95,11 @@ public class ClassEntry extends ParentedEntry implements Comparable< NameValidator.validateClassName(name, !isInnerClass()); } + @Override + public ClassEntry withName(String name) { + return new ClassEntry(parent, name); + } + @Override public ClassEntry withParent(ClassEntry parent) { return new ClassEntry(parent, name); @@ -193,6 +198,11 @@ public class ClassEntry extends ParentedEntry implements Comparable< @Override public int compareTo(ClassEntry entry) { - return name.compareTo(entry.name); + String fullName = getFullName(); + String otherFullName = entry.getFullName(); + if (fullName.length() != otherFullName.length()) { + return fullName.length() - otherFullName.length(); + } + return fullName.compareTo(otherFullName); } } diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java index 227400e..29a55d8 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/Entry.java @@ -31,6 +31,8 @@ public interface Entry

> extends Translatable { Class

getParentType(); + Entry

withName(String name); + Entry

withParent(P parent); boolean canConflictWith(Entry entry); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java index d487f71..2703301 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/FieldDefEntry.java @@ -54,6 +54,11 @@ public class FieldDefEntry extends FieldEntry implements DefEntry { return new FieldDefEntry(parent, translatedName, translatedDesc, translatedSignature, translatedAccess); } + @Override + public FieldDefEntry withName(String name) { + return new FieldDefEntry(parent, name, desc, signature, access); + } + @Override public FieldDefEntry withParent(ClassEntry owner) { return new FieldDefEntry(owner, this.name, this.desc, signature, access); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java index 2ec2471..700512e 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/FieldEntry.java @@ -44,6 +44,11 @@ public class FieldEntry extends ParentedEntry implements Comparable< return this.desc; } + @Override + public FieldEntry withName(String name) { + return new FieldEntry(parent, name, desc); + } + @Override public FieldEntry withParent(ClassEntry parent) { return new FieldEntry(parent, this.name, this.desc); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java index 86bdf61..c6f32b6 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableDefEntry.java @@ -33,6 +33,11 @@ public class LocalVariableDefEntry extends LocalVariableEntry { return new LocalVariableDefEntry(parent, index, translatedName, parameter, translatedDesc); } + @Override + public LocalVariableDefEntry withName(String name) { + return new LocalVariableDefEntry(parent, index, name, parameter, desc); + } + @Override public LocalVariableDefEntry withParent(MethodEntry entry) { return new LocalVariableDefEntry(entry, index, name, parameter, desc); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java index 0c12f1c..6fdb79f 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/LocalVariableEntry.java @@ -51,6 +51,11 @@ public class LocalVariableEntry extends ParentedEntry implements Co return new LocalVariableEntry(parent, index, translatedName, parameter); } + @Override + public LocalVariableEntry withName(String name) { + return new LocalVariableEntry(parent, index, name, parameter); + } + @Override public LocalVariableEntry withParent(MethodEntry parent) { return new LocalVariableEntry(parent, index, name, parameter); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java index 3ecd470..5184244 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/MethodDefEntry.java @@ -54,6 +54,11 @@ public class MethodDefEntry extends MethodEntry implements DefEntry return new MethodDefEntry(parent, translatedName, translatedDesc, translatedSignature, translatedAccess); } + @Override + public MethodDefEntry withName(String name) { + return new MethodDefEntry(parent, name, descriptor, signature, access); + } + @Override public MethodDefEntry withParent(ClassEntry parent) { return new MethodDefEntry(new ClassEntry(parent.getFullName()), name, descriptor, signature, access); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java index 3a1dbb3..f5d5c74 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/MethodEntry.java @@ -55,6 +55,11 @@ public class MethodEntry extends ParentedEntry implements Comparable return new MethodEntry(parent, translatedName, translator.translate(descriptor)); } + @Override + public MethodEntry withName(String name) { + return new MethodEntry(parent, name, descriptor); + } + @Override public MethodEntry withParent(ClassEntry parent) { return new MethodEntry(new ClassEntry(parent.getFullName()), name, descriptor); diff --git a/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java b/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java index 7ba7c19..834da8d 100644 --- a/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java +++ b/src/main/java/cuchaz/enigma/translation/representation/entry/ParentedEntry.java @@ -35,6 +35,9 @@ public abstract class ParentedEntry

> implements Entry

{ @Override public abstract ParentedEntry

withParent(P parent); + @Override + public abstract ParentedEntry

withName(String name); + protected abstract ParentedEntry

translate(Translator translator, @Nullable EntryMapping mapping); @Override -- cgit v1.2.3