Skip to content

Commit 8f952a4

Browse files
committedMar 30, 2024··
only run modifications if the modifers don't match
1 parent e0b76de commit 8f952a4

File tree

5 files changed

+63
-6
lines changed

5 files changed

+63
-6
lines changed
 

‎src/main/java/io/papermc/restamp/RestampContextConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public Builder accessTransformers(@NotNull final Path accessTransformerPath, @No
120120
* @return this builder.
121121
*/
122122
@NotNull
123-
@Contract(value = "_,_ -> this", mutates = "this")
123+
@Contract(value = "_ -> this", mutates = "this")
124124
public Builder accessTransformSet(@NotNull final AccessTransformSet accessTransformSet) {
125125
this.accessTransformSet = AccessTransformSet.create();
126126
this.accessTransformSet.merge(accessTransformSet);

‎src/main/java/io/papermc/restamp/recipe/ClassATMutator.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ public J.ClassDeclaration visitClassDeclaration(@NotNull final J.ClassDeclaratio
5353
final AccessTransform accessTransform = transformerClass.get();
5454
if (accessTransform.isEmpty()) return classDeclaration;
5555

56-
transformerClass.replace(AccessTransform.EMPTY); // Mark as consumed
57-
5856
final ModifierTransformationResult transformationResult = modifierTransformer.transformModifiers(
5957
accessTransform,
6058
classDeclaration.getModifiers(),
6159
classDeclaration.getAnnotations().getKind().getPrefix()
6260
);
61+
if (transformationResult.newModifiers().equals(classDeclaration.getModifiers())) {
62+
return classDeclaration;
63+
}
64+
transformerClass.replace(AccessTransform.EMPTY); // Mark as consumed
6365

6466
return classDeclaration
6567
.withModifiers(transformationResult.newModifiers())

‎src/main/java/io/papermc/restamp/recipe/FieldATMutator.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public J.VariableDeclarations visitVariableDeclarations(@NotNull final J.Variabl
6060

6161
// Fetch access transformer to apply to specific field.
6262
final AccessTransform accessTransformToApply = variableDeclarations.getVariables().stream()
63-
.map(n -> transformerClass.replaceField(n.getSimpleName(), AccessTransform.EMPTY))
63+
.map(n -> transformerClass.getField(n.getSimpleName()))
6464
.filter(Objects::nonNull)
6565
.reduce(AccessTransform::merge)
6666
.orElse(AccessTransform.EMPTY);
@@ -72,6 +72,12 @@ public J.VariableDeclarations visitVariableDeclarations(@NotNull final J.Variabl
7272
variableDeclarations.getModifiers(),
7373
Optional.ofNullable(variableDeclarations.getTypeExpression()).map(J::getPrefix).orElse(Space.EMPTY)
7474
);
75+
76+
if (transformationResult.newModifiers().equals(variableDeclarations.getModifiers())) {
77+
return variableDeclarations;
78+
}
79+
variableDeclarations.getVariables().forEach(n -> transformerClass.replaceField(n.getSimpleName(), AccessTransform.EMPTY)); // Mark as consumed
80+
7581
final J.VariableDeclarations updated = variableDeclarations
7682
.withModifiers(transformationResult.newModifiers())
7783
.withTypeExpression(variableDeclarations.getTypeExpression().withPrefix(transformationResult.parentSpace()));

‎src/main/java/io/papermc/restamp/recipe/MethodATMutator.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ public J.MethodDeclaration visitMethodDeclaration(@NotNull final J.MethodDeclara
100100
returnType = VoidType.INSTANCE;
101101
}
102102

103-
final AccessTransform accessTransform = transformerClass.replaceMethod(new MethodSignature(
103+
final AccessTransform accessTransform = transformerClass.getMethod(new MethodSignature(
104104
atMethodName, new MethodDescriptor(parameterTypes, returnType)
105-
), AccessTransform.EMPTY);
105+
));
106106
if (accessTransform == null || accessTransform.isEmpty()) return methodDeclaration;
107107

108108
final TypeTree returnTypeExpression = methodDeclaration.getReturnTypeExpression();
@@ -112,6 +112,13 @@ atMethodName, new MethodDescriptor(parameterTypes, returnType)
112112
Optional.ofNullable(returnTypeExpression).map(J::getPrefix).orElse(methodDeclaration.getName().getPrefix())
113113
);
114114

115+
if (transformationResult.newModifiers().equals(methodDeclaration.getModifiers())) {
116+
return methodDeclaration;
117+
}
118+
transformerClass.replaceMethod(new MethodSignature(
119+
atMethodName, new MethodDescriptor(parameterTypes, returnType)
120+
), AccessTransform.EMPTY); // Mark as consumed
121+
115122
J.MethodDeclaration updated = methodDeclaration.withModifiers(transformationResult.newModifiers());
116123
if (returnTypeExpression != null) {
117124
updated = updated.withReturnTypeExpression(returnTypeExpression.withPrefix(transformationResult.parentSpace()));

‎src/test/java/io/papermc/restamp/at/ModifierTransformerTest.java

+42
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,63 @@
1010
import org.junit.jupiter.api.Assertions;
1111
import org.junit.jupiter.api.Test;
1212
import org.junit.jupiter.params.ParameterizedTest;
13+
import org.junit.jupiter.params.provider.Arguments;
1314
import org.junit.jupiter.params.provider.ArgumentsSource;
15+
import org.junit.jupiter.params.provider.MethodSource;
1416
import org.openrewrite.java.tree.J;
1517
import org.openrewrite.java.tree.Space;
1618
import org.openrewrite.java.tree.TextComment;
1719
import org.openrewrite.marker.Markers;
1820

1921
import java.util.ArrayList;
2022
import java.util.List;
23+
import java.util.stream.Stream;
2124

2225
import static io.papermc.restamp.RestampFunctionTestHelper.modifierFrom;
2326

2427
class ModifierTransformerTest {
2528

2629
private final ModifierTransformer transformer = new ModifierTransformer();
2730

31+
static Stream<Arguments> testSkipModifyTransformation() {
32+
return Stream.of(
33+
Arguments.of(
34+
AccessTransform.of(AccessChange.PUBLIC, ModifierChange.REMOVE),
35+
List.of(modifierFrom(Space.EMPTY, J.Modifier.Type.Public)),
36+
false
37+
),
38+
Arguments.of(
39+
AccessTransform.of(AccessChange.PACKAGE_PRIVATE, ModifierChange.ADD),
40+
List.of(modifierFrom(Space.EMPTY, J.Modifier.Type.Final)),
41+
false
42+
),
43+
Arguments.of(
44+
AccessTransform.of(AccessChange.PUBLIC),
45+
List.of(modifierFrom(Space.EMPTY, J.Modifier.Type.Private)),
46+
true
47+
),
48+
Arguments.of(
49+
AccessTransform.of(AccessChange.PUBLIC),
50+
List.of(modifierFrom(Space.EMPTY, J.Modifier.Type.Private), modifierFrom(Space.EMPTY, J.Modifier.Type.Final)),
51+
true
52+
),
53+
Arguments.of(
54+
AccessTransform.of(ModifierChange.REMOVE),
55+
List.of(modifierFrom(Space.EMPTY, J.Modifier.Type.Public), modifierFrom(Space.EMPTY, J.Modifier.Type.Final)),
56+
true
57+
)
58+
);
59+
}
60+
61+
@MethodSource()
62+
@ParameterizedTest
63+
public void testSkipModifyTransformation(@NotNull final AccessTransform transform,
64+
@NotNull final List<J.Modifier> modifiers,
65+
final boolean expected) {
66+
final ModifierTransformationResult result = this.transformer.transformModifiers(transform, modifiers, Space.EMPTY);
67+
Assertions.assertEquals(expected, !result.newModifiers().equals(modifiers));
68+
}
69+
2870
@ParameterizedTest
2971
@ArgumentsSource(RestampFunctionTestHelper.CartesianVisibilityArgumentProvider.class)
3072
public void testModifyVisibilityTransformation(@NotNull final AccessTransform current,

0 commit comments

Comments
 (0)
Please sign in to comment.