From 6409f9f6a36f5e27b70bdf1e37d66eeaf2e96f48 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 11 Mar 2013 11:33:24 +0100 Subject: [PATCH] eclipse: store package prefix in .eml (IDEA-100086); jps: update content entries after .classpath was read to make sure test folders/package prefix set up correctly --- .../common-eclipse-util/src/IdeaXml.java | 2 ++ .../AbstractIdeaSpecificSettings.java | 14 ++++++++----- .../model/JpsEclipseClasspathSerializer.java | 13 ++++++++++-- .../model/JpsIdeaSpecificSettings.java | 13 ++++++++++++ .../conversion/IdeaSpecificSettings.java | 21 +++++++++++++++++++ 5 files changed, 56 insertions(+), 7 deletions(-) diff --git a/plugins/eclipse/common-eclipse-util/src/IdeaXml.java b/plugins/eclipse/common-eclipse-util/src/IdeaXml.java index e10c3cbdf4e5..b32fe838f018 100644 --- a/plugins/eclipse/common-eclipse-util/src/IdeaXml.java +++ b/plugins/eclipse/common-eclipse-util/src/IdeaXml.java @@ -28,6 +28,8 @@ public interface IdeaXml { @NonNls String SOURCE_FOLDER_TAG = "sourceFolder"; @NonNls String CONTENT_ENTRY_TAG = "contentEntry"; @NonNls String TEST_FOLDER_TAG = "testFolder"; + @NonNls String PACKAGE_PREFIX_TAG = "packagePrefix"; + @NonNls String PACKAGE_PREFIX_VALUE_ATTR = "value"; @NonNls String EXCLUDE_FOLDER_TAG = "excludeFolder"; @NonNls String FOR_TESTS_ATTR = "forTests"; @NonNls String TRUE_VALUE = "true"; diff --git a/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java b/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java index eb586af7cb6d..2c79f70bad6e 100644 --- a/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java +++ b/plugins/eclipse/common-eclipse-util/src/conversion/AbstractIdeaSpecificSettings.java @@ -35,6 +35,15 @@ public abstract class AbstractIdeaSpecificSettings { setupCompilerOutputs(root, model); + updateEntries(root, model); + + setupJdk(root, model, projectSdkType); + setupLibraryRoots(root, model); + overrideModulesScopes(root, model); + readLibraryLevels(root, levels); + } + + public void updateEntries(Element root, T model) { final List entriesElements = root.getChildren(IdeaXml.CONTENT_ENTRY_TAG); if (!entriesElements.isEmpty()) { for (Object o : entriesElements) { @@ -46,11 +55,6 @@ public abstract class AbstractIdeaSpecificSettings { readContentEntry(root, entries[0], model); } } - - setupJdk(root, model, projectSdkType); - setupLibraryRoots(root, model); - overrideModulesScopes(root, model); - readLibraryLevels(root, levels); } protected abstract void readLibraryLevels(Element root, Map levels); 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 0da330c5437a..89ffff828eb4 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 @@ -48,15 +48,24 @@ public class JpsEclipseClasspathSerializer extends JpsModuleClasspathSerializer final String eml = module.getName() + EclipseXml.IDEA_SETTINGS_POSTFIX; final File emlFile = new File(baseModulePath, eml); final Map levels = new HashMap(); + final JpsIdeaSpecificSettings settings; + final Element root; if (emlFile.isFile()) { final Document emlDocument = JDOMUtil.loadDocument(emlFile); - final Element root = emlDocument.getRootElement(); - new JpsIdeaSpecificSettings(expander).readIDEASpecific(root, module, projectSdkType, levels); + root = emlDocument.getRootElement(); + settings = new JpsIdeaSpecificSettings(expander); + settings.readIDEASpecific(root, module, projectSdkType, levels); + } else { + settings = null; + root = null; } final Document document = JDOMUtil.loadDocument(classpathFile); 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); + } } catch (Exception e) { LOG.info(e); diff --git a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsIdeaSpecificSettings.java b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsIdeaSpecificSettings.java index b738011f7587..593ce86b4f0b 100644 --- a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsIdeaSpecificSettings.java +++ b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsIdeaSpecificSettings.java @@ -24,6 +24,7 @@ import org.jdom.Element; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.eclipse.IdeaXml; import org.jetbrains.idea.eclipse.conversion.AbstractIdeaSpecificSettings; +import org.jetbrains.jps.model.JpsSimpleElement; import org.jetbrains.jps.model.java.*; import org.jetbrains.jps.model.library.sdk.JpsSdkType; import org.jetbrains.jps.model.module.JpsDependenciesList; @@ -159,6 +160,18 @@ class JpsIdeaSpecificSettings extends AbstractIdeaSpecificSettings