mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 09:12:22 +07:00
IDEA-218044 - added import progress for source/javadoc resolving, fix for "waiting for maven import completion"
GitOrigin-RevId: b2b3b0fe3189e46433729211762e9de894db0513
This commit is contained in:
committed by
intellij-monorepo-bot
parent
39f405bc27
commit
97877fd693
@@ -1223,6 +1223,7 @@ public abstract class Maven3XServerEmbedder extends Maven3ServerEmbedder {
|
||||
org.eclipse.aether.resolution.ArtifactResolutionException {
|
||||
|
||||
final String mavenVersion = getMavenVersion();
|
||||
myImporterSpy.setIndicator(myCurrentIndicator);
|
||||
// org.eclipse.aether.RepositorySystem.newResolutionRepositories() method doesn't exist in aether-api-0.9.0.M2.jar used before maven 3.2.5
|
||||
// see https://youtrack.jetbrains.com/issue/IDEA-140208 for details
|
||||
if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING || VersionComparatorUtil.compare(mavenVersion, "3.2.5") < 0) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.intellij.build.DefaultBuildDescriptor
|
||||
import com.intellij.build.FilePosition
|
||||
import com.intellij.build.events.EventResult
|
||||
import com.intellij.build.events.MessageEvent
|
||||
import com.intellij.build.events.MessageEventResult
|
||||
import com.intellij.build.events.impl.*
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
|
||||
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType
|
||||
@@ -29,6 +30,8 @@ class MavenSyncConsole(private val myProject: Project) {
|
||||
private var started = false
|
||||
private var hasErrors = false
|
||||
|
||||
private val JAVADOC_AND_SOURCE_CLASSIFIERS = setOf("javadoc", "sources", "test-javadoc", "test-sources")
|
||||
|
||||
private var myStartedSet = LinkedHashSet<Pair<Any, String>>()
|
||||
|
||||
@Synchronized
|
||||
@@ -172,14 +175,39 @@ class MavenSyncConsole(private val myProject: Project) {
|
||||
@Synchronized
|
||||
private fun downloadEventFailed(keyPrefix: String, dependency: String, error: String, stackTrace: String?) = doIfImportInProcess{
|
||||
val downloadString = SyncBundle.message("${keyPrefix}.download")
|
||||
|
||||
val downloadArtifactString = SyncBundle.message("${keyPrefix}.artifact.download", dependency)
|
||||
if (stackTrace != null && Registry.`is`("maven.spy.events.debug")) {
|
||||
addText(downloadArtifactString, stackTrace, false)
|
||||
if (isJavadocOrSource(dependency)) {
|
||||
addText(downloadArtifactString, "$dependency not found", true)
|
||||
completeTask(downloadString, downloadArtifactString, object : MessageEventResult {
|
||||
override fun getKind(): MessageEvent.Kind {
|
||||
return MessageEvent.Kind.WARNING
|
||||
}
|
||||
|
||||
override fun getDetails(): String? {
|
||||
return "$dependency not found"
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
else {
|
||||
addText(downloadArtifactString, error, true)
|
||||
if (stackTrace != null && Registry.`is`("maven.spy.events.debug")) {
|
||||
addText(downloadArtifactString, stackTrace, false)
|
||||
}
|
||||
else {
|
||||
addText(downloadArtifactString, error, true)
|
||||
}
|
||||
completeTask(downloadString, downloadArtifactString, FailureResultImpl(error))
|
||||
}
|
||||
completeTask(downloadString, downloadArtifactString, FailureResultImpl(error))
|
||||
}
|
||||
|
||||
private fun isJavadocOrSource(dependency: String): Boolean {
|
||||
val split = dependency.split(':')
|
||||
if (split.size < 4) {
|
||||
return false
|
||||
}
|
||||
val classifier = split.get(2)
|
||||
return JAVADOC_AND_SOURCE_CLASSIFIERS.contains(classifier)
|
||||
}
|
||||
|
||||
private inline fun doIfImportInProcess(action: () -> Unit) {
|
||||
|
||||
@@ -117,6 +117,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
|
||||
private MavenSyncConsole mySyncConsole;
|
||||
private final MavenMergingUpdateQueue mySaveQueue;
|
||||
private static final int SAVE_DELAY = 1000;
|
||||
private volatile AsyncPromise<List<Module>> myRunningImportPromise;
|
||||
|
||||
public static MavenProjectsManager getInstance(@NotNull Project project) {
|
||||
return project.getComponent(MavenProjectsManager.class);
|
||||
@@ -153,6 +154,10 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
public AsyncPromise<List<Module>> getRunningImportPromise() {
|
||||
return myRunningImportPromise;
|
||||
}
|
||||
|
||||
public ModificationTracker getModificationTracker() {
|
||||
return myModificationTracker;
|
||||
}
|
||||
@@ -878,10 +883,17 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
|
||||
}
|
||||
|
||||
public Promise<List<Module>> scheduleImportAndResolve(boolean fromAutoImport) {
|
||||
Promise<List<Module>> toCheck = myRunningImportPromise;
|
||||
if(toCheck != null){
|
||||
return toCheck;
|
||||
}
|
||||
getSyncConsole().startImport(mySyncViewManager, fromAutoImport);
|
||||
MavenSyncConsole console = getSyncConsole();
|
||||
AsyncPromise<List<Module>> promise = scheduleResolve();
|
||||
promise.onProcessed(m -> completeMavenSyncOnImportCompletion(console));
|
||||
myRunningImportPromise = promise;
|
||||
promise.onProcessed(m -> {
|
||||
completeMavenSyncOnImportCompletion(console);
|
||||
});
|
||||
fireImportAndResolveScheduled();
|
||||
return promise;
|
||||
}
|
||||
@@ -908,6 +920,7 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
|
||||
myPostProcessor.waitForCompletion();
|
||||
}
|
||||
console.finishImport();
|
||||
myRunningImportPromise = null;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -269,6 +269,15 @@ public class MavenProjectsManagerWatcher {
|
||||
boolean force,
|
||||
final boolean forceImportAndResolve) {
|
||||
final AsyncPromise<Void> promise = new AsyncPromise<>();
|
||||
if (!forceImportAndResolve) {
|
||||
AsyncPromise<List<Module>> runningPromise = myManager.getRunningImportPromise();
|
||||
if (runningPromise != null) {
|
||||
runningPromise.onSuccess(ignore -> promise.setResult(null)).onError(e -> promise.setError(e));
|
||||
return promise;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Runnable onCompletion = createScheduleImportAction(forceImportAndResolve, promise);
|
||||
|
||||
if (LOG.isDebugEnabled()) {
|
||||
|
||||
Reference in New Issue
Block a user