void updateJavaParameters(T configuration,
+ JavaParameters params,
+ RunnerSettings runnerSettings) throws ExecutionException {
+ }
+
+ @Override
+ protected void validateConfiguration(@NotNull RunConfigurationBase configuration, boolean isExecution) throws Exception {
+ super.validateConfiguration(configuration, isExecution);
+ if (configuration instanceof ModuleBasedConfiguration && configuration instanceof CommonProgramRunConfigurationParameters) {
+ final String workingDirectory = ((CommonProgramRunConfigurationParameters)configuration).getWorkingDirectory();
+ if (("$" + PathMacroUtil.MODULE_DIR_MACRO_NAME + "$").equals(workingDirectory)) {
+ final RunConfigurationModule runConfigurationModule = ((ModuleBasedConfiguration)configuration).getConfigurationModule();
+ final String projectPath = ExternalSystemApiUtil.getExternalProjectPath(runConfigurationModule.getModule());
+ if (StringUtil.isNotEmpty(projectPath)) {
+ ((CommonProgramRunConfigurationParameters)configuration).setWorkingDirectory(projectPath);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void readExternal(@NotNull RunConfigurationBase runConfiguration, @NotNull Element element)
+ throws InvalidDataException {
+ }
+
+ @Nullable
+ @Override
+ protected SettingsEditor
createEditor(@NotNull P configuration) {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ protected String getEditorTitle() {
+ return null;
+ }
+
+ @Override
+ protected boolean isApplicableFor(@NotNull RunConfigurationBase configuration) {
+ if (configuration instanceof ModuleBasedConfiguration && configuration instanceof CommonProgramRunConfigurationParameters) {
+ final RunConfigurationModule runConfigurationModule = ((ModuleBasedConfiguration)configuration).getConfigurationModule();
+ return ExternalSystemApiUtil.isExternalSystemAwareModule(GradleConstants.SYSTEM_ID, runConfigurationModule.getModule());
+ }
+ return false;
+ }
+}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java
index 76ef69eee0c9..09ce935ed101 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java
@@ -440,15 +440,17 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
final String moduleConfigPath = ideModule.getData().getLinkedExternalProjectPath();
ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class);
-
+ final String rootProjectPath = ideProject.getData().getLinkedExternalProjectPath();
+ final boolean isFlatProject = !FileUtil.isAncestor(rootProjectPath, moduleConfigPath, false);
if (externalProject != null) {
for (ExternalTask task : externalProject.getTasks().values()) {
- String taskName = task.getName();
+ String taskName = isFlatProject ? task.getQName() : task.getName();
String taskGroup = task.getGroup();
if (taskName.trim().isEmpty() || isIdeaTask(taskName, taskGroup)) {
continue;
}
- TaskData taskData = new TaskData(GradleConstants.SYSTEM_ID, taskName, moduleConfigPath, task.getDescription());
+ final String taskPath = isFlatProject ? rootProjectPath : moduleConfigPath;
+ TaskData taskData = new TaskData(GradleConstants.SYSTEM_ID, taskName, taskPath, task.getDescription());
taskData.setGroup(taskGroup);
taskData.setType(task.getType());
ideModule.createChild(ProjectKeys.TASK, taskData);
diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/NewExprent.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/NewExprent.java
index fb0adb727f82..1edd0e43af07 100644
--- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/NewExprent.java
+++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/NewExprent.java
@@ -159,7 +159,32 @@ public class NewExprent extends Exprent {
if (anonymous) {
ClassNode child = DecompilerContext.getClassProcessor().getMapRootClasses().get(newType.value);
- buf.append("(");
+ if (!enumConst) {
+ String enclosing = null;
+
+ if (!lambda && constructor != null) {
+ enclosing = getQualifiedNewInstance(child.anonymousClassType.value, constructor.getLstParameters(), indent, tracer);
+ if (enclosing != null) {
+ buf.append(enclosing).append('.');
+ }
+ }
+
+ buf.append("new ");
+
+ String typename = ExprProcessor.getCastTypeName(child.anonymousClassType);
+ if (enclosing != null) {
+ ClassNode anonymousNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(child.anonymousClassType.value);
+ if (anonymousNode != null) {
+ typename = anonymousNode.simpleName;
+ }
+ else {
+ typename = typename.substring(typename.lastIndexOf('.') + 1);
+ }
+ }
+ buf.append(typename);
+ }
+
+ buf.append('(');
if (!lambda && constructor != null) {
InvocationExprent invSuper = child.superInvocation;
@@ -207,32 +232,7 @@ public class NewExprent extends Exprent {
}
}
- if (!enumConst) {
- String enclosing = null;
- if (!lambda && constructor != null) {
- enclosing = getQualifiedNewInstance(child.anonymousClassType.value, constructor.getLstParameters(), indent, tracer);
- }
-
- String typename = ExprProcessor.getCastTypeName(child.anonymousClassType);
-
- if (enclosing != null) {
- ClassNode anonymousNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(child.anonymousClassType.value);
- if (anonymousNode != null) {
- typename = anonymousNode.simpleName;
- }
- else {
- typename = typename.substring(typename.lastIndexOf('.') + 1);
- }
- }
-
- buf.prepend("new " + typename);
-
- if (enclosing != null) {
- buf.prepend(enclosing + ".");
- }
- }
-
- buf.append(")");
+ buf.append(')');
if (enumConst && buf.length() == 2) {
buf.setLength(0);
@@ -257,16 +257,41 @@ public class NewExprent extends Exprent {
}
else if (directArrayInit) {
VarType leftType = newType.decreaseArrayDim();
- buf.append("{");
+ buf.append('{');
for (int i = 0; i < lstArrayElements.size(); i++) {
if (i > 0) {
buf.append(", ");
}
ExprProcessor.getCastedExprent(lstArrayElements.get(i), leftType, buf, indent, false, tracer);
}
- buf.append("}");
+ buf.append('}');
}
else if (newType.arrayDim == 0) {
+ if (!enumConst) {
+ String enclosing = null;
+
+ if (constructor != null) {
+ enclosing = getQualifiedNewInstance(newType.value, constructor.getLstParameters(), indent, tracer);
+ if (enclosing != null) {
+ buf.append(enclosing).append('.');
+ }
+ }
+
+ buf.append("new ");
+
+ String typename = ExprProcessor.getTypeName(newType);
+ if (enclosing != null) {
+ ClassNode newNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(newType.value);
+ if (newNode != null) {
+ typename = newNode.simpleName;
+ }
+ else {
+ typename = typename.substring(typename.lastIndexOf('.') + 1);
+ }
+ }
+ buf.append(typename);
+ }
+
if (constructor != null) {
List lstParameters = constructor.getLstParameters();
@@ -286,7 +311,7 @@ public class NewExprent extends Exprent {
int start = enumConst ? 2 : 0;
if (!enumConst || start < lstParameters.size()) {
- buf.append("(");
+ buf.append('(');
boolean firstParam = true;
for (int i = start; i < lstParameters.size(); i++) {
@@ -311,31 +336,7 @@ public class NewExprent extends Exprent {
}
}
- buf.append(")");
- }
- }
-
- if (!enumConst) {
- String enclosing = null;
- if (constructor != null) {
- enclosing = getQualifiedNewInstance(newType.value, constructor.getLstParameters(), indent, tracer);
- }
-
- String typename = ExprProcessor.getTypeName(newType);
-
- if (enclosing != null) {
- ClassNode newNode = DecompilerContext.getClassProcessor().getMapRootClasses().get(newType.value);
- if (newNode != null) {
- typename = newNode.simpleName;
- }
- else {
- typename = typename.substring(typename.lastIndexOf('.') + 1);
- }
- }
- buf.prepend("new " + typename);
-
- if (enclosing != null) {
- buf.prepend(enclosing + ".");
+ buf.append(')');
}
}
}
@@ -344,11 +345,11 @@ public class NewExprent extends Exprent {
if (lstArrayElements.isEmpty()) {
for (int i = 0; i < newType.arrayDim; i++) {
- buf.append("[");
+ buf.append('[');
if (i < lstDims.size()) {
buf.append(lstDims.get(i).toJava(indent, tracer));
}
- buf.append("]");
+ buf.append(']');
}
}
else {
@@ -357,14 +358,14 @@ public class NewExprent extends Exprent {
}
VarType leftType = newType.decreaseArrayDim();
- buf.append("{");
+ buf.append('{');
for (int i = 0; i < lstArrayElements.size(); i++) {
if (i > 0) {
buf.append(", ");
}
ExprProcessor.getCastedExprent(lstArrayElements.get(i), leftType, buf, indent, false, tracer);
}
- buf.append("}");
+ buf.append('}');
}
}
diff --git a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java
index 0211a5785390..31778cbbc577 100644
--- a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java
+++ b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/BulkDecompilationTest.java
@@ -94,4 +94,4 @@ public class BulkDecompilationTest {
throw new RuntimeException(e);
}
}
-}
+}
\ No newline at end of file
diff --git a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java
index ad3654856009..b3385e278383 100644
--- a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java
+++ b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/DecompilerTestFixture.java
@@ -22,10 +22,10 @@ import org.jetbrains.java.decompiler.util.InterpreterUtil;
import java.io.File;
import java.io.IOException;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -35,11 +35,9 @@ public class DecompilerTestFixture {
private File targetDir;
private ConsoleDecompiler decompiler;
- public void setUp() throws IOException {
- setUp(Collections.emptyMap());
- }
+ public void setUp(String... optionPairs) throws IOException {
+ assertEquals(0, optionPairs.length % 2);
- public void setUp(final Map options) throws IOException {
testDataDir = new File("testData");
if (!isTestDataDir(testDataDir)) testDataDir = new File("community/plugins/java-decompiler/engine/testData");
if (!isTestDataDir(testDataDir)) testDataDir = new File("plugins/java-decompiler/engine/testData");
@@ -54,15 +52,18 @@ public class DecompilerTestFixture {
targetDir = new File(tempDir, "decompiled");
assertTrue(targetDir.mkdirs());
- decompiler = new ConsoleDecompiler(this.targetDir, new HashMap() {{
- put(IFernflowerPreferences.LOG_LEVEL, "warn");
- put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1");
- put(IFernflowerPreferences.REMOVE_SYNTHETIC, "1");
- put(IFernflowerPreferences.REMOVE_BRIDGE, "1");
- put(IFernflowerPreferences.LITERALS_AS_IS, "1");
- put(IFernflowerPreferences.UNIT_TEST_MODE, "1");
- putAll(options);
- }});
+
+ Map options = new HashMap();
+ options.put(IFernflowerPreferences.LOG_LEVEL, "warn");
+ options.put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1");
+ options.put(IFernflowerPreferences.REMOVE_SYNTHETIC, "1");
+ options.put(IFernflowerPreferences.REMOVE_BRIDGE, "1");
+ options.put(IFernflowerPreferences.LITERALS_AS_IS, "1");
+ options.put(IFernflowerPreferences.UNIT_TEST_MODE, "1");
+ for (int i = 0; i < optionPairs.length; i += 2) {
+ options.put(optionPairs[i], optionPairs[i + 1]);
+ }
+ decompiler = new ConsoleDecompiler(targetDir, options);
}
public void tearDown() {
@@ -121,4 +122,4 @@ public class DecompilerTestFixture {
throw new RuntimeException(e);
}
}
-}
+}
\ No newline at end of file
diff --git a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java
index 0da0d3b5ac2a..1ab4ea2f3244 100644
--- a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java
+++ b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTest.java
@@ -15,19 +15,34 @@
*/
package org.jetbrains.java.decompiler;
+import org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler;
import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
-import java.util.HashMap;
-import java.util.Map;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.*;
-public class SingleClassesTest extends SingleClassesTestBase {
- @Override
- protected Map getDecompilerOptions() {
- return new HashMap() {{
- put(IFernflowerPreferences.BYTECODE_SOURCE_MAPPING, "1");
- put(IFernflowerPreferences.DUMP_ORIGINAL_LINES, "1");
- }};
+import static org.jetbrains.java.decompiler.DecompilerTestFixture.assertFilesEqual;
+import static org.junit.Assert.assertTrue;
+
+public class SingleClassesTest {
+ private DecompilerTestFixture fixture;
+
+ @Before
+ public void setUp() throws IOException {
+ fixture = new DecompilerTestFixture();
+ fixture.setUp(IFernflowerPreferences.BYTECODE_SOURCE_MAPPING, "1",
+ IFernflowerPreferences.DUMP_ORIGINAL_LINES, "1");
+ }
+
+ @After
+ public void tearDown() {
+ fixture.tearDown();
+ fixture = null;
}
@Test public void testClassFields() { doTest("pkg/TestClassFields"); }
@@ -62,4 +77,50 @@ public class SingleClassesTest extends SingleClassesTestBase {
@Test public void testInnerSignature() { doTest("pkg/TestInnerSignature"); }
@Test public void testParameterizedTypes() { doTest("pkg/TestParameterizedTypes"); }
@Test public void testShadowing() { doTest("pkg/TestShadowing", "pkg/Shadow", "ext/Shadow"); }
-}
+
+ protected void doTest(String testFile, String... companionFiles) {
+ ConsoleDecompiler decompiler = fixture.getDecompiler();
+
+ File classFile = new File(fixture.getTestDataDir(), "/classes/" + testFile + ".class");
+ assertTrue(classFile.isFile());
+ for (File file : collectClasses(classFile)) {
+ decompiler.addSpace(file, true);
+ }
+
+ for (String companionFile : companionFiles) {
+ File companionClassFile = new File(fixture.getTestDataDir(), "/classes/" + companionFile + ".class");
+ assertTrue(companionClassFile.isFile());
+ for (File file : collectClasses(companionClassFile)) {
+ decompiler.addSpace(file, true);
+ }
+ }
+
+ decompiler.decompileContext();
+
+ String testName = classFile.getName().substring(0, classFile.getName().length() - 6);
+ File decompiledFile = new File(fixture.getTargetDir(), testName + ".java");
+ assertTrue(decompiledFile.isFile());
+ File referenceFile = new File(fixture.getTestDataDir(), "results/" + testName + ".dec");
+ assertTrue(referenceFile.isFile());
+ assertFilesEqual(referenceFile, decompiledFile);
+ }
+
+ private static List collectClasses(File classFile) {
+ List files = new ArrayList();
+ files.add(classFile);
+
+ File parent = classFile.getParentFile();
+ if (parent != null) {
+ final String pattern = classFile.getName().replace(".class", "") + "\\$.+\\.class";
+ File[] inner = parent.listFiles(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return name.matches(pattern);
+ }
+ });
+ if (inner != null) Collections.addAll(files, inner);
+ }
+
+ return files;
+ }
+}
\ No newline at end of file
diff --git a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTestBase.java b/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTestBase.java
deleted file mode 100644
index 0601f0e940d9..000000000000
--- a/plugins/java-decompiler/engine/test/org/jetbrains/java/decompiler/SingleClassesTestBase.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jetbrains.java.decompiler;
-
-import org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler;
-import org.junit.After;
-import org.junit.Before;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import static org.jetbrains.java.decompiler.DecompilerTestFixture.assertFilesEqual;
-import static org.junit.Assert.assertTrue;
-
-public abstract class SingleClassesTestBase {
- private DecompilerTestFixture fixture;
-
- @Before
- public void setUp() throws IOException {
- fixture = new DecompilerTestFixture();
- fixture.setUp(getDecompilerOptions());
- }
-
- @After
- public void tearDown() {
- fixture.tearDown();
- fixture = null;
- }
-
- protected Map getDecompilerOptions() {
- return Collections.emptyMap();
- }
-
- protected void doTest(String testFile, String... companionFiles) {
- ConsoleDecompiler decompiler = fixture.getDecompiler();
-
- File classFile = new File(fixture.getTestDataDir(), "/classes/" + testFile + ".class");
- assertTrue(classFile.isFile());
- for (File file : collectClasses(classFile)) {
- decompiler.addSpace(file, true);
- }
-
- for (String companionFile : companionFiles) {
- File companionClassFile = new File(fixture.getTestDataDir(), "/classes/" + companionFile + ".class");
- assertTrue(companionClassFile.isFile());
- for (File file : collectClasses(companionClassFile)) {
- decompiler.addSpace(file, true);
- }
- }
-
- decompiler.decompileContext();
-
- String testName = classFile.getName().substring(0, classFile.getName().length() - 6);
- File decompiledFile = new File(fixture.getTargetDir(), testName + ".java");
- assertTrue(decompiledFile.isFile());
- File referenceFile = new File(fixture.getTestDataDir(), "results/" + testName + ".dec");
- assertTrue(referenceFile.isFile());
- assertFilesEqual(referenceFile, decompiledFile);
- }
-
- private static List collectClasses(File classFile) {
- List files = new ArrayList();
- files.add(classFile);
-
- File parent = classFile.getParentFile();
- if (parent != null) {
- final String pattern = classFile.getName().replace(".class", "") + "\\$.+\\.class";
- File[] inner = parent.listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return name.matches(pattern);
- }
- });
- if (inner != null) Collections.addAll(files, inner);
- }
-
- return files;
- }
-}
diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerEmbedder.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerEmbedder.java
index 46cffc841e2e..45cfb149a90a 100644
--- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerEmbedder.java
+++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/server/MavenServerEmbedder.java
@@ -45,9 +45,9 @@ public interface MavenServerEmbedder extends Remote {
@NotNull
- MavenServerExecutionResult resolveProject(@NotNull File file,
- @NotNull Collection activeProfiles,
- @NotNull Collection inactiveProfiles) throws RemoteException,
+ Collection resolveProject(@NotNull Collection files,
+ @NotNull Collection activeProfiles,
+ @NotNull Collection inactiveProfiles) throws RemoteException,
MavenServerProcessCanceledException;
@Nullable
diff --git a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java
index 620c3a8181cb..b1333d58926b 100644
--- a/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java
+++ b/plugins/maven/maven2-server-impl/src/org/jetbrains/idea/maven/server/embedder/Maven2ServerEmbedderImpl.java
@@ -18,7 +18,9 @@ package org.jetbrains.idea.maven.server.embedder;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.ExceptionUtil;
import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.apache.maven.artifact.Artifact;
@@ -287,18 +289,33 @@ public class Maven2ServerEmbedderImpl extends MavenRemoteObject implements Maven
}
@NotNull
- public MavenServerExecutionResult resolveProject(@NotNull final File file,
+ public Collection resolveProject(@NotNull final Collection files,
@NotNull final Collection activeProfiles,
@NotNull final Collection inactiveProfiles)
throws MavenServerProcessCanceledException, RemoteException {
- return doExecute(new Executor() {
- public MavenServerExecutionResult execute() throws Exception {
- DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(myConsoleWrapper);
- MavenExecutionResult result = myImpl.resolveProject(file,
- new ArrayList(activeProfiles),
- new ArrayList(inactiveProfiles),
- Arrays.asList(listener));
- return createExecutionResult(file, result, listener.getRootNode());
+
+ return ContainerUtil.mapNotNull(files, new Function() {
+ @Override
+ public MavenServerExecutionResult fun(final File file) {
+ try {
+ return doExecute(new Executor() {
+ public MavenServerExecutionResult execute() throws Exception {
+ DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(myConsoleWrapper);
+ MavenExecutionResult result = myImpl.resolveProject(file,
+ new ArrayList(activeProfiles),
+ new ArrayList(inactiveProfiles),
+ Collections.singletonList(listener));
+ return createExecutionResult(file, result, listener.getRootNode());
+ }
+ });
+ }
+ catch (MavenServerProcessCanceledException e) {
+ ExceptionUtil.rethrowAllAsUnchecked(e);
+ }
+ catch (RemoteException e) {
+ ExceptionUtil.rethrowAllAsUnchecked(e);
+ }
+ return null;
}
});
}
diff --git a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java
index 09c8d520b4f3..3851354863eb 100644
--- a/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java
+++ b/plugins/maven/maven30-server-impl/src/org/jetbrains/idea/maven/server/Maven30ServerEmbedderImpl.java
@@ -17,7 +17,10 @@ package org.jetbrains.idea.maven.server;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.ExceptionUtil;
+import com.intellij.util.Function;
import com.intellij.util.SystemProperties;
+import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.apache.maven.*;
@@ -84,7 +87,6 @@ import java.lang.reflect.Method;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Overridden maven components:
@@ -523,15 +525,29 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
@NotNull
@Override
- public MavenServerExecutionResult resolveProject(@NotNull File file,
- @NotNull Collection activeProfiles,
- @NotNull Collection inactiveProfiles)
+ public Collection resolveProject(@NotNull final Collection files,
+ @NotNull Collection activeProfiles,
+ @NotNull Collection inactiveProfiles)
throws RemoteException, MavenServerProcessCanceledException {
- DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(myConsoleWrapper);
+ final DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(myConsoleWrapper);
- MavenExecutionResult result = doResolveProject(file, new ArrayList(activeProfiles), new ArrayList(inactiveProfiles),
- Arrays.asList(listener));
- return createExecutionResult(file, result, listener.getRootNode());
+ Collection results =
+ doResolveProject(files, new ArrayList(activeProfiles), new ArrayList(inactiveProfiles),
+ Collections.singletonList(listener));
+ return ContainerUtil.mapNotNull(results, new Function() {
+ @Override
+ public MavenServerExecutionResult fun(MavenExecutionResult result) {
+ try {
+ if (result != null && result.getMavenProject() != null && result.getMavenProject().getFile() != null) {
+ return createExecutionResult(result.getMavenProject().getFile(), result, listener.getRootNode());
+ }
+ }
+ catch (RemoteException e) {
+ ExceptionUtil.rethrowAllAsUnchecked(e);
+ }
+ return null;
+ }
+ });
}
@Nullable
@@ -573,15 +589,16 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
}
@NotNull
- public MavenExecutionResult doResolveProject(@NotNull final File file,
- @NotNull final List activeProfiles,
- @NotNull final List inactiveProfiles,
- final List listeners) throws RemoteException {
+ public Collection doResolveProject(@NotNull final Collection files,
+ @NotNull final List activeProfiles,
+ @NotNull final List inactiveProfiles,
+ final List listeners) throws RemoteException {
+ final File file = files.size() == 1 ? files.iterator().next() : null;
final MavenExecutionRequest request = createRequest(file, activeProfiles, inactiveProfiles, Collections.emptyList());
request.setUpdateSnapshots(myAlwaysUpdateSnapshots);
- final AtomicReference ref = new AtomicReference();
+ final Collection executionResults = ContainerUtil.newArrayList();
executeWithMavenSession(request, new Runnable() {
@Override
@@ -594,81 +611,83 @@ public class Maven30ServerEmbedderImpl extends Maven3ServerEmbedder {
String savedLocalRepository = modelInterpolator.getLocalRepository();
modelInterpolator.setLocalRepository(request.getLocalRepositoryPath().getAbsolutePath());
- List results;
+ List buildingResults;
try {
// Don't use build(File projectFile, ProjectBuildingRequest request) , because it don't use cache !!!!!!!! (see http://devnet.jetbrains.com/message/5500218)
- results = builder.build(Collections.singletonList(new File(file.getPath())), false, request.getProjectBuildingRequest());
+ buildingResults = builder.build(new ArrayList(files), false, request.getProjectBuildingRequest());
}
finally {
modelInterpolator.setLocalRepository(savedLocalRepository);
}
- ProjectBuildingResult buildingResult = results.get(0);
+ for (ProjectBuildingResult buildingResult : buildingResults) {
- MavenProject project = buildingResult.getProject();
+ MavenProject project = buildingResult.getProject();
- RepositorySystemSession repositorySession = getComponent(LegacySupport.class).getRepositorySession();
- if (repositorySession instanceof DefaultRepositorySystemSession) {
- ((DefaultRepositorySystemSession)repositorySession).setTransferListener(new Maven30TransferListenerAdapter(myCurrentIndicator));
+ RepositorySystemSession repositorySession = getComponent(LegacySupport.class).getRepositorySession();
+ if (repositorySession instanceof DefaultRepositorySystemSession) {
+ ((DefaultRepositorySystemSession)repositorySession)
+ .setTransferListener(new Maven30TransferListenerAdapter(myCurrentIndicator));
- if (myWorkspaceMap != null) {
- ((DefaultRepositorySystemSession)repositorySession).setWorkspaceReader(new Maven30WorkspaceReader(myWorkspaceMap));
- }
- }
-
- List exceptions = new ArrayList();
- loadExtensions(project, exceptions);
-
- //Artifact projectArtifact = project.getArtifact();
- //Map managedVersions = project.getManagedVersionMap();
- //ArtifactMetadataSource metadataSource = getComponent(ArtifactMetadataSource.class);
- project.setDependencyArtifacts(project.createArtifacts(getComponent(ArtifactFactory.class), null, null));
- //
-
- if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) {
- ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest();
- resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts());
- resolutionRequest.setArtifact(project.getArtifact());
- resolutionRequest.setManagedVersionMap(project.getManagedVersionMap());
- resolutionRequest.setLocalRepository(myLocalRepository);
- resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- resolutionRequest.setListeners(listeners);
-
- resolutionRequest.setResolveRoot(false);
- resolutionRequest.setResolveTransitively(true);
-
- ArtifactResolver resolver = getComponent(ArtifactResolver.class);
- ArtifactResolutionResult result = resolver.resolve(resolutionRequest);
-
- project.setArtifacts(result.getArtifacts());
- // end copied from DefaultMavenProjectBuilder.buildWithDependencies
- ref.set(new MavenExecutionResult(project, exceptions));
- }
- else {
- final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession);
- final List dependencies = dependencyResolutionResult.getDependencies();
-
- Set artifacts = new LinkedHashSet(dependencies.size());
- for (Dependency dependency : dependencies) {
- final Artifact artifact = RepositoryUtils.toArtifact(dependency.getArtifact());
- artifact.setScope(dependency.getScope());
- artifact.setOptional(dependency.isOptional());
- artifacts.add(artifact);
- resolveAsModule(artifact);
+ if (myWorkspaceMap != null) {
+ ((DefaultRepositorySystemSession)repositorySession).setWorkspaceReader(new Maven30WorkspaceReader(myWorkspaceMap));
+ }
}
- project.setArtifacts(artifacts);
- ref.set(new MavenExecutionResult(project, dependencyResolutionResult, exceptions));
+ List exceptions = new ArrayList();
+ loadExtensions(project, exceptions);
+
+ //Artifact projectArtifact = project.getArtifact();
+ //Map managedVersions = project.getManagedVersionMap();
+ //ArtifactMetadataSource metadataSource = getComponent(ArtifactMetadataSource.class);
+ project.setDependencyArtifacts(project.createArtifacts(getComponent(ArtifactFactory.class), null, null));
+ //
+
+ if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) {
+ ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest();
+ resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts());
+ resolutionRequest.setArtifact(project.getArtifact());
+ resolutionRequest.setManagedVersionMap(project.getManagedVersionMap());
+ resolutionRequest.setLocalRepository(myLocalRepository);
+ resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
+ resolutionRequest.setListeners(listeners);
+
+ resolutionRequest.setResolveRoot(false);
+ resolutionRequest.setResolveTransitively(true);
+
+ ArtifactResolver resolver = getComponent(ArtifactResolver.class);
+ ArtifactResolutionResult result = resolver.resolve(resolutionRequest);
+
+ project.setArtifacts(result.getArtifacts());
+ // end copied from DefaultMavenProjectBuilder.buildWithDependencies
+ executionResults.add(new MavenExecutionResult(project, exceptions));
+ }
+ else {
+ final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession);
+ final List dependencies = dependencyResolutionResult.getDependencies();
+
+ Set artifacts = new LinkedHashSet(dependencies.size());
+ for (Dependency dependency : dependencies) {
+ final Artifact artifact = RepositoryUtils.toArtifact(dependency.getArtifact());
+ artifact.setScope(dependency.getScope());
+ artifact.setOptional(dependency.isOptional());
+ artifacts.add(artifact);
+ resolveAsModule(artifact);
+ }
+
+ project.setArtifacts(artifacts);
+ executionResults.add(new MavenExecutionResult(project, dependencyResolutionResult, exceptions));
+ }
}
}
catch (Exception e) {
- ref.set(handleException(e));
+ executionResults.add(handleException(e));
}
}
});
- return ref.get();
+ return executionResults;
}
private boolean resolveAsModule(Artifact a) {
diff --git a/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java b/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java
index 2f7cc8c5cf1b..a808a521578c 100644
--- a/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java
+++ b/plugins/maven/maven32-server-impl/src/org/jetbrains/idea/maven/server/Maven32ServerEmbedderImpl.java
@@ -18,8 +18,11 @@ package org.jetbrains.idea.maven.server;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.util.ExceptionUtil;
+import com.intellij.util.Function;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.SystemProperties;
+import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.apache.maven.*;
@@ -88,7 +91,6 @@ import java.lang.reflect.Method;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Overridden maven components:
@@ -538,15 +540,29 @@ public class Maven32ServerEmbedderImpl extends Maven3ServerEmbedder {
@NotNull
@Override
- public MavenServerExecutionResult resolveProject(@NotNull File file,
- @NotNull Collection activeProfiles,
- @NotNull Collection inactiveProfiles)
+ public Collection resolveProject(@NotNull Collection files,
+ @NotNull Collection activeProfiles,
+ @NotNull Collection inactiveProfiles)
throws RemoteException, MavenServerProcessCanceledException {
- DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(myConsoleWrapper);
+ final DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(myConsoleWrapper);
- MavenExecutionResult result = doResolveProject(file, new ArrayList(activeProfiles), new ArrayList(inactiveProfiles),
- Arrays.asList(listener));
- return createExecutionResult(file, result, listener.getRootNode());
+ Collection results =
+ doResolveProject(files, new ArrayList(activeProfiles), new ArrayList(inactiveProfiles),
+ Collections.singletonList(listener));
+ return ContainerUtil.mapNotNull(results, new Function() {
+ @Override
+ public MavenServerExecutionResult fun(MavenExecutionResult result) {
+ try {
+ if (result != null && result.getMavenProject() != null && result.getMavenProject().getFile() != null) {
+ return createExecutionResult(result.getMavenProject().getFile(), result, listener.getRootNode());
+ }
+ }
+ catch (RemoteException e) {
+ ExceptionUtil.rethrowAllAsUnchecked(e);
+ }
+ return null;
+ }
+ });
}
@Nullable
@@ -588,15 +604,16 @@ public class Maven32ServerEmbedderImpl extends Maven3ServerEmbedder {
}
@NotNull
- public MavenExecutionResult doResolveProject(@NotNull final File file,
- @NotNull final List activeProfiles,
- @NotNull final List inactiveProfiles,
- final List listeners) throws RemoteException {
+ public Collection doResolveProject(@NotNull final Collection files,
+ @NotNull final List activeProfiles,
+ @NotNull final List inactiveProfiles,
+ final List listeners) throws RemoteException {
+ final File file = files.size() == 1 ? files.iterator().next() : null;
final MavenExecutionRequest request = createRequest(file, activeProfiles, inactiveProfiles, Collections.emptyList());
request.setUpdateSnapshots(myAlwaysUpdateSnapshots);
- final AtomicReference ref = new AtomicReference();
+ final Collection executionResults = ContainerUtil.newArrayList();
executeWithMavenSession(request, new Runnable() {
@Override
@@ -609,81 +626,82 @@ public class Maven32ServerEmbedderImpl extends Maven3ServerEmbedder {
String savedLocalRepository = modelInterpolator.getLocalRepository();
modelInterpolator.setLocalRepository(request.getLocalRepositoryPath().getAbsolutePath());
- List results;
+ List buildingResults;
try {
// Don't use build(File projectFile, ProjectBuildingRequest request) , because it don't use cache !!!!!!!! (see http://devnet.jetbrains.com/message/5500218)
- results = builder.build(Collections.singletonList(new File(file.getPath())), false, request.getProjectBuildingRequest());
+ buildingResults = builder.build(new ArrayList(files), false, request.getProjectBuildingRequest());
}
finally {
modelInterpolator.setLocalRepository(savedLocalRepository);
}
- ProjectBuildingResult buildingResult = results.get(0);
+ for (ProjectBuildingResult buildingResult : buildingResults) {
- MavenProject project = buildingResult.getProject();
+ MavenProject project = buildingResult.getProject();
- RepositorySystemSession repositorySession = getComponent(LegacySupport.class).getRepositorySession();
- if (repositorySession instanceof DefaultRepositorySystemSession) {
- ((DefaultRepositorySystemSession)repositorySession).setTransferListener(new TransferListenerAdapter(myCurrentIndicator));
+ RepositorySystemSession repositorySession = getComponent(LegacySupport.class).getRepositorySession();
+ if (repositorySession instanceof DefaultRepositorySystemSession) {
+ ((DefaultRepositorySystemSession)repositorySession).setTransferListener(new TransferListenerAdapter(myCurrentIndicator));
- if (myWorkspaceMap != null) {
- ((DefaultRepositorySystemSession)repositorySession).setWorkspaceReader(new Maven32WorkspaceReader(myWorkspaceMap));
- }
- }
-
- List exceptions = new ArrayList();
- loadExtensions(project, exceptions);
-
- //Artifact projectArtifact = project.getArtifact();
- //Map managedVersions = project.getManagedVersionMap();
- //ArtifactMetadataSource metadataSource = getComponent(ArtifactMetadataSource.class);
- project.setDependencyArtifacts(project.createArtifacts(getComponent(ArtifactFactory.class), null, null));
- //
-
- if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) {
- ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest();
- resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts());
- resolutionRequest.setArtifact(project.getArtifact());
- resolutionRequest.setManagedVersionMap(project.getManagedVersionMap());
- resolutionRequest.setLocalRepository(myLocalRepository);
- resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
- resolutionRequest.setListeners(listeners);
-
- resolutionRequest.setResolveRoot(false);
- resolutionRequest.setResolveTransitively(true);
-
- ArtifactResolver resolver = getComponent(ArtifactResolver.class);
- ArtifactResolutionResult result = resolver.resolve(resolutionRequest);
-
- project.setArtifacts(result.getArtifacts());
- // end copied from DefaultMavenProjectBuilder.buildWithDependencies
- ref.set(new MavenExecutionResult(project, exceptions));
- }
- else {
- final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession);
- final List dependencies = dependencyResolutionResult.getDependencies();
-
- Set artifacts = new LinkedHashSet(dependencies.size());
- for (Dependency dependency : dependencies) {
- final Artifact artifact = RepositoryUtils.toArtifact(dependency.getArtifact());
- artifact.setScope(dependency.getScope());
- artifact.setOptional(dependency.isOptional());
- artifacts.add(artifact);
- resolveAsModule(artifact);
+ if (myWorkspaceMap != null) {
+ ((DefaultRepositorySystemSession)repositorySession).setWorkspaceReader(new Maven32WorkspaceReader(myWorkspaceMap));
+ }
}
- project.setArtifacts(artifacts);
- ref.set(new MavenExecutionResult(project, dependencyResolutionResult, exceptions));
+ List exceptions = new ArrayList();
+ loadExtensions(project, exceptions);
+
+ //Artifact projectArtifact = project.getArtifact();
+ //Map managedVersions = project.getManagedVersionMap();
+ //ArtifactMetadataSource metadataSource = getComponent(ArtifactMetadataSource.class);
+ project.setDependencyArtifacts(project.createArtifacts(getComponent(ArtifactFactory.class), null, null));
+ //
+
+ if (USE_MVN2_COMPATIBLE_DEPENDENCY_RESOLVING) {
+ ArtifactResolutionRequest resolutionRequest = new ArtifactResolutionRequest();
+ resolutionRequest.setArtifactDependencies(project.getDependencyArtifacts());
+ resolutionRequest.setArtifact(project.getArtifact());
+ resolutionRequest.setManagedVersionMap(project.getManagedVersionMap());
+ resolutionRequest.setLocalRepository(myLocalRepository);
+ resolutionRequest.setRemoteRepositories(project.getRemoteArtifactRepositories());
+ resolutionRequest.setListeners(listeners);
+
+ resolutionRequest.setResolveRoot(false);
+ resolutionRequest.setResolveTransitively(true);
+
+ ArtifactResolver resolver = getComponent(ArtifactResolver.class);
+ ArtifactResolutionResult result = resolver.resolve(resolutionRequest);
+
+ project.setArtifacts(result.getArtifacts());
+ // end copied from DefaultMavenProjectBuilder.buildWithDependencies
+ executionResults.add(new MavenExecutionResult(project, exceptions));
+ }
+ else {
+ final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession);
+ final List dependencies = dependencyResolutionResult.getDependencies();
+
+ Set artifacts = new LinkedHashSet(dependencies.size());
+ for (Dependency dependency : dependencies) {
+ final Artifact artifact = RepositoryUtils.toArtifact(dependency.getArtifact());
+ artifact.setScope(dependency.getScope());
+ artifact.setOptional(dependency.isOptional());
+ artifacts.add(artifact);
+ resolveAsModule(artifact);
+ }
+
+ project.setArtifacts(artifacts);
+ executionResults.add(new MavenExecutionResult(project, dependencyResolutionResult, exceptions));
+ }
}
}
catch (Exception e) {
- ref.set(handleException(e));
+ executionResults.add(handleException(e));
}
}
});
- return ref.get();
+ return executionResults;
}
private boolean resolveAsModule(Artifact a) {
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 a1fb331f3fb1..69f34416900a 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
@@ -109,11 +109,11 @@ public class MavenProject {
}
@NotNull
- private MavenProjectChanges set(@NotNull MavenProjectReaderResult readerResult,
- @NotNull MavenGeneralSettings settings,
- boolean updateLastReadStamp,
- boolean resetArtifacts,
- boolean resetProfiles) {
+ MavenProjectChanges set(@NotNull MavenProjectReaderResult readerResult,
+ @NotNull MavenGeneralSettings settings,
+ boolean updateLastReadStamp,
+ boolean resetArtifacts,
+ boolean resetProfiles) {
State newState = myState.clone();
if (updateLastReadStamp) newState.myLastReadStamp = myState.myLastReadStamp + 1;
@@ -632,11 +632,12 @@ public class MavenProject {
@NotNull MavenProjectReaderProjectLocator locator,
@NotNull ResolveContext context)
throws MavenProcessCanceledException {
- MavenProjectReaderResult result = reader.resolveProject(generalSettings,
+ Collection results = reader.resolveProject(generalSettings,
embedder,
- getFile(),
+ Collections.singleton(getFile()),
getActivatedProfilesIds(),
locator);
+ final MavenProjectReaderResult result = results.iterator().next();
MavenProjectChanges changes = set(result, generalSettings, false, result.readingProblems.isEmpty(), false);
if (result.nativeMavenProject != null) {
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java
index 31f245ccfdc6..40c106a4adec 100644
--- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java
@@ -18,6 +18,8 @@ package org.jetbrains.idea.maven.project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.jdom.Element;
@@ -453,45 +455,61 @@ public class MavenProjectReader {
}
}
- public MavenProjectReaderResult resolveProject(MavenGeneralSettings generalSettings,
- MavenEmbedderWrapper embedder,
- VirtualFile file,
- MavenExplicitProfiles explicitProfiles,
- MavenProjectReaderProjectLocator locator) throws MavenProcessCanceledException {
+ public Collection resolveProject(final MavenGeneralSettings generalSettings,
+ MavenEmbedderWrapper embedder,
+ Collection files,
+ final MavenExplicitProfiles explicitProfiles,
+ final MavenProjectReaderProjectLocator locator) throws MavenProcessCanceledException {
try {
- MavenServerExecutionResult result =
- embedder.resolveProject(file, explicitProfiles.getEnabledProfiles(), explicitProfiles.getDisabledProfiles());
- MavenServerExecutionResult.ProjectData projectData = result.projectData;
- if (projectData == null) {
- MavenProjectReaderResult temp = readProject(generalSettings, file, explicitProfiles, locator);
- temp.readingProblems.addAll(result.problems);
- temp.unresolvedArtifactIds.addAll(result.unresolvedArtifacts);
- return temp;
+ Collection executionResults =
+ embedder.resolveProject(files, explicitProfiles.getEnabledProfiles(), explicitProfiles.getDisabledProfiles());
+
+ Collection readerResults = ContainerUtil.newArrayList();
+ for (MavenServerExecutionResult result : executionResults) {
+ MavenServerExecutionResult.ProjectData projectData = result.projectData;
+ if (projectData == null) {
+ if(files.size() == 1) {
+ final VirtualFile file = files.iterator().next();
+ MavenProjectReaderResult temp = readProject(generalSettings, file, explicitProfiles, locator);
+ temp.readingProblems.addAll(result.problems);
+ temp.unresolvedArtifactIds.addAll(result.unresolvedArtifacts);
+ readerResults.add(temp);
+ }
+ }
+ else {
+ readerResults.add(new MavenProjectReaderResult(projectData.mavenModel,
+ projectData.mavenModelMap,
+ new MavenExplicitProfiles(projectData.activatedProfiles,
+ explicitProfiles.getDisabledProfiles()),
+ projectData.nativeMavenProject,
+ result.problems,
+ result.unresolvedArtifacts));
+ }
}
- return new MavenProjectReaderResult(projectData.mavenModel,
- projectData.mavenModelMap,
- new MavenExplicitProfiles(projectData.activatedProfiles, explicitProfiles.getDisabledProfiles()),
- projectData.nativeMavenProject,
- result.problems,
- result.unresolvedArtifacts);
+ return readerResults;
}
catch (MavenProcessCanceledException e) {
throw e;
}
- catch (Throwable e) {
+ catch (final Throwable e) {
MavenLog.LOG.info(e);
MavenLog.printInTests(e); // print exception since we need to know if something wrong with our logic
- MavenProjectReaderResult result = readProject(generalSettings, file, explicitProfiles, locator);
- String message = e.getMessage();
- if (message != null) {
- result.readingProblems.add(MavenProjectProblem.createStructureProblem(file.getPath(), message));
- }
- else {
- result.readingProblems.add(MavenProjectProblem.createSyntaxProblem(file.getPath(), MavenProjectProblem.ProblemType.SYNTAX));
- }
- return result;
+ return ContainerUtil.mapNotNull(files, new Function() {
+ @Override
+ public MavenProjectReaderResult fun(VirtualFile file) {
+ MavenProjectReaderResult result = readProject(generalSettings, file, explicitProfiles, locator);
+ String message = e.getMessage();
+ if (message != null) {
+ result.readingProblems.add(MavenProjectProblem.createStructureProblem(file.getPath(), message));
+ }
+ else {
+ result.readingProblems.add(MavenProjectProblem.createSyntaxProblem(file.getPath(), MavenProjectProblem.ProblemType.SYNTAX));
+ }
+ return result;
+ }
+ });
}
}
diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsBatchProcessorBasicTask.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsBatchProcessorBasicTask.java
new file mode 100644
index 000000000000..5423d6c46857
--- /dev/null
+++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsBatchProcessorBasicTask.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.idea.maven.project;
+
+import java.util.Collection;
+
+public abstract class MavenProjectsBatchProcessorBasicTask implements MavenProjectsProcessorTask {
+ protected final Collection myMavenProjects;
+ protected final MavenProjectsTree myTree;
+
+ public MavenProjectsBatchProcessorBasicTask(Collection mavenProjects, MavenProjectsTree tree) {
+ myMavenProjects = mavenProjects;
+ myTree = tree;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ return myMavenProjects.equals(((MavenProjectsBatchProcessorBasicTask)o).myMavenProjects);
+ }
+
+ @Override
+ public int hashCode() {
+ return myMavenProjects.hashCode();
+ }
+}
\ No newline at end of file
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 300f28e0e797..56a1b996d26e 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
@@ -850,25 +850,33 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
toResolve = new LinkedHashSet