18
18
19
19
import java .util .Arrays ;
20
20
import java .util .List ;
21
- import java .util .Optional ;
22
21
23
- import org .gradle .api .Action ;
24
22
import org .gradle .api .Plugin ;
25
23
import org .gradle .api .Project ;
24
+ import org .gradle .api .plugins .JavaPluginExtension ;
26
25
import org .gradle .api .tasks .compile .JavaCompile ;
27
26
import org .gradle .api .tasks .javadoc .Javadoc ;
28
27
import org .gradle .api .tasks .testing .Test ;
29
28
import org .gradle .jvm .toolchain .JavaLanguageVersion ;
30
- import org .gradle .jvm .toolchain .JavaToolchainService ;
31
29
import org .gradle .jvm .toolchain .JavaToolchainSpec ;
32
30
33
31
/**
@@ -44,19 +42,28 @@ public void apply(Project project) {
44
42
45
43
private void configureToolchain (Project project ) {
46
44
ToolchainExtension toolchain = project .getExtensions ().create ("toolchain" , ToolchainExtension .class , project );
47
- project .afterEvaluate ((evaluated ) -> {
48
- Optional <JavaLanguageVersion > toolchainVersion = toolchain .getToolchainVersion ();
49
- if (toolchainVersion .isPresent ()) {
50
- if (!toolchain .isJavaVersionSupported ()) {
51
- disableToolchainTasks (project );
52
- }
53
- else {
54
- configureJavaCompileToolchain (project , toolchain );
55
- configureJavadocToolchain (project , toolchain );
56
- configureTestToolchain (project , toolchain );
57
- }
58
- }
59
- });
45
+ JavaLanguageVersion toolchainVersion = toolchain .getJavaVersion ();
46
+ if (toolchainVersion != null ) {
47
+ project .afterEvaluate ((evaluated ) -> configure (evaluated , toolchain ));
48
+ }
49
+ }
50
+
51
+ private void configure (Project project , ToolchainExtension toolchain ) {
52
+ if (!isJavaVersionSupported (toolchain , toolchain .getJavaVersion ())) {
53
+ disableToolchainTasks (project );
54
+ }
55
+ else {
56
+ JavaToolchainSpec toolchainSpec = project .getExtensions ().getByType (JavaPluginExtension .class )
57
+ .getToolchain ();
58
+ toolchainSpec .getLanguageVersion ().set (toolchain .getJavaVersion ());
59
+ configureJavaCompileToolchain (project , toolchain );
60
+ configureTestToolchain (project , toolchain );
61
+ }
62
+ }
63
+
64
+ public boolean isJavaVersionSupported (ToolchainExtension toolchain , JavaLanguageVersion toolchainVersion ) {
65
+ return toolchain .getMaximumCompatibleJavaVersion ().map ((version ) -> version .canCompileOrRun (toolchainVersion ))
66
+ .getOrElse (true );
60
67
}
61
68
62
69
private void disableToolchainTasks (Project project ) {
@@ -67,50 +74,20 @@ private void disableToolchainTasks(Project project) {
67
74
68
75
private void configureJavaCompileToolchain (Project project , ToolchainExtension toolchain ) {
69
76
project .getTasks ().withType (JavaCompile .class , (compile ) -> {
70
- withOptionalJavaToolchain (toolchain ).ifPresent ((action ) -> {
71
- JavaToolchainService service = getJavaToolchainService (project );
72
- compile .getJavaCompiler ().set (service .compilerFor (action ));
73
- compile .getOptions ().setFork (true );
74
- // See https://github.com/gradle/gradle/issues/15538
75
- List <String > forkArgs = Arrays .asList ("--add-opens" ,
76
- "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED" );
77
- compile .getOptions ().getForkOptions ().getJvmArgs ().addAll (forkArgs );
78
- });
79
- });
80
- }
81
-
82
- private void configureJavadocToolchain (Project project , ToolchainExtension toolchain ) {
83
- project .getTasks ().withType (Javadoc .class , (javadoc ) -> {
84
- withOptionalJavaToolchain (toolchain ).ifPresent ((action ) -> {
85
- JavaToolchainService service = getJavaToolchainService (project );
86
- javadoc .getJavadocTool ().set (service .javadocToolFor (action ));
87
- });
77
+ compile .getOptions ().setFork (true );
78
+ // See https://github.com/gradle/gradle/issues/15538
79
+ List <String > forkArgs = Arrays .asList ("--add-opens" , "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED" );
80
+ compile .getOptions ().getForkOptions ().getJvmArgs ().addAll (forkArgs );
88
81
});
89
82
}
90
83
91
84
private void configureTestToolchain (Project project , ToolchainExtension toolchain ) {
92
85
project .getTasks ().withType (Test .class , (test ) -> {
93
- withOptionalJavaToolchain (toolchain ).ifPresent ((action ) -> {
94
- JavaToolchainService service = getJavaToolchainService (project );
95
- test .getJavaLauncher ().set (service .launcherFor (action ));
96
- // See https://github.com/spring-projects/spring-ldap/issues/570
97
- List <String > arguments = Arrays .asList ("--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED" ,
98
- "--illegal-access=warn" );
99
- test .jvmArgs (arguments );
100
- });
86
+ // See https://github.com/spring-projects/spring-ldap/issues/570
87
+ List <String > arguments = Arrays .asList ("--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED" ,
88
+ "--illegal-access=warn" );
89
+ test .jvmArgs (arguments );
101
90
});
102
91
}
103
92
104
- private JavaToolchainService getJavaToolchainService (Project project ) {
105
- return project .getExtensions ().getByType (JavaToolchainService .class );
106
- }
107
-
108
- private Optional <Action <JavaToolchainSpec >> withOptionalJavaToolchain (ToolchainExtension toolchain ) {
109
- return toolchain .getToolchainVersion ().map ((toolchainVersion ) -> {
110
- Action <JavaToolchainSpec > action = (javaToolchainSpec ) -> javaToolchainSpec .getLanguageVersion ()
111
- .convention (toolchainVersion );
112
- return Optional .of (action );
113
- }).orElse (Optional .empty ());
114
- }
115
-
116
93
}
0 commit comments