From 5e8fcf2e27f972a357fc4160c654050d5f182143 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 28 Jan 2013 13:00:17 +0400 Subject: [PATCH] IDEA-99692: Eclipse import: Java compilation fails due to incorrect classpath --- .../module/JpsModuleRootModelSerializer.java | 15 +++++----- .../duplicatedModuleLibrary.iml | 28 +++++++++++++++++++ .../duplicatedModuleLibrary.ipr | 12 ++++++++ .../JpsProjectSerializationTest.java | 15 ++++++++++ 4 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.iml create mode 100644 jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.ipr diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/module/JpsModuleRootModelSerializer.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/module/JpsModuleRootModelSerializer.java index 2f281130f0ff..183ad94d0b8f 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/module/JpsModuleRootModelSerializer.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/module/JpsModuleRootModelSerializer.java @@ -17,6 +17,7 @@ package org.jetbrains.jps.model.serialization.module; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.text.UniqueNameGenerator; import org.jdom.Element; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsCompositeElement; @@ -29,16 +30,14 @@ import org.jetbrains.jps.model.java.JpsJavaSdkType; import org.jetbrains.jps.model.java.JpsJavaSdkTypeWrapper; import org.jetbrains.jps.model.library.JpsLibrary; import org.jetbrains.jps.model.library.JpsLibraryReference; -import org.jetbrains.jps.model.library.sdk.JpsSdkType; import org.jetbrains.jps.model.library.sdk.JpsSdkReference; +import org.jetbrains.jps.model.library.sdk.JpsSdkType; import org.jetbrains.jps.model.module.*; import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension; import org.jetbrains.jps.model.serialization.library.JpsLibraryTableSerializer; import org.jetbrains.jps.model.serialization.library.JpsSdkTableSerializer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; import static com.intellij.openapi.util.JDOMUtil.getChildren; @@ -89,7 +88,7 @@ public class JpsModuleRootModelSerializer { final JpsDependenciesList dependenciesList = module.getDependenciesList(); dependenciesList.clear(); final JpsElementFactory elementFactory = JpsElementFactory.getInstance(); - int moduleLibraryNum = 0; + UniqueNameGenerator nameGenerator = new UniqueNameGenerator(); for (Element orderEntry : getChildren(rootModelComponent, ORDER_ENTRY_TAG)) { String type = orderEntry.getAttributeValue(TYPE_ATTRIBUTE); if (SOURCE_FOLDER_TYPE.equals(type)) { @@ -120,14 +119,14 @@ public class JpsModuleRootModelSerializer { final Element moduleLibraryElement = orderEntry.getChild(LIBRARY_TAG); String name = moduleLibraryElement.getAttributeValue(NAME_ATTRIBUTE); if (name == null) { - name = GENERATED_LIBRARY_NAME_PREFIX + (moduleLibraryNum++); + name = GENERATED_LIBRARY_NAME_PREFIX; } - final JpsLibrary library = JpsLibraryTableSerializer.loadLibrary(moduleLibraryElement, name); + String uniqueName = nameGenerator.generateUniqueName(name); + final JpsLibrary library = JpsLibraryTableSerializer.loadLibrary(moduleLibraryElement, uniqueName); module.addModuleLibrary(library); final JpsLibraryDependency dependency = dependenciesList.addLibraryDependency(library); loadModuleDependencyProperties(dependency, orderEntry); - moduleLibraryNum++; } else if (MODULE_TYPE.equals(type)) { String name = orderEntry.getAttributeValue(MODULE_NAME_ATTRIBUTE); diff --git a/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.iml b/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.iml new file mode 100644 index 000000000000..fcefc008fcc5 --- /dev/null +++ b/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.ipr b/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.ipr new file mode 100644 index 000000000000..356fca8c2362 --- /dev/null +++ b/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.ipr @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java index 99004411f88b..3ed4336709c4 100644 --- a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java +++ b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java @@ -28,6 +28,7 @@ import org.jetbrains.jps.model.java.JpsJavaDependencyScope; import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.jps.model.java.JpsJavaSdkType; import org.jetbrains.jps.model.library.JpsLibrary; +import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.model.library.sdk.JpsSdkReference; import org.jetbrains.jps.model.module.*; import org.jetbrains.jps.model.serialization.library.JpsLibraryTableSerializer; @@ -120,6 +121,20 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase { assertEquals(JpsJavaDependencyScope.COMPILE, extension.getScope()); } + public void testDuplicatedModuleLibrary() { + loadProject("/jps/model-serialization/testData/duplicatedModuleLibrary/duplicatedModuleLibrary.ipr"); + JpsModule module = assertOneElement(myProject.getModules()); + List dependencies = module.getDependenciesList().getDependencies(); + assertEquals(4, dependencies.size()); + JpsLibrary lib1 = assertInstanceOf(dependencies.get(2), JpsLibraryDependency.class).getLibrary(); + assertNotNull(lib1); + assertSameElements(lib1.getRootUrls(JpsOrderRootType.COMPILED), getUrl("data/lib1")); + JpsLibrary lib2 = assertInstanceOf(dependencies.get(3), JpsLibraryDependency.class).getLibrary(); + assertNotSame(lib1, lib2); + assertNotNull(lib2); + assertSameElements(lib2.getRootUrls(JpsOrderRootType.COMPILED), getUrl("data/lib2")); + } + public void testLoadEncoding() { loadProject(SAMPLE_PROJECT_PATH); JpsEncodingConfigurationService service = JpsEncodingConfigurationService.getInstance();