diff --git a/CHANGELOG.md b/CHANGELOG.md index e2524cab..14e71b8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +- Added a simplified `MappingNsCompleter` constructor for completing all destination names with the source names - Made `OuterClassNamePropagator` configurable - Made Enigma writer always output destination names if visited explicitly, establishing consistency across all writers -- Added a simplified `MappingNsCompleter` constructor for completing all destination names with the source names - Adjusted format detection to only return ENIGMA_DIR for non-empty directories with at least one `.mapping` file +- Fixed writer NPEs when metadata or member source descriptors are null +- Fixed SRG writer omitting fields with missing source descriptors ## [0.7.1] - 2025-01-07 - Restored the ability to read source-namespace-only mapping files, even if not spec-compliant diff --git a/src/main/java/net/fabricmc/mappingio/MappingVisitor.java b/src/main/java/net/fabricmc/mappingio/MappingVisitor.java index 5b3389cd..7dd01e12 100644 --- a/src/main/java/net/fabricmc/mappingio/MappingVisitor.java +++ b/src/main/java/net/fabricmc/mappingio/MappingVisitor.java @@ -37,7 +37,7 @@ * * *

The elements with a skip-return (Header/Content/Class/Field/Method/Arg/Var/ElementContent) abort processing the - * remainder of their associated item in the above listing if requested by a {@code true} return value. For example + * remainder of their associated item in the above listing if requested by a {@code false} return value. For example * skipping in Class does neither DstName nor ElementContent, but continues with another class or End. * *

