From 7b2249baff046df6b3522ae9187efb86048bc89e Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Thu, 12 Sep 2013 14:36:48 +0400 Subject: [PATCH] Add ResolveContext object shared between all scheduled resolve tasks; IDEA-113446 Do not clear data in AndroidExternalApklibDependenciesManager. Instead, store cache in ResolveContext to avoid several resolves of one apklib artifact --- .../idea/maven/importing/MavenImporter.java | 3 ++- .../jetbrains/idea/maven/project/MavenProject.java | 5 +++-- .../idea/maven/project/MavenProjectsManager.java | 3 ++- .../MavenProjectsProcessorResolvingTask.java | 7 +++++-- .../idea/maven/project/MavenProjectsTree.java | 13 ++++++++++++- .../idea/maven/project/ResolveContext.java | 9 +++++++++ 6 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/project/ResolveContext.java diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenImporter.java index 8853355bb8c3..7f9b71b5eb12 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenImporter.java @@ -107,7 +107,8 @@ public abstract class MavenImporter { public void resolve(Project project, MavenProject mavenProject, NativeMavenProjectHolder nativeMavenProject, - MavenEmbedderWrapper embedder) + MavenEmbedderWrapper embedder, + ResolveContext context) throws MavenProcessCanceledException { } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java index 6c1778f41b56..81aa94fd6450 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProject.java @@ -578,7 +578,8 @@ public class MavenProject { @NotNull MavenGeneralSettings generalSettings, @NotNull MavenEmbedderWrapper embedder, @NotNull MavenProjectReader reader, - @NotNull MavenProjectReaderProjectLocator locator) + @NotNull MavenProjectReaderProjectLocator locator, + @NotNull ResolveContext context) throws MavenProcessCanceledException { MavenProjectReaderResult result = reader.resolveProject(generalSettings, embedder, @@ -589,7 +590,7 @@ public class MavenProject { if (result.nativeMavenProject != null) { for (MavenImporter eachImporter : getSuitableImporters()) { - eachImporter.resolve(project, this, result.nativeMavenProject, embedder); + eachImporter.resolve(project, this, result.nativeMavenProject, embedder, context); } } return Pair.create(changes, result.nativeMavenProject); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index d47f2fe93eb6..c9df10bfa256 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -729,6 +729,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent toResolve = new LinkedHashSet(myProjectsToResolve); myProjectsToResolve.clear(); } + final ResolveContext context = new ResolveContext(); Iterator it = toResolve.iterator(); while (it.hasNext()) { @@ -741,7 +742,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent }; myResolvingProcessor.scheduleTask( - new MavenProjectsProcessorResolvingTask(each, myProjectsTree, getGeneralSettings(), onCompletion)); + new MavenProjectsProcessorResolvingTask(each, myProjectsTree, getGeneralSettings(), onCompletion, context)); } } }); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessorResolvingTask.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessorResolvingTask.java index 248e555b6f54..e957f1901994 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessorResolvingTask.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessorResolvingTask.java @@ -24,19 +24,22 @@ import org.jetbrains.idea.maven.utils.MavenProgressIndicator; public class MavenProjectsProcessorResolvingTask extends MavenProjectsProcessorBasicTask { @NotNull private final MavenGeneralSettings myGeneralSettings; @Nullable private final Runnable myOnCompletion; + @NotNull private final ResolveContext myContext; public MavenProjectsProcessorResolvingTask(@NotNull MavenProject project, @NotNull MavenProjectsTree tree, @NotNull MavenGeneralSettings generalSettings, - @Nullable Runnable onCompletion) { + @Nullable Runnable onCompletion, + @NotNull ResolveContext context) { super(project, tree); myGeneralSettings = generalSettings; myOnCompletion = onCompletion; + myContext = context; } public void perform(Project project, MavenEmbeddersManager embeddersManager, MavenConsole console, MavenProgressIndicator indicator) throws MavenProcessCanceledException { - myTree.resolve(project, myMavenProject, myGeneralSettings, embeddersManager, console, indicator); + myTree.resolve(project, myMavenProject, myGeneralSettings, embeddersManager, console, myContext, indicator); if (myOnCompletion != null) myOnCompletion.run(); } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java index a11d9cb13459..621af26c929a 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java @@ -1150,12 +1150,23 @@ public class MavenProjectsTree { } } + @TestOnly public void resolve(@NotNull Project project, @NotNull MavenProject mavenProject, @NotNull MavenGeneralSettings generalSettings, @NotNull MavenEmbeddersManager embeddersManager, @NotNull MavenConsole console, @NotNull MavenProgressIndicator process) throws MavenProcessCanceledException { + resolve(project, mavenProject, generalSettings, embeddersManager, console, new ResolveContext(), process); + } + + public void resolve(@NotNull Project project, + @NotNull MavenProject mavenProject, + @NotNull MavenGeneralSettings generalSettings, + @NotNull MavenEmbeddersManager embeddersManager, + @NotNull MavenConsole console, + @NotNull ResolveContext context, + @NotNull MavenProgressIndicator process) throws MavenProcessCanceledException { MavenEmbedderWrapper embedder = embeddersManager.getEmbedder(MavenEmbeddersManager.FOR_DEPENDENCIES_RESOLVE); embedder.customizeForResolve(getWorkspaceMap(), console, process); @@ -1164,7 +1175,7 @@ public class MavenProjectsTree { process.setText(ProjectBundle.message("maven.resolving.pom", mavenProject.getDisplayName())); process.setText2(""); Pair resolveResult = - mavenProject.resolve(project, generalSettings, embedder, new MavenProjectReader(), myProjectLocator); + mavenProject.resolve(project, generalSettings, embedder, new MavenProjectReader(), myProjectLocator, context); fireProjectResolved(Pair.create(mavenProject, resolveResult.first), resolveResult.second); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/ResolveContext.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/ResolveContext.java new file mode 100644 index 000000000000..0eaed57950d3 --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/ResolveContext.java @@ -0,0 +1,9 @@ +package org.jetbrains.idea.maven.project; + +import com.intellij.openapi.util.UserDataHolderBase; + +/** + * @author Eugene.Kudelevsky + */ +public class ResolveContext extends UserDataHolderBase { +}