eclipse jps: real levels first, then update elements after .classpath is already read (IDEA-94073)

(cherry picked from commit baeb96e7afad5aee2a0f2196b91ad9c101f9d017)
This commit is contained in:
anna
2013-03-15 21:57:05 +01:00
parent f3b23b6002
commit 53ce0d4d2c
2 changed files with 22 additions and 5 deletions
@@ -34,8 +34,17 @@ public abstract class AbstractIdeaSpecificSettings<T, C, SdkType> {
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<T, C, SdkType> {
readLibraryLevels(root, levels);
}
public void updateEntries(Element root, T model) {
public void initLevels(final Element root, T model, Map<String, String> 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) {
@@ -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<String>(), levels);
reader.readClasspath(module, null, document.getRootElement(), expander);//todo
if (settings != null) {
settings.updateEntries(root, module);
settings.updateEntries(root, module, projectSdkType);
}
}
catch (Exception e) {