diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathWriter.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathWriter.java
index 78879defff23..f134e7c376ea 100644
--- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathWriter.java
+++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathWriter.java
@@ -159,7 +159,7 @@ public class EclipseClasspathWriter {
}
}
}
- if (addSrcRoots) setOrRemoveAttribute(orderEntry, EclipseXml.SOURCEPATH_ATTR, eclipseSrcVariablePath != null ? eclipseSrcVariablePath : srcRelativePath);
+ setOrRemoveAttribute(orderEntry, EclipseXml.SOURCEPATH_ATTR, addSrcRoots ? (eclipseSrcVariablePath != null ? eclipseSrcVariablePath : srcRelativePath) : null);
EJavadocUtil.setupJavadocAttributes(orderEntry, libraryOrderEntry, myModel);
setExported(orderEntry, libraryOrderEntry);
diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/IdeaSpecificSettings.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/IdeaSpecificSettings.java
index 9eacfd3fc948..03f12a76291e 100644
--- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/IdeaSpecificSettings.java
+++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/IdeaSpecificSettings.java
@@ -240,20 +240,10 @@ public class IdeaSpecificSettings {
element.setAttribute("scope", scope.name());
if (((LibraryOrderEntry)entry).isModuleLevel()) {
final String[] urls = entry.getUrls(OrderRootType.SOURCES);
- if (urls.length > 1) {
- for (String url : urls) {
- Element srcElement = new Element(SRCROOT_ATTR);
- srcElement.setAttribute("url", url);
- element.addContent(srcElement);
- }
- }
- else if (urls.length == 1 && urls[0].contains(JarFileSystem.JAR_SEPARATOR)) {
- final VirtualFile virtualFile = JarFileSystem.getInstance().findFileByPath(VfsUtil.urlToPath(urls[0]));
- if (virtualFile != null) {
- Element srcElement = new Element(SRCROOT_ATTR);
- srcElement.setAttribute("url", urls[0]);
- element.addContent(srcElement);
- }
+ for (String url : urls) {
+ Element srcElement = new Element(SRCROOT_ATTR);
+ srcElement.setAttribute("url", url);
+ element.addContent(srcElement);
}
for (String srcUrl : entry.getUrls(OrderRootType.SOURCES)) {
diff --git a/plugins/eclipse/testData/eml/srcInZip/test/srcInZip.eml b/plugins/eclipse/testData/eml/srcInZip/test/srcInZip.eml
index 4ff5ffac6447..418b83538ae0 100644
--- a/plugins/eclipse/testData/eml/srcInZip/test/srcInZip.eml
+++ b/plugins/eclipse/testData/eml/srcInZip/test/srcInZip.eml
@@ -4,5 +4,7 @@
+
+
\ No newline at end of file
diff --git a/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/.classpath b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/.classpath
new file mode 100644
index 000000000000..8fb44aaed0aa
--- /dev/null
+++ b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/.classpath
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/ws-internals.eml b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/ws-internals.eml
new file mode 100644
index 000000000000..aeb218a20352
--- /dev/null
+++ b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/ws-internals.eml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/srcvariableidea1/test.jar b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/srcvariableidea1/test.jar
new file mode 100644
index 000000000000..69d35ecffe38
Binary files /dev/null and b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/srcvariableidea1/test.jar differ
diff --git a/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.classpath b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.classpath
new file mode 100644
index 000000000000..e6552e05aca7
--- /dev/null
+++ b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.classpath
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.project b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.project
new file mode 100644
index 000000000000..3c7030a86519
--- /dev/null
+++ b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.project
@@ -0,0 +1,17 @@
+
+
+ ws-internals
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/variableidea/test.jar b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/variableidea/test.jar
new file mode 100644
index 000000000000..69d35ecffe38
Binary files /dev/null and b/plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/variableidea/test.jar differ
diff --git a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseEmlTest.java b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseEmlTest.java
index 310654b895f9..4bde31d949ef 100644
--- a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseEmlTest.java
+++ b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseEmlTest.java
@@ -31,6 +31,7 @@ import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.SystemInfo;
+import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.testFramework.IdeaTestCase;
@@ -76,11 +77,18 @@ public class EclipseEmlTest extends IdeaTestCase {
final EclipseClasspathStorageProvider.EclipseClasspathConverter converter =
new EclipseClasspathStorageProvider.EclipseClasspathConverter(module);
- final ModifiableRootModel rootModel = ModuleRootManager.getInstance(module).getModifiableModel();
+ ModifiableRootModel rootModel = ModuleRootManager.getInstance(module).getModifiableModel();
final Element classpathElement = JDOMUtil.loadDocument(new String(FileUtil.loadFileText(new File(path, EclipseXml.DOT_CLASSPATH_EXT)))).getRootElement();
converter.getClasspath(rootModel, classpathElement);
+ rootModel.commit();
+ checkModule(path, module);
+ }
+
+ protected static void checkModule(String path, Module module) throws WriteExternalException, IOException, JDOMException {
+ ModifiableRootModel rootModel;
+ rootModel = ModuleRootManager.getInstance(module).getModifiableModel();
final Element root = new Element("component");
IdeaSpecificSettings.writeIDEASpecificClasspath(root, rootModel);
rootModel.dispose();
diff --git a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseLibrariesModificationsTest.java b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseLibrariesModificationsTest.java
index cb3db4aecdd1..15a431bc6764 100644
--- a/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseLibrariesModificationsTest.java
+++ b/plugins/eclipse/testSources/org/jetbrains/idea/eclipse/EclipseLibrariesModificationsTest.java
@@ -34,7 +34,7 @@ import java.util.Map;
public class EclipseLibrariesModificationsTest extends EclipseVarsTest {
- private void doTest(String[] classRoots, String[] sourceRoots) throws Exception {
+ private void doTestCreate(String[] classRoots, String[] sourceRoots) throws Exception {
final Project project = getProject();
final String path = project.getBaseDir().getPath() + "/test";
final Module module = EclipseClasspathTest.setUpModule(path, project);
@@ -54,38 +54,60 @@ public class EclipseLibrariesModificationsTest extends EclipseVarsTest {
}
public void testReplacedWithVariables() throws Exception {
- doTest(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
+ doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
}
public void testCantReplaceWithVariables() throws Exception {
- doTest(new String[]{"/variableidea1/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
+ doTestCreate(new String[]{"/variableidea1/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
}
public void testReplacedWithVariablesNoSrcExistOnDisc() throws Exception {
- doTest(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
+ doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea/test.jar!/"});
}
public void testReplacedWithVariablesCantReplaceSrc() throws Exception {
- doTest(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea1/test.jar!/"});
+ doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea1/test.jar!/"});
}
public void testReplacedWithVariablesNoSources() throws Exception {
- doTest(new String[]{"/variableidea/test.jar!/"}, new String[]{});
+ doTestCreate(new String[]{"/variableidea/test.jar!/"}, new String[]{});
+ }
+
+ public void testReplacedExistingWithVariablesCantReplaceSrc() throws Exception {
+ doTestExisting(new String[]{"/variableidea/test.jar!/"}, new String[]{"/srcvariableidea1/test.jar!/"});
+ }
+
+ private void doTestExisting(String[] classRoots, String[] sourceRoots) throws Exception {
+ final Project project = getProject();
+ final String path = project.getBaseDir().getPath() + "/test";
+ final Module module = EclipseClasspathTest.setUpModule(path, project);
+ final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel();
+ final String parentUrl = VirtualFileManager.constructUrl(JarFileSystem.PROTOCOL, model.getContentRoots()[0].getParent().getPath());
+ final Library library = model.getModuleLibraryTable().getLibraryByName("test.jar");
+ final Library.ModifiableModel libModifiableModel = library.getModifiableModel();
+ final String[] oldClsRoots = libModifiableModel.getUrls(OrderRootType.CLASSES);
+ for (String oldClsRoot : oldClsRoots) {
+ libModifiableModel.removeRoot(oldClsRoot, OrderRootType.CLASSES);
+ }
+
+ final String[] oldSrcRoots = libModifiableModel.getUrls(OrderRootType.SOURCES);
+ for (String oldSrcRoot : oldSrcRoots) {
+ libModifiableModel.removeRoot(oldSrcRoot, OrderRootType.SOURCES);
+ }
+ for (String classRoot : classRoots) {
+ libModifiableModel.addRoot(parentUrl + classRoot, OrderRootType.CLASSES);
+ }
+ for (String sourceRoot : sourceRoots) {
+ libModifiableModel.addRoot(parentUrl + sourceRoot, OrderRootType.SOURCES);
+ }
+ libModifiableModel.commit();
+ model.commit();
+ EclipseClasspathTest.checkModule(project.getBaseDir().getPath() + "/expected", module);
+ EclipseEmlTest.checkModule(project.getBaseDir().getPath() + "/expected", module);
}
@Override
protected String getRelativeTestPath() {
return "modification";
}
-
- enum Bar{
- ONE;
- }
- class Foo {
- void foo(String each) {
- Map map = new HashMap();
- map.put(new Foo(), Bar.ONE);
- }
- }
-
}
\ No newline at end of file