From f90405329ef2db5b541beba90e9a7ba2b3ba3aac Mon Sep 17 00:00:00 2001 From: Ashley <73482956+ascopes@users.noreply.github.com> Date: Sun, 23 Oct 2022 12:06:06 +0100 Subject: [PATCH 1/2] Make AbstractCompilerProvider part of the public API --- .../jct/junit/AbstractCompilersProvider.java | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java b/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java index c521a5c1e..264f60c52 100644 --- a/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java +++ b/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java @@ -27,35 +27,46 @@ import org.junit.jupiter.params.provider.ArgumentsProvider; /** - * Internal base for defining a compiler-supplying arguments provider for Junit Jupiter + * Base for defining a compiler-supplying arguments provider for Junit Jupiter * parameterised test support. * * @author Ashley Scopes * @since 0.0.1 */ -@API(since = "0.0.1", status = Status.INTERNAL) -abstract class AbstractCompilersProvider implements ArgumentsProvider { +@API(since = "0.0.1", status = Status.EXPERIMENTAL) +public abstract class AbstractCompilersProvider implements ArgumentsProvider { private final IntFunction> compilerSupplier; private final int minCompilerVersionWithoutModules; private final int minCompilerVersionWithModules; private final int maxCompilerVersion; - // Configured values by JUnit. - private int minVersion; - private int maxVersion; + // Configured values by JUnit 5. + private volatile int minVersion; + private volatile int maxVersion; - AbstractCompilersProvider( - IntFunction> compilerSupplier, + /** + * Initialise this provider. + * + * @param compilerFactory a function taking a compiler version and returning the + * corresponding compiler. + * @param minCompilerVersionWithoutModules the minimum version to allow when we don't + * require module support. + * @param minCompilerVersionWithModules the minimum version to allow when we require + * module support. + * @param maxCompilerVersion the maximum version of the compiler to support. + */ + protected AbstractCompilersProvider( + IntFunction> compilerFactory, int minCompilerVersionWithoutModules, int minCompilerVersionWithModules, int maxCompilerVersion ) { - this.compilerSupplier = compilerSupplier; + this.compilerFactory = compilerFactory; this.minCompilerVersionWithoutModules = minCompilerVersionWithoutModules; this.minCompilerVersionWithModules = minCompilerVersionWithModules; this.maxCompilerVersion = maxCompilerVersion; - minVersion = Integer.MIN_VALUE; + minVersion = 0; maxVersion = Integer.MAX_VALUE; } @@ -63,14 +74,14 @@ abstract class AbstractCompilersProvider implements ArgumentsProvider { public Stream provideArguments(ExtensionContext context) { return IntStream .rangeClosed(minVersion, maxVersion) - .mapToObj(compilerSupplier) + .mapToObj(compilerFactory) .map(Arguments::of); } @Override public String toString() { return new ToStringBuilder(this) - .attribute("compilerSupplier", compilerSupplier) + .attribute("compilerFactory", compilerFactory) .attribute("minCompilerVersionWithoutModules", minCompilerVersionWithoutModules) .attribute("minCompilerVersionWithModules", minCompilerVersionWithModules) .attribute("maxCompilerVersion", maxCompilerVersion) @@ -79,7 +90,14 @@ public String toString() { .toString(); } - final void configure(int min, int max, boolean modules) { + /** + * Configure this provider with parameters from annotations. + * + * @param min the inclusive minimum compiler version to use. + * @param max the inclusive maximum compiler version to use. + * @param modules whether the compiler version must support modules. + */ + protected final void configure(int min, int max, boolean modules) { min = Math.max(min, modules ? minCompilerVersionWithModules : minCompilerVersionWithoutModules); max = Math.min(max, maxCompilerVersion); From 0e3e17ec305263dcb51e59e2e8af17bb776fcb8f Mon Sep 17 00:00:00 2001 From: Ashley <73482956+ascopes@users.noreply.github.com> Date: Sun, 23 Oct 2022 12:24:59 +0100 Subject: [PATCH 2/2] Update AbstractCompilersProvider.java --- .../io/github/ascopes/jct/junit/AbstractCompilersProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java b/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java index 264f60c52..24af90b82 100644 --- a/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java +++ b/java-compiler-testing/src/main/java/io/github/ascopes/jct/junit/AbstractCompilersProvider.java @@ -36,7 +36,7 @@ @API(since = "0.0.1", status = Status.EXPERIMENTAL) public abstract class AbstractCompilersProvider implements ArgumentsProvider { - private final IntFunction> compilerSupplier; + private final IntFunction> compilerFactory; private final int minCompilerVersionWithoutModules; private final int minCompilerVersionWithModules; private final int maxCompilerVersion;