diff options
| author | 2019-02-24 21:40:52 +0200 | |
|---|---|---|
| committer | 2019-02-24 21:40:52 +0200 | |
| commit | 717bf2ef8ef40268b93359bb8f275335949500e8 (patch) | |
| tree | ae3afb7a224d2032f7cd51cb386bb5547c498540 /src | |
| parent | Fix #81 -- validate renames across related classes (diff) | |
| download | enigma-717bf2ef8ef40268b93359bb8f275335949500e8.tar.gz enigma-717bf2ef8ef40268b93359bb8f275335949500e8.tar.xz enigma-717bf2ef8ef40268b93359bb8f275335949500e8.zip | |
Fix name duplication checking not occurring on root classes
Diffstat (limited to 'src')
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; | |||
| 14 | public interface EntryTree<T> extends EntryMap<T>, Iterable<EntryTreeNode<T>>, Translatable { | 14 | public 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(); |