From c82972401aa9107ae8a0fffcd465452dc3775489 Mon Sep 17 00:00:00 2001 From: James Baker Date: Thu, 1 Sep 2022 15:53:53 +0100 Subject: [PATCH 1/3] Workaround to IDEA-301084 See https://github.com/JetBrains/intellij-community/pull/2135 for more details. Even if JetBrains takes this PR, it'll be months before it's common that all devs have a fixed version (it's common for devs to be a version or two behind) so it seems sensible to just workaround in baseline for hte next year or two. --- .../javaversions/BaselineJavaVersion.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java index 673ea397b..3bde4e14c 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java @@ -33,6 +33,7 @@ import org.gradle.api.tasks.JavaExec; import org.gradle.api.tasks.TaskAction; import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.compile.CompileOptions; import org.gradle.api.tasks.compile.GroovyCompile; import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.api.tasks.javadoc.Javadoc; @@ -96,10 +97,7 @@ private static void configureCompilationTasks( @Override public void execute(JavaCompile javaCompileTask) { javaCompileTask.getJavaCompiler().set(javaToolchain.flatMap(BaselineJavaToolchain::javaCompiler)); - javaCompileTask - .getOptions() - .getCompilerArgumentProviders() - .add(new EnablePreviewArgumentProvider(target)); + enablePreviewOnCompileTask(target, javaCompileTask.getOptions()); // Set sourceCompatibility to opt out of '-release', allowing opens/exports to be used. javaCompileTask.doFirst(new Action() { @@ -267,6 +265,16 @@ public final void checkJavaVersions() { } } + /** + * Further details available here. + */ + private static void enablePreviewOnCompileTask( + Provider provider, CompileOptions compileOptions) { + if (provider.get().enablePreview()) { + compileOptions.getCompilerArgs().add(EnablePreviewArgumentProvider.FLAG); + } + } + private static class EnablePreviewArgumentProvider implements CommandLineArgumentProvider { public static final String FLAG = "--enable-preview"; From ecc0a90e55d861e96c66eeb335cdcb594369c142 Mon Sep 17 00:00:00 2001 From: svc-changelog Date: Thu, 1 Sep 2022 14:59:07 +0000 Subject: [PATCH 2/3] Add generated changelog entries --- changelog/@unreleased/pr-2368.v2.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/@unreleased/pr-2368.v2.yml diff --git a/changelog/@unreleased/pr-2368.v2.yml b/changelog/@unreleased/pr-2368.v2.yml new file mode 100644 index 000000000..000795446 --- /dev/null +++ b/changelog/@unreleased/pr-2368.v2.yml @@ -0,0 +1,5 @@ +type: fix +fix: + description: Workaround to IDEA-301084 + links: + - https://github.com/palantir/gradle-baseline/pull/2368 From 8b66787b75f7baad5db7edbe2f5b1590b195f8ce Mon Sep 17 00:00:00 2001 From: James Baker Date: Thu, 1 Sep 2022 17:52:51 +0100 Subject: [PATCH 3/3] make clear that this is a hack --- .../plugins/javaversions/BaselineJavaVersion.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java index 3bde4e14c..96dd09ec8 100644 --- a/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java +++ b/gradle-baseline-java/src/main/groovy/com/palantir/baseline/plugins/javaversions/BaselineJavaVersion.java @@ -97,7 +97,11 @@ private static void configureCompilationTasks( @Override public void execute(JavaCompile javaCompileTask) { javaCompileTask.getJavaCompiler().set(javaToolchain.flatMap(BaselineJavaToolchain::javaCompiler)); - enablePreviewOnCompileTask(target, javaCompileTask.getOptions()); + javaCompileTask + .getOptions() + .getCompilerArgumentProviders() + .add(new EnablePreviewArgumentProvider(target)); + hackTryToMakePreviewFeaturesWorkInIntellij(target, javaCompileTask.getOptions()); // Set sourceCompatibility to opt out of '-release', allowing opens/exports to be used. javaCompileTask.doFirst(new Action() { @@ -267,8 +271,13 @@ public final void checkJavaVersions() { /** * Further details available here. + * This is not guaranteed to work - there's a race that depends on plugin application vs when the javaVersions + * closer is applied. However, based on the root project being configured before subprojects, this will likely + * catch practical occurrences. + * An artifact of this is that compile tasks will get _two_ --enable-preview flags set, although this is + * semantically meaningless. */ - private static void enablePreviewOnCompileTask( + private static void hackTryToMakePreviewFeaturesWorkInIntellij( Provider provider, CompileOptions compileOptions) { if (provider.get().enablePreview()) { compileOptions.getCompilerArgs().add(EnablePreviewArgumentProvider.FLAG);