summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar gegy10002019-02-24 21:40:52 +0200
committerGravatar gegy10002019-02-24 21:40:52 +0200
commit717bf2ef8ef40268b93359bb8f275335949500e8 (patch)
treeae3afb7a224d2032f7cd51cb386bb5547c498540 /src
parentFix #81 -- validate renames across related classes (diff)
downloadenigma-717bf2ef8ef40268b93359bb8f275335949500e8.tar.gz
enigma-717bf2ef8ef40268b93359bb8f275335949500e8.tar.xz
enigma-717bf2ef8ef40268b93359bb8f275335949500e8.zip
Fix name duplication checking not occurring on root classes
Diffstat (limited to 'src')
-rw-r--r--src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java10
-rw-r--r--src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java5
-rw-r--r--src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java2
-rw-r--r--src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java15
4 files changed, 29 insertions, 3 deletions
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java b/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
index a20c5028..dffcb0c6 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
+++ b/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java
@@ -39,13 +39,17 @@ public class MappingValidator {
39 Entry<?> relatedEntry = entry.replaceAncestor(containingClass, relatedClass); 39 Entry<?> relatedEntry = entry.replaceAncestor(containingClass, relatedClass);
40 Entry<?> translatedEntry = deobfuscator.translate(relatedEntry); 40 Entry<?> translatedEntry = deobfuscator.translate(relatedEntry);
41 41
42 Collection<Entry<?>> translatedSiblings = obfToDeobf.getChildren(relatedClass).stream() 42 Collection<Entry<?>> translatedSiblings = obfToDeobf.getSiblings(relatedEntry).stream()
43 .filter(e -> !entry.equals(e))
44 .map(deobfuscator::translate) 43 .map(deobfuscator::translate)
45 .collect(Collectors.toList()); 44 .collect(Collectors.toList());
46 45
47 if (!isUnique(translatedEntry, translatedSiblings, name)) { 46 if (!isUnique(translatedEntry, translatedSiblings, name)) {
48 throw new IllegalNameException(name, "Name is not unique in " + translatedEntry.getParent() + "!"); 47 Entry<?> parent = translatedEntry.getParent();
48 if (parent != null) {
49 throw new IllegalNameException(name, "Name is not unique in " + parent + "!");
50 } else {
51 throw new IllegalNameException(name, "Name is not unique!");
52 }
49 } 53 }
50 } 54 }
51 } 55 }
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java b/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java
index d8b1f50f..255fa5fb 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java
+++ b/src/main/java/cuchaz/enigma/translation/mapping/tree/DeltaTrackingTree.java
@@ -55,6 +55,11 @@ public class DeltaTrackingTree<T> implements EntryTree<T> {
55 return delegate.getChildren(entry); 55 return delegate.getChildren(entry);
56 } 56 }
57 57
58 @Override
59 public Collection<Entry<?>> getSiblings(Entry<?> entry) {
60 return delegate.getSiblings(entry);
61 }
62
58 @Nullable 63 @Nullable
59 @Override 64 @Override
60 public EntryTreeNode<T> findNode(Entry<?> entry) { 65 public EntryTreeNode<T> findNode(Entry<?> entry) {
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java b/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java
index f919a393..daaefcc1 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java
+++ b/src/main/java/cuchaz/enigma/translation/mapping/tree/EntryTree.java
@@ -14,6 +14,8 @@ import java.util.stream.Stream;
14public interface EntryTree<T> extends EntryMap<T>, Iterable<EntryTreeNode<T>>, Translatable { 14public interface EntryTree<T> extends EntryMap<T>, Iterable<EntryTreeNode<T>>, Translatable {
15 Collection<Entry<?>> getChildren(Entry<?> entry); 15 Collection<Entry<?>> getChildren(Entry<?> entry);
16 16
17 Collection<Entry<?>> getSiblings(Entry<?> entry);
18
17 @Nullable 19 @Nullable
18 EntryTreeNode<T> findNode(Entry<?> entry); 20 EntryTreeNode<T> findNode(Entry<?> entry);
19 21
diff --git a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java b/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java
index 02f2c04a..570941cd 100644
--- a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java
+++ b/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java
@@ -73,6 +73,21 @@ public class HashEntryTree<T> implements EntryTree<T> {
73 } 73 }
74 74
75 @Override 75 @Override
76 public Collection<Entry<?>> getSiblings(Entry<?> entry) {
77 Entry<?> parent = entry.getParent();
78 if (parent == null) {
79 return getSiblings(entry, root.keySet());
80 }
81 return getSiblings(entry, getChildren(parent));
82 }
83
84 private Collection<Entry<?>> getSiblings(Entry<?> entry, Collection<Entry<?>> generation) {
85 Set<Entry<?>> siblings = new HashSet<>(generation);
86 siblings.remove(entry);
87 return siblings;
88 }
89
90 @Override
76 @Nullable 91 @Nullable
77 public HashTreeNode<T> findNode(Entry<?> target) { 92 public HashTreeNode<T> findNode(Entry<?> target) {
78 List<Entry<?>> parentChain = target.getAncestry(); 93 List<Entry<?>> parentChain = target.getAncestry();