2727import org .eclipse .core .resources .IProject ;
2828import org .eclipse .core .runtime .CoreException ;
2929import org .eclipse .core .runtime .NullProgressMonitor ;
30+ import org .eclipse .core .runtime .OperationCanceledException ;
31+ import org .eclipse .core .runtime .jobs .Job ;
3032import org .eclipse .jdt .apt .core .util .AptConfig ;
3133import org .eclipse .jdt .core .IJavaProject ;
3234import org .eclipse .jdt .core .JavaCore ;
@@ -48,6 +50,7 @@ public void preferencesChange(Preferences oldPreferences, Preferences newPrefere
4850 if (projectsManager != null ) {
4951 boolean gradleJavaHomeChanged = !Objects .equals (oldPreferences .getGradleJavaHome (), newPreferences .getGradleJavaHome ());
5052 if (gradleJavaHomeChanged || hasAllowedChecksumsChanged (oldPreferences , newPreferences )) {
53+ waitForGradleJobs ();
5154 for (IProject project : ProjectUtils .getGradleProjects ()) {
5255 if (newPreferences .isGradleWrapperEnabled () || gradleJavaHomeChanged ) {
5356 updateProject (projectsManager , project , gradleJavaHomeChanged );
@@ -57,16 +60,17 @@ public void preferencesChange(Preferences oldPreferences, Preferences newPrefere
5760
5861 boolean protobufSupportChanged = !Objects .equals (oldPreferences .isProtobufSupportEnabled (), newPreferences .isProtobufSupportEnabled ());
5962 if (protobufSupportChanged ) {
60- for (IProject project : ProjectUtils .getGradleProjects ()) {
61- projectsManager .updateProject (project , true );
62- }
63+ updateProjects (projectsManager );
6364 }
6465
6566 boolean androidSupportChanged = !Objects .equals (oldPreferences .isAndroidSupportEnabled (), newPreferences .isAndroidSupportEnabled ());
6667 if (androidSupportChanged ) {
67- for (IProject project : ProjectUtils .getGradleProjects ()) {
68- projectsManager .updateProject (project , true );
69- }
68+ updateProjects (projectsManager );
69+ }
70+
71+ boolean aspectjSupportChanged = !Objects .equals (oldPreferences .isAspectjSupportEnabled (), newPreferences .isAspectjSupportEnabled ());
72+ if (aspectjSupportChanged ) {
73+ updateProjects (projectsManager );
7074 }
7175
7276 boolean annotationProcessingChanged = !Objects .equals (oldPreferences .isGradleAnnotationProcessingEnabled (), newPreferences .isGradleAnnotationProcessingEnabled ());
@@ -84,6 +88,7 @@ public void preferencesChange(Preferences oldPreferences, Preferences newPrefere
8488 }
8589 boolean updateBuildConfigurationChanged = !Objects .equals (oldPreferences .getUpdateBuildConfigurationStatus (), newPreferences .getUpdateBuildConfigurationStatus ());
8690 if (updateBuildConfigurationChanged ) {
91+ waitForGradleJobs ();
8792 for (IProject project : ProjectUtils .getGradleProjects ()) {
8893 String projectPath = project .getLocation ().toFile ().getAbsolutePath ();
8994 BuildConfiguration buildConfiguration = GradleProjectImporter .getBuildConfiguration (Paths .get (projectPath ));
@@ -94,6 +99,21 @@ public void preferencesChange(Preferences oldPreferences, Preferences newPrefere
9499 }
95100 }
96101
102+ private void waitForGradleJobs () {
103+ try {
104+ Job .getJobManager ().join (CorePlugin .GRADLE_JOB_FAMILY , new NullProgressMonitor ());
105+ } catch (OperationCanceledException | InterruptedException e ) {
106+ // ignore
107+ }
108+ }
109+
110+ private void updateProjects (ProjectsManager projectsManager ) {
111+ waitForGradleJobs ();
112+ for (IProject project : ProjectUtils .getGradleProjects ()) {
113+ projectsManager .updateProject (project , true );
114+ }
115+ }
116+
97117 private void updateProject (ProjectsManager projectsManager , IProject project , boolean gradleJavaHomeChanged ) {
98118 String projectDir = project .getLocation ().toFile ().getAbsolutePath ();
99119 Path projectPath = Paths .get (projectDir );
0 commit comments