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
This commit is contained in:
Eugene Kudelevsky
2013-09-12 18:31:32 +04:00
parent 7e1bcf2bdc
commit 7b2249baff
6 changed files with 33 additions and 7 deletions
@@ -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 {
}
@@ -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);
@@ -729,6 +729,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
toResolve = new LinkedHashSet<MavenProject>(myProjectsToResolve);
myProjectsToResolve.clear();
}
final ResolveContext context = new ResolveContext();
Iterator<MavenProject> 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));
}
}
});
@@ -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();
}
}
@@ -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<MavenProjectChanges, NativeMavenProjectHolder> 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);
}
@@ -0,0 +1,9 @@
package org.jetbrains.idea.maven.project;
import com.intellij.openapi.util.UserDataHolderBase;
/**
* @author Eugene.Kudelevsky
*/
public class ResolveContext extends UserDataHolderBase {
}