20
20
import org .gradle .api .model .ObjectFactory ;
21
21
import org .gradle .api .provider .Property ;
22
22
import org .gradle .api .provider .Provider ;
23
+ import org .gradle .api .provider .ProviderFactory ;
24
+ import org .gradle .api .provider .ValueSource ;
25
+ import org .gradle .api .provider .ValueSourceParameters ;
23
26
import org .gradle .api .tasks .TaskProvider ;
24
27
import org .gradle .jvm .toolchain .JavaLanguageVersion ;
25
28
import org .gradle .jvm .toolchain .JavaToolchainService ;
@@ -41,6 +44,7 @@ public class BwcSetupExtension {
41
44
private static final Version BUILD_TOOL_MINIMUM_VERSION = Version .fromString ("7.14.0" );
42
45
private final Project project ;
43
46
private final ObjectFactory objectFactory ;
47
+ private final ProviderFactory providerFactory ;
44
48
private final JavaToolchainService toolChainService ;
45
49
private final Provider <BwcVersions .UnreleasedVersionInfo > unreleasedVersionInfo ;
46
50
@@ -49,12 +53,14 @@ public class BwcSetupExtension {
49
53
public BwcSetupExtension (
50
54
Project project ,
51
55
ObjectFactory objectFactory ,
56
+ ProviderFactory providerFactory ,
52
57
JavaToolchainService toolChainService ,
53
58
Provider <BwcVersions .UnreleasedVersionInfo > unreleasedVersionInfo ,
54
59
Provider <File > checkoutDir
55
60
) {
56
61
this .project = project ;
57
62
this .objectFactory = objectFactory ;
63
+ this .providerFactory = providerFactory ;
58
64
this .toolChainService = toolChainService ;
59
65
this .unreleasedVersionInfo = unreleasedVersionInfo ;
60
66
this .checkoutDir = checkoutDir ;
@@ -65,11 +71,26 @@ TaskProvider<LoggedExec> bwcTask(String name, Action<LoggedExec> configuration)
65
71
}
66
72
67
73
TaskProvider <LoggedExec > bwcTask (String name , Action <LoggedExec > configuration , boolean useUniqueUserHome ) {
68
- return createRunBwcGradleTask (project , name , configuration , useUniqueUserHome );
74
+ return createRunBwcGradleTask (
75
+ project ,
76
+ checkoutDir ,
77
+ providerFactory ,
78
+ unreleasedVersionInfo ,
79
+ objectFactory ,
80
+ toolChainService ,
81
+ name ,
82
+ configuration ,
83
+ useUniqueUserHome
84
+ );
69
85
}
70
86
71
- private TaskProvider <LoggedExec > createRunBwcGradleTask (
87
+ private static TaskProvider <LoggedExec > createRunBwcGradleTask (
72
88
Project project ,
89
+ Provider <File > checkoutDir ,
90
+ ProviderFactory providerFactory ,
91
+ Provider <BwcVersions .UnreleasedVersionInfo > unreleasedVersionInfo ,
92
+ ObjectFactory objectFactory ,
93
+ JavaToolchainService toolChainService ,
73
94
String name ,
74
95
Action <LoggedExec > configAction ,
75
96
boolean useUniqueUserHome
@@ -78,10 +99,10 @@ private TaskProvider<LoggedExec> createRunBwcGradleTask(
78
99
loggedExec .dependsOn ("checkoutBwcBranch" );
79
100
loggedExec .getWorkingDir ().set (checkoutDir .get ());
80
101
81
- loggedExec .getEnvironment ().put ("JAVA_HOME" , unreleasedVersionInfo . zip ( checkoutDir , ( version , checkoutDir ) -> {
82
- String minimumCompilerVersion = readFromFile ( new File ( checkoutDir , minimumCompilerVersionPath ( version . version () )));
83
- return getJavaHome ( Integer . parseInt ( minimumCompilerVersion ) );
84
- }));
102
+ loggedExec .getNonTrackedEnvironment ().put ("JAVA_HOME" , providerFactory . of ( JavaHomeValueSource . class , spec -> {
103
+ spec . getParameters (). getVersion (). set ( unreleasedVersionInfo . map ( it -> it . version ()));
104
+ spec . getParameters (). getCheckoutDir (). set ( checkoutDir );
105
+ }). flatMap ( s -> getJavaHome ( objectFactory , toolChainService , Integer . parseInt ( s ))) );
85
106
86
107
if (BuildParams .isCi () && OS .current () != OS .WINDOWS ) {
87
108
// TODO: Disabled for now until we can figure out why files are getting corrupted
@@ -137,10 +158,13 @@ private TaskProvider<LoggedExec> createRunBwcGradleTask(
137
158
});
138
159
}
139
160
140
- private String minimumCompilerVersionPath (Version bwcVersion ) {
141
- return (bwcVersion .onOrAfter (BUILD_TOOL_MINIMUM_VERSION ))
142
- ? "build-tools-internal/" + MINIMUM_COMPILER_VERSION_PATH
143
- : "buildSrc/" + MINIMUM_COMPILER_VERSION_PATH ;
161
+ /** A convenience method for getting java home for a version of java and requiring that version for the given task to execute */
162
+ private static Provider <String > getJavaHome (ObjectFactory objectFactory , JavaToolchainService toolChainService , final int version ) {
163
+ Property <JavaLanguageVersion > value = objectFactory .property (JavaLanguageVersion .class ).value (JavaLanguageVersion .of (version ));
164
+ return toolChainService .launcherFor (javaToolchainSpec -> {
165
+ javaToolchainSpec .getLanguageVersion ().value (value );
166
+ javaToolchainSpec .getVendor ().set (JvmVendorSpec .ORACLE );
167
+ }).map (launcher -> launcher .getMetadata ().getInstallationPath ().getAsFile ().getAbsolutePath ());
144
168
}
145
169
146
170
private static String readFromFile (File file ) {
@@ -151,13 +175,25 @@ private static String readFromFile(File file) {
151
175
}
152
176
}
153
177
154
- /** A convenience method for getting java home for a version of java and requiring that version for the given task to execute */
155
- public String getJavaHome (final int version ) {
156
- Property <JavaLanguageVersion > value = objectFactory .property (JavaLanguageVersion .class ).value (JavaLanguageVersion .of (version ));
157
- return toolChainService .launcherFor (javaToolchainSpec -> {
158
- javaToolchainSpec .getLanguageVersion ().value (value );
159
- javaToolchainSpec .getVendor ().set (JvmVendorSpec .ORACLE );
160
- }).get ().getMetadata ().getInstallationPath ().getAsFile ().getAbsolutePath ();
161
- }
178
+ public static abstract class JavaHomeValueSource implements ValueSource <String , JavaHomeValueSource .Params > {
179
+
180
+ private String minimumCompilerVersionPath (Version bwcVersion ) {
181
+ return (bwcVersion .onOrAfter (BUILD_TOOL_MINIMUM_VERSION ))
182
+ ? "build-tools-internal/" + MINIMUM_COMPILER_VERSION_PATH
183
+ : "buildSrc/" + MINIMUM_COMPILER_VERSION_PATH ;
184
+ }
162
185
186
+ @ Override
187
+ public String obtain () {
188
+ return readFromFile (
189
+ new File (getParameters ().getCheckoutDir ().get (), minimumCompilerVersionPath (getParameters ().getVersion ().get ()))
190
+ );
191
+ }
192
+
193
+ public interface Params extends ValueSourceParameters {
194
+ Property <Version > getVersion ();
195
+
196
+ Property <File > getCheckoutDir ();
197
+ }
198
+ }
163
199
}
0 commit comments