From cb8823eb0b446d5c1b9b580e5578866e691771d8 Mon Sep 17 00:00:00 2001 From: liach Date: Wed, 15 May 2019 22:03:13 -0700 Subject: Feature/weave (#138) * Add weave/stitch style command system to enigma Also fixed divide by zero stupidity Signed-off-by: liach * Add tests for package access index and command Signed-off-by: liach * Minor tweaks Signed-off-by: liach --- .../cuchaz/enigma/analysis/index/PackageVisibilityIndex.java | 10 +++++----- src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/main/java/cuchaz/enigma/analysis') diff --git a/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java b/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java index 9e9115f..da28ac4 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/PackageVisibilityIndex.java @@ -11,7 +11,7 @@ import cuchaz.enigma.translation.representation.entry.*; import java.util.*; public class PackageVisibilityIndex implements JarIndexer { - private static boolean isPackageVisibleOnlyRef(AccessFlags entryAcc, EntryReference ref, InheritanceIndex inheritanceIndex) { + private static boolean requiresSamePackage(AccessFlags entryAcc, EntryReference ref, InheritanceIndex inheritanceIndex) { if (entryAcc.isPublic()) return false; if (entryAcc.isProtected()) { Set callerAncestors = inheritanceIndex.getAncestors(ref.context.getContainingClass()); @@ -43,7 +43,7 @@ public class PackageVisibilityIndex implements JarIndexer { AccessFlags entryAcc = entryIndex.getFieldAccess(entry); if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { for (EntryReference ref : referenceIndex.getReferencesToField(entry)) { - if (isPackageVisibleOnlyRef(entryAcc, ref, inheritanceIndex)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); } } @@ -54,7 +54,7 @@ public class PackageVisibilityIndex implements JarIndexer { AccessFlags entryAcc = entryIndex.getMethodAccess(entry); if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { for (EntryReference ref : referenceIndex.getReferencesToMethod(entry)) { - if (isPackageVisibleOnlyRef(entryAcc, ref, inheritanceIndex)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); } } @@ -65,13 +65,13 @@ public class PackageVisibilityIndex implements JarIndexer { AccessFlags entryAcc = entryIndex.getClassAccess(entry); if (!entryAcc.isPublic() && !entryAcc.isPrivate()) { for (EntryReference ref : referenceIndex.getFieldTypeReferencesToClass(entry)) { - if (isPackageVisibleOnlyRef(entryAcc, ref, inheritanceIndex)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); } } for (EntryReference ref : referenceIndex.getMethodTypeReferencesToClass(entry)) { - if (isPackageVisibleOnlyRef(entryAcc, ref, inheritanceIndex)) { + if (requiresSamePackage(entryAcc, ref, inheritanceIndex)) { addConnection(ref.entry.getContainingClass(), ref.context.getContainingClass()); } } diff --git a/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java b/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java index 6764ac0..04306bd 100644 --- a/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/index/ReferenceIndex.java @@ -92,7 +92,8 @@ public class ReferenceIndex implements JarIndexer { } private , C extends Entry> Multimap> remapReferencesTo(JarIndex index, Multimap> multimap) { - Multimap> resolved = HashMultimap.create(multimap.keySet().size(), multimap.size() / multimap.keySet().size()); + final int keySetSize = multimap.keySet().size(); + Multimap> resolved = HashMultimap.create(keySetSize, keySetSize == 0 ? 0 : multimap.size() / keySetSize); for (Map.Entry> entry : multimap.entries()) { resolved.put(remap(index, entry.getKey()), remap(index, entry.getValue())); } -- cgit v1.2.3