From 733fc448db39b433866e641e94e86aa0545a2e45 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 7 Jul 2010 21:54:14 +0400 Subject: [PATCH] eclipse: rewrite src root in .eml if var is broken (IDEA-56333) --- .../conversion/EclipseClasspathWriter.java | 2 +- .../conversion/IdeaSpecificSettings.java | 18 ++---- .../testData/eml/srcInZip/test/srcInZip.eml | 2 + .../expected/.classpath | 5 ++ .../expected/ws-internals.eml | 8 +++ .../srcvariableidea1/test.jar | Bin 0 -> 840 bytes .../test/.classpath | 5 ++ .../test/.project | 17 ++++++ .../variableidea/test.jar | Bin 0 -> 840 bytes .../idea/eclipse/EclipseEmlTest.java | 10 +++- .../EclipseLibrariesModificationsTest.java | 56 ++++++++++++------ 11 files changed, 90 insertions(+), 33 deletions(-) create mode 100644 plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/.classpath create mode 100644 plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/expected/ws-internals.eml create mode 100644 plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/srcvariableidea1/test.jar create mode 100644 plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.classpath create mode 100644 plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/test/.project create mode 100644 plugins/eclipse/testData/modification/replacedExistingWithVariablesCantReplaceSrc/variableidea/test.jar 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 0000000000000000000000000000000000000000..69d35ecffe38daa9f5223585d031f42787e479ea GIT binary patch literal 840 zcmWIWW@h1H0D*&D*;Zf%l;C7wVeoYgan$wnbJPEKih&^js+5D_08pvpv?#qOpwcuT z76D?oQeQ_uPdC@#5ItYF&%S3)`*`c>UF7xF)jD_P{N^BoE5;9=7M*bxD%A1tIp-0| z(8Z{F_A5{2&Nakr?==Sg2p zDtA`wgu8`-VKbVuxq)s;P0qCj$a%FO#%hK-c`}?QrKSM!hEq7^&@0(dSlq0?$e0+Da{fl;IC-WIy zOFsln?A;q6t|c8WEMtHESyYOZ&`YOn7nDu%LzaEfU07EnCCFnh@7W~1!snZ~{zjcP zCBM{})76!FT^4%n%aW>E^sJ@XL2c!%v#AS`^v{U9D#=S!E>H~?wfD3=>FyI2zG}-Z z>AS8!gQRu0aPF<2%rW<@S#yP!u&=@Nr$X-G7H+-!85Lv>IW%Waj^tI7*GiVueOD3F znf>?;@0TdgZ4$FXH}lTE_)qY_!7|Yo>&`wGJs!XK^J$Olwxj^j c2(tPCsz&sL5#Y_r22#udg#UrGF%yUf0C~Xuh5!Hn literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..69d35ecffe38daa9f5223585d031f42787e479ea GIT binary patch literal 840 zcmWIWW@h1H0D*&D*;Zf%l;C7wVeoYgan$wnbJPEKih&^js+5D_08pvpv?#qOpwcuT z76D?oQeQ_uPdC@#5ItYF&%S3)`*`c>UF7xF)jD_P{N^BoE5;9=7M*bxD%A1tIp-0| z(8Z{F_A5{2&Nakr?==Sg2p zDtA`wgu8`-VKbVuxq)s;P0qCj$a%FO#%hK-c`}?QrKSM!hEq7^&@0(dSlq0?$e0+Da{fl;IC-WIy zOFsln?A;q6t|c8WEMtHESyYOZ&`YOn7nDu%LzaEfU07EnCCFnh@7W~1!snZ~{zjcP zCBM{})76!FT^4%n%aW>E^sJ@XL2c!%v#AS`^v{U9D#=S!E>H~?wfD3=>FyI2zG}-Z z>AS8!gQRu0aPF<2%rW<@S#yP!u&=@Nr$X-G7H+-!85Lv>IW%Waj^tI7*GiVueOD3F znf>?;@0TdgZ4$FXH}lTE_)qY_!7|Yo>&`wGJs!XK^J$Olwxj^j c2(tPCsz&sL5#Y_r22#udg#UrGF%yUf0C~Xuh5!Hn literal 0 HcmV?d00001 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