IDEA-100625 Gradle: Throwable at GradleJarManager$2.run()

This commit is contained in:
Denis.Zhdanov
2013-02-07 15:58:08 +04:00
parent ee7fc1c0f0
commit 0b84df7018
6 changed files with 34 additions and 13 deletions
@@ -69,12 +69,18 @@ public class GradleMovedJarsPostProcessor implements GradleProjectStructureChang
}
@Override
public void processChanges(@NotNull final Collection<GradleProjectStructureChange> changes, @NotNull final Project project) {
public void processChanges(@NotNull final Collection<GradleProjectStructureChange> 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<MergeInfo> toMerge = buildMergeData(changes, ServiceManager.getService(project, GradleProjectStructureContext.class));
if (toMerge == null) {
return;
}
Runnable mergeTask = new Runnable() {
@Override
public void run() {
@@ -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<GradleProjectStructureChange> changes, @NotNull Project project) {
public void processChanges(@NotNull Collection<GradleProjectStructureChange> changes,
@NotNull Project project,
boolean onIdeProjectStructureChange)
{
if (SKIP) {
return;
}
@@ -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;
}
@@ -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.
* <p/>
@@ -72,11 +76,13 @@ public class GradleProjectStructureChangesModel {
* <b>Note:</b> it's very important that the listeners are notified <b>after</b> 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;
}
@@ -39,8 +39,12 @@ public interface GradleProjectStructureChangesPostProcessor {
* <b>Note:</b> 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<GradleProjectStructureChange> changes, @NotNull Project project);
void processChanges(@NotNull Collection<GradleProjectStructureChange> changes,
@NotNull Project project,
boolean onIdeProjectStructureChange);
}
@@ -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.<GradleProjectStructureChange>emptyList(), context.getCurrentChanges());
filterNodes(root);
}