diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenArtifactDownloader.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenArtifactDownloader.java index b46bb47d239b..5a562c31e59d 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenArtifactDownloader.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenArtifactDownloader.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,10 +21,12 @@ import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.util.ConcurrencyUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.idea.maven.importing.MavenExtraArtifactType; import org.jetbrains.idea.maven.model.*; import org.jetbrains.idea.maven.server.MavenEmbedderWrapper; @@ -39,8 +41,8 @@ import java.util.concurrent.atomic.AtomicInteger; public class MavenArtifactDownloader { private static final ThreadPoolExecutor EXECUTOR = - new ThreadPoolExecutor(5, Integer.MAX_VALUE, 1, TimeUnit.SECONDS, new LinkedBlockingQueue(), new ThreadFactory() { - AtomicInteger num = new AtomicInteger(); + new ThreadPoolExecutor(0, Integer.MAX_VALUE, 1, TimeUnit.SECONDS, new LinkedBlockingQueue(), new ThreadFactory() { + private final AtomicInteger num = new AtomicInteger(); @NotNull @Override @@ -277,4 +279,9 @@ public class MavenArtifactDownloader { public final Set unresolvedSources = new THashSet(); public final Set unresolvedDocs = new THashSet(); } + + @TestOnly + public static void awaitQuiescence(long timeout, @NotNull TimeUnit unit) { + ConcurrencyUtil.awaitQuiescence(EXECUTOR, timeout, unit); + } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java index 218113c7715a..5f2ce59c4a9e 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenTestCase.java @@ -40,6 +40,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.indices.MavenIndicesManager; import org.jetbrains.idea.maven.project.*; +import org.jetbrains.idea.maven.server.MavenServerManager; import org.jetbrains.idea.maven.utils.MavenProgressIndicator; import java.awt.*; @@ -49,6 +50,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.*; import java.util.List; +import java.util.concurrent.TimeUnit; public abstract class MavenTestCase extends UsefulTestCase { protected static final MavenConsole NULL_MAVEN_CONSOLE = new NullMavenConsole(); @@ -141,6 +143,8 @@ public abstract class MavenTestCase extends UsefulTestCase { @Override protected void tearDown() throws Exception { try { + MavenServerManager.getInstance().shutdown(true); + MavenArtifactDownloader.awaitQuiescence(100, TimeUnit.SECONDS); myProject = null; UIUtil.invokeAndWaitIfNeeded(new Runnable() { @Override