18
18
import java .io .FilenameFilter ;
19
19
import java .nio .file .Files ;
20
20
import java .nio .file .Path ;
21
- import java .util .ArrayList ;
22
21
import java .util .Collection ;
23
22
import java .util .List ;
24
23
import java .util .Map ;
25
24
import java .util .Properties ;
26
25
26
+ import org .apache .commons .lang3 .StringUtils ;
27
27
import org .eclipse .buildship .core .BuildConfiguration ;
28
28
import org .eclipse .buildship .core .GradleCore ;
29
29
import org .eclipse .buildship .core .GradleDistribution ;
44
44
import org .eclipse .jdt .ls .core .internal .JavaLanguageServerPlugin ;
45
45
import org .eclipse .jdt .ls .core .internal .ProjectUtils ;
46
46
import org .eclipse .jdt .ls .core .internal .preferences .PreferenceManager ;
47
+ import org .eclipse .jdt .ls .core .internal .preferences .Preferences ;
47
48
import org .eclipse .jdt .ls .internal .gradle .checksums .ValidationResult ;
48
49
import org .eclipse .jdt .ls .internal .gradle .checksums .WrapperValidator ;
49
50
import org .eclipse .lsp4j .ExecuteCommandParams ;
54
55
* @author Fred Bricon
55
56
*
56
57
*/
58
+ @ SuppressWarnings ("restriction" )
57
59
public class GradleProjectImporter extends AbstractProjectImporter {
58
60
59
61
public static final String GRADLE_HOME = "GRADLE_HOME" ;
@@ -87,14 +89,15 @@ public boolean applies(IProgressMonitor monitor) throws CoreException {
87
89
if (rootFolder == null ) {
88
90
return false ;
89
91
}
90
- PreferenceManager preferencesManager = JavaLanguageServerPlugin . getPreferencesManager ();
91
- if (preferencesManager != null && ! preferencesManager . getPreferences () .isImportGradleEnabled ()) {
92
+ Preferences preferences = getPreferences ();
93
+ if (! preferences .isImportGradleEnabled ()) {
92
94
return false ;
93
95
}
94
96
if (directories == null ) {
95
97
BasicFileDetector gradleDetector = new BasicFileDetector (rootFolder .toPath (), BUILD_GRADLE_DESCRIPTOR )
96
98
.includeNested (false )
97
- .addExclusions ("**/build" );//default gradle build dir
99
+ .addExclusions ("**/build" )//default gradle build dir
100
+ .addExclusions ("**/bin" );
98
101
directories = gradleDetector .scan (monitor );
99
102
}
100
103
return !directories .isEmpty ();
@@ -117,16 +120,18 @@ public void importToWorkspace(IProgressMonitor monitor) throws CoreException {
117
120
subMonitor .done ();
118
121
}
119
122
120
- private void importDir (Path rootFolder , IProgressMonitor monitor ) {
123
+ private void importDir (Path projectFolder , IProgressMonitor monitor ) {
121
124
if (monitor .isCanceled ()) {
122
125
return ;
123
126
}
124
- startSynchronization (rootFolder , monitor );
127
+ startSynchronization (projectFolder , monitor );
125
128
}
126
129
130
+
127
131
public static GradleDistribution getGradleDistribution (Path rootFolder ) {
128
132
PreferenceManager preferencesManager = JavaLanguageServerPlugin .getPreferencesManager ();
129
- if (preferencesManager != null && preferencesManager .getPreferences ().isGradleWrapperEnabled () && Files .exists (rootFolder .resolve ("gradlew" ))) {
133
+ Preferences preferences = getPreferences ();
134
+ if (preferencesManager != null && preferences .isGradleWrapperEnabled () && Files .exists (rootFolder .resolve ("gradlew" ))) {
130
135
WrapperValidator validator = new WrapperValidator ();
131
136
try {
132
137
ValidationResult result = validator .checkWrapper (rootFolder .toFile ().getAbsolutePath ());
@@ -143,7 +148,8 @@ public static GradleDistribution getGradleDistribution(Path rootFolder) {
143
148
pm .getConnection ().sendNotification (params );
144
149
} else {
145
150
//@formatter:off
146
- String message = GRADLE_WRAPPER_CHEKSUM_WARNING_TEMPLATE .replaceAll ("@wrapper@" , result .getWrapperJar ()).replaceAll ("@checksum@" , result .getChecksum ());
151
+ String message = GRADLE_WRAPPER_CHEKSUM_WARNING_TEMPLATE .replaceAll ("@wrapper@" , result .getWrapperJar ())
152
+ .replaceAll ("@checksum@" , result .getChecksum ());
147
153
//@formatter:on
148
154
pm .getConnection ().showMessage (new MessageParams (MessageType .Error , message ));
149
155
}
@@ -154,10 +160,10 @@ public static GradleDistribution getGradleDistribution(Path rootFolder) {
154
160
JavaLanguageServerPlugin .logException (e .getMessage (), e );
155
161
}
156
162
}
157
- if (preferencesManager != null && preferencesManager . getPreferences () .getGradleVersion () != null ) {
163
+ if (StringUtils . isNotBlank ( preferences .getGradleVersion ()) ) {
158
164
List <GradleVersion > versions = CorePlugin .publishedGradleVersions ().getVersions ();
159
165
GradleVersion gradleVersion = null ;
160
- String versionString = preferencesManager . getPreferences () .getGradleVersion ();
166
+ String versionString = preferences .getGradleVersion ();
161
167
GradleVersion requiredVersion = GradleVersion .version (versionString );
162
168
for (GradleVersion version : versions ) {
163
169
if (version .compareTo (requiredVersion ) == 0 ) {
@@ -184,8 +190,9 @@ public static File getGradleHomeFile() {
184
190
}
185
191
186
192
public static File getGradleHomeFile (Map <String , String > env , Properties sysprops ) {
187
- if (JavaLanguageServerPlugin .getPreferencesManager () != null && JavaLanguageServerPlugin .getPreferencesManager ().getPreferences ().getGradleHome () != null ) {
188
- return new File (JavaLanguageServerPlugin .getPreferencesManager ().getPreferences ().getGradleHome ());
193
+ Preferences preferences = getPreferences ();
194
+ if (StringUtils .isNotBlank (preferences .getGradleHome ())) {
195
+ return new File (preferences .getGradleHome ());
189
196
}
190
197
String gradleHome = env .get (GRADLE_HOME );
191
198
if (gradleHome == null || !new File (gradleHome ).isDirectory ()) {
@@ -201,9 +208,9 @@ public static File getGradleHomeFile(Map<String, String> env, Properties sysprop
201
208
}
202
209
203
210
public static File getGradleUserHomeFile () {
204
- if ( JavaLanguageServerPlugin . getPreferencesManager () != null && JavaLanguageServerPlugin . getPreferencesManager (). getPreferences (). getGradleUserHome () != null
205
- && ! JavaLanguageServerPlugin . getPreferencesManager (). getPreferences () .getGradleUserHome (). isEmpty ( )) {
206
- return new File (JavaLanguageServerPlugin . getPreferencesManager (). getPreferences () .getGradleUserHome ());
211
+ Preferences preferences = getPreferences ();
212
+ if ( StringUtils . isNotBlank ( preferences .getGradleUserHome ())) {
213
+ return new File (preferences .getGradleUserHome ());
207
214
}
208
215
String gradleUserHome = System .getenv ().get (GRADLE_USER_HOME );
209
216
if (gradleUserHome == null ) {
@@ -212,19 +219,11 @@ public static File getGradleUserHomeFile() {
212
219
return (gradleUserHome == null || gradleUserHome .isEmpty ()) ? null : new File (gradleUserHome );
213
220
}
214
221
215
- protected void startSynchronization (Path rootFolder , IProgressMonitor monitor ) {
216
- File location = rootFolder .toFile ();
222
+ protected void startSynchronization (Path projectFolder , IProgressMonitor monitor ) {
223
+ File location = projectFolder .toFile ();
217
224
boolean shouldSynchronize = shouldSynchronize (location );
218
- List <IProject > projects = ProjectUtils .getGradleProjects ();
219
- for (IProject project : projects ) {
220
- File projectDir = project .getLocation () == null ? null : project .getLocation ().toFile ();
221
- if (location .equals (projectDir )) {
222
- shouldSynchronize = checkGradlePersistence (shouldSynchronize , project , projectDir );
223
- break ;
224
- }
225
- }
226
225
if (shouldSynchronize ) {
227
- BuildConfiguration build = getBuildConfiguration (rootFolder );
226
+ BuildConfiguration build = getBuildConfiguration (projectFolder );
228
227
SynchronizationResult result = GradleCore .getWorkspace ().createBuild (build ).synchronize (monitor );
229
228
if (!result .getStatus ().isOK ()) {
230
229
JavaLanguageServerPlugin .log (result .getStatus ());
@@ -236,16 +235,17 @@ public static BuildConfiguration getBuildConfiguration(Path rootFolder) {
236
235
GradleDistribution distribution = getGradleDistribution (rootFolder );
237
236
IVMInstall javaDefaultRuntime = JavaRuntime .getDefaultVMInstall ();
238
237
File javaHome ;
238
+ Preferences preferences = getPreferences ();
239
239
if (javaDefaultRuntime != null && javaDefaultRuntime .getVMRunner (ILaunchManager .RUN_MODE ) != null ) {
240
240
javaHome = javaDefaultRuntime .getInstallLocation ();
241
241
} else {
242
- String javaHomeStr = JavaLanguageServerPlugin . getPreferencesManager (). getPreferences () .getJavaHome ();
242
+ String javaHomeStr = preferences .getJavaHome ();
243
243
javaHome = javaHomeStr == null ? null : new File (javaHomeStr );
244
244
}
245
245
File gradleUserHome = getGradleUserHomeFile ();
246
- List <String > gradleArguments = JavaLanguageServerPlugin . getPreferencesManager () != null ? JavaLanguageServerPlugin . getPreferencesManager (). getPreferences (). getGradleArguments () : new ArrayList <> ();
247
- List <String > gradleJvmArguments = JavaLanguageServerPlugin . getPreferencesManager () != null ? JavaLanguageServerPlugin . getPreferencesManager (). getPreferences (). getGradleJvmArguments () : new ArrayList <> ();
248
- boolean offlineMode = JavaLanguageServerPlugin . getPreferencesManager () != null ? JavaLanguageServerPlugin . getPreferencesManager (). getPreferences (). isImportGradleOfflineEnabled () : false ;
246
+ List <String > gradleArguments = preferences . getGradleArguments ();
247
+ List <String > gradleJvmArguments = preferences . getGradleJvmArguments ();
248
+ boolean offlineMode = preferences . isImportGradleOfflineEnabled ();
249
249
boolean overrideWorkspaceConfiguration = !(distribution instanceof WrapperGradleDistribution ) || offlineMode || (gradleArguments != null && !gradleArguments .isEmpty ()) || (gradleJvmArguments != null && !gradleJvmArguments .isEmpty ())
250
250
|| gradleUserHome != null || javaHome != null ;
251
251
// @formatter:off
@@ -263,22 +263,25 @@ public static BuildConfiguration getBuildConfiguration(Path rootFolder) {
263
263
}
264
264
265
265
public static boolean shouldSynchronize (File location ) {
266
- boolean shouldSynchronize = true ;
267
- List <IProject > projects = ProjectUtils .getGradleProjects ();
268
- for (IProject project : projects ) {
266
+ for (IProject project : ProjectUtils .getGradleProjects ()) {
269
267
File projectDir = project .getLocation () == null ? null : project .getLocation ().toFile ();
270
268
if (location .equals (projectDir )) {
271
- shouldSynchronize = checkGradlePersistence (shouldSynchronize , project , projectDir );
272
- break ;
269
+ boolean shouldSynchronize = checkGradlePersistence (project , projectDir );
270
+ if (shouldSynchronize ) {
271
+ JavaLanguageServerPlugin .logInfo (project .getName () + " was modified since last time the workspace was opened, must be synchronized" );
272
+ }
273
+ return shouldSynchronize ;
273
274
}
274
275
}
275
- return shouldSynchronize ;
276
+ JavaLanguageServerPlugin .logInfo ("No previous Gradle project at " + location + ", it must be synchronized" );
277
+ return true ;
276
278
}
277
279
278
- private static boolean checkGradlePersistence (boolean shouldSynchronize , IProject project , File projectDir ) {
279
- if (! ProjectUtils .isJavaProject (project ) || !project .getFile (IJavaProject .CLASSPATH_FILE_NAME ).exists ()) {
280
+ private static boolean checkGradlePersistence (IProject project , File projectDir ) {
281
+ if (ProjectUtils .isJavaProject (project ) && !project .getFile (IJavaProject .CLASSPATH_FILE_NAME ).exists ()) {
280
282
return true ;
281
283
}
284
+ boolean shouldSynchronize = false ;
282
285
PersistentModel model = CorePlugin .modelPersistence ().loadModel (project );
283
286
if (model .isPresent ()) {
284
287
File persistentFile = CorePlugin .getInstance ().getStateLocation ().append ("project-preferences" ).append (project .getName ()).toFile ();
@@ -306,4 +309,8 @@ public boolean accept(File dir, String name) {
306
309
public void reset () {
307
310
}
308
311
312
+ private static Preferences getPreferences () {
313
+ return (JavaLanguageServerPlugin .getPreferencesManager () == null || JavaLanguageServerPlugin .getPreferencesManager ().getPreferences () == null ) ? new Preferences () : JavaLanguageServerPlugin .getPreferencesManager ().getPreferences ();
314
+ }
315
+
309
316
}
0 commit comments