Skip to content

Commit 62c1e37

Browse files
committed
Improve api version
1 parent 92d847e commit 62c1e37

File tree

8 files changed

+64
-51
lines changed

8 files changed

+64
-51
lines changed

build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import org.incendo.cloudbuildlogic.javadoclinks.JavadocLinksExtension
12
import org.incendo.cloudbuildlogic.jmp
23
import java.nio.file.Files
34
import kotlin.io.path.copyTo
@@ -95,6 +96,10 @@ dependencies {
9596
testDataNewTargets.implementationConfigurationName(mainForNewTargets.output)
9697
}
9798

99+
javadocLinks {
100+
override(startsWithAnyOf("org.ow2.asm:"), JavadocLinksExtension.LinkOverride.Simple("https://asm.ow2.io/javadoc"))
101+
}
102+
98103
abstract class FilterTestClasspath : DefaultTask() {
99104
@get:InputFiles
100105
abstract val old: ConfigurableFileCollection

src/main/java/io/papermc/asm/versioned/ApiVersion.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
import org.jetbrains.annotations.ApiStatus;
44

55
@ApiStatus.OverrideOnly
6-
public interface ApiVersion extends Comparable<ApiVersion> {
6+
public interface ApiVersion<I extends ApiVersion<I>> extends Comparable<I> {
77

8-
default boolean isNewerThan(final ApiVersion apiVersion) {
8+
default boolean isNewerThan(final I apiVersion) {
99
return this.compareTo(apiVersion) > 0;
1010
}
1111

12-
default boolean isOlderThan(final ApiVersion apiVersion) {
12+
default boolean isOlderThan(final I apiVersion) {
1313
return this.compareTo(apiVersion) < 0;
1414
}
1515

16-
default boolean isNewerThanOrSameAs(final ApiVersion apiVersion) {
16+
default boolean isNewerThanOrSameAs(final I apiVersion) {
1717
return this.compareTo(apiVersion) >= 0;
1818
}
1919

20-
default boolean isOlderThanOrSameAs(final ApiVersion apiVersion) {
20+
default boolean isOlderThanOrSameAs(final I apiVersion) {
2121
return this.compareTo(apiVersion) <= 0;
2222
}
2323
}

src/test/java/io/papermc/asm/ApiVersion.java

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.papermc.asm;
2+
3+
import java.util.List;
4+
5+
public final class ApiVersions {
6+
7+
public static final TestApiVersionImpl ONE = new TestApiVersionImpl(1);
8+
public static final TestApiVersionImpl TWO = new TestApiVersionImpl(2);
9+
public static final TestApiVersionImpl THREE = new TestApiVersionImpl(3);
10+
public static final TestApiVersionImpl FOUR = new TestApiVersionImpl(4);
11+
public static final List<TestApiVersionImpl> ALL_VERSIONS = List.of(ONE, TWO, THREE, FOUR);
12+
13+
private ApiVersions() {
14+
}
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.papermc.asm;
2+
3+
import org.checkerframework.checker.nullness.qual.NonNull;
4+
import org.checkerframework.framework.qual.DefaultQualifier;
5+
6+
@DefaultQualifier(NonNull.class)
7+
public record TestApiVersionImpl(int version) implements io.papermc.asm.versioned.ApiVersion<TestApiVersionImpl> {
8+
9+
@Override
10+
public int compareTo(final TestApiVersionImpl o) {
11+
return Integer.compare(this.version, o.version);
12+
}
13+
}

src/test/java/io/papermc/asm/rules/methods/MethodRewritesTest.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import data.methods.Methods;
44
import data.types.hierarchy.Entity;
55
import data.types.hierarchy.Player;
6-
import io.papermc.asm.ApiVersion;
6+
import io.papermc.asm.ApiVersions;
77
import io.papermc.asm.TransformerTest;
88
import io.papermc.asm.checks.TransformerCheck;
99
import io.papermc.asm.rules.RewriteRule;
@@ -50,16 +50,16 @@ void testVersionedSuperTypeParam() {
5050
builder.changeParamToSuper(
5151
String.class,
5252
VersionedMatcher.targetedMethodBuilder()
53-
.with(ApiVersion.ONE, method1)
54-
.with(ApiVersion.THREE, method3)
53+
.with(ApiVersions.ONE, method1)
54+
.with(ApiVersions.THREE, method3)
5555
.build()
5656
);
5757
});
5858

59-
final VersionedTester tester = new VersionedTester(factory, ApiVersion.ALL_VERSIONS);
59+
final VersionedTester tester = new VersionedTester(factory, ApiVersions.ALL_VERSIONS);
6060
tester.test(SuperTypeParamRewrite::oldParamType, Map.of(
61-
ApiVersion.ONE, ConstantDescs.CD_int,
62-
ApiVersion.THREE, ConstantDescs.CD_long
61+
ApiVersions.ONE, ConstantDescs.CD_int,
62+
ApiVersions.THREE, ConstantDescs.CD_long
6363
));
6464
}
6565

@@ -88,16 +88,16 @@ void testVersionedSubTypeReturn() {
8888
builder.changeReturnTypeToSub(
8989
String.class,
9090
VersionedMatcher.targetedMethodBuilder()
91-
.with(ApiVersion.ONE, method1)
92-
.with(ApiVersion.THREE, method3)
91+
.with(ApiVersions.ONE, method1)
92+
.with(ApiVersions.THREE, method3)
9393
.build()
9494
);
9595
});
9696

97-
final VersionedTester tester = new VersionedTester(factory, ApiVersion.ALL_VERSIONS);
97+
final VersionedTester tester = new VersionedTester(factory, ApiVersions.ALL_VERSIONS);
9898
tester.test(SubTypeReturnRewrite::oldReturnType, Map.of(
99-
ApiVersion.ONE, ConstantDescs.CD_int,
100-
ApiVersion.THREE, ConstantDescs.CD_long
99+
ApiVersions.ONE, ConstantDescs.CD_int,
100+
ApiVersions.THREE, ConstantDescs.CD_long
101101
));
102102
}
103103
}

src/test/java/io/papermc/asm/rules/rename/RenameRuleTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import data.types.rename.RenamedTestEnum;
44
import data.types.rename.TestAnnotation;
5-
import io.papermc.asm.ApiVersion;
5+
import io.papermc.asm.ApiVersions;
6+
import io.papermc.asm.TestApiVersionImpl;
67
import io.papermc.asm.TransformerTest;
78
import io.papermc.asm.checks.TransformerCheck;
89
import io.papermc.asm.versioned.MappedVersionRuleFactory;
@@ -45,15 +46,15 @@ void testRenamerRule(final TransformerCheck check) {
4546

4647
@Test
4748
void testVersionedRenamerRule() {
48-
final Map<ApiVersion, RenameRule> versions = new HashMap<>();
49-
versions.put(ApiVersion.ONE, RenameRule.builder()
49+
final Map<TestApiVersionImpl, RenameRule> versions = new HashMap<>();
50+
versions.put(ApiVersions.ONE, RenameRule.builder()
5051
.methodByClass(TestAnnotation.class, "single", methodDesc("()Ldata/types/rename/TestEnum;"), "value")
5152
.editEnum(TEST_ENUM, builder -> builder
5253
.rename("A", "ONE")
5354
)
5455
.build()
5556
);
56-
versions.put(ApiVersion.THREE, RenameRule.builder()
57+
versions.put(ApiVersions.THREE, RenameRule.builder()
5758
.methodByClass(TestAnnotation.class, "newValue", methodDesc("()Ldata/types/rename/TestEnum;"), "value")
5859
.annotationAttribute(TestAnnotation.class, "newValue", "value")
5960
.editEnum(TEST_ENUM, builder -> builder
@@ -64,8 +65,8 @@ void testVersionedRenamerRule() {
6465
);
6566

6667
final VersionedRuleFactory factory = MappedVersionRuleFactory.mergeable(new TreeMap<>(versions));
67-
final RenameRule ruleOne = (RenameRule) factory.createRule(ApiVersion.ONE);
68-
final RenameRule ruleTwo = (RenameRule) factory.createRule(ApiVersion.TWO);
68+
final RenameRule ruleOne = (RenameRule) factory.createRule(ApiVersions.ONE);
69+
final RenameRule ruleTwo = (RenameRule) factory.createRule(ApiVersions.TWO);
6970
assertEquals("value", annotationMethod("single").apply(ruleOne));
7071
assertEquals("value", annotationMethod("newValue").apply(ruleOne));
7172

src/test/java/io/papermc/asm/versioned/VersionedTester.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.papermc.asm.versioned;
22

3-
import io.papermc.asm.ApiVersion;
3+
import io.papermc.asm.TestApiVersionImpl;
44
import io.papermc.asm.rules.RewriteRule;
55
import java.util.Iterator;
66
import java.util.List;
@@ -14,23 +14,23 @@
1414
public class VersionedTester {
1515

1616
private final VersionedRuleFactory factory;
17-
private final List<ApiVersion> versions;
17+
private final List<TestApiVersionImpl> versions;
1818

19-
public VersionedTester(final VersionedRuleFactory factory, final List<ApiVersion> versions) {
19+
public VersionedTester(final VersionedRuleFactory factory, final List<TestApiVersionImpl> versions) {
2020
this.factory = factory;
2121
this.versions = versions;
2222
}
2323

2424
@SuppressWarnings("unchecked")
25-
public <R extends RewriteRule, C> void test(final Function<R, C> comparisonGetter, final Map<ApiVersion, C> expectedValues) {
26-
final Map<ApiVersion, C> sortedExpectedValues = new TreeMap<>(expectedValues);
25+
public <R extends RewriteRule, C> void test(final Function<R, C> comparisonGetter, final Map<TestApiVersionImpl, C> expectedValues) {
26+
final Map<TestApiVersionImpl, C> sortedExpectedValues = new TreeMap<>(expectedValues);
2727
if (sortedExpectedValues.size() + 1 > this.versions.size()) {
2828
throw new IllegalArgumentException("Expected values size does not match versions size");
2929
}
30-
final Iterator<Map.Entry<ApiVersion, C>> expectedEntryIter = sortedExpectedValues.entrySet().iterator();
31-
Map.Entry<ApiVersion, C> current = expectedEntryIter.next();
30+
final Iterator<Map.Entry<TestApiVersionImpl, C>> expectedEntryIter = sortedExpectedValues.entrySet().iterator();
31+
Map.Entry<TestApiVersionImpl, C> current = expectedEntryIter.next();
3232
for (int i = 0; i < this.versions.size() - 1; i++) {
33-
final ApiVersion version = this.versions.get(i);
33+
final TestApiVersionImpl version = this.versions.get(i);
3434
final R rule = (R) this.factory.createRule(version);
3535
if (version.isNewerThan(current.getKey())) {
3636
current = expectedEntryIter.next();

0 commit comments

Comments
 (0)