From 59e189bef2b5e6d129fb7c2c988ed0b2130e36ac Mon Sep 17 00:00:00 2001 From: lclc98 Date: Mon, 4 Jul 2016 18:14:22 +1000 Subject: Reformat --- .../java/cuchaz/enigma/mapping/ArgumentEntry.java | 56 +++++-------- .../cuchaz/enigma/mapping/ArgumentMapping.java | 27 +++---- .../java/cuchaz/enigma/mapping/ClassEntry.java | 45 +++++------ .../java/cuchaz/enigma/mapping/ClassMapping.java | 46 +++-------- .../cuchaz/enigma/mapping/ConstructorEntry.java | 45 +++++------ .../java/cuchaz/enigma/mapping/EntryFactory.java | 36 +-------- .../java/cuchaz/enigma/mapping/FieldEntry.java | 46 +++++------ .../java/cuchaz/enigma/mapping/FieldMapping.java | 42 +--------- .../enigma/mapping/IllegalNameException.java | 44 ---------- .../enigma/mapping/MappingParseException.java | 29 ------- src/main/java/cuchaz/enigma/mapping/Mappings.java | 83 ++++++++----------- .../cuchaz/enigma/mapping/MappingsChecker.java | 44 +++++----- .../java/cuchaz/enigma/mapping/MappingsReader.java | 41 +++++++--- .../cuchaz/enigma/mapping/MappingsReaderOld.java | 5 ++ .../cuchaz/enigma/mapping/MappingsRenamer.java | 26 +++--- .../java/cuchaz/enigma/mapping/MappingsWriter.java | 15 ++-- .../java/cuchaz/enigma/mapping/MemberMapping.java | 2 - .../java/cuchaz/enigma/mapping/MethodEntry.java | 46 +++++------ .../java/cuchaz/enigma/mapping/MethodMapping.java | 93 ++++++++-------------- .../java/cuchaz/enigma/mapping/NameValidator.java | 1 + .../cuchaz/enigma/mapping/ProcyonEntryFactory.java | 22 +---- src/main/java/cuchaz/enigma/mapping/Signature.java | 50 +++++------- .../cuchaz/enigma/mapping/SignatureUpdater.java | 82 ------------------- .../java/cuchaz/enigma/mapping/Translator.java | 48 +++++------ src/main/java/cuchaz/enigma/mapping/Type.java | 62 ++++++--------- 25 files changed, 335 insertions(+), 701 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/mapping/IllegalNameException.java delete mode 100644 src/main/java/cuchaz/enigma/mapping/MappingParseException.java delete mode 100644 src/main/java/cuchaz/enigma/mapping/SignatureUpdater.java (limited to 'src/main/java/cuchaz/enigma/mapping') diff --git a/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java b/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java index 83033bc..1409fc4 100644 --- a/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/ArgumentEntry.java @@ -10,17 +10,13 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.Serializable; +import cuchaz.enigma.utils.Utils; -import cuchaz.enigma.Util; +public class ArgumentEntry implements Entry { -public class ArgumentEntry implements Entry, Serializable { - - private static final long serialVersionUID = 4472172468162696006L; - - private BehaviorEntry m_behaviorEntry; - private int m_index; - private String m_name; + private BehaviorEntry behaviorEntry; + private int index; + private String name; public ArgumentEntry(BehaviorEntry behaviorEntry, int index, String name) { if (behaviorEntry == null) { @@ -33,44 +29,38 @@ public class ArgumentEntry implements Entry, Serializable { throw new IllegalArgumentException("Argument name cannot be null!"); } - m_behaviorEntry = behaviorEntry; - m_index = index; - m_name = name; - } - - public ArgumentEntry(ArgumentEntry other) { - m_behaviorEntry = (BehaviorEntry) m_behaviorEntry.cloneToNewClass(getClassEntry()); - m_index = other.m_index; - m_name = other.m_name; + this.behaviorEntry = behaviorEntry; + this.index = index; + this.name = name; } public ArgumentEntry(ArgumentEntry other, String newClassName) { - m_behaviorEntry = (BehaviorEntry) other.m_behaviorEntry.cloneToNewClass(new ClassEntry(newClassName)); - m_index = other.m_index; - m_name = other.m_name; + this.behaviorEntry = (BehaviorEntry) other.behaviorEntry.cloneToNewClass(new ClassEntry(newClassName)); + this.index = other.index; + this.name = other.name; } public BehaviorEntry getBehaviorEntry() { - return m_behaviorEntry; + return this.behaviorEntry; } public int getIndex() { - return m_index; + return this.index; } @Override public String getName() { - return m_name; + return this.name; } @Override public ClassEntry getClassEntry() { - return m_behaviorEntry.getClassEntry(); + return this.behaviorEntry.getClassEntry(); } @Override public String getClassName() { - return m_behaviorEntry.getClassName(); + return this.behaviorEntry.getClassName(); } @Override @@ -79,20 +69,16 @@ public class ArgumentEntry implements Entry, Serializable { } public String getMethodName() { - return m_behaviorEntry.getName(); + return this.behaviorEntry.getName(); } public Signature getMethodSignature() { - return m_behaviorEntry.getSignature(); + return this.behaviorEntry.getSignature(); } @Override public int hashCode() { - return Util.combineHashesOrdered( - m_behaviorEntry, - Integer.valueOf(m_index).hashCode(), - m_name.hashCode() - ); + return Utils.combineHashesOrdered(this.behaviorEntry, Integer.valueOf(this.index).hashCode(), this.name.hashCode()); } @Override @@ -101,11 +87,11 @@ public class ArgumentEntry implements Entry, Serializable { } public boolean equals(ArgumentEntry other) { - return m_behaviorEntry.equals(other.m_behaviorEntry) && m_index == other.m_index && m_name.equals(other.m_name); + return this.behaviorEntry.equals(other.behaviorEntry) && this.index == other.index && this.name.equals(other.name); } @Override public String toString() { - return m_behaviorEntry.toString() + "(" + m_index + ":" + m_name + ")"; + return this.behaviorEntry.toString() + "(" + this.index + ":" + this.name + ")"; } } diff --git a/src/main/java/cuchaz/enigma/mapping/ArgumentMapping.java b/src/main/java/cuchaz/enigma/mapping/ArgumentMapping.java index 2b77d6e..918395f 100644 --- a/src/main/java/cuchaz/enigma/mapping/ArgumentMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/ArgumentMapping.java @@ -10,40 +10,31 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.Serializable; +public class ArgumentMapping implements Comparable { -public class ArgumentMapping implements Serializable, Comparable { - - private static final long serialVersionUID = 8610742471440861315L; - - private int m_index; - private String m_name; + private int index; + private String name; // NOTE: this argument order is important for the MethodReader/MethodWriter public ArgumentMapping(int index, String name) { - m_index = index; - m_name = NameValidator.validateArgumentName(name); - } - - public ArgumentMapping(ArgumentMapping other) { - m_index = other.m_index; - m_name = other.m_name; + this.index = index; + this.name = NameValidator.validateArgumentName(name); } public int getIndex() { - return m_index; + return this.index; } public String getName() { - return m_name; + return this.name; } public void setName(String val) { - m_name = NameValidator.validateArgumentName(val); + this.name = NameValidator.validateArgumentName(val); } @Override public int compareTo(ArgumentMapping other) { - return Integer.compare(m_index, other.m_index); + return Integer.compare(this.index, other.index); } } diff --git a/src/main/java/cuchaz/enigma/mapping/ClassEntry.java b/src/main/java/cuchaz/enigma/mapping/ClassEntry.java index c9304d4..a58d054 100644 --- a/src/main/java/cuchaz/enigma/mapping/ClassEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/ClassEntry.java @@ -12,14 +12,11 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Lists; -import java.io.Serializable; import java.util.List; -public class ClassEntry implements Entry, Serializable { +public class ClassEntry implements Entry { - private static final long serialVersionUID = 4235460580973955811L; - - private String m_name; + private String name; public ClassEntry(String className) { if (className == null) { @@ -29,7 +26,7 @@ public class ClassEntry implements Entry, Serializable { throw new IllegalArgumentException("Class name must be in JVM format. ie, path/to/package/class$inner : " + className); } - m_name = className; + this.name = className; if (isInnerClass() && getInnermostClassName().indexOf('/') >= 0) { throw new IllegalArgumentException("Inner class must not have a package: " + className); @@ -37,17 +34,17 @@ public class ClassEntry implements Entry, Serializable { } public ClassEntry(ClassEntry other) { - m_name = other.m_name; + this.name = other.name; } @Override public String getName() { - return m_name; + return this.name; } @Override public String getClassName() { - return m_name; + return this.name; } @Override @@ -62,7 +59,7 @@ public class ClassEntry implements Entry, Serializable { @Override public int hashCode() { - return m_name.hashCode(); + return this.name.hashCode(); } @Override @@ -71,20 +68,20 @@ public class ClassEntry implements Entry, Serializable { } public boolean equals(ClassEntry other) { - return m_name.equals(other.m_name); + return this.name.equals(other.name); } @Override public String toString() { - return m_name; + return this.name; } public boolean isInnerClass() { - return m_name.lastIndexOf('$') >= 0; + return this.name.lastIndexOf('$') >= 0; } public List getClassChainNames() { - return Lists.newArrayList(m_name.split("\\$")); + return Lists.newArrayList(this.name.split("\\$")); } public List getClassChain() { @@ -102,9 +99,9 @@ public class ClassEntry implements Entry, Serializable { public String getOutermostClassName() { if (isInnerClass()) { - return m_name.substring(0, m_name.indexOf('$')); + return this.name.substring(0, this.name.indexOf('$')); } - return m_name; + return this.name; } public ClassEntry getOutermostClassEntry() { @@ -115,7 +112,7 @@ public class ClassEntry implements Entry, Serializable { if (!isInnerClass()) { throw new Error("This is not an inner class!"); } - return m_name.substring(0, m_name.lastIndexOf('$')); + return this.name.substring(0, this.name.lastIndexOf('$')); } public ClassEntry getOuterClassEntry() { @@ -126,27 +123,27 @@ public class ClassEntry implements Entry, Serializable { if (!isInnerClass()) { throw new Error("This is not an inner class!"); } - return m_name.substring(m_name.lastIndexOf('$') + 1); + return this.name.substring(this.name.lastIndexOf('$') + 1); } public boolean isInDefaultPackage() { - return m_name.indexOf('/') < 0; + return this.name.indexOf('/') < 0; } public String getPackageName() { - int pos = m_name.lastIndexOf('/'); + int pos = this.name.lastIndexOf('/'); if (pos > 0) { - return m_name.substring(0, pos); + return this.name.substring(0, pos); } return null; } public String getSimpleName() { - int pos = m_name.lastIndexOf('/'); + int pos = this.name.lastIndexOf('/'); if (pos > 0) { - return m_name.substring(pos + 1); + return this.name.substring(pos + 1); } - return m_name; + return this.name; } public ClassEntry buildClassEntry(List classChain) { diff --git a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java index f831a3b..b2c076a 100644 --- a/src/main/java/cuchaz/enigma/mapping/ClassMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/ClassMapping.java @@ -12,13 +12,11 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Maps; -import java.io.Serializable; -import java.util.ArrayList; import java.util.Map; -public class ClassMapping implements Serializable, Comparable { +import cuchaz.enigma.throwables.MappingConflict; - private static final long serialVersionUID = -5148491146902340107L; +public class ClassMapping implements Comparable { private String m_obfFullName; private String m_obfSimpleName; @@ -70,13 +68,17 @@ public class ClassMapping implements Serializable, Comparable { return m_innerClassesByObfSimple.values(); } - public void addInnerClassMapping(ClassMapping classMapping) { - boolean obfWasAdded = m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping) == null; - assert (obfWasAdded); + public void addInnerClassMapping(ClassMapping classMapping) throws MappingConflict { + if (this.m_innerClassesByObfSimple.containsKey(classMapping.getObfSimpleName())) { + throw new MappingConflict("classes", classMapping.getObfSimpleName(), this.m_innerClassesByObfSimple.get(classMapping.getObfSimpleName()).getObfSimpleName()); + } + m_innerClassesByObfSimple.put(classMapping.getObfSimpleName(), classMapping); + if (classMapping.getDeobfName() != null) { - assert (isSimpleClassName(classMapping.getDeobfName())); - boolean deobfWasAdded = m_innerClassesByDeobf.put(classMapping.getDeobfName(), classMapping) == null; - assert (deobfWasAdded); + if (this.m_innerClassesByDeobf.containsKey(classMapping.getDeobfName())) { + throw new MappingConflict("classes", classMapping.getDeobfName(), this.m_innerClassesByDeobf.get(classMapping.getDeobfName()).getDeobfName()); + } + m_innerClassesByDeobf.put(classMapping.getDeobfName(), classMapping); } } @@ -225,17 +227,6 @@ public class ClassMapping implements Serializable, Comparable { } } - public void setFieldObfNameAndType(String oldObfName, Type obfType, String newObfName, Type newObfType) { - assert (newObfName != null); - FieldMapping fieldMapping = m_fieldsByObf.remove(getFieldKey(oldObfName, obfType)); - assert (fieldMapping != null); - fieldMapping.setObfName(newObfName); - fieldMapping.setObfType(newObfType); - boolean obfWasAdded = m_fieldsByObf.put(getFieldKey(newObfName, newObfType), fieldMapping) == null; - assert (obfWasAdded); - } - - //// METHODS //////// public Iterable methods() { @@ -307,16 +298,6 @@ public class ClassMapping implements Serializable, Comparable { } } - public void setMethodObfNameAndSignature(String oldObfName, Signature obfSignature, String newObfName, Signature newObfSignature) { - assert (newObfName != null); - MethodMapping methodMapping = m_methodsByObf.remove(getMethodKey(oldObfName, obfSignature)); - assert (methodMapping != null); - methodMapping.setObfName(newObfName); - methodMapping.setObfSignature(newObfSignature); - boolean obfWasAdded = m_methodsByObf.put(getMethodKey(newObfName, newObfSignature), methodMapping) == null; - assert (obfWasAdded); - } - //// ARGUMENTS //////// public void setArgumentName(String obfMethodName, Signature obfMethodSignature, int argumentIndex, String argumentName) { @@ -388,7 +369,4 @@ public class ClassMapping implements Serializable, Comparable { return name.indexOf('/') < 0 && name.indexOf('$') < 0; } - public ClassEntry getObfEntry() { - return new ClassEntry(m_obfFullName); - } } diff --git a/src/main/java/cuchaz/enigma/mapping/ConstructorEntry.java b/src/main/java/cuchaz/enigma/mapping/ConstructorEntry.java index ac1a7f2..4c79820 100644 --- a/src/main/java/cuchaz/enigma/mapping/ConstructorEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/ConstructorEntry.java @@ -10,16 +10,12 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.Serializable; +import cuchaz.enigma.utils.Utils; -import cuchaz.enigma.Util; +public class ConstructorEntry implements BehaviorEntry { -public class ConstructorEntry implements BehaviorEntry, Serializable { - - private static final long serialVersionUID = -868346075317366758L; - - private ClassEntry m_classEntry; - private Signature m_signature; + private ClassEntry classEntry; + private Signature signature; public ConstructorEntry(ClassEntry classEntry) { this(classEntry, null); @@ -30,23 +26,18 @@ public class ConstructorEntry implements BehaviorEntry, Serializable { throw new IllegalArgumentException("Class cannot be null!"); } - m_classEntry = classEntry; - m_signature = signature; - } - - public ConstructorEntry(ConstructorEntry other) { - m_classEntry = new ClassEntry(other.m_classEntry); - m_signature = other.m_signature; + this.classEntry = classEntry; + this.signature = signature; } public ConstructorEntry(ConstructorEntry other, String newClassName) { - m_classEntry = new ClassEntry(newClassName); - m_signature = other.m_signature; + this.classEntry = new ClassEntry(newClassName); + this.signature = other.signature; } @Override public ClassEntry getClassEntry() { - return m_classEntry; + return this.classEntry; } @Override @@ -58,17 +49,17 @@ public class ConstructorEntry implements BehaviorEntry, Serializable { } public boolean isStatic() { - return m_signature == null; + return this.signature == null; } @Override public Signature getSignature() { - return m_signature; + return this.signature; } @Override public String getClassName() { - return m_classEntry.getName(); + return this.classEntry.getName(); } @Override @@ -79,9 +70,9 @@ public class ConstructorEntry implements BehaviorEntry, Serializable { @Override public int hashCode() { if (isStatic()) { - return Util.combineHashesOrdered(m_classEntry); + return Utils.combineHashesOrdered(this.classEntry); } else { - return Util.combineHashesOrdered(m_classEntry, m_signature); + return Utils.combineHashesOrdered(this.classEntry, this.signature); } } @@ -96,18 +87,18 @@ public class ConstructorEntry implements BehaviorEntry, Serializable { } if (isStatic()) { - return m_classEntry.equals(other.m_classEntry); + return this.classEntry.equals(other.classEntry); } else { - return m_classEntry.equals(other.m_classEntry) && m_signature.equals(other.m_signature); + return this.classEntry.equals(other.classEntry) && this.signature.equals(other.signature); } } @Override public String toString() { if (isStatic()) { - return m_classEntry.getName() + "." + getName(); + return this.classEntry.getName() + "." + getName(); } else { - return m_classEntry.getName() + "." + getName() + m_signature; + return this.classEntry.getName() + "." + getName() + this.signature; } } } diff --git a/src/main/java/cuchaz/enigma/mapping/EntryFactory.java b/src/main/java/cuchaz/enigma/mapping/EntryFactory.java index 3584ebb..2351dcf 100644 --- a/src/main/java/cuchaz/enigma/mapping/EntryFactory.java +++ b/src/main/java/cuchaz/enigma/mapping/EntryFactory.java @@ -38,19 +38,11 @@ public class EntryFactory { } public static FieldEntry getFieldEntry(CtField field) { - return new FieldEntry( - getClassEntry(field.getDeclaringClass()), - field.getName(), - new Type(field.getFieldInfo().getDescriptor()) - ); + return new FieldEntry(getClassEntry(field.getDeclaringClass()), field.getName(), new Type(field.getFieldInfo().getDescriptor())); } public static FieldEntry getFieldEntry(FieldAccess call) { - return new FieldEntry( - new ClassEntry(Descriptor.toJvmName(call.getClassName())), - call.getFieldName(), - new Type(call.getSignature()) - ); + return new FieldEntry(new ClassEntry(Descriptor.toJvmName(call.getClassName())), call.getFieldName(), new Type(call.getSignature())); } public static FieldEntry getFieldEntry(String className, String name, String type) { @@ -58,19 +50,11 @@ public class EntryFactory { } public static FieldEntry getObfFieldEntry(ClassMapping classMapping, FieldMapping fieldMapping) { - return new FieldEntry( - getObfClassEntry(classMapping), - fieldMapping.getObfName(), - fieldMapping.getObfType() - ); + return new FieldEntry(getObfClassEntry(classMapping), fieldMapping.getObfName(), fieldMapping.getObfType()); } public static MethodEntry getMethodEntry(CtMethod method) { - return new MethodEntry( - getClassEntry(method.getDeclaringClass()), - method.getName(), - new Signature(method.getMethodInfo().getDescriptor()) - ); + return new MethodEntry(getClassEntry(method.getDeclaringClass()), method.getName(), new Signature(method.getMethodInfo().getDescriptor())); } public static MethodEntry getMethodEntry(MethodCall call) { @@ -106,10 +90,6 @@ public class EntryFactory { return getBehaviorEntry(new ClassEntry(className), behaviorName, new Signature(behaviorSignature)); } - public static BehaviorEntry getBehaviorEntry(String className, String behaviorName) { - return getBehaviorEntry(new ClassEntry(className), behaviorName); - } - public static BehaviorEntry getBehaviorEntry(String className) { return new ConstructorEntry(new ClassEntry(className)); } @@ -125,14 +105,6 @@ public class EntryFactory { } } - public static BehaviorEntry getBehaviorEntry(ClassEntry classEntry, String behaviorName) { - if (behaviorName.equals("")) { - return new ConstructorEntry(classEntry); - } else { - throw new IllegalArgumentException("Only class initializers don't have signatures"); - } - } - public static BehaviorEntry getObfBehaviorEntry(ClassEntry classEntry, MethodMapping methodMapping) { return getBehaviorEntry(classEntry, methodMapping.getObfName(), methodMapping.getObfSignature()); } diff --git a/src/main/java/cuchaz/enigma/mapping/FieldEntry.java b/src/main/java/cuchaz/enigma/mapping/FieldEntry.java index bebc504..9980e8e 100644 --- a/src/main/java/cuchaz/enigma/mapping/FieldEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/FieldEntry.java @@ -10,17 +10,13 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.Serializable; +import cuchaz.enigma.utils.Utils; -import cuchaz.enigma.Util; +public class FieldEntry implements Entry { -public class FieldEntry implements Entry, Serializable { - - private static final long serialVersionUID = 3004663582802885451L; - - private ClassEntry m_classEntry; - private String m_name; - private Type m_type; + private ClassEntry classEntry; + private String name; + private Type type; // NOTE: this argument order is important for the MethodReader/MethodWriter public FieldEntry(ClassEntry classEntry, String name, Type type) { @@ -34,38 +30,34 @@ public class FieldEntry implements Entry, Serializable { throw new IllegalArgumentException("Field type cannot be null!"); } - m_classEntry = classEntry; - m_name = name; - m_type = type; - } - - public FieldEntry(FieldEntry other) { - this(other, new ClassEntry(other.m_classEntry)); + this.classEntry = classEntry; + this.name = name; + this.type = type; } public FieldEntry(FieldEntry other, ClassEntry newClassEntry) { - m_classEntry = newClassEntry; - m_name = other.m_name; - m_type = other.m_type; + this.classEntry = newClassEntry; + this.name = other.name; + this.type = other.type; } @Override public ClassEntry getClassEntry() { - return m_classEntry; + return this.classEntry; } @Override public String getName() { - return m_name; + return this.name; } @Override public String getClassName() { - return m_classEntry.getName(); + return this.classEntry.getName(); } public Type getType() { - return m_type; + return this.type; } @Override @@ -75,7 +67,7 @@ public class FieldEntry implements Entry, Serializable { @Override public int hashCode() { - return Util.combineHashesOrdered(m_classEntry, m_name, m_type); + return Utils.combineHashesOrdered(this.classEntry, this.name, this.type); } @Override @@ -84,13 +76,11 @@ public class FieldEntry implements Entry, Serializable { } public boolean equals(FieldEntry other) { - return m_classEntry.equals(other.m_classEntry) - && m_name.equals(other.m_name) - && m_type.equals(other.m_type); + return this.classEntry.equals(other.classEntry) && this.name.equals(other.name) && this.type.equals(other.type); } @Override public String toString() { - return m_classEntry.getName() + "." + m_name + ":" + m_type; + return this.classEntry.getName() + "." + this.name + ":" + this.type; } } diff --git a/src/main/java/cuchaz/enigma/mapping/FieldMapping.java b/src/main/java/cuchaz/enigma/mapping/FieldMapping.java index 19d68a9..3ec1af0 100644 --- a/src/main/java/cuchaz/enigma/mapping/FieldMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/FieldMapping.java @@ -10,11 +10,7 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.Serializable; - -public class FieldMapping implements Serializable, Comparable, MemberMapping { - - private static final long serialVersionUID = 8610742471440861315L; +public class FieldMapping implements Comparable, MemberMapping { private String obfName; private String deobfName; @@ -26,21 +22,11 @@ public class FieldMapping implements Serializable, Comparable, Mem this.obfType = obfType; } - public FieldMapping(FieldMapping other, ClassNameReplacer obfClassNameReplacer) { - this.obfName = other.obfName; - this.deobfName = other.deobfName; - this.obfType = new Type(other.obfType, obfClassNameReplacer); - } - @Override public String getObfName() { return this.obfName; } - public void setObfName(String val) { - this.obfName = NameValidator.validateFieldName(val); - } - public String getDeobfName() { return this.deobfName; } @@ -53,34 +39,8 @@ public class FieldMapping implements Serializable, Comparable, Mem return this.obfType; } - public void setObfType(Type val) { - this.obfType = val; - } - @Override public int compareTo(FieldMapping other) { return (this.obfName + this.obfType).compareTo(other.obfName + other.obfType); } - - public boolean renameObfClass(final String oldObfClassName, final String newObfClassName) { - - // rename obf classes in the type - Type newType = new Type(this.obfType, className -> { - if (className.equals(oldObfClassName)) { - return newObfClassName; - } - return null; - }); - - if (!newType.equals(this.obfType)) { - this.obfType = newType; - return true; - } - return false; - } - - @Override - public FieldEntry getObfEntry(ClassEntry classEntry) { - return new FieldEntry(classEntry, this.obfName, new Type(this.obfType)); - } } diff --git a/src/main/java/cuchaz/enigma/mapping/IllegalNameException.java b/src/main/java/cuchaz/enigma/mapping/IllegalNameException.java deleted file mode 100644 index f2119d8..0000000 --- a/src/main/java/cuchaz/enigma/mapping/IllegalNameException.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ -package cuchaz.enigma.mapping; - -public class IllegalNameException extends RuntimeException { - - private static final long serialVersionUID = -2279910052561114323L; - - private String m_name; - private String m_reason; - - public IllegalNameException(String name) { - this(name, null); - } - - public IllegalNameException(String name, String reason) { - m_name = name; - m_reason = reason; - } - - public String getReason() { - return m_reason; - } - - @Override - public String getMessage() { - StringBuilder buf = new StringBuilder(); - buf.append("Illegal name: "); - buf.append(m_name); - if (m_reason != null) { - buf.append(" because "); - buf.append(m_reason); - } - return buf.toString(); - } -} diff --git a/src/main/java/cuchaz/enigma/mapping/MappingParseException.java b/src/main/java/cuchaz/enigma/mapping/MappingParseException.java deleted file mode 100644 index 3c25ea5..0000000 --- a/src/main/java/cuchaz/enigma/mapping/MappingParseException.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ -package cuchaz.enigma.mapping; - -public class MappingParseException extends Exception { - - private static final long serialVersionUID = -5487280332892507236L; - - private int m_line; - private String m_message; - - public MappingParseException(int line, String message) { - m_line = line; - m_message = message; - } - - @Override - public String getMessage() { - return "Line " + m_line + ": " + m_message; - } -} diff --git a/src/main/java/cuchaz/enigma/mapping/Mappings.java b/src/main/java/cuchaz/enigma/mapping/Mappings.java index ee4c302..b51e1a4 100644 --- a/src/main/java/cuchaz/enigma/mapping/Mappings.java +++ b/src/main/java/cuchaz/enigma/mapping/Mappings.java @@ -12,85 +12,64 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import java.io.Serializable; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; import cuchaz.enigma.analysis.TranslationIndex; +import cuchaz.enigma.throwables.MappingConflict; -public class Mappings implements Serializable { +public class Mappings { - private static final long serialVersionUID = 4649790259460259026L; - - protected Map m_classesByObf; - protected Map m_classesByDeobf; + protected Map classesByObf; + protected Map classesByDeobf; public Mappings() { - m_classesByObf = Maps.newHashMap(); - m_classesByDeobf = Maps.newHashMap(); - } - - public Mappings(Iterable classes) { - this(); - - for (ClassMapping classMapping : classes) { - m_classesByObf.put(classMapping.getObfFullName(), classMapping); - if (classMapping.getDeobfName() != null) { - m_classesByDeobf.put(classMapping.getDeobfName(), classMapping); - } - } + this.classesByObf = Maps.newHashMap(); + this.classesByDeobf = Maps.newHashMap(); } public Collection classes() { - assert (m_classesByObf.size() >= m_classesByDeobf.size()); - return m_classesByObf.values(); + assert (this.classesByObf.size() >= this.classesByDeobf.size()); + return this.classesByObf.values(); } - public void addClassMapping(ClassMapping classMapping) { - if (m_classesByObf.containsKey(classMapping.getObfFullName())) { - throw new Error("Already have mapping for " + classMapping.getObfFullName()); + public void addClassMapping(ClassMapping classMapping) throws MappingConflict { + if (this.classesByObf.containsKey(classMapping.getObfFullName())) { + throw new MappingConflict("class", classMapping.getObfFullName(), this.classesByObf.get(classMapping.getObfFullName()).getObfFullName()); } - boolean obfWasAdded = m_classesByObf.put(classMapping.getObfFullName(), classMapping) == null; - assert (obfWasAdded); + this.classesByObf.put(classMapping.getObfFullName(), classMapping); + if (classMapping.getDeobfName() != null) { - if (m_classesByDeobf.containsKey(classMapping.getDeobfName())) { - throw new Error("Already have mapping for " + classMapping.getDeobfName()); + if (this.classesByDeobf.containsKey(classMapping.getDeobfName())) { + throw new MappingConflict("class", classMapping.getDeobfName(), this.classesByDeobf.get(classMapping.getDeobfName()).getDeobfName()); } - boolean deobfWasAdded = m_classesByDeobf.put(classMapping.getDeobfName(), classMapping) == null; - assert (deobfWasAdded); + this.classesByDeobf.put(classMapping.getDeobfName(), classMapping); } } public void removeClassMapping(ClassMapping classMapping) { - boolean obfWasRemoved = m_classesByObf.remove(classMapping.getObfFullName()) != null; + boolean obfWasRemoved = this.classesByObf.remove(classMapping.getObfFullName()) != null; assert (obfWasRemoved); if (classMapping.getDeobfName() != null) { - boolean deobfWasRemoved = m_classesByDeobf.remove(classMapping.getDeobfName()) != null; + boolean deobfWasRemoved = this.classesByDeobf.remove(classMapping.getDeobfName()) != null; assert (deobfWasRemoved); } } - public ClassMapping getClassByObf(ClassEntry entry) { - return getClassByObf(entry.getName()); - } - public ClassMapping getClassByObf(String obfName) { - return m_classesByObf.get(obfName); - } - - public ClassMapping getClassByDeobf(String deobfName) { - return m_classesByDeobf.get(deobfName); + return this.classesByObf.get(obfName); } public void setClassDeobfName(ClassMapping classMapping, String deobfName) { if (classMapping.getDeobfName() != null) { - boolean wasRemoved = m_classesByDeobf.remove(classMapping.getDeobfName()) != null; + boolean wasRemoved = this.classesByDeobf.remove(classMapping.getDeobfName()) != null; assert (wasRemoved); } classMapping.setDeobfName(deobfName); if (deobfName != null) { - boolean wasAdded = m_classesByDeobf.put(deobfName, classMapping) == null; + boolean wasAdded = this.classesByDeobf.put(deobfName, classMapping) == null; assert (wasAdded); } } @@ -99,7 +78,7 @@ public class Mappings implements Serializable { switch (direction) { case Deobfuscating: - return new Translator(direction, m_classesByObf, index); + return new Translator(direction, this.classesByObf, index); case Obfuscating: @@ -127,7 +106,7 @@ public class Mappings implements Serializable { @Override public String toString() { StringBuilder buf = new StringBuilder(); - for (ClassMapping classMapping : m_classesByObf.values()) { + for (ClassMapping classMapping : this.classesByObf.values()) { buf.append(classMapping.toString()); buf.append("\n"); } @@ -135,21 +114,21 @@ public class Mappings implements Serializable { } public boolean containsDeobfClass(String deobfName) { - return m_classesByDeobf.containsKey(deobfName); + return this.classesByDeobf.containsKey(deobfName); } public boolean containsDeobfField(ClassEntry obfClassEntry, String deobfName, Type obfType) { - ClassMapping classMapping = m_classesByObf.get(obfClassEntry.getName()); + ClassMapping classMapping = this.classesByObf.get(obfClassEntry.getName()); return classMapping != null && classMapping.containsDeobfField(deobfName, obfType); } public boolean containsDeobfMethod(ClassEntry obfClassEntry, String deobfName, Signature deobfSignature) { - ClassMapping classMapping = m_classesByObf.get(obfClassEntry.getName()); + ClassMapping classMapping = this.classesByObf.get(obfClassEntry.getName()); return classMapping != null && classMapping.containsDeobfMethod(deobfName, deobfSignature); } public boolean containsArgument(BehaviorEntry obfBehaviorEntry, String name) { - ClassMapping classMapping = m_classesByObf.get(obfBehaviorEntry.getClassName()); + ClassMapping classMapping = this.classesByObf.get(obfBehaviorEntry.getClassName()); return classMapping != null && classMapping.containsArgument(obfBehaviorEntry, name); } @@ -158,7 +137,7 @@ public class Mappings implements Serializable { ClassMapping classMapping = null; for (ClassEntry obfClassEntry : obfClass.getClassChain()) { if (mappingChain.isEmpty()) { - classMapping = m_classesByObf.get(obfClassEntry.getName()); + classMapping = this.classesByObf.get(obfClassEntry.getName()); } else if (classMapping != null) { classMapping = classMapping.getInnerClassByObfSimple(obfClassEntry.getInnermostClassName()); } diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java b/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java index d850787..6cf279d 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsChecker.java @@ -20,41 +20,41 @@ import cuchaz.enigma.analysis.JarIndex; public class MappingsChecker { - private JarIndex m_index; - private Map m_droppedClassMappings; - private Map m_droppedInnerClassMappings; - private Map m_droppedFieldMappings; - private Map m_droppedMethodMappings; + private JarIndex index; + private Map droppedClassMappings; + private Map droppedInnerClassMappings; + private Map droppedFieldMappings; + private Map droppedMethodMappings; public MappingsChecker(JarIndex index) { - m_index = index; - m_droppedClassMappings = Maps.newHashMap(); - m_droppedInnerClassMappings = Maps.newHashMap(); - m_droppedFieldMappings = Maps.newHashMap(); - m_droppedMethodMappings = Maps.newHashMap(); + this.index = index; + this.droppedClassMappings = Maps.newHashMap(); + this.droppedInnerClassMappings = Maps.newHashMap(); + this.droppedFieldMappings = Maps.newHashMap(); + this.droppedMethodMappings = Maps.newHashMap(); } public Map getDroppedClassMappings() { - return m_droppedClassMappings; + return this.droppedClassMappings; } public Map getDroppedInnerClassMappings() { - return m_droppedInnerClassMappings; + return this.droppedInnerClassMappings; } public Map getDroppedFieldMappings() { - return m_droppedFieldMappings; + return this.droppedFieldMappings; } public Map getDroppedMethodMappings() { - return m_droppedMethodMappings; + return this.droppedMethodMappings; } public void dropBrokenMappings(Mappings mappings) { for (ClassMapping classMapping : Lists.newArrayList(mappings.classes())) { if (!checkClassMapping(classMapping)) { mappings.removeClassMapping(classMapping); - m_droppedClassMappings.put(EntryFactory.getObfClassEntry(m_index, classMapping), classMapping); + this.droppedClassMappings.put(EntryFactory.getObfClassEntry(this.index, classMapping), classMapping); } } } @@ -62,26 +62,26 @@ public class MappingsChecker { private boolean checkClassMapping(ClassMapping classMapping) { // check the class - ClassEntry classEntry = EntryFactory.getObfClassEntry(m_index, classMapping); - if (!m_index.getObfClassEntries().contains(classEntry)) { + ClassEntry classEntry = EntryFactory.getObfClassEntry(this.index, classMapping); + if (!this.index.getObfClassEntries().contains(classEntry)) { return false; } // check the fields for (FieldMapping fieldMapping : Lists.newArrayList(classMapping.fields())) { FieldEntry obfFieldEntry = EntryFactory.getObfFieldEntry(classMapping, fieldMapping); - if (!m_index.containsObfField(obfFieldEntry)) { + if (!this.index.containsObfField(obfFieldEntry)) { classMapping.removeFieldMapping(fieldMapping); - m_droppedFieldMappings.put(obfFieldEntry, fieldMapping); + this.droppedFieldMappings.put(obfFieldEntry, fieldMapping); } } // check methods for (MethodMapping methodMapping : Lists.newArrayList(classMapping.methods())) { BehaviorEntry obfBehaviorEntry = EntryFactory.getObfBehaviorEntry(classEntry, methodMapping); - if (!m_index.containsObfBehavior(obfBehaviorEntry)) { + if (!this.index.containsObfBehavior(obfBehaviorEntry)) { classMapping.removeMethodMapping(methodMapping); - m_droppedMethodMappings.put(obfBehaviorEntry, methodMapping); + this.droppedMethodMappings.put(obfBehaviorEntry, methodMapping); } } @@ -89,7 +89,7 @@ public class MappingsChecker { for (ClassMapping innerClassMapping : Lists.newArrayList(classMapping.innerClasses())) { if (!checkClassMapping(innerClassMapping)) { classMapping.removeInnerClassMapping(innerClassMapping); - m_droppedInnerClassMappings.put(EntryFactory.getObfClassEntry(m_index, innerClassMapping), innerClassMapping); + this.droppedInnerClassMappings.put(EntryFactory.getObfClassEntry(this.index, innerClassMapping), innerClassMapping); } } diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsReader.java b/src/main/java/cuchaz/enigma/mapping/MappingsReader.java index 7aedc5b..b2b6d09 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsReader.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsReader.java @@ -20,17 +20,17 @@ import java.io.FileReader; import java.io.IOException; import cuchaz.enigma.json.JsonClass; +import cuchaz.enigma.throwables.MappingConflict; public class MappingsReader { - public Mappings read(File in) throws IOException, MappingParseException { + public Mappings read(File in) throws IOException { Mappings mappings = new Mappings(); readDirectory(mappings, in); return mappings; } - public void readDirectory(Mappings mappings, File in) throws IOException, MappingParseException { - + public void readDirectory(Mappings mappings, File in) throws IOException { File[] fList = in.listFiles(); if (fList != null) { for (File file : fList) { @@ -43,8 +43,7 @@ public class MappingsReader { } } - public void readFile(Mappings mappings, BufferedReader in) throws IOException, MappingParseException { - + public void readFile(Mappings mappings, BufferedReader in) throws IOException { StringBuilder buf = new StringBuilder(); String line; while ((line = in.readLine()) != null) { @@ -53,11 +52,15 @@ public class MappingsReader { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonClass jsonClass = gson.fromJson(buf.toString(), JsonClass.class); - load(null, jsonClass, mappings); + try { + load(null, jsonClass, mappings); + } catch (MappingConflict e) { + e.printStackTrace(); + } in.close(); } - public void load(ClassMapping parent, JsonClass jsonClass, Mappings mappings) { + public void load(ClassMapping parent, JsonClass jsonClass, Mappings mappings) throws MappingConflict { ClassMapping classMapping = readClass(jsonClass.getObf(), jsonClass.getName()); if (parent != null) { parent.addInnerClassMapping(classMapping); @@ -68,17 +71,35 @@ public class MappingsReader { jsonClass.getConstructors().forEach(jsonConstructor -> { MethodMapping methodMapping = readMethod(jsonConstructor.isStatics() ? "" : "", null, jsonConstructor.getSignature()); - jsonConstructor.getArgs().forEach(jsonArgument -> methodMapping.addArgumentMapping(readArgument(jsonArgument.getIndex(), jsonArgument.getName()))); + jsonConstructor.getArgs().forEach(jsonArgument -> { + try { + methodMapping.addArgumentMapping(readArgument(jsonArgument.getIndex(), jsonArgument.getName())); + } catch (MappingConflict e) { + e.printStackTrace(); + } + }); classMapping.addMethodMapping(methodMapping); }); jsonClass.getMethod().forEach(jsonMethod -> { MethodMapping methodMapping = readMethod(jsonMethod.getObf(), jsonMethod.getName(), jsonMethod.getSignature()); - jsonMethod.getArgs().forEach(jsonArgument -> methodMapping.addArgumentMapping(readArgument(jsonArgument.getIndex(), jsonArgument.getName()))); + jsonMethod.getArgs().forEach(jsonArgument -> { + try { + methodMapping.addArgumentMapping(readArgument(jsonArgument.getIndex(), jsonArgument.getName())); + } catch (MappingConflict e) { + e.printStackTrace(); + } + }); classMapping.addMethodMapping(methodMapping); }); - jsonClass.getInnerClass().forEach(jsonInnerClasses -> load(classMapping, jsonInnerClasses, mappings)); + jsonClass.getInnerClass().forEach(jsonInnerClasses -> { + try { + load(classMapping, jsonInnerClasses, mappings); + } catch (MappingConflict e) { + e.printStackTrace(); + } + }); } private ArgumentMapping readArgument(int index, String name) { diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsReaderOld.java b/src/main/java/cuchaz/enigma/mapping/MappingsReaderOld.java index ed36d42..776d908 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsReaderOld.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsReaderOld.java @@ -7,6 +7,9 @@ import java.io.IOException; import java.io.Reader; import java.util.Deque; +import cuchaz.enigma.throwables.MappingConflict; +import cuchaz.enigma.throwables.MappingParseException; + public class MappingsReaderOld { public Mappings read(Reader in) throws IOException, MappingParseException { @@ -89,6 +92,8 @@ public class MappingsReaderOld { } } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException ex) { throw new MappingParseException(lineNumber, "Malformed line:\n" + line); + } catch (MappingConflict e) { + e.printStackTrace(); } } diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java index 3050da6..afb8c97 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java @@ -10,14 +10,12 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.IOException; -import java.io.ObjectOutputStream; -import java.io.OutputStream; import java.util.List; import java.util.Set; -import java.util.zip.GZIPOutputStream; import cuchaz.enigma.analysis.JarIndex; +import cuchaz.enigma.throwables.IllegalNameException; +import cuchaz.enigma.throwables.MappingConflict; public class MappingsRenamer { @@ -167,14 +165,6 @@ public class MappingsRenamer { classMapping.setArgumentName(obf.getMethodName(), obf.getMethodSignature(), obf.getIndex(), obf.getName()); } - public void write(OutputStream out) throws IOException { - // TEMP: just use the object output for now. We can find a more efficient storage format later - GZIPOutputStream gzipout = new GZIPOutputStream(out); - ObjectOutputStream oout = new ObjectOutputStream(gzipout); - oout.writeObject(this); - gzipout.finish(); - } - private ClassMapping getOrCreateClassMapping(ClassEntry obfClassEntry) { List mappingChain = getOrCreateClassMappingChain(obfClassEntry); return mappingChain.get(mappingChain.size() - 1); @@ -193,10 +183,14 @@ public class MappingsRenamer { mappingChain.set(i, classMapping); // add it to the right parent - if (i == 0) { - m_mappings.addClassMapping(classMapping); - } else { - mappingChain.get(i - 1).addInnerClassMapping(classMapping); + try { + if (i == 0) { + m_mappings.addClassMapping(classMapping); + } else { + mappingChain.get(i - 1).addInnerClassMapping(classMapping); + } + } catch (MappingConflict mappingConflict) { + mappingConflict.printStackTrace(); } } } diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java b/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java index 4b2db9d..4793166 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsWriter.java @@ -51,7 +51,7 @@ public class MappingsWriter { } } - private void write(JsonClass jsonClass, ClassMapping classMapping) throws IOException { + private void write(JsonClass jsonClass, ClassMapping classMapping) { for (ClassMapping innerClassMapping : sorted(classMapping.innerClasses())) { JsonClass innerClass = new JsonClass(classMapping.getObfSimpleName() + "$" + innerClassMapping.getObfSimpleName().replace("nome/", ""), innerClassMapping.getDeobfName()); write(innerClass, innerClassMapping); @@ -85,19 +85,18 @@ public class MappingsWriter { } public static boolean deleteDirectory(File directory) { - if(directory.exists()){ + if (directory.exists()) { File[] files = directory.listFiles(); - if(null!=files){ - for(int i=0; i { - T getObfEntry(ClassEntry classEntry); - String getObfName(); } diff --git a/src/main/java/cuchaz/enigma/mapping/MethodEntry.java b/src/main/java/cuchaz/enigma/mapping/MethodEntry.java index 7df4dd8..4d7ed8f 100644 --- a/src/main/java/cuchaz/enigma/mapping/MethodEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/MethodEntry.java @@ -10,17 +10,13 @@ ******************************************************************************/ package cuchaz.enigma.mapping; -import java.io.Serializable; +import cuchaz.enigma.utils.Utils; -import cuchaz.enigma.Util; +public class MethodEntry implements BehaviorEntry { -public class MethodEntry implements BehaviorEntry, Serializable { - - private static final long serialVersionUID = 4770915224467247458L; - - private ClassEntry m_classEntry; - private String m_name; - private Signature m_signature; + private ClassEntry classEntry; + private String name; + private Signature signature; public MethodEntry(ClassEntry classEntry, String name, Signature signature) { if (classEntry == null) { @@ -36,41 +32,35 @@ public class MethodEntry implements BehaviorEntry, Serializable { throw new IllegalArgumentException("Don't use MethodEntry for a constructor!"); } - m_classEntry = classEntry; - m_name = name; - m_signature = signature; - } - - public MethodEntry(MethodEntry other) { - m_classEntry = new ClassEntry(other.m_classEntry); - m_name = other.m_name; - m_signature = other.m_signature; + this.classEntry = classEntry; + this.name = name; + this.signature = signature; } public MethodEntry(MethodEntry other, String newClassName) { - m_classEntry = new ClassEntry(newClassName); - m_name = other.m_name; - m_signature = other.m_signature; + this.classEntry = new ClassEntry(newClassName); + this.name = other.name; + this.signature = other.signature; } @Override public ClassEntry getClassEntry() { - return m_classEntry; + return this.classEntry; } @Override public String getName() { - return m_name; + return this.name; } @Override public Signature getSignature() { - return m_signature; + return this.signature; } @Override public String getClassName() { - return m_classEntry.getName(); + return this.classEntry.getName(); } @Override @@ -80,7 +70,7 @@ public class MethodEntry implements BehaviorEntry, Serializable { @Override public int hashCode() { - return Util.combineHashesOrdered(m_classEntry, m_name, m_signature); + return Utils.combineHashesOrdered(this.classEntry, this.name, this.signature); } @Override @@ -89,11 +79,11 @@ public class MethodEntry implements BehaviorEntry, Serializable { } public boolean equals(MethodEntry other) { - return m_classEntry.equals(other.m_classEntry) && m_name.equals(other.m_name) && m_signature.equals(other.m_signature); + return this.classEntry.equals(other.classEntry) && this.name.equals(other.name) && this.signature.equals(other.signature); } @Override public String toString() { - return m_classEntry.getName() + "." + m_name + m_signature; + return this.classEntry.getName() + "." + this.name + this.signature; } } diff --git a/src/main/java/cuchaz/enigma/mapping/MethodMapping.java b/src/main/java/cuchaz/enigma/mapping/MethodMapping.java index fbd97bd..6e7c1ef 100644 --- a/src/main/java/cuchaz/enigma/mapping/MethodMapping.java +++ b/src/main/java/cuchaz/enigma/mapping/MethodMapping.java @@ -12,18 +12,16 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Maps; -import java.io.Serializable; import java.util.Map; -import java.util.Map.Entry; -public class MethodMapping implements Serializable, Comparable, MemberMapping { +import cuchaz.enigma.throwables.MappingConflict; - private static final long serialVersionUID = -4409570216084263978L; +public class MethodMapping implements Comparable, MemberMapping { - private String m_obfName; - private String m_deobfName; - private Signature m_obfSignature; - private Map m_arguments; + private String obfName; + private String deobfName; + private Signature obfSignature; + private Map arguments; public MethodMapping(String obfName, Signature obfSignature) { this(obfName, obfSignature, null); @@ -36,62 +34,42 @@ public class MethodMapping implements Serializable, Comparable, M if (obfSignature == null) { throw new IllegalArgumentException("obf signature cannot be null!"); } - this.m_obfName = obfName; - this.m_deobfName = NameValidator.validateMethodName(deobfName); - this.m_obfSignature = obfSignature; - this.m_arguments = Maps.newTreeMap(); - } - - public MethodMapping(MethodMapping other, ClassNameReplacer obfClassNameReplacer) { - this.m_obfName = other.m_obfName; - this.m_deobfName = other.m_deobfName; - this.m_obfSignature = new Signature(other.m_obfSignature, obfClassNameReplacer); - this.m_arguments = Maps.newTreeMap(); - for (Entry entry : other.m_arguments.entrySet()) { - this.m_arguments.put(entry.getKey(), new ArgumentMapping(entry.getValue())); - } + this.obfName = obfName; + this.deobfName = NameValidator.validateMethodName(deobfName); + this.obfSignature = obfSignature; + this.arguments = Maps.newTreeMap(); } @Override public String getObfName() { - return this.m_obfName; - } - - public void setObfName(String val) { - this.m_obfName = NameValidator.validateMethodName(val); + return this.obfName; } public String getDeobfName() { - return this.m_deobfName; + return this.deobfName; } public void setDeobfName(String val) { - this.m_deobfName = NameValidator.validateMethodName(val); + this.deobfName = NameValidator.validateMethodName(val); } public Signature getObfSignature() { - return this.m_obfSignature; - } - - public void setObfSignature(Signature val) { - this.m_obfSignature = val; + return this.obfSignature; } public Iterable arguments() { - return this.m_arguments.values(); + return this.arguments.values(); } - public boolean isConstructor() { - return this.m_obfName.startsWith("<"); - } - - public void addArgumentMapping(ArgumentMapping argumentMapping) { - boolean wasAdded = this.m_arguments.put(argumentMapping.getIndex(), argumentMapping) == null; - assert (wasAdded); + public void addArgumentMapping(ArgumentMapping argumentMapping) throws MappingConflict { + if (this.arguments.containsKey(argumentMapping.getIndex())) { + throw new MappingConflict("argument", argumentMapping.getName(), this.arguments.get(argumentMapping.getIndex()).getName()); + } + this.arguments.put(argumentMapping.getIndex(), argumentMapping); } public String getObfArgumentName(int index) { - ArgumentMapping argumentMapping = this.m_arguments.get(index); + ArgumentMapping argumentMapping = this.arguments.get(index); if (argumentMapping != null) { return argumentMapping.getName(); } @@ -100,7 +78,7 @@ public class MethodMapping implements Serializable, Comparable, M } public String getDeobfArgumentName(int index) { - ArgumentMapping argumentMapping = this.m_arguments.get(index); + ArgumentMapping argumentMapping = this.arguments.get(index); if (argumentMapping != null) { return argumentMapping.getName(); } @@ -109,10 +87,10 @@ public class MethodMapping implements Serializable, Comparable, M } public void setArgumentName(int index, String name) { - ArgumentMapping argumentMapping = this.m_arguments.get(index); + ArgumentMapping argumentMapping = this.arguments.get(index); if (argumentMapping == null) { argumentMapping = new ArgumentMapping(index, name); - boolean wasAdded = this.m_arguments.put(index, argumentMapping) == null; + boolean wasAdded = this.arguments.put(index, argumentMapping) == null; assert (wasAdded); } else { argumentMapping.setName(name); @@ -120,7 +98,7 @@ public class MethodMapping implements Serializable, Comparable, M } public void removeArgumentName(int index) { - boolean wasRemoved = this.m_arguments.remove(index) != null; + boolean wasRemoved = this.arguments.remove(index) != null; assert (wasRemoved); } @@ -128,15 +106,15 @@ public class MethodMapping implements Serializable, Comparable, M public String toString() { StringBuilder buf = new StringBuilder(); buf.append("\t"); - buf.append(m_obfName); + buf.append(this.obfName); buf.append(" <-> "); - buf.append(m_deobfName); + buf.append(this.deobfName); buf.append("\n"); buf.append("\t"); - buf.append(m_obfSignature); + buf.append(this.obfSignature); buf.append("\n"); buf.append("\tArguments:\n"); - for (ArgumentMapping argumentMapping : this.m_arguments.values()) { + for (ArgumentMapping argumentMapping : this.arguments.values()) { buf.append("\t\t"); buf.append(argumentMapping.getIndex()); buf.append(" -> "); @@ -148,24 +126,15 @@ public class MethodMapping implements Serializable, Comparable, M @Override public int compareTo(MethodMapping other) { - return (this.m_obfName + this.m_obfSignature).compareTo(other.m_obfName + other.m_obfSignature); + return (this.obfName + this.obfSignature).compareTo(other.obfName + other.obfSignature); } public boolean containsArgument(String name) { - for (ArgumentMapping argumentMapping : this.m_arguments.values()) { + for (ArgumentMapping argumentMapping : this.arguments.values()) { if (argumentMapping.getName().equals(name)) { return true; } } return false; } - - @Override - public BehaviorEntry getObfEntry(ClassEntry classEntry) { - if (isConstructor()) { - return new ConstructorEntry(classEntry, this.m_obfSignature); - } else { - return new MethodEntry(classEntry, this.m_obfName, this.m_obfSignature); - } - } } diff --git a/src/main/java/cuchaz/enigma/mapping/NameValidator.java b/src/main/java/cuchaz/enigma/mapping/NameValidator.java index f416322..15b0314 100644 --- a/src/main/java/cuchaz/enigma/mapping/NameValidator.java +++ b/src/main/java/cuchaz/enigma/mapping/NameValidator.java @@ -14,6 +14,7 @@ import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; +import cuchaz.enigma.throwables.IllegalNameException; import javassist.bytecode.Descriptor; public class NameValidator { diff --git a/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java b/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java index ac42499..26e554b 100644 --- a/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java +++ b/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java @@ -13,35 +13,21 @@ package cuchaz.enigma.mapping; import com.strobel.assembler.metadata.FieldDefinition; import com.strobel.assembler.metadata.MethodDefinition; - public class ProcyonEntryFactory { public static FieldEntry getFieldEntry(FieldDefinition def) { - return new FieldEntry( - new ClassEntry(def.getDeclaringType().getInternalName()), - def.getName(), - new Type(def.getErasedSignature()) - ); + return new FieldEntry(new ClassEntry(def.getDeclaringType().getInternalName()), def.getName(), new Type(def.getErasedSignature())); } public static MethodEntry getMethodEntry(MethodDefinition def) { - return new MethodEntry( - new ClassEntry(def.getDeclaringType().getInternalName()), - def.getName(), - new Signature(def.getErasedSignature()) - ); + return new MethodEntry(new ClassEntry(def.getDeclaringType().getInternalName()), def.getName(), new Signature(def.getErasedSignature())); } public static ConstructorEntry getConstructorEntry(MethodDefinition def) { if (def.isTypeInitializer()) { - return new ConstructorEntry( - new ClassEntry(def.getDeclaringType().getInternalName()) - ); + return new ConstructorEntry(new ClassEntry(def.getDeclaringType().getInternalName())); } else { - return new ConstructorEntry( - new ClassEntry(def.getDeclaringType().getInternalName()), - new Signature(def.getErasedSignature()) - ); + return new ConstructorEntry(new ClassEntry(def.getDeclaringType().getInternalName()), new Signature(def.getErasedSignature())); } } diff --git a/src/main/java/cuchaz/enigma/mapping/Signature.java b/src/main/java/cuchaz/enigma/mapping/Signature.java index e2f9f09..f30b606 100644 --- a/src/main/java/cuchaz/enigma/mapping/Signature.java +++ b/src/main/java/cuchaz/enigma/mapping/Signature.java @@ -12,80 +12,72 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Lists; -import java.io.Serializable; import java.util.List; -import cuchaz.enigma.Util; +import cuchaz.enigma.utils.Utils; -public class Signature implements Serializable { +public class Signature { - private static final long serialVersionUID = -5843719505729497539L; - - private List m_argumentTypes; - private Type m_returnType; + private List argumentTypes; + private Type returnType; public Signature(String signature) { try { - m_argumentTypes = Lists.newArrayList(); + this.argumentTypes = Lists.newArrayList(); int i = 0; while (i < signature.length()) { char c = signature.charAt(i); if (c == '(') { - assert (m_argumentTypes.isEmpty()); - assert (m_returnType == null); + assert (this.argumentTypes.isEmpty()); + assert (this.returnType == null); i++; } else if (c == ')') { i++; break; } else { String type = Type.parseFirst(signature.substring(i)); - m_argumentTypes.add(new Type(type)); + this.argumentTypes.add(new Type(type)); i += type.length(); } } - m_returnType = new Type(Type.parseFirst(signature.substring(i))); + this.returnType = new Type(Type.parseFirst(signature.substring(i))); } catch (Exception ex) { throw new IllegalArgumentException("Unable to parse signature: " + signature, ex); } } - public Signature(Signature other) { - m_argumentTypes = Lists.newArrayList(other.m_argumentTypes); - m_returnType = new Type(other.m_returnType); - } - public Signature(Signature other, ClassNameReplacer replacer) { - m_argumentTypes = Lists.newArrayList(other.m_argumentTypes); - for (int i = 0; i < m_argumentTypes.size(); i++) { - m_argumentTypes.set(i, new Type(m_argumentTypes.get(i), replacer)); + this.argumentTypes = Lists.newArrayList(other.argumentTypes); + for (int i = 0; i < this.argumentTypes.size(); i++) { + this.argumentTypes.set(i, new Type(this.argumentTypes.get(i), replacer)); } - m_returnType = new Type(other.m_returnType, replacer); + this.returnType = new Type(other.returnType, replacer); } public List getArgumentTypes() { - return m_argumentTypes; + return this.argumentTypes; } public Type getReturnType() { - return m_returnType; + return this.returnType; } @Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append("("); - for (Type type : m_argumentTypes) { + for (Type type : this.argumentTypes) { buf.append(type.toString()); } buf.append(")"); - buf.append(m_returnType.toString()); + buf.append(this.returnType.toString()); return buf.toString(); } public Iterable types() { List types = Lists.newArrayList(); - types.addAll(m_argumentTypes); - types.add(m_returnType); + types.addAll(this.argumentTypes); + types.add(this.returnType); return types; } @@ -95,12 +87,12 @@ public class Signature implements Serializable { } public boolean equals(Signature other) { - return m_argumentTypes.equals(other.m_argumentTypes) && m_returnType.equals(other.m_returnType); + return this.argumentTypes.equals(other.argumentTypes) && this.returnType.equals(other.returnType); } @Override public int hashCode() { - return Util.combineHashesOrdered(m_argumentTypes.hashCode(), m_returnType.hashCode()); + return Utils.combineHashesOrdered(this.argumentTypes.hashCode(), this.returnType.hashCode()); } public boolean hasClass(ClassEntry classEntry) { diff --git a/src/main/java/cuchaz/enigma/mapping/SignatureUpdater.java b/src/main/java/cuchaz/enigma/mapping/SignatureUpdater.java deleted file mode 100644 index ec300fe..0000000 --- a/src/main/java/cuchaz/enigma/mapping/SignatureUpdater.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ -package cuchaz.enigma.mapping; - -import com.google.common.collect.Lists; - -import java.io.IOException; -import java.io.StringReader; -import java.util.List; - -public class SignatureUpdater { - - public interface ClassNameUpdater { - String update(String className); - } - - public static String update(String signature, ClassNameUpdater updater) { - try { - StringBuilder buf = new StringBuilder(); - - // read the signature character-by-character - StringReader reader = new StringReader(signature); - int i; - while ((i = reader.read()) != -1) { - char c = (char) i; - - // does this character start a class name? - if (c == 'L') { - // update the class name and add it to the buffer - buf.append('L'); - String className = readClass(reader); - if (className == null) { - throw new IllegalArgumentException("Malformed signature: " + signature); - } - buf.append(updater.update(className)); - buf.append(';'); - } else { - // copy the character into the buffer - buf.append(c); - } - } - - return buf.toString(); - } catch (IOException ex) { - // I'm pretty sure a StringReader will never throw one of these - throw new Error(ex); - } - } - - private static String readClass(StringReader reader) throws IOException { - // read all the characters in the buffer until we hit a ';' - // remember to treat generics correctly - StringBuilder buf = new StringBuilder(); - int depth = 0; - int i; - while ((i = reader.read()) != -1) { - char c = (char) i; - - if (c == '<') { - depth++; - } else if (c == '>') { - depth--; - } else if (depth == 0) { - if (c == ';') { - return buf.toString(); - } else { - buf.append(c); - } - } - } - - return null; - } -} diff --git a/src/main/java/cuchaz/enigma/mapping/Translator.java b/src/main/java/cuchaz/enigma/mapping/Translator.java index b0107ce..eb6a189 100644 --- a/src/main/java/cuchaz/enigma/mapping/Translator.java +++ b/src/main/java/cuchaz/enigma/mapping/Translator.java @@ -20,22 +20,22 @@ import cuchaz.enigma.analysis.TranslationIndex; public class Translator { - private TranslationDirection m_direction; - private Map m_classes; - private TranslationIndex m_index; + private TranslationDirection direction; + private Map classes; + private TranslationIndex index; - private ClassNameReplacer m_classNameReplacer = className -> translateEntry(new ClassEntry(className)).getName(); + private ClassNameReplacer classNameReplacer = className -> translateEntry(new ClassEntry(className)).getName(); public Translator() { - m_direction = null; - m_classes = Maps.newHashMap(); - m_index = new TranslationIndex(); + this.direction = null; + this.classes = Maps.newHashMap(); + this.index = new TranslationIndex(); } public Translator(TranslationDirection direction, Map classes, TranslationIndex index) { - m_direction = direction; - m_classes = classes; - m_index = index; + this.direction = direction; + this.classes = classes; + this.index = index; } @SuppressWarnings("unchecked") @@ -96,7 +96,7 @@ public class Translator { String className = null; ClassMapping classMapping = mappingsChain.get(i); if (classMapping != null) { - className = m_direction.choose( + className = this.direction.choose( classMapping.getDeobfName(), isFirstClass ? classMapping.getObfFullName() : classMapping.getObfSimpleName() ); @@ -114,11 +114,11 @@ public class Translator { } else { // normal classes are easy - ClassMapping classMapping = m_classes.get(in.getName()); + ClassMapping classMapping = this.classes.get(in.getName()); if (classMapping == null) { return in; } - return m_direction.choose( + return this.direction.choose( classMapping.getDeobfName() != null ? new ClassEntry(classMapping.getDeobfName()) : in, new ClassEntry(classMapping.getObfFullName()) ); @@ -128,7 +128,7 @@ public class Translator { public String translate(FieldEntry in) { // resolve the class entry - ClassEntry resolvedClassEntry = m_index.resolveEntryClass(in); + ClassEntry resolvedClassEntry = this.index.resolveEntryClass(in); if (resolvedClassEntry != null) { // look for the class @@ -136,7 +136,7 @@ public class Translator { if (classMapping != null) { // look for the field - String translatedName = m_direction.choose( + String translatedName = this.direction.choose( classMapping.getDeobfFieldName(in.getName(), in.getType()), classMapping.getObfFieldName(in.getName(), translateType(in.getType())) ); @@ -159,7 +159,7 @@ public class Translator { public String translate(MethodEntry in) { // resolve the class entry - ClassEntry resolvedClassEntry = m_index.resolveEntryClass(in); + ClassEntry resolvedClassEntry = this.index.resolveEntryClass(in); if (resolvedClassEntry != null) { // look for class @@ -167,12 +167,12 @@ public class Translator { if (classMapping != null) { // look for the method - MethodMapping methodMapping = m_direction.choose( + MethodMapping methodMapping = this.direction.choose( classMapping.getMethodByObf(in.getName(), in.getSignature()), classMapping.getMethodByDeobf(in.getName(), translateSignature(in.getSignature())) ); if (methodMapping != null) { - return m_direction.choose(methodMapping.getDeobfName(), methodMapping.getObfName()); + return this.direction.choose(methodMapping.getDeobfName(), methodMapping.getObfName()); } } } @@ -211,12 +211,12 @@ public class Translator { if (classMapping != null) { // look for the method - MethodMapping methodMapping = m_direction.choose( + MethodMapping methodMapping = this.direction.choose( classMapping.getMethodByObf(in.getMethodName(), in.getMethodSignature()), classMapping.getMethodByDeobf(in.getMethodName(), translateSignature(in.getMethodSignature())) ); if (methodMapping != null) { - return m_direction.choose( + return this.direction.choose( methodMapping.getDeobfArgumentName(in.getIndex()), methodMapping.getObfArgumentName(in.getIndex()) ); @@ -234,11 +234,11 @@ public class Translator { } public Type translateType(Type type) { - return new Type(type, m_classNameReplacer); + return new Type(type, this.classNameReplacer); } public Signature translateSignature(Signature signature) { - return new Signature(signature, m_classNameReplacer); + return new Signature(signature, this.classNameReplacer); } private ClassMapping findClassMapping(ClassEntry in) { @@ -253,7 +253,7 @@ public class Translator { List mappingsChain = Lists.newArrayList(); // get mappings for the outer class - ClassMapping outerClassMapping = m_classes.get(parts[0]); + ClassMapping outerClassMapping = this.classes.get(parts[0]); mappingsChain.add(outerClassMapping); for (int i = 1; i < parts.length; i++) { @@ -261,7 +261,7 @@ public class Translator { // get mappings for the inner class ClassMapping innerClassMapping = null; if (outerClassMapping != null) { - innerClassMapping = m_direction.choose( + innerClassMapping = this.direction.choose( outerClassMapping.getInnerClassByObfSimple(parts[i]), outerClassMapping.getInnerClassByDeobfThenObfSimple(parts[i]) ); diff --git a/src/main/java/cuchaz/enigma/mapping/Type.java b/src/main/java/cuchaz/enigma/mapping/Type.java index ec15941..34ddc05 100644 --- a/src/main/java/cuchaz/enigma/mapping/Type.java +++ b/src/main/java/cuchaz/enigma/mapping/Type.java @@ -12,12 +12,9 @@ package cuchaz.enigma.mapping; import com.google.common.collect.Maps; -import java.io.Serializable; import java.util.Map; -public class Type implements Serializable { - - private static final long serialVersionUID = 7862257669347104063L; +public class Type { public enum Primitive { Byte('B'), @@ -29,27 +26,27 @@ public class Type implements Serializable { Double('D'), Boolean('Z'); - private static final Map m_lookup; + private static final Map lookup; static { - m_lookup = Maps.newTreeMap(); + lookup = Maps.newTreeMap(); for (Primitive val : values()) { - m_lookup.put(val.getCode(), val); + lookup.put(val.getCode(), val); } } public static Primitive get(char code) { - return m_lookup.get(code); + return lookup.get(code); } - private char m_code; + private char code; Primitive(char code) { - m_code = code; + this.code = code; } public char getCode() { - return m_code; + return this.code; } } @@ -94,7 +91,7 @@ public class Type implements Serializable { throw new IllegalArgumentException("don't know how to parse: " + in); } - protected String m_name; + protected String name; public Type(String name) { @@ -104,59 +101,51 @@ public class Type implements Serializable { throw new IllegalArgumentException("don't use with generic types or templates: " + name); } - m_name = name; - } - - public Type(Type other) { - m_name = other.m_name; - } - - public Type(ClassEntry classEntry) { - m_name = "L" + classEntry.getClassName() + ";"; + this.name = name; } public Type(Type other, ClassNameReplacer replacer) { - m_name = other.m_name; + this.name = other.name; if (other.isClass()) { String replacedName = replacer.replace(other.getClassEntry().getClassName()); if (replacedName != null) { - m_name = "L" + replacedName + ";"; + this.name = "L" + replacedName + ";"; } } else if (other.isArray() && other.hasClass()) { String replacedName = replacer.replace(other.getClassEntry().getClassName()); if (replacedName != null) { - m_name = Type.getArrayPrefix(other.getArrayDimension()) + "L" + replacedName + ";"; + this.name = Type.getArrayPrefix(other.getArrayDimension()) + "L" + replacedName + ";"; } } } @Override public String toString() { - return m_name; + return this.name; } public boolean isVoid() { - return m_name.length() == 1 && m_name.charAt(0) == 'V'; + return this.name.length() == 1 && this.name.charAt(0) == 'V'; } public boolean isPrimitive() { - return m_name.length() == 1 && Primitive.get(m_name.charAt(0)) != null; + return this.name.length() == 1 && Primitive.get(this.name.charAt(0)) != null; } public Primitive getPrimitive() { if (!isPrimitive()) { throw new IllegalStateException("not a primitive"); } - return Primitive.get(m_name.charAt(0)); + return Primitive.get(this.name.charAt(0)); } public boolean isClass() { - return m_name.charAt(0) == 'L' && m_name.charAt(m_name.length() - 1) == ';'; + return this.name.charAt(0) == 'L' && this.name.charAt(this.name.length() - 1) == ';'; } public ClassEntry getClassEntry() { if (isClass()) { - String name = m_name.substring(1, m_name.length() - 1); + String name = this.name.substring(1, this.name.length() - 1); int pos = name.indexOf('<'); if (pos >= 0) { @@ -174,21 +163,21 @@ public class Type implements Serializable { } public boolean isArray() { - return m_name.charAt(0) == '['; + return this.name.charAt(0) == '['; } public int getArrayDimension() { if (!isArray()) { throw new IllegalStateException("not an array"); } - return countArrayDimension(m_name); + return countArrayDimension(this.name); } public Type getArrayType() { if (!isArray()) { throw new IllegalStateException("not an array"); } - return new Type(m_name.substring(getArrayDimension(), m_name.length())); + return new Type(this.name.substring(getArrayDimension(), this.name.length())); } private static String getArrayPrefix(int dimension) { @@ -209,16 +198,17 @@ public class Type implements Serializable { } public boolean equals(Type other) { - return m_name.equals(other.m_name); + return this.name.equals(other.name); } public int hashCode() { - return m_name.hashCode(); + return this.name.hashCode(); } private static int countArrayDimension(String in) { int i = 0; - for (; i < in.length() && in.charAt(i) == '['; i++) {} + for (; i < in.length() && in.charAt(i) == '['; i++) { + } return i; } -- cgit v1.2.3