Skip to content

Commit e97e952

Browse files
authored
Merge pull request #7 from PatchworkMC/fix/various
Checked exceptions in access transformer remapping
2 parents 369996a + b18472b commit e97e952

File tree

9 files changed

+92
-25
lines changed

9 files changed

+92
-25
lines changed

src/main/java/net/patchworkmc/manifest/accesstransformer/AccessTransformerEntry.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.util.Objects;
44

55
import net.patchworkmc.manifest.accesstransformer.v2.ForgeAccessTransformer;
6+
import net.patchworkmc.manifest.accesstransformer.v2.exception.FatalRemappingException;
7+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
68
import net.patchworkmc.manifest.api.Remapper;
79

810
/**
@@ -30,18 +32,22 @@ public AccessTransformerEntry(String className, String memberName) {
3032
}
3133

3234
public AccessTransformerEntry remap(Remapper remapper) {
33-
String mappedMemberName;
34-
35-
if (this.isField) {
36-
mappedMemberName = remapper.remapFieldName(this.className, this.memberName, "");
37-
} else {
38-
mappedMemberName = remapper.remapMethodName(this.className, this.memberName, this.descriptor);
39-
this.descriptor = remapper.remapMemberDescription(descriptor);
35+
try {
36+
String mappedMemberName;
37+
38+
if (this.isField) {
39+
mappedMemberName = remapper.remapFieldName(this.className, this.memberName, "");
40+
} else {
41+
mappedMemberName = remapper.remapMethodName(this.className, this.memberName, this.descriptor);
42+
this.descriptor = remapper.remapMemberDescription(descriptor);
43+
}
44+
45+
this.className = remapper.remapClassName(this.className);
46+
this.memberName = mappedMemberName;
47+
return this;
48+
} catch (MissingMappingException ex) {
49+
throw new FatalRemappingException(ex);
4050
}
41-
42-
this.className = remapper.remapClassName(this.className);
43-
this.memberName = mappedMemberName;
44-
return this;
4551
}
4652

4753
public String getClassName() {

src/main/java/net/patchworkmc/manifest/accesstransformer/v2/ForgeAccessTransformer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import java.util.HashSet;
88
import java.util.List;
99
import java.util.Set;
10+
import java.util.function.Consumer;
1011

12+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
1113
import net.patchworkmc.manifest.accesstransformer.v2.flags.AccessLevel;
1214
import net.patchworkmc.manifest.accesstransformer.v2.flags.Finalization;
1315
import net.patchworkmc.manifest.api.Remapper;
@@ -27,11 +29,15 @@ public ForgeAccessTransformer(Set<TransformedClass> classes) {
2729
/**
2830
* Remaps everything in this AT representation, down to the fields and methods.
2931
*/
30-
public void remap(Remapper remapper) {
32+
public void remap(Remapper remapper, Consumer<MissingMappingException> errorLogger) {
3133
Set<TransformedClass> remappedClasses = new HashSet<>();
3234

3335
for (TransformedClass transformedClass : this.classes) {
34-
remappedClasses.add(transformedClass.remap(remapper));
36+
try {
37+
remappedClasses.add(transformedClass.remap(remapper, errorLogger));
38+
} catch (MissingMappingException ex) {
39+
errorLogger.accept(ex);
40+
}
3541
}
3642

3743
this.classes = remappedClasses;

src/main/java/net/patchworkmc/manifest/accesstransformer/v2/Transformed.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.patchworkmc.manifest.accesstransformer.v2;
22

3+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
34
import net.patchworkmc.manifest.accesstransformer.v2.flags.AccessLevel;
45
import net.patchworkmc.manifest.accesstransformer.v2.flags.Finalization;
56
import net.patchworkmc.manifest.api.Remapper;
@@ -15,7 +16,7 @@ public Transformed(String name, AccessLevel accessLevel, Finalization finalizati
1516
this.finalization = finalization;
1617
}
1718

18-
public abstract Transformed remap(Remapper remapper);
19+
public abstract Transformed remap(Remapper remapper) throws MissingMappingException;
1920

2021
public AccessLevel getAccessLevel() {
2122
return accessLevel;

src/main/java/net/patchworkmc/manifest/accesstransformer/v2/TransformedClass.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package net.patchworkmc.manifest.accesstransformer.v2;
22

3+
import java.util.ArrayList;
34
import java.util.Collections;
45
import java.util.HashSet;
56
import java.util.Set;
7+
import java.util.function.Consumer;
68

79
import javax.annotation.Nullable;
810

11+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
912
import net.patchworkmc.manifest.accesstransformer.v2.flags.AccessLevel;
1013
import net.patchworkmc.manifest.accesstransformer.v2.flags.Finalization;
1114
import net.patchworkmc.manifest.api.Remapper;
@@ -42,23 +45,48 @@ public Set<TransformedMethod> getMethods() {
4245
return Collections.unmodifiableSet(methods);
4346
}
4447

45-
@Override
46-
public TransformedClass remap(Remapper remapper) {
48+
public TransformedClass remap(Remapper remapper, Consumer<MissingMappingException> errorLogger) throws MissingMappingException {
4749
String remappedName = remapper.remapClassName(getName());
4850
Set<TransformedField> remappedFields = new HashSet<>();
4951
Set<TransformedMethod> remappedMethods = new HashSet<>();
5052

5153
for (TransformedField field : this.getFields()) {
52-
remappedFields.add(field.remap(remapper));
54+
try {
55+
remappedFields.add(field.remap(remapper));
56+
} catch (MissingMappingException ex) {
57+
errorLogger.accept(ex);
58+
}
5359
}
5460

5561
for (TransformedMethod method : getMethods()) {
56-
remappedMethods.add(method.remap(remapper));
62+
try {
63+
remappedMethods.add(method.remap(remapper));
64+
} catch (MissingMappingException ex) {
65+
errorLogger.accept(ex);
66+
}
5767
}
5868

5969
return new TransformedClass(remappedName, getFinalization(), getAccessLevel(), remappedFields, remappedMethods, fieldWildcard, methodWildcard);
6070
}
6171

72+
/**
73+
* @deprecated Use {@link TransformedClass#remap(Remapper, Consumer)} instead.
74+
*/
75+
@Override
76+
@Deprecated
77+
public TransformedClass remap(Remapper remapper) throws MissingMappingException {
78+
ArrayList<MissingMappingException> suppressedExceptions = new ArrayList<>();
79+
TransformedClass result = remap(remapper, suppressedExceptions::add);
80+
81+
if (!suppressedExceptions.isEmpty()) {
82+
MissingMappingException ex = new MissingMappingException("Failed to remap some members for class!");
83+
suppressedExceptions.forEach(ex::addSuppressed);
84+
throw ex;
85+
}
86+
87+
return result;
88+
}
89+
6290
@Nullable
6391
public TransformedWildcardMember getFieldWildcard() {
6492
return fieldWildcard;

src/main/java/net/patchworkmc/manifest/accesstransformer/v2/TransformedField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.patchworkmc.manifest.accesstransformer.v2;
22

3+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
34
import net.patchworkmc.manifest.accesstransformer.v2.flags.AccessLevel;
45
import net.patchworkmc.manifest.accesstransformer.v2.flags.Finalization;
56
import net.patchworkmc.manifest.api.Remapper;
@@ -10,7 +11,7 @@ public TransformedField(String owner, String name, AccessLevel accessLevel, Fina
1011
}
1112

1213
@Override
13-
public TransformedField remap(Remapper remapper) {
14+
public TransformedField remap(Remapper remapper) throws MissingMappingException {
1415
return new TransformedField(remapper.remapClassName(getOwner()), remapper.remapFieldName(getOwner(), getName()), getAccessLevel(), getFinalization());
1516
}
1617
}

src/main/java/net/patchworkmc/manifest/accesstransformer/v2/TransformedMethod.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.patchworkmc.manifest.accesstransformer.v2;
22

3+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
34
import net.patchworkmc.manifest.accesstransformer.v2.flags.AccessLevel;
45
import net.patchworkmc.manifest.accesstransformer.v2.flags.Finalization;
56
import net.patchworkmc.manifest.api.Remapper;
@@ -12,7 +13,7 @@ public TransformedMethod(String owner, String name, String descriptor, AccessLev
1213
}
1314

1415
@Override
15-
public TransformedMethod remap(Remapper remapper) {
16+
public TransformedMethod remap(Remapper remapper) throws MissingMappingException {
1617
return new TransformedMethod(remapper.remapClassName(getOwner()), remapper.remapMethodName(getOwner(), getName(), getDescriptor()),
1718
remapper.remapMemberDescription(getDescriptor()), getAccessLevel(), getFinalization());
1819
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.patchworkmc.manifest.accesstransformer.v2.exception;
2+
3+
public class FatalRemappingException extends RuntimeException {
4+
public FatalRemappingException(String message, Exception parent) {
5+
super(message, parent);
6+
}
7+
8+
public FatalRemappingException(Exception parent) {
9+
super(parent);
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.patchworkmc.manifest.accesstransformer.v2.exception;
2+
3+
public class MissingMappingException extends Exception {
4+
public MissingMappingException(String message) {
5+
super(message);
6+
}
7+
8+
public MissingMappingException(String message, Exception parent) {
9+
super(message, parent);
10+
}
11+
}
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package net.patchworkmc.manifest.api;
22

3+
import net.patchworkmc.manifest.accesstransformer.v2.exception.MissingMappingException;
4+
35
public interface Remapper {
4-
String remapMemberDescription(String descriptor);
6+
String remapMemberDescription(String descriptor) throws MissingMappingException;
57

6-
default String remapFieldName(String owner, String name) {
8+
default String remapFieldName(String owner, String name) throws MissingMappingException {
79
return remapFieldName(owner, name, "");
810
}
911

10-
String remapFieldName(String owner, String name, String descriptor);
12+
String remapFieldName(String owner, String name, String descriptor) throws MissingMappingException;
1113

12-
String remapMethodName(String owner, String name, String descriptor);
14+
String remapMethodName(String owner, String name, String descriptor) throws MissingMappingException;
1315

14-
String remapClassName(String name);
16+
String remapClassName(String name) throws MissingMappingException;
1517
}

0 commit comments

Comments
 (0)