diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleMovedJarsPostProcessor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleMovedJarsPostProcessor.java index a747afbb79df..5afb539814a1 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleMovedJarsPostProcessor.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleMovedJarsPostProcessor.java @@ -69,12 +69,18 @@ public class GradleMovedJarsPostProcessor implements GradleProjectStructureChang } @Override - public void processChanges(@NotNull final Collection changes, @NotNull final Project project) { + public void processChanges(@NotNull final Collection changes, + @NotNull final Project project, + boolean onIdeProjectStructureChange) { + if (onIdeProjectStructureChange) { + // Do nothing as project models modification implied by project model change event are prohibited (see IDEA-100625). + return; + } final Collection toMerge = buildMergeData(changes, ServiceManager.getService(project, GradleProjectStructureContext.class)); if (toMerge == null) { return; } - + Runnable mergeTask = new Runnable() { @Override public void run() { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleOutdatedLibraryVersionPostProcessor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleOutdatedLibraryVersionPostProcessor.java index 595b3e0da9af..deb2b4ba9b5b 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleOutdatedLibraryVersionPostProcessor.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleOutdatedLibraryVersionPostProcessor.java @@ -59,7 +59,10 @@ public class GradleOutdatedLibraryVersionPostProcessor implements GradleProjectS private static final boolean SKIP = SystemProperties.getBooleanProperty("gradle.skip.outdated.processing", false); @Override - public void processChanges(@NotNull Collection changes, @NotNull Project project) { + public void processChanges(@NotNull Collection changes, + @NotNull Project project, + boolean onIdeProjectStructureChange) + { if (SKIP) { return; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesDetector.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesDetector.java index 7cbac6f95012..c212bbb1ccff 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesDetector.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesDetector.java @@ -108,7 +108,7 @@ public class GradleProjectStructureChangesDetector implements GradleProjectStruc GradleProject project = myChangesModel.getGradleProject(); if (project != null) { myNewChangesDetected.set(false); - myChangesModel.update(project); + myChangesModel.update(project, true); if (!myNewChangesDetected.get()) { return; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesModel.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesModel.java index d9764a245edb..178ade4d1801 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesModel.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesModel.java @@ -56,6 +56,10 @@ public class GradleProjectStructureChangesModel { myPostProcessors.add(changedLibraryVersionPostProcessor); } + public void update(@NotNull GradleProject gradleProject) { + update(gradleProject, false); + } + /** * Asks the model to update its state according to the given state of the target gradle project. *

@@ -72,11 +76,13 @@ public class GradleProjectStructureChangesModel { * Note: it's very important that the listeners are notified after the actual state change, i.e. {@link #getChanges()} * during the update returns up-to-date data. * - * @param gradleProject gradle project to sync with + * @param gradleProject gradle project to sync with + * @param onIdeProjectStructureChange a flag which identifies if current update is triggered by ide project structure + * change (an alternative is a manual project structure changes refresh implied by a user) */ - public void update(@NotNull GradleProject gradleProject) { + public void update(@NotNull GradleProject gradleProject, boolean onIdeProjectStructureChange) { myGradleProject.set(gradleProject); - final GradleChangesCalculationContext context = getCurrentChangesContext(gradleProject); + final GradleChangesCalculationContext context = getCurrentChangesContext(gradleProject, onIdeProjectStructureChange); if (!context.hasNewChanges()) { return; } @@ -112,12 +118,14 @@ public class GradleProjectStructureChangesModel { } @NotNull - public GradleChangesCalculationContext getCurrentChangesContext(@NotNull GradleProject gradleProject) { + public GradleChangesCalculationContext getCurrentChangesContext(@NotNull GradleProject gradleProject, + boolean onIdeProjectStructureChange) + { GradleChangesCalculationContext context = new GradleChangesCalculationContext(myChanges.get(), myPlatformFacade, myLibraryPathTypeMapper); myChangesCalculator.calculate(gradleProject, myProject, context); for (GradleProjectStructureChangesPostProcessor processor : myPostProcessors) { - processor.processChanges(context.getCurrentChanges(), myProject); + processor.processChanges(context.getCurrentChanges(), myProject, onIdeProjectStructureChange); } return context; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesPostProcessor.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesPostProcessor.java index 914aac966adc..eb5d40de5bba 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesPostProcessor.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureChangesPostProcessor.java @@ -39,8 +39,12 @@ public interface GradleProjectStructureChangesPostProcessor { * Note: this callback is assumed to be called from EDT, in order to allow synchronous processing such as * given changes collection's modification is immediately visible to the calling code. * - * @param changes current changes which might be adjusted - * @param project current intellij project + * @param changes current changes which might be adjusted + * @param project current intellij project + * @param onIdeProjectStructureChange a flag which identifies if current update is triggered by ide project structure + * change (an alternative is a manual project structure changes refresh implied by a user) */ - void processChanges(@NotNull Collection changes, @NotNull Project project); + void processChanges(@NotNull Collection changes, + @NotNull Project project, + boolean onIdeProjectStructureChange); } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java index 6df9866c7794..2a2b3a5b990d 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java @@ -224,7 +224,7 @@ public class GradleProjectStructureTreeModel extends DefaultTreeModel { GradleProject project = myChangesModel.getGradleProject(); if (project != null) { - GradleChangesCalculationContext context = myChangesModel.getCurrentChangesContext(project); + GradleChangesCalculationContext context = myChangesModel.getCurrentChangesContext(project, false); processChanges(Collections.emptyList(), context.getCurrentChanges()); filterNodes(root); }