Skip to content

Commit e2eb87d

Browse files
authored
Merge pull request #8715 from sdedic/gradle/config-cache-serialization
Avoid implicit reference to unserializable Project in (stored) arg provider
2 parents 8fd0563 + 53cbfd4 commit e2eb87d

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NetBeansRunSinglePlugin.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.netbeans.modules.gradle.tooling;
2121

2222
import static java.util.Arrays.asList;
23+
import java.util.List;
2324
import java.util.Set;
2425
import org.gradle.api.DefaultTask;
2526
import org.gradle.api.logging.Logger;
@@ -76,15 +77,8 @@ private void configureJavaExec(Project project, JavaExec je) {
7677
je.setArgs(asList(project.property(RUN_SINGLE_ARGS).toString().split(" ")));
7778
}
7879
if (project.hasProperty(RUN_SINGLE_JVM_ARGS)) {
79-
// Property jvmArgumentProviders should not be implemented as a lambda to allow execution optimizations.
80-
// See https://docs.gradle.org/current/userguide/validation_problems.html#implementation_unknown
81-
je.getJvmArgumentProviders().add(new CommandLineArgumentProvider() {
82-
// Do not convert to lambda.
83-
@Override
84-
public Iterable<String> asArguments() {
85-
return asList(project.property(RUN_SINGLE_JVM_ARGS).toString().split(" "));
86-
}
87-
});
80+
// do not use plain setter, as other Plugins may provide their own JVM flags + providers.
81+
je.getJvmArgumentProviders().add(new JvmArgumentsHolder(asList(project.property(RUN_SINGLE_JVM_ARGS).toString().split(" "))));
8882
}
8983
try {
9084
je.setStandardInput(System.in);
@@ -112,4 +106,22 @@ private void addTask(Project project, Task runTask) {
112106
runSingle.configure((task) -> task.doFirst((action) -> project.getLogger().warn(DEPRECATE_RUN_SINGLE)));
113107
}
114108

109+
/**
110+
* A simple holder to add JVM arguments on top of other args provide by other plugins.
111+
* DO NOT store Project or other resource-bound references here, keep static. It is attached to a task
112+
* as a provider and serialized/cached. See Micronaut Configuration
113+
* Cache requirements.
114+
*/
115+
private static class JvmArgumentsHolder implements CommandLineArgumentProvider {
116+
private final List<String> jvmArguments;
117+
118+
public JvmArgumentsHolder(List<String> jvmArguments) {
119+
this.jvmArguments = jvmArguments;
120+
}
121+
122+
@Override
123+
public Iterable<String> asArguments() {
124+
return jvmArguments;
125+
}
126+
}
115127
}

0 commit comments

Comments
 (0)