summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar asiekierka2016-10-16 13:28:15 +0200
committerGravatar asiekierka2016-10-16 13:28:15 +0200
commit1c54f5e7ba224c8c1dd0fc09972de3a86246caa3 (patch)
tree775f4aa85caf4ae6dffff8053750a39252f55cc2 /src/main/java
parentapply similar fix to fields (diff)
downloadenigma-1c54f5e7ba224c8c1dd0fc09972de3a86246caa3.tar.gz
enigma-1c54f5e7ba224c8c1dd0fc09972de3a86246caa3.tar.xz
enigma-1c54f5e7ba224c8c1dd0fc09972de3a86246caa3.zip
Revert "apply similar fix to fields"
This reverts commit ea3d062ba2426903a37acca26acca187c7e245c3.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/Access.java8
-rw-r--r--src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java51
2 files changed, 5 insertions, 54 deletions
diff --git a/src/main/java/cuchaz/enigma/analysis/Access.java b/src/main/java/cuchaz/enigma/analysis/Access.java
index 0077cb50..b8aafaa0 100644
--- a/src/main/java/cuchaz/enigma/analysis/Access.java
+++ b/src/main/java/cuchaz/enigma/analysis/Access.java
@@ -47,12 +47,4 @@ public enum Access {
47 // assume public by default 47 // assume public by default
48 return Public; 48 return Public;
49 } 49 }
50
51 public boolean isPackageAccessible() {
52 return this != Private;
53 }
54
55 public boolean isSubclassAccessible() {
56 return this == Protected || this == Public;
57 }
58} 50}
diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
index 046e2127..5c299e3e 100644
--- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
+++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java
@@ -19,7 +19,6 @@ import java.util.Set;
19import java.util.zip.GZIPOutputStream; 19import java.util.zip.GZIPOutputStream;
20 20
21import com.google.common.collect.Lists; 21import com.google.common.collect.Lists;
22import cuchaz.enigma.analysis.Access;
23import cuchaz.enigma.analysis.JarIndex; 22import cuchaz.enigma.analysis.JarIndex;
24import cuchaz.enigma.analysis.MethodImplementationsTreeNode; 23import cuchaz.enigma.analysis.MethodImplementationsTreeNode;
25import cuchaz.enigma.throwables.IllegalNameException; 24import cuchaz.enigma.throwables.IllegalNameException;
@@ -88,49 +87,11 @@ public class MappingsRenamer {
88 } 87 }
89 } 88 }
90 89
91 private void validateFieldTreeName(FieldEntry obf, String deobfName, byte directionFlag) {
92 FieldEntry targetEntry = new FieldEntry(obf.getClassEntry(), deobfName, obf.getType());
93 boolean contains = false;
94
95 ClassMapping classMapping = m_mappings.getClassByObf(obf.getClassEntry());
96 if (classMapping != null && classMapping.containsDeobfField(deobfName, obf.getType())
97 && m_index.getAccess(classMapping.getFieldByDeobf(deobfName, obf.getType()).getObfEntry(obf.getClassEntry())).isSubclassAccessible()) {
98 contains = true;
99 }
100
101 if (!contains && m_index.containsObfField(targetEntry)
102 && m_index.getAccess(targetEntry).isSubclassAccessible()) {
103 contains = true;
104 }
105
106 if (contains) {
107 String deobfClassName = m_mappings.getTranslator(TranslationDirection.Deobfuscating, m_index.getTranslationIndex()).translateClass(obf.getClassName());
108 if (deobfClassName == null) {
109 deobfClassName = obf.getClassName();
110 }
111 throw new IllegalNameException(deobfName, "There is already a field with that name in class " + deobfClassName);
112 }
113
114 if (directionFlag == 1) {
115 ClassEntry ancestor = m_index.getTranslationIndex().getSuperclass(obf.getClassEntry());
116 if (m_index.containsObfClass(ancestor)) {
117 validateFieldTreeName(obf.cloneToNewClass(ancestor), deobfName, directionFlag);
118 }
119 } else if (directionFlag == 2) {
120 for (ClassEntry child : m_index.getTranslationIndex().getSubclass(obf.getClassEntry())) {
121 validateFieldTreeName(obf.cloneToNewClass(child), deobfName, directionFlag);
122 }
123 }
124 }
125
126 public void setFieldName(FieldEntry obf, String deobfName) { 90 public void setFieldName(FieldEntry obf, String deobfName) {
127 deobfName = NameValidator.validateFieldName(deobfName); 91 deobfName = NameValidator.validateFieldName(deobfName);
128 92 FieldEntry targetEntry = new FieldEntry(obf.getClassEntry(), deobfName, obf.getType());
129 if (m_index.getAccess(obf).isSubclassAccessible()) { 93 if (m_mappings.containsDeobfField(obf.getClassEntry(), deobfName, obf.getType()) || m_index.containsObfField(targetEntry)) {
130 validateFieldTreeName(obf, deobfName, (byte) 1); 94 throw new IllegalNameException(deobfName, "There is already a field with that name");
131 validateFieldTreeName(obf, deobfName, (byte) 2);
132 } else {
133 validateFieldTreeName(obf, deobfName, (byte) 0);
134 } 95 }
135 96
136 ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); 97 ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry());
@@ -161,10 +122,8 @@ public class MappingsRenamer {
161 throw new IllegalNameException(deobfName, "There is already a method with that name and signature in class " + deobfClassName); 122 throw new IllegalNameException(deobfName, "There is already a method with that name and signature in class " + deobfClassName);
162 } 123 }
163 124
164 if (m_index.getAccess(entry) != Access.Private) { 125 for (ClassEntry child : m_index.getTranslationIndex().getSubclass(entry.getClassEntry())) {
165 for (ClassEntry child : m_index.getTranslationIndex().getSubclass(entry.getClassEntry())) { 126 validateMethodTreeName(entry.cloneToNewClass(child), deobfName);
166 validateMethodTreeName(entry.cloneToNewClass(child), deobfName);
167 }
168 } 127 }
169 } 128 }
170 129