From 53ce0d4d2c8ebe457b03dfde86f50a35c74af34b Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 14 Mar 2013 13:08:17 +0100 Subject: [PATCH] eclipse jps: real levels first, then update elements after .classpath is already read (IDEA-94073) (cherry picked from commit baeb96e7afad5aee2a0f2196b91ad9c101f9d017) --- .../AbstractIdeaSpecificSettings.java | 23 ++++++++++++++++--- .../model/JpsEclipseClasspathSerializer.java | 4 ++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java b/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java index 2c79f70bad6e..3218f3a4d2ac 100644 --- a/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java +++ b/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java @@ -34,8 +34,17 @@ public abstract class AbstractIdeaSpecificSettings { readLanguageLevel(root, model); setupCompilerOutputs(root, model); - - updateEntries(root, model); + final List entriesElements = root.getChildren(IdeaXml.CONTENT_ENTRY_TAG); + if (!entriesElements.isEmpty()) { + for (Object o : entriesElements) { + readContentEntry((Element)o, createContentEntry(model, ((Element)o).getAttributeValue(IdeaXml.URL_ATTR)), model); + } + } else { + final C[] entries = getEntries(model);//todo + if (entries.length > 0) { + readContentEntry(root, entries[0], model); + } + } setupJdk(root, model, projectSdkType); setupLibraryRoots(root, model); @@ -43,7 +52,15 @@ public abstract class AbstractIdeaSpecificSettings { readLibraryLevels(root, levels); } - public void updateEntries(Element root, T model) { + public void initLevels(final Element root, T model, Map levels) throws InvalidDataException { + expandElement(root, model); + readLanguageLevel(root, model); + readLibraryLevels(root, levels); + } + + public void updateEntries(Element root, T model, @Nullable SdkType projectSdkType) { + setupJdk(root, model, projectSdkType); + setupCompilerOutputs(root, model); final List entriesElements = root.getChildren(IdeaXml.CONTENT_ENTRY_TAG); if (!entriesElements.isEmpty()) { for (Object o : entriesElements) { diff --git a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathSerializer.java b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathSerializer.java index 89ffff828eb4..c7124f8ca8ea 100644 --- a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathSerializer.java +++ b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathSerializer.java @@ -54,7 +54,7 @@ public class JpsEclipseClasspathSerializer extends JpsModuleClasspathSerializer final Document emlDocument = JDOMUtil.loadDocument(emlFile); root = emlDocument.getRootElement(); settings = new JpsIdeaSpecificSettings(expander); - settings.readIDEASpecific(root, module, projectSdkType, levels); + settings.initLevels(root, module, levels); } else { settings = null; root = null; @@ -64,7 +64,7 @@ public class JpsEclipseClasspathSerializer extends JpsModuleClasspathSerializer final JpsEclipseClasspathReader reader = new JpsEclipseClasspathReader(classpathDir, paths, new HashSet(), levels); reader.readClasspath(module, null, document.getRootElement(), expander);//todo if (settings != null) { - settings.updateEntries(root, module); + settings.updateEntries(root, module, projectSdkType); } } catch (Exception e) {