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();