From 717bf2ef8ef40268b93359bb8f275335949500e8 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sun, 24 Feb 2019 21:40:52 +0200 Subject: Fix name duplication checking not occurring on root classes --- .../enigma/translation/mapping/MappingValidator.java | 10 +++++++--- .../translation/mapping/tree/DeltaTrackingTree.java | 5 +++++ .../cuchaz/enigma/translation/mapping/tree/EntryTree.java | 2 ++ .../enigma/translation/mapping/tree/HashEntryTree.java | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) (limited to 'src/main') diff --git a/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java b/src/main/java/cuchaz/enigma/translation/mapping/MappingValidator.java index a20c502..dffcb0c 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 { Entry relatedEntry = entry.replaceAncestor(containingClass, relatedClass); Entry translatedEntry = deobfuscator.translate(relatedEntry); - Collection> translatedSiblings = obfToDeobf.getChildren(relatedClass).stream() - .filter(e -> !entry.equals(e)) + Collection> translatedSiblings = obfToDeobf.getSiblings(relatedEntry).stream() .map(deobfuscator::translate) .collect(Collectors.toList()); if (!isUnique(translatedEntry, translatedSiblings, name)) { - throw new IllegalNameException(name, "Name is not unique in " + translatedEntry.getParent() + "!"); + Entry parent = translatedEntry.getParent(); + if (parent != null) { + throw new IllegalNameException(name, "Name is not unique in " + parent + "!"); + } else { + throw new IllegalNameException(name, "Name is not unique!"); + } } } } 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 d8b1f50..255fa5f 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 implements EntryTree { return delegate.getChildren(entry); } + @Override + public Collection> getSiblings(Entry entry) { + return delegate.getSiblings(entry); + } + @Nullable @Override public EntryTreeNode 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 f919a39..daaefcc 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; public interface EntryTree extends EntryMap, Iterable>, Translatable { Collection> getChildren(Entry entry); + Collection> getSiblings(Entry entry); + @Nullable EntryTreeNode findNode(Entry entry); 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 02f2c04..570941c 100644 --- a/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java +++ b/src/main/java/cuchaz/enigma/translation/mapping/tree/HashEntryTree.java @@ -72,6 +72,21 @@ public class HashEntryTree implements EntryTree { return leaf.getChildren(); } + @Override + public Collection> getSiblings(Entry entry) { + Entry parent = entry.getParent(); + if (parent == null) { + return getSiblings(entry, root.keySet()); + } + return getSiblings(entry, getChildren(parent)); + } + + private Collection> getSiblings(Entry entry, Collection> generation) { + Set> siblings = new HashSet<>(generation); + siblings.remove(entry); + return siblings; + } + @Override @Nullable public HashTreeNode findNode(Entry target) { -- cgit v1.2.3