Returning {@code false} in End requests another complete visitation pass if the flag diff --git a/src/main/java/net/fabricmc/mappingio/format/enigma/EnigmaWriterBase.java b/src/main/java/net/fabricmc/mappingio/format/enigma/EnigmaWriterBase.java index 03c519a1..02713e40 100644 --- a/src/main/java/net/fabricmc/mappingio/format/enigma/EnigmaWriterBase.java +++ b/src/main/java/net/fabricmc/mappingio/format/enigma/EnigmaWriterBase.java @@ -59,6 +59,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + writeIndent(0); writer.write("FIELD "); writer.write(srcName); @@ -70,6 +74,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + writeIndent(0); writer.write("METHOD "); writer.write(srcName); diff --git a/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapConstants.java b/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapConstants.java index b9da53eb..b9989b63 100644 --- a/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapConstants.java +++ b/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapConstants.java @@ -25,4 +25,5 @@ private MigrationMapConstants() { public static final String ORDER_KEY = "migrationmap:order"; public static final String MISSING_NAME = "Unnamed migration map"; + public static final String DEFAULT_ORDER = "0"; } diff --git a/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapFileWriter.java index 45ed47ae..95c9b5e2 100644 --- a/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/intellij/MigrationMapFileWriter.java @@ -55,7 +55,7 @@ public void close() throws IOException { if (!wroteOrder) { xmlWriter.writeCharacters("\n\t"); xmlWriter.writeEmptyElement("order"); - xmlWriter.writeAttribute("value", "0"); + xmlWriter.writeAttribute("value", MigrationMapConstants.DEFAULT_ORDER); } xmlWriter.writeCharacters("\n"); @@ -101,9 +101,11 @@ public void visitMetadata(String key, @Nullable String value) throws IOException try { switch (key) { case "name": + if (value == null) return; wroteName = true; break; case MigrationMapConstants.ORDER_KEY: + if (value == null) return; wroteOrder = true; key = "order"; break; @@ -111,7 +113,10 @@ public void visitMetadata(String key, @Nullable String value) throws IOException xmlWriter.writeCharacters("\n\t"); xmlWriter.writeEmptyElement(key); - xmlWriter.writeAttribute("value", value); + + if (value != null) { + xmlWriter.writeAttribute("value", value); + } } catch (XMLStreamException e) { throw new IOException(e); } diff --git a/src/main/java/net/fabricmc/mappingio/format/jobf/JobfFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/jobf/JobfFileWriter.java index 15da0320..39af0dbe 100644 --- a/src/main/java/net/fabricmc/mappingio/format/jobf/JobfFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/jobf/JobfFileWriter.java @@ -61,6 +61,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; dstName = null; @@ -70,6 +74,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; dstName = null; @@ -114,7 +122,6 @@ public boolean visitElementContent(MappedElementKind targetKind) throws IOExcept write("c "); } else if ((isField = targetKind == MappedElementKind.FIELD) || targetKind == MappedElementKind.METHOD) { - if (memberSrcDesc == null) return false; write(isField ? "f " : "m "); } else { throw new IllegalStateException("unexpected invocation for "+targetKind); diff --git a/src/main/java/net/fabricmc/mappingio/format/proguard/ProGuardFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/proguard/ProGuardFileWriter.java index cd771bcc..81113987 100644 --- a/src/main/java/net/fabricmc/mappingio/format/proguard/ProGuardFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/proguard/ProGuardFileWriter.java @@ -110,6 +110,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; @@ -118,6 +122,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; diff --git a/src/main/java/net/fabricmc/mappingio/format/simple/RecafSimpleFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/simple/RecafSimpleFileWriter.java index 47e16586..574c7cae 100644 --- a/src/main/java/net/fabricmc/mappingio/format/simple/RecafSimpleFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/simple/RecafSimpleFileWriter.java @@ -66,6 +66,10 @@ public boolean visitField(String srcName, String srcDesc) throws IOException { @Override public boolean visitMethod(String srcName, String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; diff --git a/src/main/java/net/fabricmc/mappingio/format/srg/CsrgFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/srg/CsrgFileWriter.java index 7bd17a82..50ceedbb 100644 --- a/src/main/java/net/fabricmc/mappingio/format/srg/CsrgFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/srg/CsrgFileWriter.java @@ -68,6 +68,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; methodSrcDesc = srcDesc; diff --git a/src/main/java/net/fabricmc/mappingio/format/srg/JamFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/srg/JamFileWriter.java index f39bac3d..d7822a74 100644 --- a/src/main/java/net/fabricmc/mappingio/format/srg/JamFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/srg/JamFileWriter.java @@ -61,6 +61,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; memberDstName = null; diff --git a/src/main/java/net/fabricmc/mappingio/format/srg/SrgFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/srg/SrgFileWriter.java index 377d3876..84251990 100644 --- a/src/main/java/net/fabricmc/mappingio/format/srg/SrgFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/srg/SrgFileWriter.java @@ -63,6 +63,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (xsrg && srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; memberDstName = null; @@ -73,6 +77,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; memberDstName = null; @@ -123,11 +131,11 @@ public boolean visitElementContent(MappedElementKind targetKind) throws IOExcept write("CL: "); break; case FIELD: - if (memberSrcDesc == null || memberDstName == null || (xsrg && memberDstDesc == null)) return false; + if (memberDstName == null || xsrg && memberDstDesc == null) return false; write("FD: "); break; case METHOD: - if (memberSrcDesc == null || memberDstName == null || memberDstDesc == null) return false; + if (memberDstName == null || memberDstDesc == null) return false; write("MD: "); break; default: diff --git a/src/main/java/net/fabricmc/mappingio/format/srg/TsrgFileWriter.java b/src/main/java/net/fabricmc/mappingio/format/srg/TsrgFileWriter.java index 5acd1884..1536914b 100644 --- a/src/main/java/net/fabricmc/mappingio/format/srg/TsrgFileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/srg/TsrgFileWriter.java @@ -91,6 +91,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; hasAnyDstNames = false; @@ -183,7 +187,7 @@ public boolean visitElementContent(MappedElementKind targetKind) throws IOExcept write(srcName); if (targetKind == MappedElementKind.METHOD - || (targetKind == MappedElementKind.FIELD && tsrg2)) { + || (targetKind == MappedElementKind.FIELD && tsrg2 && memberSrcDesc != null)) { writeSpace(); write(memberSrcDesc); } diff --git a/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny1FileWriter.java b/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny1FileWriter.java index 511afaa2..167e730e 100644 --- a/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny1FileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny1FileWriter.java @@ -100,6 +100,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; @@ -108,6 +112,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + memberSrcName = srcName; memberSrcDesc = srcDesc; diff --git a/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny2FileWriter.java b/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny2FileWriter.java index 2931845c..cf4d0777 100644 --- a/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny2FileWriter.java +++ b/src/main/java/net/fabricmc/mappingio/format/tiny/Tiny2FileWriter.java @@ -108,6 +108,10 @@ public boolean visitClass(String srcName) throws IOException { @Override public boolean visitField(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + write("\tf\t"); writeName(srcDesc); writeTab(); @@ -118,6 +122,10 @@ public boolean visitField(String srcName, @Nullable String srcDesc) throws IOExc @Override public boolean visitMethod(String srcName, @Nullable String srcDesc) throws IOException { + if (srcDesc == null) { + return false; + } + write("\tm\t"); writeName(srcDesc); writeTab(); diff --git a/src/test/java/net/fabricmc/mappingio/test/NameGen.java b/src/test/java/net/fabricmc/mappingio/test/NameGen.java index 2772fd34..bcfa6ac4 100644 --- a/src/test/java/net/fabricmc/mappingio/test/NameGen.java +++ b/src/test/java/net/fabricmc/mappingio/test/NameGen.java @@ -253,8 +253,8 @@ private String getPrefix(MappedElementKind kind) { private static final String argPrefix = "param"; private static final String varPrefix = "var"; private static final String comment = "This is a comment"; - private static final List fldDescs = Collections.unmodifiableList(Arrays.asList("I", "Lcls;", "Lpkg/cls;", "[I")); - private static final List mthDescs = Collections.unmodifiableList(Arrays.asList("()I", "(I)V", "(Lcls;)Lcls;", "(ILcls;)Lpkg/cls;", "(Lcls;[I)[[B")); + private static final List fldDescs = Collections.unmodifiableList(Arrays.asList("I", "Lcls;", "Lpkg/cls;", "[I", null)); + private static final List mthDescs = Collections.unmodifiableList(Arrays.asList("()I", "(I)V", "(Lcls;)Lcls;", "(ILcls;)Lpkg/cls;", "(Lcls;[I)[[B", null)); private static final MappedElementKind clsKind = MappedElementKind.CLASS; private static final MappedElementKind fldKind = MappedElementKind.FIELD; private static final MappedElementKind mthKind = MappedElementKind.METHOD; diff --git a/src/test/java/net/fabricmc/mappingio/test/TestMappings.java b/src/test/java/net/fabricmc/mappingio/test/TestMappings.java index d15c1964..6060e9d3 100644 --- a/src/test/java/net/fabricmc/mappingio/test/TestMappings.java +++ b/src/test/java/net/fabricmc/mappingio/test/TestMappings.java @@ -55,7 +55,9 @@ public static T generateValid(T target) throws IOExce if (delegate.visitHeader()) { delegate.visitNamespaces(MappingUtil.NS_SOURCE_FALLBACK, Arrays.asList(MappingUtil.NS_TARGET_FALLBACK, MappingUtil.NS_TARGET_FALLBACK + "2")); delegate.visitMetadata("name", "valid"); - delegate.visitMetadata(MigrationMapConstants.ORDER_KEY, "0"); + delegate.visitMetadata(MigrationMapConstants.ORDER_KEY, MigrationMapConstants.DEFAULT_ORDER); + delegate.visitMetadata("property-with-empty-value", ""); + delegate.visitMetadata("property-with-null-value", null); } if (delegate.visitContent()) { diff --git a/src/test/java/net/fabricmc/mappingio/test/visitors/SubsetAssertingVisitor.java b/src/test/java/net/fabricmc/mappingio/test/visitors/SubsetAssertingVisitor.java index 77e0d412..e256e6fc 100644 --- a/src/test/java/net/fabricmc/mappingio/test/visitors/SubsetAssertingVisitor.java +++ b/src/test/java/net/fabricmc/mappingio/test/visitors/SubsetAssertingVisitor.java @@ -209,6 +209,7 @@ public boolean visitField(String srcClsName, String srcName, @Nullable String sr boolean subHasDstNames = subFeatures.fields().dstNames() != FeaturePresence.ABSENT; boolean supHasDstDescs = supFeatures.fields().dstDescs() != FeaturePresence.ABSENT; boolean subHasDstDescs = subFeatures.fields().dstDescs() != FeaturePresence.ABSENT; + boolean supRequiresSrcDescs = supFeatures.fields().srcDescs() == 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; @@ -217,8 +218,11 @@ public boolean visitField(String srcClsName, String srcName, @Nullable String sr if (supHasDstNames && subHasDstNames) subDstNames = supFeatures.hasNamespaces() || dstNames == null ? dstNames : new String[]{dstNames[subNsIfSupNotNamespaced]}; if (supHasDstDescs && subHasDstDescs) subDstDescs = supFeatures.hasNamespaces() || dstDescs == null ? dstDescs : new String[]{dstDescs[subNsIfSupNotNamespaced]}; - assertTrue(isEmpty(subDstNames) && isEmpty(subDstDescs), "Incoming field not contained in supTree: " + subFldId); - return true; + boolean noData = isEmpty(subDstNames) && isEmpty(subDstDescs); + boolean missingRequiredSrcDesc = supRequiresSrcDescs && srcDesc == null; + + assertTrue(noData || missingRequiredSrcDesc, "Incoming field not contained in supTree: " + subFldId); + return !missingRequiredSrcDesc; } String supFldId = srcClsName + "#" + srcName + ":" + supFld.getSrcDesc(); @@ -289,6 +293,7 @@ public boolean visitMethod(String srcClsName, String srcName, @Nullable String s boolean subHasDstNames = subFeatures.methods().dstNames() != FeaturePresence.ABSENT; boolean supHasDstDescs = supFeatures.methods().dstDescs() != FeaturePresence.ABSENT; boolean subHasDstDescs = subFeatures.methods().dstDescs() != FeaturePresence.ABSENT; + boolean supRequiresSrcDescs = supFeatures.methods().srcDescs() == 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; @@ -297,8 +302,11 @@ public boolean visitMethod(String srcClsName, String srcName, @Nullable String s if (supHasDstNames && subHasDstNames) subDstNames = supFeatures.hasNamespaces() || dstNames == null ? dstNames : new String[]{dstNames[subNsIfSupNotNamespaced]}; if (supHasDstDescs && subHasDstDescs) subDstDescs = supFeatures.hasNamespaces() || dstDescs == null ? dstDescs : new String[]{dstDescs[subNsIfSupNotNamespaced]}; - assertTrue(isEmpty(subDstNames) && isEmpty(subDstDescs), "Incoming method not contained in supTree: " + subMthId); - return true; + boolean noData = isEmpty(subDstNames) && isEmpty(subDstDescs); + boolean missingRequiredSrcDesc = supRequiresSrcDescs && srcDesc == null; + + assertTrue(noData || missingRequiredSrcDesc, "Incoming method not contained in supTree: " + subMthId); + return !missingRequiredSrcDesc; } String supMthId = srcClsName + "#" + srcName + supMth.getSrcDesc(); diff --git a/src/test/resources/reading/holes/enigma-dir/class_35.mapping b/src/test/resources/reading/holes/enigma-dir/class_35.mapping index b2242b1f..cd212bd7 100644 --- a/src/test/resources/reading/holes/enigma-dir/class_35.mapping +++ b/src/test/resources/reading/holes/enigma-dir/class_35.mapping @@ -4,9 +4,7 @@ CLASS class_35 FIELD field_3 Lpkg/cls; FIELD field_4 [I COMMENT This is a comment - FIELD field_5 field5Ns0Rename I - COMMENT This is a comment - FIELD field_6 Lcls; + FIELD field_6 I COMMENT This is a comment METHOD method_1 ()I METHOD method_2 method2Ns0Rename (I)V @@ -15,9 +13,7 @@ CLASS class_35 COMMENT This is a comment METHOD method_5 method5Ns0Rename (Lcls;[I)[[B COMMENT This is a comment - METHOD method_6 ()I - COMMENT This is a comment - METHOD method_7 (I)V + METHOD method_7 ()I ARG 1 ARG 3 ARG 5 param3Ns0Rename @@ -27,4 +23,4 @@ CLASS class_35 COMMENT This is a comment ARG 11 COMMENT This is a comment - METHOD method_8 (Lcls;)Lcls; + METHOD method_8 (I)V diff --git a/src/test/resources/reading/holes/enigma.mappings b/src/test/resources/reading/holes/enigma.mappings index fc9f15bc..0fef6da1 100644 --- a/src/test/resources/reading/holes/enigma.mappings +++ b/src/test/resources/reading/holes/enigma.mappings @@ -47,9 +47,7 @@ CLASS class_35 FIELD field_3 Lpkg/cls; FIELD field_4 [I COMMENT This is a comment - FIELD field_5 field5Ns0Rename I - COMMENT This is a comment - FIELD field_6 Lcls; + FIELD field_6 I COMMENT This is a comment METHOD method_1 ()I METHOD method_2 method2Ns0Rename (I)V @@ -58,9 +56,7 @@ CLASS class_35 COMMENT This is a comment METHOD method_5 method5Ns0Rename (Lcls;[I)[[B COMMENT This is a comment - METHOD method_6 ()I - COMMENT This is a comment - METHOD method_7 (I)V + METHOD method_7 ()I ARG 1 ARG 3 ARG 5 param3Ns0Rename @@ -70,4 +66,4 @@ CLASS class_35 COMMENT This is a comment ARG 11 COMMENT This is a comment - METHOD method_8 (Lcls;)Lcls; + METHOD method_8 (I)V diff --git a/src/test/resources/reading/holes/jam.jam b/src/test/resources/reading/holes/jam.jam index d881b271..8881f7dc 100644 --- a/src/test/resources/reading/holes/jam.jam +++ b/src/test/resources/reading/holes/jam.jam @@ -5,8 +5,7 @@ CL class_15$class_16 class_15$class16Ns0Rename CL package_20/class_20$class_21$class_22 package_20/class_20$class_21$class22Ns0Rename CL class_29$class_30$class_31 class_29$class_30$class31Ns0Rename FD class_35 field_2 Lcls; field2Ns0Rename -FD class_35 field_5 I field5Ns0Rename MD class_35 method_2 (I)V method2Ns0Rename MD class_35 method_5 (Lcls;[I)[[B method5Ns0Rename -MP class_35 method_7 (I)V 4 param3Ns0Rename -MP class_35 method_7 (I)V 8 param5Ns0Rename +MP class_35 method_7 ()I 4 param3Ns0Rename +MP class_35 method_7 ()I 8 param5Ns0Rename diff --git a/src/test/resources/reading/holes/jobf.jobf b/src/test/resources/reading/holes/jobf.jobf index 96672a11..b5e6978b 100644 --- a/src/test/resources/reading/holes/jobf.jobf +++ b/src/test/resources/reading/holes/jobf.jobf @@ -3,6 +3,5 @@ c class_15$class_16 = class_15$class16Ns0Rename c package_20.class_20$class_21$class_22 = class_20$class_21$class22Ns0Rename c class_29$class_30$class_31 = class_29$class_30$class31Ns0Rename f class_35.field_2:Lcls; = field2Ns0Rename -f class_35.field_5:I = field5Ns0Rename m class_35.method_2(I)V = method2Ns0Rename m class_35.method_5(Lcls;[I)[[B = method5Ns0Rename diff --git a/src/test/resources/reading/holes/proguard.txt b/src/test/resources/reading/holes/proguard.txt index af16b3e0..735f7d80 100644 --- a/src/test/resources/reading/holes/proguard.txt +++ b/src/test/resources/reading/holes/proguard.txt @@ -6,6 +6,5 @@ package_20.class_20$class_21$class_22 -> package_20.class_20$class_21$class22Ns0 class_29$class_30$class_31 -> class_29$class_30$class31Ns0Rename: class_35 -> class_35: cls field_2 -> field2Ns0Rename - int field_5 -> field5Ns0Rename void method_2(int) -> method2Ns0Rename byte[][] method_5(cls,int[]) -> method5Ns0Rename diff --git a/src/test/resources/reading/holes/recaf-simple.txt b/src/test/resources/reading/holes/recaf-simple.txt index 0749421e..65ad3497 100644 --- a/src/test/resources/reading/holes/recaf-simple.txt +++ b/src/test/resources/reading/holes/recaf-simple.txt @@ -5,6 +5,6 @@ class_15$class_16 class_15$class16Ns0Rename package_20/class_20$class_21$class_22 package_20/class_20$class_21$class22Ns0Rename class_29$class_30$class_31 class_29$class_30$class31Ns0Rename class_35.field_2 Lcls; field2Ns0Rename -class_35.field_5 I field5Ns0Rename +class_35.field_5 field5Ns0Rename class_35.method_2(I)V method2Ns0Rename class_35.method_5(Lcls;[I)[[B method5Ns0Rename diff --git a/src/test/resources/reading/holes/tiny.tiny b/src/test/resources/reading/holes/tiny.tiny index 021e79e1..0333567c 100644 --- a/src/test/resources/reading/holes/tiny.tiny +++ b/src/test/resources/reading/holes/tiny.tiny @@ -13,9 +13,7 @@ CLASS class_29$class_30$class_31 class_29$class_30$class31Ns0Rename CLASS package_32/class_32$class_33$class_34 package_32/class_32$class_33$class34Ns1Rename FIELD class_35 Lcls; field_2 field2Ns0Rename FIELD class_35 Lpkg/cls; field_3 field3Ns1Rename -FIELD class_35 I field_5 field5Ns0Rename -FIELD class_35 Lcls; field_6 field6Ns1Rename +FIELD class_35 I field_6 field6Ns1Rename METHOD class_35 (I)V method_2 method2Ns0Rename METHOD class_35 (Lcls;)Lcls; method_3 method3Ns1Rename METHOD class_35 (Lcls;[I)[[B method_5 method5Ns0Rename -METHOD class_35 ()I method_6 method6Ns1Rename diff --git a/src/test/resources/reading/holes/tinyV2.tiny b/src/test/resources/reading/holes/tinyV2.tiny index 417609ef..3467075b 100644 --- a/src/test/resources/reading/holes/tinyV2.tiny +++ b/src/test/resources/reading/holes/tinyV2.tiny @@ -35,9 +35,7 @@ c class_35 f Lpkg/cls; field_3 field3Ns1Rename f [I field_4 c This is a comment - f I field_5 field5Ns0Rename - c This is a comment - f Lcls; field_6 field6Ns1Rename + f I field_6 field6Ns1Rename c This is a comment m ()I method_1 m (I)V method_2 method2Ns0Rename @@ -46,9 +44,7 @@ c class_35 c This is a comment m (Lcls;[I)[[B method_5 method5Ns0Rename c This is a comment - m ()I method_6 method6Ns1Rename - c This is a comment - m (I)V method_7 + m ()I method_7 p 1 param_1 p 3 param_2 param2Ns1Rename p 5 param_3 param3Ns0Rename @@ -58,7 +54,7 @@ c class_35 c This is a comment p 11 param_6 param6Ns1Rename c This is a comment - m (Lcls;)Lcls; method_8 + m (I)V method_8 v 12 12 12 var_1 v 14 14 14 var_2 var2Ns1Rename v 16 16 16 var_3 var3Ns0Rename diff --git a/src/test/resources/reading/holes/tsrgV2.tsrg b/src/test/resources/reading/holes/tsrgV2.tsrg index a58476c5..1dbfb6e1 100644 --- a/src/test/resources/reading/holes/tsrgV2.tsrg +++ b/src/test/resources/reading/holes/tsrgV2.tsrg @@ -14,13 +14,12 @@ package_32/class_32$class_33$class_34 package_32/class_32$class_33$class_34 pack class_35 class_35 class_35 field_2 Lcls; field2Ns0Rename field_2 field_3 Lpkg/cls; field_3 field3Ns1Rename - field_5 I field5Ns0Rename field_5 - field_6 Lcls; field_6 field6Ns1Rename + field_5 field5Ns0Rename field_5 + field_6 I field_6 field6Ns1Rename method_2 (I)V method2Ns0Rename method_2 method_3 (Lcls;)Lcls; method_3 method3Ns1Rename method_5 (Lcls;[I)[[B method5Ns0Rename method_5 - method_6 ()I method_6 method6Ns1Rename - method_7 (I)V method_7 method_7 + method_7 ()I method_7 method_7 3 param_2 param_2 param2Ns1Rename 5 param_3 param3Ns0Rename param_3 9 param_5 param5Ns0Rename param_5 diff --git a/src/test/resources/reading/holes/xsrg.xsrg b/src/test/resources/reading/holes/xsrg.xsrg index 23979813..6e89784c 100644 --- a/src/test/resources/reading/holes/xsrg.xsrg +++ b/src/test/resources/reading/holes/xsrg.xsrg @@ -5,6 +5,5 @@ CL: class_15$class_16 class_15$class16Ns0Rename CL: package_20/class_20$class_21$class_22 package_20/class_20$class_21$class22Ns0Rename CL: class_29$class_30$class_31 class_29$class_30$class31Ns0Rename FD: class_35/field_2 Lcls; class_35/field2Ns0Rename Lcls; -FD: class_35/field_5 I class_35/field5Ns0Rename I MD: class_35/method_2 (I)V class_35/method2Ns0Rename (I)V MD: class_35/method_5 (Lcls;[I)[[B class_35/method5Ns0Rename (Lcls;[I)[[B diff --git a/src/test/resources/reading/repeated-elements/migration-map.xml b/src/test/resources/reading/repeated-elements/migration-map.xml index 2ad1c50f..7f1df594 100644 --- a/src/test/resources/reading/repeated-elements/migration-map.xml +++ b/src/test/resources/reading/repeated-elements/migration-map.xml @@ -2,6 +2,8 @@ + + diff --git a/src/test/resources/reading/repeated-elements/tinyV2.tiny b/src/test/resources/reading/repeated-elements/tinyV2.tiny index e9c4da31..3fc9b0e9 100644 --- a/src/test/resources/reading/repeated-elements/tinyV2.tiny +++ b/src/test/resources/reading/repeated-elements/tinyV2.tiny @@ -1,5 +1,7 @@ tiny 2 0 source target target2 name repeated-elements + property-with-empty-value + property-with-null-value c class_1 class1Ns0Rename0 class1Ns1Rename0 c class_1 class1Ns0Rename class1Ns1Rename f I field_1 field1Ns0Rename0 field1Ns1Rename0 diff --git a/src/test/resources/reading/valid/migration-map.xml b/src/test/resources/reading/valid/migration-map.xml index bd34806d..f330e955 100644 --- a/src/test/resources/reading/valid/migration-map.xml +++ b/src/test/resources/reading/valid/migration-map.xml @@ -2,6 +2,8 @@ + + diff --git a/src/test/resources/reading/valid/tinyV2.tiny b/src/test/resources/reading/valid/tinyV2.tiny index e2e99685..371d22e2 100644 --- a/src/test/resources/reading/valid/tinyV2.tiny +++ b/src/test/resources/reading/valid/tinyV2.tiny @@ -1,5 +1,7 @@ tiny 2 0 source target target2 name valid + property-with-empty-value + property-with-null-value c class_1 class1Ns0Rename class1Ns1Rename f I field_1 field1Ns0Rename field1Ns1Rename m ()I method_1 method1Ns0Rename method1Ns1Rename