diff --git a/src/main/java/net/fabricmc/mappingio/adapter/EmptyElementFilter.java b/src/main/java/net/fabricmc/mappingio/adapter/EmptyElementFilter.java new file mode 100644 index 00000000..71a5c0ea --- /dev/null +++ b/src/main/java/net/fabricmc/mappingio/adapter/EmptyElementFilter.java @@ -0,0 +1,370 @@ +/* + * Copyright (c) 2025 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.mappingio.adapter; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + +import net.fabricmc.mappingio.MappedElementKind; +import net.fabricmc.mappingio.MappingVisitor; + +/** + * A mapping visitor that filters out elements which effectively don't contain any data. + * Elements are only forwarded if they have: + * + */ +public final class EmptyElementFilter extends ForwardingMappingVisitor { + /** + * Creates a new {@link EmptyElementFilter} that treats destination names and descriptors which are equal to their source counterparts as empty. + * + * @param next The next visitor to forward the data to. + */ + public EmptyElementFilter(MappingVisitor next) { + this(next, true); + } + + /** + * @param next The next visitor to forward the data to. + * @param treatSrcOnDstAsEmpty Whether destination names and descriptors that are equal to their source counterparts should be treated as empty. + */ + public EmptyElementFilter(MappingVisitor next, boolean treatSrcOnDstAsEmpty) { + super(next); + this.treatSrcOnDstAsEmpty = treatSrcOnDstAsEmpty; + init(); + } + + private void init() { + dstNsCount = -1; + memberKind = null; + localKind = null; + classSrcName = null; + memberSrcName = null; + memberSrcDesc = null; + localSrcName = null; + localLvIndex = -1; + argPosition = -1; + varLvtRowIndex = -1; + varStartOpIdx = -1; + varEndOpIdx = -1; + classDstNames = null; + memberDstNames = null; + memberDstDescs = null; + localDstNames = null; + classComment = null; + memberComment = null; + localComment = null; + forwardClass = false; + forwardMember = false; + forwardLocal = false; + forwardedClass = false; + forwardedMember = false; + forwardedLocal = false; + visitClass = true; + visitMember = true; + visitLocal = true; + } + + @Override + public void reset() { + init(); + super.reset(); + } + + @Override + public boolean visitHeader() throws IOException { + super.visitHeader(); + return true; + } + + @Override + public void visitNamespaces(String srcNamespace, List dstNamespaces) throws IOException { + super.visitNamespaces(srcNamespace, dstNamespaces); + + dstNsCount = dstNamespaces.size(); + classDstNames = new String[dstNsCount]; + memberDstNames = new String[dstNsCount]; + memberDstDescs = new String[dstNsCount]; + localDstNames = new String[dstNsCount]; + } + + @Override + public boolean visitClass(String srcName) throws IOException { + forwardClass = false; + forwardMember = false; + forwardLocal = false; + forwardedClass = false; + visitClass = true; + classSrcName = srcName; + Arrays.fill(classDstNames, null); + classComment = null; + return true; + } + + @Override + public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + memberKind = MappedElementKind.FIELD; + return visitMember(srcName, srcDesc); + } + + @Override + public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + memberKind = MappedElementKind.METHOD; + return visitMember(srcName, srcDesc); + } + + private boolean visitMember(String srcName, @Nullable String srcDesc) throws IOException { + forwardMember = false; + forwardLocal = false; + forwardedMember = false; + visitMember = true; + memberSrcName = srcName; + memberSrcDesc = srcDesc; + Arrays.fill(memberDstNames, null); + Arrays.fill(memberDstDescs, null); + memberComment = null; + return true; + } + + @Override + public boolean visitMethodArg(int argPosition, int lvIndex, @Nullable String srcName) throws IOException { + localKind = MappedElementKind.METHOD_ARG; + this.argPosition = argPosition; + return visitLocal(lvIndex, srcName); + } + + @Override + public boolean visitMethodVar(int lvtRowIndex, int lvIndex, int startOpIdx, int endOpIdx, @Nullable String srcName) throws IOException { + localKind = MappedElementKind.METHOD_VAR; + this.varLvtRowIndex = lvtRowIndex; + this.varStartOpIdx = startOpIdx; + this.varEndOpIdx = endOpIdx; + return visitLocal(lvIndex, srcName); + } + + private boolean visitLocal(int lvIndex, @Nullable String srcName) throws IOException { + forwardLocal = false; + forwardedLocal = false; + visitLocal = true; + localSrcName = srcName; + localLvIndex = lvIndex; + Arrays.fill(localDstNames, null); + localComment = null; + return true; + } + + @Override + public void visitDstName(MappedElementKind targetKind, int namespace, String name) throws IOException { + boolean forward = name != null && !(treatSrcOnDstAsEmpty && name.equals(getSrcName(targetKind))); + + switch (targetKind) { + case CLASS: + forwardClass |= forward; + classDstNames[namespace] = name; + break; + case FIELD: + case METHOD: + forwardClass |= forward; + forwardMember |= forward; + memberDstNames[namespace] = name; + break; + case METHOD_ARG: + case METHOD_VAR: + forwardClass |= forward; + forwardMember |= forward; + forwardLocal |= forward; + localDstNames[namespace] = name; + break; + default: + throw new IllegalArgumentException("Unknown target kind: " + targetKind); + } + } + + private String getSrcName(MappedElementKind targetKind) { + switch (targetKind) { + case CLASS: + return classSrcName; + case FIELD: + case METHOD: + return memberSrcName; + case METHOD_ARG: + case METHOD_VAR: + return localSrcName; + default: + throw new IllegalArgumentException("Unknown target kind: " + targetKind); + } + } + + @Override + public void visitDstDesc(MappedElementKind targetKind, int namespace, String desc) throws IOException { + assert targetKind == memberKind; + boolean forward = desc != null && !(treatSrcOnDstAsEmpty && desc.equals(memberSrcDesc)); + + forwardClass |= forward; + forwardMember |= forward; + memberDstDescs[namespace] = desc; + } + + @Override + public boolean visitElementContent(MappedElementKind targetKind) throws IOException { + forward(targetKind); + return true; + } + + @Override + public void visitComment(MappedElementKind targetKind, String comment) throws IOException { + if (comment == null) { + return; + } + + switch (targetKind) { + case CLASS: + forwardClass = true; + classComment = comment; + break; + case FIELD: + case METHOD: + forwardClass = true; + forwardMember = true; + memberComment = comment; + break; + case METHOD_ARG: + case METHOD_VAR: + forwardClass = true; + forwardMember = true; + forwardLocal = true; + localComment = comment; + break; + default: + throw new IllegalArgumentException("Unknown target kind: " + targetKind); + } + + forward(targetKind); + } + + private void forward(MappedElementKind targetKind) throws IOException { + if (forwardClass && !forwardedClass && visitClass) { + if (visitClass = super.visitClass(classSrcName)) { + for (int i = 0; i < dstNsCount; i++) { + if (classDstNames[i] != null) { + super.visitDstName(MappedElementKind.CLASS, i, classDstNames[i]); + } + } + + visitClass = super.visitElementContent(MappedElementKind.CLASS); + forwardedClass = true; + + if (visitClass && classComment != null) { + super.visitComment(MappedElementKind.CLASS, classComment); + } + } + } + + if (forwardMember && !forwardedMember && visitClass && visitMember) { + if (memberKind == MappedElementKind.FIELD) { + visitMember = super.visitField(memberSrcName, memberSrcDesc); + } else { + visitMember = super.visitMethod(memberSrcName, memberSrcDesc); + } + + if (visitMember) { + for (int i = 0; i < dstNsCount; i++) { + if (memberDstNames[i] != null) { + super.visitDstName(memberKind, i, memberDstNames[i]); + } + + if (memberDstDescs[i] != null) { + super.visitDstDesc(memberKind, i, memberDstDescs[i]); + } + } + + visitMember = super.visitElementContent(memberKind); + forwardedMember = true; + + if (visitMember && memberComment != null) { + super.visitComment(memberKind, memberComment); + } + } + } + + if (forwardLocal && !forwardedLocal && visitClass && visitMember && visitLocal) { + if (localKind == MappedElementKind.METHOD_ARG) { + visitLocal = super.visitMethodArg(argPosition, localLvIndex, localSrcName); + } else { + visitLocal = super.visitMethodVar(varLvtRowIndex, localLvIndex, varStartOpIdx, varEndOpIdx, localSrcName); + } + + if (visitLocal) { + for (int i = 0; i < dstNsCount; i++) { + if (localDstNames[i] != null) { + super.visitDstName(localKind, i, localDstNames[i]); + } + } + + visitLocal = super.visitElementContent(localKind); + forwardedLocal = true; + + if (visitLocal && localComment != null) { + super.visitComment(localKind, localComment); + } + } + } + } + + @Override + public boolean visitEnd() throws IOException { + init(); + return super.visitEnd(); + } + + private final boolean treatSrcOnDstAsEmpty; + private int dstNsCount; + private MappedElementKind memberKind; + private MappedElementKind localKind; + private String classSrcName; + private String memberSrcName; + private String memberSrcDesc; + private String localSrcName; + private int localLvIndex; + private int argPosition; + private int varLvtRowIndex; + private int varStartOpIdx; + private int varEndOpIdx; + private String[] classDstNames; + private String[] memberDstNames; + private String[] memberDstDescs; + private String[] localDstNames; + private String classComment; + private String memberComment; + private String localComment; + private boolean forwardClass; + private boolean forwardMember; + private boolean forwardLocal; + private boolean forwardedClass; + private boolean forwardedMember; + private boolean forwardedLocal; + private boolean visitClass; + private boolean visitMember; + private boolean visitLocal; +} diff --git a/src/main/java/net/fabricmc/mappingio/adapter/SubsetChecker.java b/src/main/java/net/fabricmc/mappingio/adapter/SubsetChecker.java index a8d57452..5082150d 100644 --- a/src/main/java/net/fabricmc/mappingio/adapter/SubsetChecker.java +++ b/src/main/java/net/fabricmc/mappingio/adapter/SubsetChecker.java @@ -19,9 +19,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.function.Consumer; import org.jetbrains.annotations.ApiStatus; @@ -66,7 +68,9 @@ public SubsetChecker(MappingTreeView supTree, @Nullable MappingFormat supFormat, @Override public void visitNamespaces(String srcNamespace, List dstNamespaces) throws IOException { - String expectedSrcNs = subFeatures.hasNamespaces() ? supTree.getSrcNamespace() : MappingUtil.NS_SOURCE_FALLBACK; + String expectedSrcNs = subFeatures.hasNamespaces() && supFeatures.hasNamespaces() + ? supTree.getSrcNamespace() + : srcNamespace; assertEquals(expectedSrcNs, srcNamespace, "Incoming mappings have different source namespace than supTree"); subDstNamespaces = new ArrayList<>(dstNamespaces); @@ -113,6 +117,8 @@ public boolean visitClass(String srcName, @Nullable String[] dstNames) throws IO if (!supFeatures.supportsClasses()) return true; // sub-elements might still be supported ClassMappingView supCls = supTree.getClass(srcName); + visitedIncomingParentElements.add(srcName); + boolean supHasDstNames = supFeatures.classes().dstNames() != FeaturePresence.ABSENT; boolean subHasDstNames = subFeatures.classes().dstNames() != FeaturePresence.ABSENT; boolean supHasRepackaging = supFeatures.classes().hasRepackaging(); @@ -203,8 +209,8 @@ public boolean visitField(String srcClsName, String srcName, @Nullable String sr if (!supFeatures.supportsFields()) return true; String subFldId = srcClsName + "#" + srcName + ":" + srcDesc; - ClassMappingView supCls = requireNonNull(supTree.getClass(srcClsName), "Incoming field's parent class not contained in supTree: " + subFldId); - FieldMappingView supFld = supCls.getField(srcName, srcDesc); + ClassMappingView supCls = getVisitedSupCls(srcClsName, "Incoming field's parent class not contained in supTree: " + subFldId); + FieldMappingView supFld = supCls == null ? null : supCls.getField(srcName, srcDesc); boolean supHasSrcDescs = supFeatures.fields().srcDescs() != FeaturePresence.ABSENT; boolean subHasSrcDescs = subFeatures.fields().srcDescs() != FeaturePresence.ABSENT; @@ -213,6 +219,7 @@ public boolean visitField(String srcClsName, String srcName, @Nullable String sr boolean supHasDstDescs = supFeatures.fields().dstDescs() != FeaturePresence.ABSENT; boolean subHasDstDescs = subFeatures.fields().dstDescs() != FeaturePresence.ABSENT; boolean supRequiresSrcDescs = supFeatures.fields().srcDescs() == FeaturePresence.REQUIRED; + boolean supRequiresDstDescs = supFeatures.fields().dstDescs() == FeaturePresence.REQUIRED; if (supFld == null) { // supTree doesn't have this field, ensure the incoming mappings don't have any data for it String[] subDstNames = null; @@ -223,9 +230,20 @@ public boolean visitField(String srcClsName, String srcName, @Nullable String sr boolean noData = isEmpty(subDstNames) && isEmpty(subDstDescs); boolean missingRequiredSrcDesc = supRequiresSrcDescs && srcDesc == null; + boolean missingRequiredDstDesc = supRequiresDstDescs; + + for (int subNs = 0; supRequiresDstDescs && subNs < subDstNames.length; subNs++) { + String subDstName = subDstNames == null ? null : subDstNames[subNs]; + String subDstDesc = subDstDescs == null ? null : subDstDescs[subNs]; - assertTrue(noData || missingRequiredSrcDesc, "Incoming field not contained in supTree: " + subFldId); - return !missingRequiredSrcDesc; + if (subDstDesc != null && (subDstName != null || supFeatures.fields().dstNames() != FeaturePresence.REQUIRED)) { + missingRequiredDstDesc = false; + break; + } + } + + assertTrue(noData || missingRequiredSrcDesc || missingRequiredDstDesc, "Incoming field not contained in supTree: " + subFldId); + return !missingRequiredSrcDesc && !missingRequiredDstDesc; } String supFldId = srcClsName + "#" + srcName + ":" + supFld.getSrcDesc(); @@ -287,8 +305,9 @@ public boolean visitMethod(String srcClsName, String srcName, @Nullable String s if (!supFeatures.supportsMethods()) return true; String subMthId = srcClsName + "#" + srcName + srcDesc; - ClassMappingView supCls = requireNonNull(supTree.getClass(srcClsName), "Incoming method's parent class not contained in supTree: " + subMthId); - MethodMappingView supMth = supCls.getMethod(srcName, srcDesc); + ClassMappingView supCls = getVisitedSupCls(srcClsName, "Incoming method's parent class not contained in supTree: " + subMthId); + MethodMappingView supMth = supCls == null ? null : supCls.getMethod(srcName, srcDesc); + visitedIncomingParentElements.add(subMthId); boolean supHasSrcDescs = supFeatures.methods().srcDescs() != FeaturePresence.ABSENT; boolean subHasSrcDescs = subFeatures.methods().srcDescs() != FeaturePresence.ABSENT; @@ -297,6 +316,7 @@ public boolean visitMethod(String srcClsName, String srcName, @Nullable String s boolean supHasDstDescs = supFeatures.methods().dstDescs() != FeaturePresence.ABSENT; boolean subHasDstDescs = subFeatures.methods().dstDescs() != FeaturePresence.ABSENT; boolean supRequiresSrcDescs = supFeatures.methods().srcDescs() == FeaturePresence.REQUIRED; + boolean supRequiresDstDescs = supFeatures.methods().dstDescs() == FeaturePresence.REQUIRED; if (supMth == null) { // supTree doesn't have this method, ensure the incoming mappings don't have any data for it String[] subDstNames = null; @@ -307,9 +327,20 @@ public boolean visitMethod(String srcClsName, String srcName, @Nullable String s boolean noData = isEmpty(subDstNames) && isEmpty(subDstDescs); boolean missingRequiredSrcDesc = supRequiresSrcDescs && srcDesc == null; + boolean missingRequiredDstDesc = supRequiresDstDescs; + + for (int subNs = 0; supRequiresDstDescs && subNs < subDstNames.length; subNs++) { + String subDstName = subDstNames == null ? null : subDstNames[subNs]; + String subDstDesc = subDstDescs == null ? null : subDstDescs[subNs]; + + if (subDstDesc != null && (subDstName != null || supFeatures.methods().dstNames() != FeaturePresence.REQUIRED)) { + missingRequiredDstDesc = false; + break; + } + } - assertTrue(noData || missingRequiredSrcDesc, "Incoming method not contained in supTree: " + subMthId); - return !missingRequiredSrcDesc; + assertTrue(noData || missingRequiredSrcDesc || missingRequiredDstDesc, "Incoming method not contained in supTree: " + subMthId); + return !missingRequiredSrcDesc && !missingRequiredDstDesc; } String supMthId = srcClsName + "#" + srcName + supMth.getSrcDesc(); @@ -372,9 +403,10 @@ public boolean visitMethodArg(String srcClsName, String srcMethodName, @Nullable if (!supFeatures.supportsArgs()) return true; String subArgId = srcClsName + "#" + srcMethodName + srcMethodDesc + ":" + argPosition + ":" + lvIndex + ":" + srcName; - ClassMappingView supCls = requireNonNull(supTree.getClass(srcClsName), "Incoming arg's parent class not contained in supTree: " + subArgId); - MethodMappingView supMth = requireNonNull(supCls.getMethod(srcMethodName, srcMethodDesc), "Incoming arg's parent method not contained in supTree: " + subArgId); - MethodArgMappingView supArg = supMth.getArg(argPosition, lvIndex, srcName); + + ClassMappingView supCls = getVisitedSupCls(srcClsName, "Incoming arg's parent class not contained in supTree: " + subArgId); + MethodMappingView supMth = supCls == null ? null : getVisitedSupMth(supCls, srcMethodName, srcMethodDesc, "Incoming arg's parent method not contained in supTree: " + subArgId); + MethodArgMappingView supArg = supMth == null ? null : supMth.getArg(argPosition, lvIndex, srcName); boolean supHasPositions = supFeatures.args().positions() != FeaturePresence.ABSENT; boolean subHasPositions = subFeatures.args().positions() != FeaturePresence.ABSENT; @@ -448,9 +480,9 @@ public boolean visitMethodVar(String srcClsName, String srcMethodName, @Nullable if (!supFeatures.supportsVars()) return true; String subVarId = srcClsName + "#" + srcMethodName + srcMethodDesc + ":" + lvtRowIndex + ":" + lvIndex + ":" + startOpIdx + ":" + endOpIdx + ":" + srcName; - ClassMappingView supCls = requireNonNull(supTree.getClass(srcClsName), "Incoming var's parent class not contained in supTree: " + subVarId); - MethodMappingView supMth = requireNonNull(supCls.getMethod(srcMethodName, srcMethodDesc), "Incoming var's parent method not contained in supTree: " + subVarId); - MethodVarMappingView supVar = supMth.getVar(lvtRowIndex, lvIndex, startOpIdx, endOpIdx, srcName); + ClassMappingView supCls = getVisitedSupCls(srcClsName, "Incoming var's parent class not contained in supTree: " + subVarId); + MethodMappingView supMth = supCls == null ? null : getVisitedSupMth(supCls, srcMethodName, srcMethodDesc, "Incoming var's parent method not contained in supTree: " + subVarId); + MethodVarMappingView supVar = supMth == null ? null : supMth.getVar(lvtRowIndex, lvIndex, startOpIdx, endOpIdx, srcName); boolean supHasLvIndices = supFeatures.vars().lvIndices() != FeaturePresence.ABSENT; boolean subHasLvIndices = subFeatures.vars().lvIndices() != FeaturePresence.ABSENT; @@ -575,12 +607,27 @@ private String getPackage(String name) { return lastSlash == -1 ? null : name.substring(0, lastSlash); } + @Nullable + private ClassMappingView getVisitedSupCls(String clsSrcName, String notFoundMessage) { + ClassMappingView supCls = supTree.getClass(clsSrcName); + assertTrue(supCls != null || visitedIncomingParentElements.contains(clsSrcName), notFoundMessage); + return supCls; + } + + @Nullable + private MethodMappingView getVisitedSupMth(ClassMappingView supCls, String mthSrcName, String mthSrcDesc, String notFoundMessage) { + MethodMappingView supMth = supCls.getMethod(mthSrcName, mthSrcDesc); + assertTrue(supMth != null || visitedIncomingParentElements.contains(mthSrcName), notFoundMessage); + return supMth; + } + private final MappingTreeView supTree; private final int supDstNsCount; private final MappingFormat subFormat; private final FeatureSet supFeatures; private final FeatureSet subFeatures; private final Consumer errorHandler; + private final Set visitedIncomingParentElements = new HashSet<>(); private int subNsIfSupNotNamespaced; private List subDstNamespaces; } diff --git a/src/test/java/net/fabricmc/mappingio/test/TestFileUpdater.java b/src/test/java/net/fabricmc/mappingio/test/TestFileUpdater.java index 6da855c1..ef6ca392 100644 --- a/src/test/java/net/fabricmc/mappingio/test/TestFileUpdater.java +++ b/src/test/java/net/fabricmc/mappingio/test/TestFileUpdater.java @@ -23,12 +23,14 @@ import java.util.Comparator; import java.util.stream.Stream; +import net.fabricmc.mappingio.MappingFlag; import net.fabricmc.mappingio.MappingVisitor; import net.fabricmc.mappingio.MappingWriter; import net.fabricmc.mappingio.adapter.MappingNsCompleter; import net.fabricmc.mappingio.format.MappingFormat; import net.fabricmc.mappingio.test.TestMappings.MappingDir; import net.fabricmc.mappingio.test.lib.jool.Unchecked; +import net.fabricmc.mappingio.tree.MemoryMappingTree; public class TestFileUpdater { public static void main(String[] args) throws IOException { @@ -50,6 +52,7 @@ public static void main(String[] args) throws IOException { } MappingVisitor target = MappingWriter.create(dir.pathFor(format), format); + boolean useIntermediateTree = false; if (dir == TestMappings.READING.REPEATED_ELEMENTS) { boolean isEnigma = format == MappingFormat.ENIGMA_FILE || format == MappingFormat.ENIGMA_DIR; @@ -58,11 +61,21 @@ public static void main(String[] args) throws IOException { continue; } - if (dir.isIn(TestMappings.PROPAGATION.BASE_DIR) && !format.features().hasNamespaces()) { + if (dir.isIn(TestMappings.FILTERING.BASE_DIR)) { + boolean needsFldDstDesc = target.getFlags().contains(MappingFlag.NEEDS_DST_FIELD_DESC); + boolean needsMthDstDesc = target.getFlags().contains(MappingFlag.NEEDS_DST_METHOD_DESC); + useIntermediateTree |= needsFldDstDesc || needsMthDstDesc; + } else if (dir.isIn(TestMappings.PROPAGATION.BASE_DIR) && !format.features().hasNamespaces()) { target = new MappingNsCompleter(target); } - dir.generate(target); + if (useIntermediateTree) { + MemoryMappingTree tree = new MemoryMappingTree(); + dir.generate(tree); + tree.accept(target); + } else { + dir.generate(target); + } } } } @@ -76,6 +89,10 @@ private static Path mkDir(Path path) throws IOException { } private static void rmDir(Path path) throws IOException { + if (!Files.exists(path)) { + return; + } + try (Stream paths = Files.walk(path)) { paths.sorted(Comparator.reverseOrder()).forEach(Unchecked.consumer(Files::deleteIfExists)); } diff --git a/src/test/java/net/fabricmc/mappingio/test/TestMappings.java b/src/test/java/net/fabricmc/mappingio/test/TestMappings.java index 6adc02a8..4f1fa39f 100644 --- a/src/test/java/net/fabricmc/mappingio/test/TestMappings.java +++ b/src/test/java/net/fabricmc/mappingio/test/TestMappings.java @@ -34,6 +34,7 @@ import net.fabricmc.mappingio.MappingReader; import net.fabricmc.mappingio.MappingUtil; import net.fabricmc.mappingio.MappingVisitor; +import net.fabricmc.mappingio.adapter.EmptyElementFilter; import net.fabricmc.mappingio.adapter.ForwardingMappingVisitor; import net.fabricmc.mappingio.adapter.NopMappingVisitor; import net.fabricmc.mappingio.adapter.OuterClassNamePropagator; @@ -50,7 +51,7 @@ */ public class TestMappings { public static T generateValid(T target) throws IOException { - MappingVisitor delegate = target instanceof VisitOrderVerifier ? target : new VisitOrderVerifier(target); + MappingVisitor delegate = visitOrderVerifierWrapped(target); if (delegate.visitHeader()) { delegate.visitNamespaces(MappingUtil.NS_SOURCE_FALLBACK, Arrays.asList(MappingUtil.NS_TARGET_FALLBACK, MappingUtil.NS_TARGET_FALLBACK + "2")); @@ -179,7 +180,7 @@ public void visitComment(MappedElementKind targetKind, String comment) throws IO } public static T generateHoles(T target) throws IOException { - MappingVisitor delegate = target instanceof VisitOrderVerifier ? target : new VisitOrderVerifier(target); + MappingVisitor delegate = visitOrderVerifierWrapped(target); if (delegate.visitHeader()) { delegate.visitNamespaces(MappingUtil.NS_SOURCE_FALLBACK, Arrays.asList(MappingUtil.NS_TARGET_FALLBACK, MappingUtil.NS_TARGET_FALLBACK + "2")); @@ -291,7 +292,7 @@ public static T generateHoles(T target) throws IOExce } public static T generateOuterClassNamePropagation(T target) throws IOException { - MappingVisitor delegate = target instanceof VisitOrderVerifier ? target : new VisitOrderVerifier(target); + MappingVisitor delegate = visitOrderVerifierWrapped(target); String srcNs = MappingUtil.NS_SOURCE_FALLBACK; List dstNamespaces = Arrays.asList("dstNs0", "dstNs1", "dstNs2", "dstNs3", "dstNs4", "dstNs5", "dstNs6"); @@ -357,6 +358,405 @@ public static T generateOuterClassNamePropagation(T t return target; } + public static T generateEmptyElementFiltering(T target) throws IOException { + MappingVisitor delegate = visitOrderVerifierWrapped(target); + + if (delegate.visitHeader()) { + delegate.visitNamespaces("nsA", Arrays.asList("nsB", "nsC")); + } + + if (delegate.visitContent()) { + String clsPrefix = "cls"; + String fieldPrefix = "fld"; + String methodPrefix = "mth"; + String argPrefix = "arg"; + String varPrefix = "var"; + String commentSuffix = "Comment"; + String nsASuffix = "NsAName"; + String nsBSuffix = "NsBName"; + String nsCSuffix = "NsCName"; + String clsName, clsNsAName; + String fldName, fldNsAName; + String mthName, mthNsAName; + String argName, argNsAName; + String varName, varNsAName; + String fldDesc = "I"; + String mthDesc = "()I"; + int clsNum = 0; + int fieldNum = 0; + int methodNum = 0; + int argNum = 0; + int varNum = 0; + + // Classes + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 0, clsName + nsBSuffix); + delegate.visitDstName(MappedElementKind.CLASS, 1, clsName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 0, clsName + nsBSuffix); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 1, clsName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 0, clsNsAName); + delegate.visitDstName(MappedElementKind.CLASS, 1, clsName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 0, clsName + nsBSuffix); + delegate.visitDstName(MappedElementKind.CLASS, 1, clsNsAName); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 0, clsNsAName); + delegate.visitDstName(MappedElementKind.CLASS, 1, clsNsAName); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 0, clsNsAName); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.CLASS, 1, clsNsAName); + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + delegate.visitElementContent(MappedElementKind.CLASS); + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + delegate.visitComment(MappedElementKind.CLASS, clsName + commentSuffix); + } + } + + for (int pass = 1; pass <= 2; pass++) { + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + if (pass == 2) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldNsAName); + } + + delegate.visitElementContent(MappedElementKind.FIELD); + } + } + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + if (pass == 2) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthNsAName); + } + + delegate.visitElementContent(MappedElementKind.METHOD); + } + } + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + if (delegate.visitElementContent(MappedElementKind.METHOD)) { + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + if (pass == 2) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argNsAName); + } + + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + } + } + } + } + + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + if (delegate.visitElementContent(MappedElementKind.METHOD)) { + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + if (pass == 2) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varNsAName); + } + + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + } + } + } + } + } + + // Fields + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldName + nsBSuffix); + delegate.visitDstName(MappedElementKind.FIELD, 1, fldName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldName + nsBSuffix); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 1, fldName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldNsAName); + delegate.visitDstName(MappedElementKind.FIELD, 1, fldName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldName + nsBSuffix); + delegate.visitDstName(MappedElementKind.FIELD, 1, fldNsAName); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldNsAName); + delegate.visitDstName(MappedElementKind.FIELD, 1, fldNsAName); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 0, fldNsAName); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitDstName(MappedElementKind.FIELD, 1, fldNsAName); + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + delegate.visitElementContent(MappedElementKind.FIELD); + } + + if (delegate.visitField(fldNsAName = (fldName = fieldPrefix + fieldNum++) + nsASuffix, fldDesc)) { + if (delegate.visitElementContent(MappedElementKind.FIELD)) { + delegate.visitComment(MappedElementKind.FIELD, fldName + commentSuffix); + } + } + } + } + + // Methods + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthName + nsBSuffix); + delegate.visitDstName(MappedElementKind.METHOD, 1, mthName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthName + nsBSuffix); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 1, mthName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthNsAName); + delegate.visitDstName(MappedElementKind.METHOD, 1, mthName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthName + nsBSuffix); + delegate.visitDstName(MappedElementKind.METHOD, 1, mthNsAName); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthNsAName); + delegate.visitDstName(MappedElementKind.METHOD, 1, mthNsAName); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 0, mthNsAName); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitDstName(MappedElementKind.METHOD, 1, mthNsAName); + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + delegate.visitElementContent(MappedElementKind.METHOD); + } + + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + if (delegate.visitElementContent(MappedElementKind.METHOD)) { + delegate.visitComment(MappedElementKind.METHOD, mthName + commentSuffix);; + } + } + } + } + + // Method args + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + if (delegate.visitElementContent(MappedElementKind.METHOD)) { + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argName + nsBSuffix); + delegate.visitDstName(MappedElementKind.METHOD_ARG, 1, argName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argName + nsBSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 1, argName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argNsAName); + delegate.visitDstName(MappedElementKind.METHOD_ARG, 1, argName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argName + nsBSuffix); + delegate.visitDstName(MappedElementKind.METHOD_ARG, 1, argNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argNsAName); + delegate.visitDstName(MappedElementKind.METHOD_ARG, 1, argNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 0, argNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_ARG, 1, argNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + delegate.visitElementContent(MappedElementKind.METHOD_ARG); + } + + if (delegate.visitMethodArg(argNum, argNum, argNsAName = (argName = argPrefix + argNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.METHOD_ARG)) { + delegate.visitComment(MappedElementKind.METHOD_ARG, argName + commentSuffix); + } + } + } + } + } + } + + // Method vars + if (delegate.visitClass(clsNsAName = (clsName = clsPrefix + clsNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.CLASS)) { + if (delegate.visitMethod(mthNsAName = (mthName = methodPrefix + methodNum++) + nsASuffix, mthDesc)) { + if (delegate.visitElementContent(MappedElementKind.METHOD)) { + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varName + nsBSuffix); + delegate.visitDstName(MappedElementKind.METHOD_VAR, 1, varName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varName + nsBSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 1, varName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varNsAName); + delegate.visitDstName(MappedElementKind.METHOD_VAR, 1, varName + nsCSuffix); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varName + nsBSuffix); + delegate.visitDstName(MappedElementKind.METHOD_VAR, 1, varNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varNsAName); + delegate.visitDstName(MappedElementKind.METHOD_VAR, 1, varNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 0, varNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitDstName(MappedElementKind.METHOD_VAR, 1, varNsAName); + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + delegate.visitElementContent(MappedElementKind.METHOD_VAR); + } + + if (delegate.visitMethodVar(varNum, varNum, varNum, varNum + 1, varNsAName = (varName = varPrefix + varNum++) + nsASuffix)) { + if (delegate.visitElementContent(MappedElementKind.METHOD_VAR)) { + delegate.visitComment(MappedElementKind.METHOD_VAR, varName + commentSuffix); + } + } + } + } + } + } + } + + if (!delegate.visitEnd()) { + generateEmptyElementFiltering(delegate); + } + + return target; + } + + private static VisitOrderVerifier visitOrderVerifierWrapped(MappingVisitor target) { + return target instanceof VisitOrderVerifier ? (VisitOrderVerifier) target : new VisitOrderVerifier(target); + } + private static MappingDir register(MappingDir dir) { dirs.add(dir); dirsByPath.put(dir.path, dir); @@ -407,13 +807,44 @@ public T generate(T target) throws IOException { }); public static final MappingDir PROPAGATED = register(new MappingDir(BASE_DIR.resolve("propagated/")) { public T generate(T target) throws IOException { - generateOuterClassNamePropagation(new OuterClassNamePropagator(target)); + generateOuterClassNamePropagation(new OuterClassNamePropagator(visitOrderVerifierWrapped(target))); return target; }; }); public static final MappingDir PROPAGATED_EXCEPT_REMAPPED_DST = register(new MappingDir(BASE_DIR.resolve("propagated-except-remapped-dst/")) { public T generate(T target) throws IOException { - generateOuterClassNamePropagation(new OuterClassNamePropagator(target, null, false)); + generateOuterClassNamePropagation( + new OuterClassNamePropagator( + visitOrderVerifierWrapped(target), + null, + false)); + return target; + }; + }); + } + + public static class FILTERING { + public static final Path BASE_DIR = TestUtil.getResource("/filtering/"); + + public static final MappingDir UNFILTERED = register(new MappingDir(BASE_DIR.resolve("unfiltered/")) { + public T generate(T target) throws IOException { + return generateEmptyElementFiltering(target); + }; + }); + + public static final MappingDir FILTERED = register(new MappingDir(BASE_DIR.resolve("filtered/")) { + public T generate(T target) throws IOException { + generateEmptyElementFiltering(new EmptyElementFilter(visitOrderVerifierWrapped(target))); + return target; + }; + }); + + public static final MappingDir FILTERED_EXCEPT_SRC_ON_DST = register(new MappingDir(BASE_DIR.resolve("filtered-except-src-on-dst/")) { + public T generate(T target) throws IOException { + generateEmptyElementFiltering( + new EmptyElementFilter( + visitOrderVerifierWrapped(target), + false)); return target; }; }); @@ -423,6 +854,7 @@ public T generate(T target) throws IOException { // Force-load classes to ensure all MappingDirs are registered READING.BASE_DIR.toString(); PROPAGATION.BASE_DIR.toString(); + FILTERING.BASE_DIR.toString(); } public abstract static class MappingDir { @@ -464,5 +896,10 @@ public boolean supportsGeneration() { } public abstract T generate(T target) throws IOException; + + @Override + public String toString() { + return TestUtil.getResource("/").relativize(path).toString(); + } } } diff --git a/src/test/java/net/fabricmc/mappingio/test/tests/OuterClassNamePropagationTest.java b/src/test/java/net/fabricmc/mappingio/test/tests/OuterClassNamePropagationTest.java index fd6c73f2..7f6b3fac 100644 --- a/src/test/java/net/fabricmc/mappingio/test/tests/OuterClassNamePropagationTest.java +++ b/src/test/java/net/fabricmc/mappingio/test/tests/OuterClassNamePropagationTest.java @@ -16,6 +16,7 @@ package net.fabricmc.mappingio.test.tests; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -127,16 +128,20 @@ public void tree() throws IOException { } private void checkDiskEquivalence(VisitableMappingTree tree, boolean processRemappedDstNames) throws IOException { + MappingDir dir = processRemappedDstNames + ? TestMappings.PROPAGATION.PROPAGATED + : TestMappings.PROPAGATION.PROPAGATED_EXCEPT_REMAPPED_DST; + for (MappingFormat format : MappingFormat.values()) { - MappingDir dir = processRemappedDstNames - ? TestMappings.PROPAGATION.PROPAGATED - : TestMappings.PROPAGATION.PROPAGATED_EXCEPT_REMAPPED_DST; + assertDoesNotThrow(() -> checkDiskEquivalence(dir, format, tree), "Failed for " + dir + " with " + format); + } + } - VisitableMappingTree diskTree = dir.read(format, new MemoryMappingTree()); + private void checkDiskEquivalence(MappingDir dir, MappingFormat format, VisitableMappingTree tree) throws IOException { + VisitableMappingTree diskTree = dir.read(format, new MemoryMappingTree()); - tree.accept(new FlatAsRegularMappingVisitor(new SubsetAsserter(diskTree, format, null))); - diskTree.accept(new FlatAsRegularMappingVisitor(new SubsetAsserter(tree, null, format))); - } + tree.accept(new FlatAsRegularMappingVisitor(new SubsetAsserter(diskTree, format, null))); + diskTree.accept(new FlatAsRegularMappingVisitor(new SubsetAsserter(tree, null, format))); } private static class OuterClassNameChecker extends NopMappingVisitor { diff --git a/src/test/java/net/fabricmc/mappingio/test/tests/filtering/EmptyElementFilterTest.java b/src/test/java/net/fabricmc/mappingio/test/tests/filtering/EmptyElementFilterTest.java new file mode 100644 index 00000000..4af11fc1 --- /dev/null +++ b/src/test/java/net/fabricmc/mappingio/test/tests/filtering/EmptyElementFilterTest.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.mappingio.test.tests.filtering; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +import java.io.IOException; + +import org.junit.jupiter.api.Test; + +import net.fabricmc.mappingio.MappingVisitor; +import net.fabricmc.mappingio.adapter.EmptyElementFilter; +import net.fabricmc.mappingio.adapter.FlatAsRegularMappingVisitor; +import net.fabricmc.mappingio.format.MappingFormat; +import net.fabricmc.mappingio.test.TestMappings; +import net.fabricmc.mappingio.test.TestMappings.MappingDir; +import net.fabricmc.mappingio.test.visitors.SubsetAsserter; +import net.fabricmc.mappingio.tree.MemoryMappingTree; +import net.fabricmc.mappingio.tree.VisitableMappingTree; + +public class EmptyElementFilterTest { + private static T acceptMappings(T visitor) throws IOException { + return TestMappings.generateEmptyElementFiltering(visitor); + } + + @Test + public void run() throws IOException { + for (int pass = 1; pass <= 2; pass++) { + boolean treatSrcOnDstAsEmpty = pass == 1; + VisitableMappingTree tree = new MemoryMappingTree(); + + acceptMappings(new EmptyElementFilter(tree, treatSrcOnDstAsEmpty)); + check(tree, treatSrcOnDstAsEmpty); + } + } + + private void check(VisitableMappingTree tree, boolean treatSrcOnDstAsEmpty) throws IOException { + MappingDir dir = treatSrcOnDstAsEmpty + ? TestMappings.FILTERING.FILTERED + : TestMappings.FILTERING.FILTERED_EXCEPT_SRC_ON_DST; + + for (MappingFormat format : MappingFormat.values()) { + assertDoesNotThrow(() -> checkDiskEquivalence(tree, dir, format), "Failed for " + dir + " with " + format); + } + } + + private void checkDiskEquivalence(VisitableMappingTree tree, MappingDir dir, MappingFormat format) throws IOException { + VisitableMappingTree diskTree = dir.read(format, new MemoryMappingTree()); + + tree.accept(new FlatAsRegularMappingVisitor(new SubsetAsserter(diskTree, format, null))); + diskTree.accept(new FlatAsRegularMappingVisitor(new SubsetAsserter(tree, null, format))); + } +} diff --git a/src/test/java/net/fabricmc/mappingio/test/tests/reading/DetectionTest.java b/src/test/java/net/fabricmc/mappingio/test/tests/reading/DetectionTest.java index d4dc56b0..62aad5bb 100644 --- a/src/test/java/net/fabricmc/mappingio/test/tests/reading/DetectionTest.java +++ b/src/test/java/net/fabricmc/mappingio/test/tests/reading/DetectionTest.java @@ -16,6 +16,7 @@ package net.fabricmc.mappingio.test.tests.reading; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -43,7 +44,7 @@ public void run() throws Exception { if (format == MappingFormat.RECAF_SIMPLE_FILE) { assertThrows(AssertionFailedError.class, () -> check(dir, format)); } else { - check(dir, format); + assertDoesNotThrow(() -> check(dir, format), "Failed for " + dir + " with " + format); } } } diff --git a/src/test/java/net/fabricmc/mappingio/test/tests/reading/ValidContentReadTest.java b/src/test/java/net/fabricmc/mappingio/test/tests/reading/ValidContentReadTest.java index 8a6eea1a..4f18a24b 100644 --- a/src/test/java/net/fabricmc/mappingio/test/tests/reading/ValidContentReadTest.java +++ b/src/test/java/net/fabricmc/mappingio/test/tests/reading/ValidContentReadTest.java @@ -16,6 +16,8 @@ package net.fabricmc.mappingio.test.tests.reading; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + import java.nio.file.Files; import org.jetbrains.annotations.Nullable; @@ -39,7 +41,7 @@ public class ValidContentReadTest { public void run() throws Exception { for (MappingDir dir : TestMappings.values()) { for (MappingFormat format : MappingFormat.values()) { - check(dir, format); + assertDoesNotThrow(() -> check(dir, format), "Failed for " + dir + " with " + format); } } } @@ -70,6 +72,9 @@ private void check(MappingDir dir, MappingFormat format) throws Exception { } tree = new MemoryMappingTree(); + String oldSrcNs = format.features().hasNamespaces() + ? referenceTree.getSrcNamespace() + : MappingUtil.NS_SOURCE_FALLBACK; String newSrcNs = format.features().hasNamespaces() ? referenceTree.getDstNamespaces().get(0) : MappingUtil.NS_TARGET_FALLBACK; @@ -77,7 +82,7 @@ private void check(MappingDir dir, MappingFormat format) throws Exception { new VisitOrderVerifier( new MappingSourceNsSwitch( new VisitOrderVerifier(tree, allowConsecutiveDuplicateElementVisits), - referenceTree.getSrcNamespace()), + oldSrcNs), allowConsecutiveDuplicateElementVisits), newSrcNs); diff --git a/src/test/java/net/fabricmc/mappingio/test/tests/visiting/VisitEndTest.java b/src/test/java/net/fabricmc/mappingio/test/tests/visiting/VisitEndTest.java index b70a2db2..8fb1eb98 100644 --- a/src/test/java/net/fabricmc/mappingio/test/tests/visiting/VisitEndTest.java +++ b/src/test/java/net/fabricmc/mappingio/test/tests/visiting/VisitEndTest.java @@ -16,6 +16,7 @@ package net.fabricmc.mappingio.test.tests.visiting; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -46,7 +47,7 @@ public class VisitEndTest { public void run() throws Exception { for (MappingDir dir : TestMappings.values()) { for (MappingFormat format : MappingFormat.values()) { - check(dir, format); + assertDoesNotThrow(() -> check(dir, format), "Failed for " + dir + " with " + format); } } } diff --git a/src/test/java/net/fabricmc/mappingio/test/tests/writing/WriteTest.java b/src/test/java/net/fabricmc/mappingio/test/tests/writing/WriteTest.java index e6a9542e..7eca6ee0 100644 --- a/src/test/java/net/fabricmc/mappingio/test/tests/writing/WriteTest.java +++ b/src/test/java/net/fabricmc/mappingio/test/tests/writing/WriteTest.java @@ -16,6 +16,8 @@ package net.fabricmc.mappingio.test.tests.writing; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + import java.io.IOException; import java.nio.file.Path; @@ -48,7 +50,7 @@ public class WriteTest { public void run() throws Exception { for (MappingDir dir : TestMappings.values()) { for (MappingFormat format : MappingFormat.values()) { - check(dir, format); + assertDoesNotThrow(() -> check(dir, format), "Failed for " + dir + " with " + format); } } } diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/csrg.csrg b/src/test/resources/filtering/filtered-except-src-on-dst/csrg.csrg new file mode 100644 index 00000000..dae3acd7 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/csrg.csrg @@ -0,0 +1,20 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls5NsAName cls5NsAName +cls6NsAName cls6NsAName +cls14NsAName fld1NsAName fld1NsAName +cls15NsAName mth3NsAName ()I mth3NsAName +cls18NsAName fld2NsAName fld2NsBName +cls18NsAName fld3NsAName fld3NsBName +cls18NsAName fld5NsAName fld5NsAName +cls18NsAName fld6NsAName fld6NsBName +cls18NsAName fld7NsAName fld7NsAName +cls18NsAName fld8NsAName fld8NsAName +cls19NsAName mth6NsAName ()I mth6NsBName +cls19NsAName mth7NsAName ()I mth7NsBName +cls19NsAName mth9NsAName ()I mth9NsAName +cls19NsAName mth10NsAName ()I mth10NsBName +cls19NsAName mth11NsAName ()I mth11NsAName +cls19NsAName mth12NsAName ()I mth12NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls0NsBName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls0NsBName.mapping new file mode 100644 index 00000000..2865bcb5 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls0NsBName.mapping @@ -0,0 +1 @@ +CLASS cls0NsAName cls0NsBName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls14NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls14NsAName.mapping new file mode 100644 index 00000000..b3592e81 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls14NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls14NsAName + FIELD fld1NsAName fld1NsAName I diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls15NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls15NsAName.mapping new file mode 100644 index 00000000..ddc214f6 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls15NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls15NsAName + METHOD mth3NsAName mth3NsAName ()I diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls16NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls16NsAName.mapping new file mode 100644 index 00000000..0c94e4db --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls16NsAName.mapping @@ -0,0 +1,3 @@ +CLASS cls16NsAName + METHOD mth4NsAName ()I + ARG 1 arg1NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls17NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls17NsAName.mapping new file mode 100644 index 00000000..ee1e651e --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls17NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls17NsAName + METHOD mth5NsAName ()I diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls18NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls18NsAName.mapping new file mode 100644 index 00000000..23408d86 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls18NsAName.mapping @@ -0,0 +1,11 @@ +CLASS cls18NsAName + FIELD fld2NsAName fld2NsBName I + FIELD fld3NsAName fld3NsBName I + FIELD fld4NsAName I + FIELD fld5NsAName fld5NsAName I + FIELD fld6NsAName fld6NsBName I + FIELD fld7NsAName fld7NsAName I + FIELD fld8NsAName fld8NsAName I + FIELD fld9NsAName I + FIELD fld11NsAName I + COMMENT fld11Comment diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls19NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls19NsAName.mapping new file mode 100644 index 00000000..7f09ab01 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls19NsAName.mapping @@ -0,0 +1,11 @@ +CLASS cls19NsAName + METHOD mth6NsAName mth6NsBName ()I + METHOD mth7NsAName mth7NsBName ()I + METHOD mth8NsAName ()I + METHOD mth9NsAName mth9NsAName ()I + METHOD mth10NsAName mth10NsBName ()I + METHOD mth11NsAName mth11NsAName ()I + METHOD mth12NsAName mth12NsAName ()I + METHOD mth13NsAName ()I + METHOD mth15NsAName ()I + COMMENT mth15Comment diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls1NsBName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls1NsBName.mapping new file mode 100644 index 00000000..3e6ee819 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls1NsBName.mapping @@ -0,0 +1 @@ +CLASS cls1NsAName cls1NsBName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls20NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls20NsAName.mapping new file mode 100644 index 00000000..880e72ca --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls20NsAName.mapping @@ -0,0 +1,12 @@ +CLASS cls20NsAName + METHOD mth16NsAName ()I + ARG 2 arg2NsBName + ARG 3 arg3NsBName + ARG 4 + ARG 5 arg5NsAName + ARG 6 arg6NsBName + ARG 7 arg7NsAName + ARG 8 arg8NsAName + ARG 9 + ARG 11 + COMMENT arg11Comment diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls21NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls21NsAName.mapping new file mode 100644 index 00000000..d634194f --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls21NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls21NsAName + METHOD mth17NsAName ()I diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls2NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls2NsAName.mapping new file mode 100644 index 00000000..d20f6419 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls2NsAName.mapping @@ -0,0 +1 @@ +CLASS cls2NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls3NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls3NsAName.mapping new file mode 100644 index 00000000..755f8a61 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls3NsAName.mapping @@ -0,0 +1 @@ +CLASS cls3NsAName cls3NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls4NsBName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls4NsBName.mapping new file mode 100644 index 00000000..15a4e79d --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls4NsBName.mapping @@ -0,0 +1 @@ +CLASS cls4NsAName cls4NsBName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls5NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls5NsAName.mapping new file mode 100644 index 00000000..13a97f43 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls5NsAName.mapping @@ -0,0 +1 @@ +CLASS cls5NsAName cls5NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls6NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls6NsAName.mapping new file mode 100644 index 00000000..33c177e2 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls6NsAName.mapping @@ -0,0 +1 @@ +CLASS cls6NsAName cls6NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls7NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls7NsAName.mapping new file mode 100644 index 00000000..810eace1 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls7NsAName.mapping @@ -0,0 +1 @@ +CLASS cls7NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls9NsAName.mapping b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls9NsAName.mapping new file mode 100644 index 00000000..eed5719c --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma-dir/cls9NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls9NsAName + COMMENT cls9Comment diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/enigma.mappings b/src/test/resources/filtering/filtered-except-src-on-dst/enigma.mappings new file mode 100644 index 00000000..1c39de56 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/enigma.mappings @@ -0,0 +1,55 @@ +CLASS cls0NsAName cls0NsBName +CLASS cls1NsAName cls1NsBName +CLASS cls2NsAName +CLASS cls3NsAName cls3NsAName +CLASS cls4NsAName cls4NsBName +CLASS cls5NsAName cls5NsAName +CLASS cls6NsAName cls6NsAName +CLASS cls7NsAName +CLASS cls9NsAName + COMMENT cls9Comment +CLASS cls14NsAName + FIELD fld1NsAName fld1NsAName I +CLASS cls15NsAName + METHOD mth3NsAName mth3NsAName ()I +CLASS cls16NsAName + METHOD mth4NsAName ()I + ARG 1 arg1NsAName +CLASS cls17NsAName + METHOD mth5NsAName ()I +CLASS cls18NsAName + FIELD fld2NsAName fld2NsBName I + FIELD fld3NsAName fld3NsBName I + FIELD fld4NsAName I + FIELD fld5NsAName fld5NsAName I + FIELD fld6NsAName fld6NsBName I + FIELD fld7NsAName fld7NsAName I + FIELD fld8NsAName fld8NsAName I + FIELD fld9NsAName I + FIELD fld11NsAName I + COMMENT fld11Comment +CLASS cls19NsAName + METHOD mth6NsAName mth6NsBName ()I + METHOD mth7NsAName mth7NsBName ()I + METHOD mth8NsAName ()I + METHOD mth9NsAName mth9NsAName ()I + METHOD mth10NsAName mth10NsBName ()I + METHOD mth11NsAName mth11NsAName ()I + METHOD mth12NsAName mth12NsAName ()I + METHOD mth13NsAName ()I + METHOD mth15NsAName ()I + COMMENT mth15Comment +CLASS cls20NsAName + METHOD mth16NsAName ()I + ARG 2 arg2NsBName + ARG 3 arg3NsBName + ARG 4 + ARG 5 arg5NsAName + ARG 6 arg6NsBName + ARG 7 arg7NsAName + ARG 8 arg8NsAName + ARG 9 + ARG 11 + COMMENT arg11Comment +CLASS cls21NsAName + METHOD mth17NsAName ()I diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/jam.jam b/src/test/resources/filtering/filtered-except-src-on-dst/jam.jam new file mode 100644 index 00000000..43d1fd6d --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/jam.jam @@ -0,0 +1,27 @@ +CL cls0NsAName cls0NsBName +CL cls1NsAName cls1NsBName +CL cls3NsAName cls3NsAName +CL cls4NsAName cls4NsBName +CL cls5NsAName cls5NsAName +CL cls6NsAName cls6NsAName +FD cls14NsAName fld1NsAName I fld1NsAName +MD cls15NsAName mth3NsAName ()I mth3NsAName +MP cls16NsAName mth4NsAName ()I 1 arg1NsAName +FD cls18NsAName fld2NsAName I fld2NsBName +FD cls18NsAName fld3NsAName I fld3NsBName +FD cls18NsAName fld5NsAName I fld5NsAName +FD cls18NsAName fld6NsAName I fld6NsBName +FD cls18NsAName fld7NsAName I fld7NsAName +FD cls18NsAName fld8NsAName I fld8NsAName +MD cls19NsAName mth6NsAName ()I mth6NsBName +MD cls19NsAName mth7NsAName ()I mth7NsBName +MD cls19NsAName mth9NsAName ()I mth9NsAName +MD cls19NsAName mth10NsAName ()I mth10NsBName +MD cls19NsAName mth11NsAName ()I mth11NsAName +MD cls19NsAName mth12NsAName ()I mth12NsAName +MP cls20NsAName mth16NsAName ()I 2 arg2NsBName +MP cls20NsAName mth16NsAName ()I 3 arg3NsBName +MP cls20NsAName mth16NsAName ()I 5 arg5NsAName +MP cls20NsAName mth16NsAName ()I 6 arg6NsBName +MP cls20NsAName mth16NsAName ()I 7 arg7NsAName +MP cls20NsAName mth16NsAName ()I 8 arg8NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/jobf.jobf b/src/test/resources/filtering/filtered-except-src-on-dst/jobf.jobf new file mode 100644 index 00000000..fb636714 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/jobf.jobf @@ -0,0 +1,20 @@ +c cls0NsAName = cls0NsBName +c cls1NsAName = cls1NsBName +c cls3NsAName = cls3NsAName +c cls4NsAName = cls4NsBName +c cls5NsAName = cls5NsAName +c cls6NsAName = cls6NsAName +f cls14NsAName.fld1NsAName:I = fld1NsAName +m cls15NsAName.mth3NsAName()I = mth3NsAName +f cls18NsAName.fld2NsAName:I = fld2NsBName +f cls18NsAName.fld3NsAName:I = fld3NsBName +f cls18NsAName.fld5NsAName:I = fld5NsAName +f cls18NsAName.fld6NsAName:I = fld6NsBName +f cls18NsAName.fld7NsAName:I = fld7NsAName +f cls18NsAName.fld8NsAName:I = fld8NsAName +m cls19NsAName.mth6NsAName()I = mth6NsBName +m cls19NsAName.mth7NsAName()I = mth7NsBName +m cls19NsAName.mth9NsAName()I = mth9NsAName +m cls19NsAName.mth10NsAName()I = mth10NsBName +m cls19NsAName.mth11NsAName()I = mth11NsAName +m cls19NsAName.mth12NsAName()I = mth12NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/migration-map.xml b/src/test/resources/filtering/filtered-except-src-on-dst/migration-map.xml new file mode 100644 index 00000000..54a63a82 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/migration-map.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/proguard.txt b/src/test/resources/filtering/filtered-except-src-on-dst/proguard.txt new file mode 100644 index 00000000..11fead9f --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/proguard.txt @@ -0,0 +1,24 @@ +cls0NsAName -> cls0NsBName: +cls1NsAName -> cls1NsBName: +cls3NsAName -> cls3NsAName: +cls4NsAName -> cls4NsBName: +cls5NsAName -> cls5NsAName: +cls6NsAName -> cls6NsAName: +cls14NsAName -> cls14NsAName: + int fld1NsAName -> fld1NsAName +cls15NsAName -> cls15NsAName: + int mth3NsAName() -> mth3NsAName +cls18NsAName -> cls18NsAName: + int fld2NsAName -> fld2NsBName + int fld3NsAName -> fld3NsBName + int fld5NsAName -> fld5NsAName + int fld6NsAName -> fld6NsBName + int fld7NsAName -> fld7NsAName + int fld8NsAName -> fld8NsAName +cls19NsAName -> cls19NsAName: + int mth6NsAName() -> mth6NsBName + int mth7NsAName() -> mth7NsBName + int mth9NsAName() -> mth9NsAName + int mth10NsAName() -> mth10NsBName + int mth11NsAName() -> mth11NsAName + int mth12NsAName() -> mth12NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/recaf-simple.txt b/src/test/resources/filtering/filtered-except-src-on-dst/recaf-simple.txt new file mode 100644 index 00000000..5991c8f7 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/recaf-simple.txt @@ -0,0 +1,20 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls5NsAName cls5NsAName +cls6NsAName cls6NsAName +cls14NsAName.fld1NsAName I fld1NsAName +cls15NsAName.mth3NsAName()I mth3NsAName +cls18NsAName.fld2NsAName I fld2NsBName +cls18NsAName.fld3NsAName I fld3NsBName +cls18NsAName.fld5NsAName I fld5NsAName +cls18NsAName.fld6NsAName I fld6NsBName +cls18NsAName.fld7NsAName I fld7NsAName +cls18NsAName.fld8NsAName I fld8NsAName +cls19NsAName.mth6NsAName()I mth6NsBName +cls19NsAName.mth7NsAName()I mth7NsBName +cls19NsAName.mth9NsAName()I mth9NsAName +cls19NsAName.mth10NsAName()I mth10NsBName +cls19NsAName.mth11NsAName()I mth11NsAName +cls19NsAName.mth12NsAName()I mth12NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/srg.srg b/src/test/resources/filtering/filtered-except-src-on-dst/srg.srg new file mode 100644 index 00000000..f730c4aa --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/srg.srg @@ -0,0 +1,20 @@ +CL: cls0NsAName cls0NsBName +CL: cls1NsAName cls1NsBName +CL: cls3NsAName cls3NsAName +CL: cls4NsAName cls4NsBName +CL: cls5NsAName cls5NsAName +CL: cls6NsAName cls6NsAName +FD: cls14NsAName/fld1NsAName cls14NsAName/fld1NsAName +MD: cls15NsAName/mth3NsAName ()I cls15NsAName/mth3NsAName ()I +FD: cls18NsAName/fld2NsAName cls18NsAName/fld2NsBName +FD: cls18NsAName/fld3NsAName cls18NsAName/fld3NsBName +FD: cls18NsAName/fld5NsAName cls18NsAName/fld5NsAName +FD: cls18NsAName/fld6NsAName cls18NsAName/fld6NsBName +FD: cls18NsAName/fld7NsAName cls18NsAName/fld7NsAName +FD: cls18NsAName/fld8NsAName cls18NsAName/fld8NsAName +MD: cls19NsAName/mth6NsAName ()I cls19NsAName/mth6NsBName ()I +MD: cls19NsAName/mth7NsAName ()I cls19NsAName/mth7NsBName ()I +MD: cls19NsAName/mth9NsAName ()I cls19NsAName/mth9NsAName ()I +MD: cls19NsAName/mth10NsAName ()I cls19NsAName/mth10NsBName ()I +MD: cls19NsAName/mth11NsAName ()I cls19NsAName/mth11NsAName ()I +MD: cls19NsAName/mth12NsAName ()I cls19NsAName/mth12NsAName ()I diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/tiny.tiny b/src/test/resources/filtering/filtered-except-src-on-dst/tiny.tiny new file mode 100644 index 00000000..345a3793 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/tiny.tiny @@ -0,0 +1,27 @@ +v1 nsA nsB nsC +CLASS cls0NsAName cls0NsBName cls0NsCName +CLASS cls1NsAName cls1NsBName +CLASS cls2NsAName cls2NsCName +CLASS cls3NsAName cls3NsAName cls3NsCName +CLASS cls4NsAName cls4NsBName cls4NsAName +CLASS cls5NsAName cls5NsAName cls5NsAName +CLASS cls6NsAName cls6NsAName +CLASS cls7NsAName cls7NsAName +FIELD cls14NsAName I fld1NsAName fld1NsAName +METHOD cls15NsAName ()I mth3NsAName mth3NsAName +FIELD cls18NsAName I fld2NsAName fld2NsBName fld2NsCName +FIELD cls18NsAName I fld3NsAName fld3NsBName +FIELD cls18NsAName I fld4NsAName fld4NsCName +FIELD cls18NsAName I fld5NsAName fld5NsAName fld5NsCName +FIELD cls18NsAName I fld6NsAName fld6NsBName fld6NsAName +FIELD cls18NsAName I fld7NsAName fld7NsAName fld7NsAName +FIELD cls18NsAName I fld8NsAName fld8NsAName +FIELD cls18NsAName I fld9NsAName fld9NsAName +METHOD cls19NsAName ()I mth6NsAName mth6NsBName mth6NsCName +METHOD cls19NsAName ()I mth7NsAName mth7NsBName +METHOD cls19NsAName ()I mth8NsAName mth8NsCName +METHOD cls19NsAName ()I mth9NsAName mth9NsAName mth9NsCName +METHOD cls19NsAName ()I mth10NsAName mth10NsBName mth10NsAName +METHOD cls19NsAName ()I mth11NsAName mth11NsAName mth11NsAName +METHOD cls19NsAName ()I mth12NsAName mth12NsAName +METHOD cls19NsAName ()I mth13NsAName mth13NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/tinyV2.tiny b/src/test/resources/filtering/filtered-except-src-on-dst/tinyV2.tiny new file mode 100644 index 00000000..56616569 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/tinyV2.tiny @@ -0,0 +1,67 @@ +tiny 2 0 nsA nsB nsC +c cls0NsAName cls0NsBName cls0NsCName +c cls1NsAName cls1NsBName +c cls2NsAName cls2NsCName +c cls3NsAName cls3NsAName cls3NsCName +c cls4NsAName cls4NsBName cls4NsAName +c cls5NsAName cls5NsAName cls5NsAName +c cls6NsAName cls6NsAName +c cls7NsAName cls7NsAName +c cls9NsAName + c cls9Comment +c cls14NsAName + f I fld1NsAName fld1NsAName +c cls15NsAName + m ()I mth3NsAName mth3NsAName +c cls16NsAName + m ()I mth4NsAName + p 1 arg1NsAName arg1NsAName +c cls17NsAName + m ()I mth5NsAName + v 1 1 1 var1NsAName var1NsAName +c cls18NsAName + f I fld2NsAName fld2NsBName fld2NsCName + f I fld3NsAName fld3NsBName + f I fld4NsAName fld4NsCName + f I fld5NsAName fld5NsAName fld5NsCName + f I fld6NsAName fld6NsBName fld6NsAName + f I fld7NsAName fld7NsAName fld7NsAName + f I fld8NsAName fld8NsAName + f I fld9NsAName fld9NsAName + f I fld11NsAName + c fld11Comment +c cls19NsAName + m ()I mth6NsAName mth6NsBName mth6NsCName + m ()I mth7NsAName mth7NsBName + m ()I mth8NsAName mth8NsCName + m ()I mth9NsAName mth9NsAName mth9NsCName + m ()I mth10NsAName mth10NsBName mth10NsAName + m ()I mth11NsAName mth11NsAName mth11NsAName + m ()I mth12NsAName mth12NsAName + m ()I mth13NsAName mth13NsAName + m ()I mth15NsAName + c mth15Comment +c cls20NsAName + m ()I mth16NsAName + p 2 arg2NsAName arg2NsBName arg2NsCName + p 3 arg3NsAName arg3NsBName + p 4 arg4NsAName arg4NsCName + p 5 arg5NsAName arg5NsAName arg5NsCName + p 6 arg6NsAName arg6NsBName arg6NsAName + p 7 arg7NsAName arg7NsAName arg7NsAName + p 8 arg8NsAName arg8NsAName + p 9 arg9NsAName arg9NsAName + p 11 arg11NsAName + c arg11Comment +c cls21NsAName + m ()I mth17NsAName + v 2 2 2 var2NsAName var2NsBName var2NsCName + v 3 3 3 var3NsAName var3NsBName + v 4 4 4 var4NsAName var4NsCName + v 5 5 5 var5NsAName var5NsAName var5NsCName + v 6 6 6 var6NsAName var6NsBName var6NsAName + v 7 7 7 var7NsAName var7NsAName var7NsAName + v 8 8 8 var8NsAName var8NsAName + v 9 9 9 var9NsAName var9NsAName + v 11 11 11 var11NsAName + c var11Comment diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/tsrg.tsrg b/src/test/resources/filtering/filtered-except-src-on-dst/tsrg.tsrg new file mode 100644 index 00000000..b72dc993 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/tsrg.tsrg @@ -0,0 +1,24 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls5NsAName cls5NsAName +cls6NsAName cls6NsAName +cls14NsAName cls14NsAName + fld1NsAName fld1NsAName +cls15NsAName cls15NsAName + mth3NsAName ()I mth3NsAName +cls18NsAName cls18NsAName + fld2NsAName fld2NsBName + fld3NsAName fld3NsBName + fld5NsAName fld5NsAName + fld6NsAName fld6NsBName + fld7NsAName fld7NsAName + fld8NsAName fld8NsAName +cls19NsAName cls19NsAName + mth6NsAName ()I mth6NsBName + mth7NsAName ()I mth7NsBName + mth9NsAName ()I mth9NsAName + mth10NsAName ()I mth10NsBName + mth11NsAName ()I mth11NsAName + mth12NsAName ()I mth12NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/tsrgV2.tsrg b/src/test/resources/filtering/filtered-except-src-on-dst/tsrgV2.tsrg new file mode 100644 index 00000000..b9ef4950 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/tsrgV2.tsrg @@ -0,0 +1,44 @@ +tsrg2 nsA nsB nsC +cls0NsAName cls0NsBName cls0NsCName +cls1NsAName cls1NsBName cls1NsAName +cls2NsAName cls2NsAName cls2NsCName +cls3NsAName cls3NsAName cls3NsCName +cls4NsAName cls4NsBName cls4NsAName +cls5NsAName cls5NsAName cls5NsAName +cls6NsAName cls6NsAName cls6NsAName +cls7NsAName cls7NsAName cls7NsAName +cls14NsAName cls14NsAName cls14NsAName + fld1NsAName I fld1NsAName fld1NsAName +cls15NsAName cls15NsAName cls15NsAName + mth3NsAName ()I mth3NsAName mth3NsAName +cls16NsAName cls16NsAName cls16NsAName + mth4NsAName ()I mth4NsAName mth4NsAName + 1 arg1NsAName arg1NsAName arg1NsAName +cls18NsAName cls18NsAName cls18NsAName + fld2NsAName I fld2NsBName fld2NsCName + fld3NsAName I fld3NsBName fld3NsAName + fld4NsAName I fld4NsAName fld4NsCName + fld5NsAName I fld5NsAName fld5NsCName + fld6NsAName I fld6NsBName fld6NsAName + fld7NsAName I fld7NsAName fld7NsAName + fld8NsAName I fld8NsAName fld8NsAName + fld9NsAName I fld9NsAName fld9NsAName +cls19NsAName cls19NsAName cls19NsAName + mth6NsAName ()I mth6NsBName mth6NsCName + mth7NsAName ()I mth7NsBName mth7NsAName + mth8NsAName ()I mth8NsAName mth8NsCName + mth9NsAName ()I mth9NsAName mth9NsCName + mth10NsAName ()I mth10NsBName mth10NsAName + mth11NsAName ()I mth11NsAName mth11NsAName + mth12NsAName ()I mth12NsAName mth12NsAName + mth13NsAName ()I mth13NsAName mth13NsAName +cls20NsAName cls20NsAName cls20NsAName + mth16NsAName ()I mth16NsAName mth16NsAName + 2 arg2NsAName arg2NsBName arg2NsCName + 3 arg3NsAName arg3NsBName arg3NsAName + 4 arg4NsAName arg4NsAName arg4NsCName + 5 arg5NsAName arg5NsAName arg5NsCName + 6 arg6NsAName arg6NsBName arg6NsAName + 7 arg7NsAName arg7NsAName arg7NsAName + 8 arg8NsAName arg8NsAName arg8NsAName + 9 arg9NsAName arg9NsAName arg9NsAName diff --git a/src/test/resources/filtering/filtered-except-src-on-dst/xsrg.xsrg b/src/test/resources/filtering/filtered-except-src-on-dst/xsrg.xsrg new file mode 100644 index 00000000..76c838c1 --- /dev/null +++ b/src/test/resources/filtering/filtered-except-src-on-dst/xsrg.xsrg @@ -0,0 +1,20 @@ +CL: cls0NsAName cls0NsBName +CL: cls1NsAName cls1NsBName +CL: cls3NsAName cls3NsAName +CL: cls4NsAName cls4NsBName +CL: cls5NsAName cls5NsAName +CL: cls6NsAName cls6NsAName +FD: cls14NsAName/fld1NsAName I cls14NsAName/fld1NsAName I +MD: cls15NsAName/mth3NsAName ()I cls15NsAName/mth3NsAName ()I +FD: cls18NsAName/fld2NsAName I cls18NsAName/fld2NsBName I +FD: cls18NsAName/fld3NsAName I cls18NsAName/fld3NsBName I +FD: cls18NsAName/fld5NsAName I cls18NsAName/fld5NsAName I +FD: cls18NsAName/fld6NsAName I cls18NsAName/fld6NsBName I +FD: cls18NsAName/fld7NsAName I cls18NsAName/fld7NsAName I +FD: cls18NsAName/fld8NsAName I cls18NsAName/fld8NsAName I +MD: cls19NsAName/mth6NsAName ()I cls19NsAName/mth6NsBName ()I +MD: cls19NsAName/mth7NsAName ()I cls19NsAName/mth7NsBName ()I +MD: cls19NsAName/mth9NsAName ()I cls19NsAName/mth9NsAName ()I +MD: cls19NsAName/mth10NsAName ()I cls19NsAName/mth10NsBName ()I +MD: cls19NsAName/mth11NsAName ()I cls19NsAName/mth11NsAName ()I +MD: cls19NsAName/mth12NsAName ()I cls19NsAName/mth12NsAName ()I diff --git a/src/test/resources/filtering/filtered/csrg.csrg b/src/test/resources/filtering/filtered/csrg.csrg new file mode 100644 index 00000000..d32408db --- /dev/null +++ b/src/test/resources/filtering/filtered/csrg.csrg @@ -0,0 +1,12 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls18NsAName fld2NsAName fld2NsBName +cls18NsAName fld3NsAName fld3NsBName +cls18NsAName fld5NsAName fld5NsAName +cls18NsAName fld6NsAName fld6NsBName +cls19NsAName mth6NsAName ()I mth6NsBName +cls19NsAName mth7NsAName ()I mth7NsBName +cls19NsAName mth9NsAName ()I mth9NsAName +cls19NsAName mth10NsAName ()I mth10NsBName diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls0NsBName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls0NsBName.mapping new file mode 100644 index 00000000..2865bcb5 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls0NsBName.mapping @@ -0,0 +1 @@ +CLASS cls0NsAName cls0NsBName diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls18NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls18NsAName.mapping new file mode 100644 index 00000000..4c3ab404 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls18NsAName.mapping @@ -0,0 +1,8 @@ +CLASS cls18NsAName + FIELD fld2NsAName fld2NsBName I + FIELD fld3NsAName fld3NsBName I + FIELD fld4NsAName I + FIELD fld5NsAName fld5NsAName I + FIELD fld6NsAName fld6NsBName I + FIELD fld11NsAName I + COMMENT fld11Comment diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls19NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls19NsAName.mapping new file mode 100644 index 00000000..83076b01 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls19NsAName.mapping @@ -0,0 +1,8 @@ +CLASS cls19NsAName + METHOD mth6NsAName mth6NsBName ()I + METHOD mth7NsAName mth7NsBName ()I + METHOD mth8NsAName ()I + METHOD mth9NsAName mth9NsAName ()I + METHOD mth10NsAName mth10NsBName ()I + METHOD mth15NsAName ()I + COMMENT mth15Comment diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls1NsBName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls1NsBName.mapping new file mode 100644 index 00000000..3e6ee819 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls1NsBName.mapping @@ -0,0 +1 @@ +CLASS cls1NsAName cls1NsBName diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls20NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls20NsAName.mapping new file mode 100644 index 00000000..8176048b --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls20NsAName.mapping @@ -0,0 +1,9 @@ +CLASS cls20NsAName + METHOD mth16NsAName ()I + ARG 2 arg2NsBName + ARG 3 arg3NsBName + ARG 4 + ARG 5 arg5NsAName + ARG 6 arg6NsBName + ARG 11 + COMMENT arg11Comment diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls21NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls21NsAName.mapping new file mode 100644 index 00000000..d634194f --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls21NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls21NsAName + METHOD mth17NsAName ()I diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls2NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls2NsAName.mapping new file mode 100644 index 00000000..d20f6419 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls2NsAName.mapping @@ -0,0 +1 @@ +CLASS cls2NsAName diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls3NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls3NsAName.mapping new file mode 100644 index 00000000..755f8a61 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls3NsAName.mapping @@ -0,0 +1 @@ +CLASS cls3NsAName cls3NsAName diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls4NsBName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls4NsBName.mapping new file mode 100644 index 00000000..15a4e79d --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls4NsBName.mapping @@ -0,0 +1 @@ +CLASS cls4NsAName cls4NsBName diff --git a/src/test/resources/filtering/filtered/enigma-dir/cls9NsAName.mapping b/src/test/resources/filtering/filtered/enigma-dir/cls9NsAName.mapping new file mode 100644 index 00000000..eed5719c --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma-dir/cls9NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls9NsAName + COMMENT cls9Comment diff --git a/src/test/resources/filtering/filtered/enigma.mappings b/src/test/resources/filtering/filtered/enigma.mappings new file mode 100644 index 00000000..4c92d260 --- /dev/null +++ b/src/test/resources/filtering/filtered/enigma.mappings @@ -0,0 +1,34 @@ +CLASS cls0NsAName cls0NsBName +CLASS cls1NsAName cls1NsBName +CLASS cls2NsAName +CLASS cls3NsAName cls3NsAName +CLASS cls4NsAName cls4NsBName +CLASS cls9NsAName + COMMENT cls9Comment +CLASS cls18NsAName + FIELD fld2NsAName fld2NsBName I + FIELD fld3NsAName fld3NsBName I + FIELD fld4NsAName I + FIELD fld5NsAName fld5NsAName I + FIELD fld6NsAName fld6NsBName I + FIELD fld11NsAName I + COMMENT fld11Comment +CLASS cls19NsAName + METHOD mth6NsAName mth6NsBName ()I + METHOD mth7NsAName mth7NsBName ()I + METHOD mth8NsAName ()I + METHOD mth9NsAName mth9NsAName ()I + METHOD mth10NsAName mth10NsBName ()I + METHOD mth15NsAName ()I + COMMENT mth15Comment +CLASS cls20NsAName + METHOD mth16NsAName ()I + ARG 2 arg2NsBName + ARG 3 arg3NsBName + ARG 4 + ARG 5 arg5NsAName + ARG 6 arg6NsBName + ARG 11 + COMMENT arg11Comment +CLASS cls21NsAName + METHOD mth17NsAName ()I diff --git a/src/test/resources/filtering/filtered/jam.jam b/src/test/resources/filtering/filtered/jam.jam new file mode 100644 index 00000000..6ed1bf09 --- /dev/null +++ b/src/test/resources/filtering/filtered/jam.jam @@ -0,0 +1,16 @@ +CL cls0NsAName cls0NsBName +CL cls1NsAName cls1NsBName +CL cls3NsAName cls3NsAName +CL cls4NsAName cls4NsBName +FD cls18NsAName fld2NsAName I fld2NsBName +FD cls18NsAName fld3NsAName I fld3NsBName +FD cls18NsAName fld5NsAName I fld5NsAName +FD cls18NsAName fld6NsAName I fld6NsBName +MD cls19NsAName mth6NsAName ()I mth6NsBName +MD cls19NsAName mth7NsAName ()I mth7NsBName +MD cls19NsAName mth9NsAName ()I mth9NsAName +MD cls19NsAName mth10NsAName ()I mth10NsBName +MP cls20NsAName mth16NsAName ()I 2 arg2NsBName +MP cls20NsAName mth16NsAName ()I 3 arg3NsBName +MP cls20NsAName mth16NsAName ()I 5 arg5NsAName +MP cls20NsAName mth16NsAName ()I 6 arg6NsBName diff --git a/src/test/resources/filtering/filtered/jobf.jobf b/src/test/resources/filtering/filtered/jobf.jobf new file mode 100644 index 00000000..53bb6f5a --- /dev/null +++ b/src/test/resources/filtering/filtered/jobf.jobf @@ -0,0 +1,12 @@ +c cls0NsAName = cls0NsBName +c cls1NsAName = cls1NsBName +c cls3NsAName = cls3NsAName +c cls4NsAName = cls4NsBName +f cls18NsAName.fld2NsAName:I = fld2NsBName +f cls18NsAName.fld3NsAName:I = fld3NsBName +f cls18NsAName.fld5NsAName:I = fld5NsAName +f cls18NsAName.fld6NsAName:I = fld6NsBName +m cls19NsAName.mth6NsAName()I = mth6NsBName +m cls19NsAName.mth7NsAName()I = mth7NsBName +m cls19NsAName.mth9NsAName()I = mth9NsAName +m cls19NsAName.mth10NsAName()I = mth10NsBName diff --git a/src/test/resources/filtering/filtered/migration-map.xml b/src/test/resources/filtering/filtered/migration-map.xml new file mode 100644 index 00000000..bbe7b1a1 --- /dev/null +++ b/src/test/resources/filtering/filtered/migration-map.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/test/resources/filtering/filtered/proguard.txt b/src/test/resources/filtering/filtered/proguard.txt new file mode 100644 index 00000000..ffb1a88b --- /dev/null +++ b/src/test/resources/filtering/filtered/proguard.txt @@ -0,0 +1,14 @@ +cls0NsAName -> cls0NsBName: +cls1NsAName -> cls1NsBName: +cls3NsAName -> cls3NsAName: +cls4NsAName -> cls4NsBName: +cls18NsAName -> cls18NsAName: + int fld2NsAName -> fld2NsBName + int fld3NsAName -> fld3NsBName + int fld5NsAName -> fld5NsAName + int fld6NsAName -> fld6NsBName +cls19NsAName -> cls19NsAName: + int mth6NsAName() -> mth6NsBName + int mth7NsAName() -> mth7NsBName + int mth9NsAName() -> mth9NsAName + int mth10NsAName() -> mth10NsBName diff --git a/src/test/resources/filtering/filtered/recaf-simple.txt b/src/test/resources/filtering/filtered/recaf-simple.txt new file mode 100644 index 00000000..14698d3b --- /dev/null +++ b/src/test/resources/filtering/filtered/recaf-simple.txt @@ -0,0 +1,12 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls18NsAName.fld2NsAName I fld2NsBName +cls18NsAName.fld3NsAName I fld3NsBName +cls18NsAName.fld5NsAName I fld5NsAName +cls18NsAName.fld6NsAName I fld6NsBName +cls19NsAName.mth6NsAName()I mth6NsBName +cls19NsAName.mth7NsAName()I mth7NsBName +cls19NsAName.mth9NsAName()I mth9NsAName +cls19NsAName.mth10NsAName()I mth10NsBName diff --git a/src/test/resources/filtering/filtered/srg.srg b/src/test/resources/filtering/filtered/srg.srg new file mode 100644 index 00000000..407ab75d --- /dev/null +++ b/src/test/resources/filtering/filtered/srg.srg @@ -0,0 +1,12 @@ +CL: cls0NsAName cls0NsBName +CL: cls1NsAName cls1NsBName +CL: cls3NsAName cls3NsAName +CL: cls4NsAName cls4NsBName +FD: cls18NsAName/fld2NsAName cls18NsAName/fld2NsBName +FD: cls18NsAName/fld3NsAName cls18NsAName/fld3NsBName +FD: cls18NsAName/fld5NsAName cls18NsAName/fld5NsAName +FD: cls18NsAName/fld6NsAName cls18NsAName/fld6NsBName +MD: cls19NsAName/mth6NsAName ()I cls19NsAName/mth6NsBName ()I +MD: cls19NsAName/mth7NsAName ()I cls19NsAName/mth7NsBName ()I +MD: cls19NsAName/mth9NsAName ()I cls19NsAName/mth9NsAName ()I +MD: cls19NsAName/mth10NsAName ()I cls19NsAName/mth10NsBName ()I diff --git a/src/test/resources/filtering/filtered/tiny.tiny b/src/test/resources/filtering/filtered/tiny.tiny new file mode 100644 index 00000000..f77fa321 --- /dev/null +++ b/src/test/resources/filtering/filtered/tiny.tiny @@ -0,0 +1,16 @@ +v1 nsA nsB nsC +CLASS cls0NsAName cls0NsBName cls0NsCName +CLASS cls1NsAName cls1NsBName +CLASS cls2NsAName cls2NsCName +CLASS cls3NsAName cls3NsAName cls3NsCName +CLASS cls4NsAName cls4NsBName cls4NsAName +FIELD cls18NsAName I fld2NsAName fld2NsBName fld2NsCName +FIELD cls18NsAName I fld3NsAName fld3NsBName +FIELD cls18NsAName I fld4NsAName fld4NsCName +FIELD cls18NsAName I fld5NsAName fld5NsAName fld5NsCName +FIELD cls18NsAName I fld6NsAName fld6NsBName fld6NsAName +METHOD cls19NsAName ()I mth6NsAName mth6NsBName mth6NsCName +METHOD cls19NsAName ()I mth7NsAName mth7NsBName +METHOD cls19NsAName ()I mth8NsAName mth8NsCName +METHOD cls19NsAName ()I mth9NsAName mth9NsAName mth9NsCName +METHOD cls19NsAName ()I mth10NsAName mth10NsBName mth10NsAName diff --git a/src/test/resources/filtering/filtered/tinyV2.tiny b/src/test/resources/filtering/filtered/tinyV2.tiny new file mode 100644 index 00000000..9c77e9c3 --- /dev/null +++ b/src/test/resources/filtering/filtered/tinyV2.tiny @@ -0,0 +1,42 @@ +tiny 2 0 nsA nsB nsC +c cls0NsAName cls0NsBName cls0NsCName +c cls1NsAName cls1NsBName +c cls2NsAName cls2NsCName +c cls3NsAName cls3NsAName cls3NsCName +c cls4NsAName cls4NsBName cls4NsAName +c cls9NsAName + c cls9Comment +c cls18NsAName + f I fld2NsAName fld2NsBName fld2NsCName + f I fld3NsAName fld3NsBName + f I fld4NsAName fld4NsCName + f I fld5NsAName fld5NsAName fld5NsCName + f I fld6NsAName fld6NsBName fld6NsAName + f I fld11NsAName + c fld11Comment +c cls19NsAName + m ()I mth6NsAName mth6NsBName mth6NsCName + m ()I mth7NsAName mth7NsBName + m ()I mth8NsAName mth8NsCName + m ()I mth9NsAName mth9NsAName mth9NsCName + m ()I mth10NsAName mth10NsBName mth10NsAName + m ()I mth15NsAName + c mth15Comment +c cls20NsAName + m ()I mth16NsAName + p 2 arg2NsAName arg2NsBName arg2NsCName + p 3 arg3NsAName arg3NsBName + p 4 arg4NsAName arg4NsCName + p 5 arg5NsAName arg5NsAName arg5NsCName + p 6 arg6NsAName arg6NsBName arg6NsAName + p 11 arg11NsAName + c arg11Comment +c cls21NsAName + m ()I mth17NsAName + v 2 2 2 var2NsAName var2NsBName var2NsCName + v 3 3 3 var3NsAName var3NsBName + v 4 4 4 var4NsAName var4NsCName + v 5 5 5 var5NsAName var5NsAName var5NsCName + v 6 6 6 var6NsAName var6NsBName var6NsAName + v 11 11 11 var11NsAName + c var11Comment diff --git a/src/test/resources/filtering/filtered/tsrg.tsrg b/src/test/resources/filtering/filtered/tsrg.tsrg new file mode 100644 index 00000000..97a460f1 --- /dev/null +++ b/src/test/resources/filtering/filtered/tsrg.tsrg @@ -0,0 +1,14 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls18NsAName cls18NsAName + fld2NsAName fld2NsBName + fld3NsAName fld3NsBName + fld5NsAName fld5NsAName + fld6NsAName fld6NsBName +cls19NsAName cls19NsAName + mth6NsAName ()I mth6NsBName + mth7NsAName ()I mth7NsBName + mth9NsAName ()I mth9NsAName + mth10NsAName ()I mth10NsBName diff --git a/src/test/resources/filtering/filtered/tsrgV2.tsrg b/src/test/resources/filtering/filtered/tsrgV2.tsrg new file mode 100644 index 00000000..40793256 --- /dev/null +++ b/src/test/resources/filtering/filtered/tsrgV2.tsrg @@ -0,0 +1,25 @@ +tsrg2 nsA nsB nsC +cls0NsAName cls0NsBName cls0NsCName +cls1NsAName cls1NsBName cls1NsAName +cls2NsAName cls2NsAName cls2NsCName +cls3NsAName cls3NsAName cls3NsCName +cls4NsAName cls4NsBName cls4NsAName +cls18NsAName cls18NsAName cls18NsAName + fld2NsAName I fld2NsBName fld2NsCName + fld3NsAName I fld3NsBName fld3NsAName + fld4NsAName I fld4NsAName fld4NsCName + fld5NsAName I fld5NsAName fld5NsCName + fld6NsAName I fld6NsBName fld6NsAName +cls19NsAName cls19NsAName cls19NsAName + mth6NsAName ()I mth6NsBName mth6NsCName + mth7NsAName ()I mth7NsBName mth7NsAName + mth8NsAName ()I mth8NsAName mth8NsCName + mth9NsAName ()I mth9NsAName mth9NsCName + mth10NsAName ()I mth10NsBName mth10NsAName +cls20NsAName cls20NsAName cls20NsAName + mth16NsAName ()I mth16NsAName mth16NsAName + 2 arg2NsAName arg2NsBName arg2NsCName + 3 arg3NsAName arg3NsBName arg3NsAName + 4 arg4NsAName arg4NsAName arg4NsCName + 5 arg5NsAName arg5NsAName arg5NsCName + 6 arg6NsAName arg6NsBName arg6NsAName diff --git a/src/test/resources/filtering/filtered/xsrg.xsrg b/src/test/resources/filtering/filtered/xsrg.xsrg new file mode 100644 index 00000000..f53e92d3 --- /dev/null +++ b/src/test/resources/filtering/filtered/xsrg.xsrg @@ -0,0 +1,12 @@ +CL: cls0NsAName cls0NsBName +CL: cls1NsAName cls1NsBName +CL: cls3NsAName cls3NsAName +CL: cls4NsAName cls4NsBName +FD: cls18NsAName/fld2NsAName I cls18NsAName/fld2NsBName I +FD: cls18NsAName/fld3NsAName I cls18NsAName/fld3NsBName I +FD: cls18NsAName/fld5NsAName I cls18NsAName/fld5NsAName I +FD: cls18NsAName/fld6NsAName I cls18NsAName/fld6NsBName I +MD: cls19NsAName/mth6NsAName ()I cls19NsAName/mth6NsBName ()I +MD: cls19NsAName/mth7NsAName ()I cls19NsAName/mth7NsBName ()I +MD: cls19NsAName/mth9NsAName ()I cls19NsAName/mth9NsAName ()I +MD: cls19NsAName/mth10NsAName ()I cls19NsAName/mth10NsBName ()I diff --git a/src/test/resources/filtering/unfiltered/csrg.csrg b/src/test/resources/filtering/unfiltered/csrg.csrg new file mode 100644 index 00000000..dae3acd7 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/csrg.csrg @@ -0,0 +1,20 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls5NsAName cls5NsAName +cls6NsAName cls6NsAName +cls14NsAName fld1NsAName fld1NsAName +cls15NsAName mth3NsAName ()I mth3NsAName +cls18NsAName fld2NsAName fld2NsBName +cls18NsAName fld3NsAName fld3NsBName +cls18NsAName fld5NsAName fld5NsAName +cls18NsAName fld6NsAName fld6NsBName +cls18NsAName fld7NsAName fld7NsAName +cls18NsAName fld8NsAName fld8NsAName +cls19NsAName mth6NsAName ()I mth6NsBName +cls19NsAName mth7NsAName ()I mth7NsBName +cls19NsAName mth9NsAName ()I mth9NsAName +cls19NsAName mth10NsAName ()I mth10NsBName +cls19NsAName mth11NsAName ()I mth11NsAName +cls19NsAName mth12NsAName ()I mth12NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls0NsBName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls0NsBName.mapping new file mode 100644 index 00000000..2865bcb5 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls0NsBName.mapping @@ -0,0 +1 @@ +CLASS cls0NsAName cls0NsBName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls10NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls10NsAName.mapping new file mode 100644 index 00000000..5bf1ec82 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls10NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls10NsAName + FIELD fld0NsAName I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls11NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls11NsAName.mapping new file mode 100644 index 00000000..751d515d --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls11NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls11NsAName + METHOD mth0NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls12NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls12NsAName.mapping new file mode 100644 index 00000000..7299b370 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls12NsAName.mapping @@ -0,0 +1,3 @@ +CLASS cls12NsAName + METHOD mth1NsAName ()I + ARG 0 diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls13NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls13NsAName.mapping new file mode 100644 index 00000000..ba4c07ea --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls13NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls13NsAName + METHOD mth2NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls14NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls14NsAName.mapping new file mode 100644 index 00000000..b3592e81 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls14NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls14NsAName + FIELD fld1NsAName fld1NsAName I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls15NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls15NsAName.mapping new file mode 100644 index 00000000..ddc214f6 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls15NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls15NsAName + METHOD mth3NsAName mth3NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls16NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls16NsAName.mapping new file mode 100644 index 00000000..0c94e4db --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls16NsAName.mapping @@ -0,0 +1,3 @@ +CLASS cls16NsAName + METHOD mth4NsAName ()I + ARG 1 arg1NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls17NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls17NsAName.mapping new file mode 100644 index 00000000..ee1e651e --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls17NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls17NsAName + METHOD mth5NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls18NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls18NsAName.mapping new file mode 100644 index 00000000..40c459db --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls18NsAName.mapping @@ -0,0 +1,12 @@ +CLASS cls18NsAName + FIELD fld2NsAName fld2NsBName I + FIELD fld3NsAName fld3NsBName I + FIELD fld4NsAName I + FIELD fld5NsAName fld5NsAName I + FIELD fld6NsAName fld6NsBName I + FIELD fld7NsAName fld7NsAName I + FIELD fld8NsAName fld8NsAName I + FIELD fld9NsAName I + FIELD fld10NsAName I + FIELD fld11NsAName I + COMMENT fld11Comment diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls19NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls19NsAName.mapping new file mode 100644 index 00000000..e5a5c30d --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls19NsAName.mapping @@ -0,0 +1,12 @@ +CLASS cls19NsAName + METHOD mth6NsAName mth6NsBName ()I + METHOD mth7NsAName mth7NsBName ()I + METHOD mth8NsAName ()I + METHOD mth9NsAName mth9NsAName ()I + METHOD mth10NsAName mth10NsBName ()I + METHOD mth11NsAName mth11NsAName ()I + METHOD mth12NsAName mth12NsAName ()I + METHOD mth13NsAName ()I + METHOD mth14NsAName ()I + METHOD mth15NsAName ()I + COMMENT mth15Comment diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls1NsBName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls1NsBName.mapping new file mode 100644 index 00000000..3e6ee819 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls1NsBName.mapping @@ -0,0 +1 @@ +CLASS cls1NsAName cls1NsBName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls20NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls20NsAName.mapping new file mode 100644 index 00000000..e50eca36 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls20NsAName.mapping @@ -0,0 +1,13 @@ +CLASS cls20NsAName + METHOD mth16NsAName ()I + ARG 2 arg2NsBName + ARG 3 arg3NsBName + ARG 4 + ARG 5 arg5NsAName + ARG 6 arg6NsBName + ARG 7 arg7NsAName + ARG 8 arg8NsAName + ARG 9 + ARG 10 + ARG 11 + COMMENT arg11Comment diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls21NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls21NsAName.mapping new file mode 100644 index 00000000..d634194f --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls21NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls21NsAName + METHOD mth17NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls2NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls2NsAName.mapping new file mode 100644 index 00000000..d20f6419 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls2NsAName.mapping @@ -0,0 +1 @@ +CLASS cls2NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls3NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls3NsAName.mapping new file mode 100644 index 00000000..755f8a61 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls3NsAName.mapping @@ -0,0 +1 @@ +CLASS cls3NsAName cls3NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls4NsBName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls4NsBName.mapping new file mode 100644 index 00000000..15a4e79d --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls4NsBName.mapping @@ -0,0 +1 @@ +CLASS cls4NsAName cls4NsBName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls5NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls5NsAName.mapping new file mode 100644 index 00000000..13a97f43 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls5NsAName.mapping @@ -0,0 +1 @@ +CLASS cls5NsAName cls5NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls6NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls6NsAName.mapping new file mode 100644 index 00000000..33c177e2 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls6NsAName.mapping @@ -0,0 +1 @@ +CLASS cls6NsAName cls6NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls7NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls7NsAName.mapping new file mode 100644 index 00000000..810eace1 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls7NsAName.mapping @@ -0,0 +1 @@ +CLASS cls7NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls8NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls8NsAName.mapping new file mode 100644 index 00000000..b8148141 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls8NsAName.mapping @@ -0,0 +1 @@ +CLASS cls8NsAName diff --git a/src/test/resources/filtering/unfiltered/enigma-dir/cls9NsAName.mapping b/src/test/resources/filtering/unfiltered/enigma-dir/cls9NsAName.mapping new file mode 100644 index 00000000..eed5719c --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma-dir/cls9NsAName.mapping @@ -0,0 +1,2 @@ +CLASS cls9NsAName + COMMENT cls9Comment diff --git a/src/test/resources/filtering/unfiltered/enigma.mappings b/src/test/resources/filtering/unfiltered/enigma.mappings new file mode 100644 index 00000000..5ca29aae --- /dev/null +++ b/src/test/resources/filtering/unfiltered/enigma.mappings @@ -0,0 +1,68 @@ +CLASS cls0NsAName cls0NsBName +CLASS cls1NsAName cls1NsBName +CLASS cls2NsAName +CLASS cls3NsAName cls3NsAName +CLASS cls4NsAName cls4NsBName +CLASS cls5NsAName cls5NsAName +CLASS cls6NsAName cls6NsAName +CLASS cls7NsAName +CLASS cls8NsAName +CLASS cls9NsAName + COMMENT cls9Comment +CLASS cls10NsAName + FIELD fld0NsAName I +CLASS cls11NsAName + METHOD mth0NsAName ()I +CLASS cls12NsAName + METHOD mth1NsAName ()I + ARG 0 +CLASS cls13NsAName + METHOD mth2NsAName ()I +CLASS cls14NsAName + FIELD fld1NsAName fld1NsAName I +CLASS cls15NsAName + METHOD mth3NsAName mth3NsAName ()I +CLASS cls16NsAName + METHOD mth4NsAName ()I + ARG 1 arg1NsAName +CLASS cls17NsAName + METHOD mth5NsAName ()I +CLASS cls18NsAName + FIELD fld2NsAName fld2NsBName I + FIELD fld3NsAName fld3NsBName I + FIELD fld4NsAName I + FIELD fld5NsAName fld5NsAName I + FIELD fld6NsAName fld6NsBName I + FIELD fld7NsAName fld7NsAName I + FIELD fld8NsAName fld8NsAName I + FIELD fld9NsAName I + FIELD fld10NsAName I + FIELD fld11NsAName I + COMMENT fld11Comment +CLASS cls19NsAName + METHOD mth6NsAName mth6NsBName ()I + METHOD mth7NsAName mth7NsBName ()I + METHOD mth8NsAName ()I + METHOD mth9NsAName mth9NsAName ()I + METHOD mth10NsAName mth10NsBName ()I + METHOD mth11NsAName mth11NsAName ()I + METHOD mth12NsAName mth12NsAName ()I + METHOD mth13NsAName ()I + METHOD mth14NsAName ()I + METHOD mth15NsAName ()I + COMMENT mth15Comment +CLASS cls20NsAName + METHOD mth16NsAName ()I + ARG 2 arg2NsBName + ARG 3 arg3NsBName + ARG 4 + ARG 5 arg5NsAName + ARG 6 arg6NsBName + ARG 7 arg7NsAName + ARG 8 arg8NsAName + ARG 9 + ARG 10 + ARG 11 + COMMENT arg11Comment +CLASS cls21NsAName + METHOD mth17NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/jam.jam b/src/test/resources/filtering/unfiltered/jam.jam new file mode 100644 index 00000000..43d1fd6d --- /dev/null +++ b/src/test/resources/filtering/unfiltered/jam.jam @@ -0,0 +1,27 @@ +CL cls0NsAName cls0NsBName +CL cls1NsAName cls1NsBName +CL cls3NsAName cls3NsAName +CL cls4NsAName cls4NsBName +CL cls5NsAName cls5NsAName +CL cls6NsAName cls6NsAName +FD cls14NsAName fld1NsAName I fld1NsAName +MD cls15NsAName mth3NsAName ()I mth3NsAName +MP cls16NsAName mth4NsAName ()I 1 arg1NsAName +FD cls18NsAName fld2NsAName I fld2NsBName +FD cls18NsAName fld3NsAName I fld3NsBName +FD cls18NsAName fld5NsAName I fld5NsAName +FD cls18NsAName fld6NsAName I fld6NsBName +FD cls18NsAName fld7NsAName I fld7NsAName +FD cls18NsAName fld8NsAName I fld8NsAName +MD cls19NsAName mth6NsAName ()I mth6NsBName +MD cls19NsAName mth7NsAName ()I mth7NsBName +MD cls19NsAName mth9NsAName ()I mth9NsAName +MD cls19NsAName mth10NsAName ()I mth10NsBName +MD cls19NsAName mth11NsAName ()I mth11NsAName +MD cls19NsAName mth12NsAName ()I mth12NsAName +MP cls20NsAName mth16NsAName ()I 2 arg2NsBName +MP cls20NsAName mth16NsAName ()I 3 arg3NsBName +MP cls20NsAName mth16NsAName ()I 5 arg5NsAName +MP cls20NsAName mth16NsAName ()I 6 arg6NsBName +MP cls20NsAName mth16NsAName ()I 7 arg7NsAName +MP cls20NsAName mth16NsAName ()I 8 arg8NsAName diff --git a/src/test/resources/filtering/unfiltered/jobf.jobf b/src/test/resources/filtering/unfiltered/jobf.jobf new file mode 100644 index 00000000..fb636714 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/jobf.jobf @@ -0,0 +1,20 @@ +c cls0NsAName = cls0NsBName +c cls1NsAName = cls1NsBName +c cls3NsAName = cls3NsAName +c cls4NsAName = cls4NsBName +c cls5NsAName = cls5NsAName +c cls6NsAName = cls6NsAName +f cls14NsAName.fld1NsAName:I = fld1NsAName +m cls15NsAName.mth3NsAName()I = mth3NsAName +f cls18NsAName.fld2NsAName:I = fld2NsBName +f cls18NsAName.fld3NsAName:I = fld3NsBName +f cls18NsAName.fld5NsAName:I = fld5NsAName +f cls18NsAName.fld6NsAName:I = fld6NsBName +f cls18NsAName.fld7NsAName:I = fld7NsAName +f cls18NsAName.fld8NsAName:I = fld8NsAName +m cls19NsAName.mth6NsAName()I = mth6NsBName +m cls19NsAName.mth7NsAName()I = mth7NsBName +m cls19NsAName.mth9NsAName()I = mth9NsAName +m cls19NsAName.mth10NsAName()I = mth10NsBName +m cls19NsAName.mth11NsAName()I = mth11NsAName +m cls19NsAName.mth12NsAName()I = mth12NsAName diff --git a/src/test/resources/filtering/unfiltered/migration-map.xml b/src/test/resources/filtering/unfiltered/migration-map.xml new file mode 100644 index 00000000..54a63a82 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/migration-map.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/test/resources/filtering/unfiltered/proguard.txt b/src/test/resources/filtering/unfiltered/proguard.txt new file mode 100644 index 00000000..11fead9f --- /dev/null +++ b/src/test/resources/filtering/unfiltered/proguard.txt @@ -0,0 +1,24 @@ +cls0NsAName -> cls0NsBName: +cls1NsAName -> cls1NsBName: +cls3NsAName -> cls3NsAName: +cls4NsAName -> cls4NsBName: +cls5NsAName -> cls5NsAName: +cls6NsAName -> cls6NsAName: +cls14NsAName -> cls14NsAName: + int fld1NsAName -> fld1NsAName +cls15NsAName -> cls15NsAName: + int mth3NsAName() -> mth3NsAName +cls18NsAName -> cls18NsAName: + int fld2NsAName -> fld2NsBName + int fld3NsAName -> fld3NsBName + int fld5NsAName -> fld5NsAName + int fld6NsAName -> fld6NsBName + int fld7NsAName -> fld7NsAName + int fld8NsAName -> fld8NsAName +cls19NsAName -> cls19NsAName: + int mth6NsAName() -> mth6NsBName + int mth7NsAName() -> mth7NsBName + int mth9NsAName() -> mth9NsAName + int mth10NsAName() -> mth10NsBName + int mth11NsAName() -> mth11NsAName + int mth12NsAName() -> mth12NsAName diff --git a/src/test/resources/filtering/unfiltered/recaf-simple.txt b/src/test/resources/filtering/unfiltered/recaf-simple.txt new file mode 100644 index 00000000..5991c8f7 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/recaf-simple.txt @@ -0,0 +1,20 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls5NsAName cls5NsAName +cls6NsAName cls6NsAName +cls14NsAName.fld1NsAName I fld1NsAName +cls15NsAName.mth3NsAName()I mth3NsAName +cls18NsAName.fld2NsAName I fld2NsBName +cls18NsAName.fld3NsAName I fld3NsBName +cls18NsAName.fld5NsAName I fld5NsAName +cls18NsAName.fld6NsAName I fld6NsBName +cls18NsAName.fld7NsAName I fld7NsAName +cls18NsAName.fld8NsAName I fld8NsAName +cls19NsAName.mth6NsAName()I mth6NsBName +cls19NsAName.mth7NsAName()I mth7NsBName +cls19NsAName.mth9NsAName()I mth9NsAName +cls19NsAName.mth10NsAName()I mth10NsBName +cls19NsAName.mth11NsAName()I mth11NsAName +cls19NsAName.mth12NsAName()I mth12NsAName diff --git a/src/test/resources/filtering/unfiltered/srg.srg b/src/test/resources/filtering/unfiltered/srg.srg new file mode 100644 index 00000000..f730c4aa --- /dev/null +++ b/src/test/resources/filtering/unfiltered/srg.srg @@ -0,0 +1,20 @@ +CL: cls0NsAName cls0NsBName +CL: cls1NsAName cls1NsBName +CL: cls3NsAName cls3NsAName +CL: cls4NsAName cls4NsBName +CL: cls5NsAName cls5NsAName +CL: cls6NsAName cls6NsAName +FD: cls14NsAName/fld1NsAName cls14NsAName/fld1NsAName +MD: cls15NsAName/mth3NsAName ()I cls15NsAName/mth3NsAName ()I +FD: cls18NsAName/fld2NsAName cls18NsAName/fld2NsBName +FD: cls18NsAName/fld3NsAName cls18NsAName/fld3NsBName +FD: cls18NsAName/fld5NsAName cls18NsAName/fld5NsAName +FD: cls18NsAName/fld6NsAName cls18NsAName/fld6NsBName +FD: cls18NsAName/fld7NsAName cls18NsAName/fld7NsAName +FD: cls18NsAName/fld8NsAName cls18NsAName/fld8NsAName +MD: cls19NsAName/mth6NsAName ()I cls19NsAName/mth6NsBName ()I +MD: cls19NsAName/mth7NsAName ()I cls19NsAName/mth7NsBName ()I +MD: cls19NsAName/mth9NsAName ()I cls19NsAName/mth9NsAName ()I +MD: cls19NsAName/mth10NsAName ()I cls19NsAName/mth10NsBName ()I +MD: cls19NsAName/mth11NsAName ()I cls19NsAName/mth11NsAName ()I +MD: cls19NsAName/mth12NsAName ()I cls19NsAName/mth12NsAName ()I diff --git a/src/test/resources/filtering/unfiltered/tiny.tiny b/src/test/resources/filtering/unfiltered/tiny.tiny new file mode 100644 index 00000000..345a3793 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/tiny.tiny @@ -0,0 +1,27 @@ +v1 nsA nsB nsC +CLASS cls0NsAName cls0NsBName cls0NsCName +CLASS cls1NsAName cls1NsBName +CLASS cls2NsAName cls2NsCName +CLASS cls3NsAName cls3NsAName cls3NsCName +CLASS cls4NsAName cls4NsBName cls4NsAName +CLASS cls5NsAName cls5NsAName cls5NsAName +CLASS cls6NsAName cls6NsAName +CLASS cls7NsAName cls7NsAName +FIELD cls14NsAName I fld1NsAName fld1NsAName +METHOD cls15NsAName ()I mth3NsAName mth3NsAName +FIELD cls18NsAName I fld2NsAName fld2NsBName fld2NsCName +FIELD cls18NsAName I fld3NsAName fld3NsBName +FIELD cls18NsAName I fld4NsAName fld4NsCName +FIELD cls18NsAName I fld5NsAName fld5NsAName fld5NsCName +FIELD cls18NsAName I fld6NsAName fld6NsBName fld6NsAName +FIELD cls18NsAName I fld7NsAName fld7NsAName fld7NsAName +FIELD cls18NsAName I fld8NsAName fld8NsAName +FIELD cls18NsAName I fld9NsAName fld9NsAName +METHOD cls19NsAName ()I mth6NsAName mth6NsBName mth6NsCName +METHOD cls19NsAName ()I mth7NsAName mth7NsBName +METHOD cls19NsAName ()I mth8NsAName mth8NsCName +METHOD cls19NsAName ()I mth9NsAName mth9NsAName mth9NsCName +METHOD cls19NsAName ()I mth10NsAName mth10NsBName mth10NsAName +METHOD cls19NsAName ()I mth11NsAName mth11NsAName mth11NsAName +METHOD cls19NsAName ()I mth12NsAName mth12NsAName +METHOD cls19NsAName ()I mth13NsAName mth13NsAName diff --git a/src/test/resources/filtering/unfiltered/tinyV2.tiny b/src/test/resources/filtering/unfiltered/tinyV2.tiny new file mode 100644 index 00000000..7cd09ba9 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/tinyV2.tiny @@ -0,0 +1,82 @@ +tiny 2 0 nsA nsB nsC +c cls0NsAName cls0NsBName cls0NsCName +c cls1NsAName cls1NsBName +c cls2NsAName cls2NsCName +c cls3NsAName cls3NsAName cls3NsCName +c cls4NsAName cls4NsBName cls4NsAName +c cls5NsAName cls5NsAName cls5NsAName +c cls6NsAName cls6NsAName +c cls7NsAName cls7NsAName +c cls8NsAName +c cls9NsAName + c cls9Comment +c cls10NsAName + f I fld0NsAName +c cls11NsAName + m ()I mth0NsAName +c cls12NsAName + m ()I mth1NsAName + p 0 arg0NsAName +c cls13NsAName + m ()I mth2NsAName + v 0 0 0 var0NsAName +c cls14NsAName + f I fld1NsAName fld1NsAName +c cls15NsAName + m ()I mth3NsAName mth3NsAName +c cls16NsAName + m ()I mth4NsAName + p 1 arg1NsAName arg1NsAName +c cls17NsAName + m ()I mth5NsAName + v 1 1 1 var1NsAName var1NsAName +c cls18NsAName + f I fld2NsAName fld2NsBName fld2NsCName + f I fld3NsAName fld3NsBName + f I fld4NsAName fld4NsCName + f I fld5NsAName fld5NsAName fld5NsCName + f I fld6NsAName fld6NsBName fld6NsAName + f I fld7NsAName fld7NsAName fld7NsAName + f I fld8NsAName fld8NsAName + f I fld9NsAName fld9NsAName + f I fld10NsAName + f I fld11NsAName + c fld11Comment +c cls19NsAName + m ()I mth6NsAName mth6NsBName mth6NsCName + m ()I mth7NsAName mth7NsBName + m ()I mth8NsAName mth8NsCName + m ()I mth9NsAName mth9NsAName mth9NsCName + m ()I mth10NsAName mth10NsBName mth10NsAName + m ()I mth11NsAName mth11NsAName mth11NsAName + m ()I mth12NsAName mth12NsAName + m ()I mth13NsAName mth13NsAName + m ()I mth14NsAName + m ()I mth15NsAName + c mth15Comment +c cls20NsAName + m ()I mth16NsAName + p 2 arg2NsAName arg2NsBName arg2NsCName + p 3 arg3NsAName arg3NsBName + p 4 arg4NsAName arg4NsCName + p 5 arg5NsAName arg5NsAName arg5NsCName + p 6 arg6NsAName arg6NsBName arg6NsAName + p 7 arg7NsAName arg7NsAName arg7NsAName + p 8 arg8NsAName arg8NsAName + p 9 arg9NsAName arg9NsAName + p 10 arg10NsAName + p 11 arg11NsAName + c arg11Comment +c cls21NsAName + m ()I mth17NsAName + v 2 2 2 var2NsAName var2NsBName var2NsCName + v 3 3 3 var3NsAName var3NsBName + v 4 4 4 var4NsAName var4NsCName + v 5 5 5 var5NsAName var5NsAName var5NsCName + v 6 6 6 var6NsAName var6NsBName var6NsAName + v 7 7 7 var7NsAName var7NsAName var7NsAName + v 8 8 8 var8NsAName var8NsAName + v 9 9 9 var9NsAName var9NsAName + v 10 10 10 var10NsAName + v 11 11 11 var11NsAName + c var11Comment diff --git a/src/test/resources/filtering/unfiltered/tsrg.tsrg b/src/test/resources/filtering/unfiltered/tsrg.tsrg new file mode 100644 index 00000000..b72dc993 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/tsrg.tsrg @@ -0,0 +1,24 @@ +cls0NsAName cls0NsBName +cls1NsAName cls1NsBName +cls3NsAName cls3NsAName +cls4NsAName cls4NsBName +cls5NsAName cls5NsAName +cls6NsAName cls6NsAName +cls14NsAName cls14NsAName + fld1NsAName fld1NsAName +cls15NsAName cls15NsAName + mth3NsAName ()I mth3NsAName +cls18NsAName cls18NsAName + fld2NsAName fld2NsBName + fld3NsAName fld3NsBName + fld5NsAName fld5NsAName + fld6NsAName fld6NsBName + fld7NsAName fld7NsAName + fld8NsAName fld8NsAName +cls19NsAName cls19NsAName + mth6NsAName ()I mth6NsBName + mth7NsAName ()I mth7NsBName + mth9NsAName ()I mth9NsAName + mth10NsAName ()I mth10NsBName + mth11NsAName ()I mth11NsAName + mth12NsAName ()I mth12NsAName diff --git a/src/test/resources/filtering/unfiltered/tsrgV2.tsrg b/src/test/resources/filtering/unfiltered/tsrgV2.tsrg new file mode 100644 index 00000000..b9ef4950 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/tsrgV2.tsrg @@ -0,0 +1,44 @@ +tsrg2 nsA nsB nsC +cls0NsAName cls0NsBName cls0NsCName +cls1NsAName cls1NsBName cls1NsAName +cls2NsAName cls2NsAName cls2NsCName +cls3NsAName cls3NsAName cls3NsCName +cls4NsAName cls4NsBName cls4NsAName +cls5NsAName cls5NsAName cls5NsAName +cls6NsAName cls6NsAName cls6NsAName +cls7NsAName cls7NsAName cls7NsAName +cls14NsAName cls14NsAName cls14NsAName + fld1NsAName I fld1NsAName fld1NsAName +cls15NsAName cls15NsAName cls15NsAName + mth3NsAName ()I mth3NsAName mth3NsAName +cls16NsAName cls16NsAName cls16NsAName + mth4NsAName ()I mth4NsAName mth4NsAName + 1 arg1NsAName arg1NsAName arg1NsAName +cls18NsAName cls18NsAName cls18NsAName + fld2NsAName I fld2NsBName fld2NsCName + fld3NsAName I fld3NsBName fld3NsAName + fld4NsAName I fld4NsAName fld4NsCName + fld5NsAName I fld5NsAName fld5NsCName + fld6NsAName I fld6NsBName fld6NsAName + fld7NsAName I fld7NsAName fld7NsAName + fld8NsAName I fld8NsAName fld8NsAName + fld9NsAName I fld9NsAName fld9NsAName +cls19NsAName cls19NsAName cls19NsAName + mth6NsAName ()I mth6NsBName mth6NsCName + mth7NsAName ()I mth7NsBName mth7NsAName + mth8NsAName ()I mth8NsAName mth8NsCName + mth9NsAName ()I mth9NsAName mth9NsCName + mth10NsAName ()I mth10NsBName mth10NsAName + mth11NsAName ()I mth11NsAName mth11NsAName + mth12NsAName ()I mth12NsAName mth12NsAName + mth13NsAName ()I mth13NsAName mth13NsAName +cls20NsAName cls20NsAName cls20NsAName + mth16NsAName ()I mth16NsAName mth16NsAName + 2 arg2NsAName arg2NsBName arg2NsCName + 3 arg3NsAName arg3NsBName arg3NsAName + 4 arg4NsAName arg4NsAName arg4NsCName + 5 arg5NsAName arg5NsAName arg5NsCName + 6 arg6NsAName arg6NsBName arg6NsAName + 7 arg7NsAName arg7NsAName arg7NsAName + 8 arg8NsAName arg8NsAName arg8NsAName + 9 arg9NsAName arg9NsAName arg9NsAName diff --git a/src/test/resources/filtering/unfiltered/xsrg.xsrg b/src/test/resources/filtering/unfiltered/xsrg.xsrg new file mode 100644 index 00000000..76c838c1 --- /dev/null +++ b/src/test/resources/filtering/unfiltered/xsrg.xsrg @@ -0,0 +1,20 @@ +CL: cls0NsAName cls0NsBName +CL: cls1NsAName cls1NsBName +CL: cls3NsAName cls3NsAName +CL: cls4NsAName cls4NsBName +CL: cls5NsAName cls5NsAName +CL: cls6NsAName cls6NsAName +FD: cls14NsAName/fld1NsAName I cls14NsAName/fld1NsAName I +MD: cls15NsAName/mth3NsAName ()I cls15NsAName/mth3NsAName ()I +FD: cls18NsAName/fld2NsAName I cls18NsAName/fld2NsBName I +FD: cls18NsAName/fld3NsAName I cls18NsAName/fld3NsBName I +FD: cls18NsAName/fld5NsAName I cls18NsAName/fld5NsAName I +FD: cls18NsAName/fld6NsAName I cls18NsAName/fld6NsBName I +FD: cls18NsAName/fld7NsAName I cls18NsAName/fld7NsAName I +FD: cls18NsAName/fld8NsAName I cls18NsAName/fld8NsAName I +MD: cls19NsAName/mth6NsAName ()I cls19NsAName/mth6NsBName ()I +MD: cls19NsAName/mth7NsAName ()I cls19NsAName/mth7NsBName ()I +MD: cls19NsAName/mth9NsAName ()I cls19NsAName/mth9NsAName ()I +MD: cls19NsAName/mth10NsAName ()I cls19NsAName/mth10NsBName ()I +MD: cls19NsAName/mth11NsAName ()I cls19NsAName/mth11NsAName ()I +MD: cls19NsAName/mth12NsAName ()I cls19NsAName/mth12NsAName ()I