From 28f406c3a456c6dc1eb7c51f4f2bcde000f7434c Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 1 Mar 2013 13:23:46 +0100 Subject: [PATCH] eclipse: extend nature importer to provide specific cons --- .../src/AbstractEclipseClasspathReader.java | 23 +++++++------- .../src/EclipseModuleManager.java | 8 ++--- .../model/JpsEclipseClasspathReader.java | 5 +++ .../config/EclipseModuleManagerImpl.java | 12 +++---- .../conversion/EclipseClasspathReader.java | 6 ++++ .../conversion/EclipseClasspathWriter.java | 2 +- .../importWizard/EclipseNatureImporter.java | 31 +++++++++++++++++++ 7 files changed, 64 insertions(+), 23 deletions(-) diff --git a/plugins/eclipse/common-eclipse-util/src/AbstractEclipseClasspathReader.java b/plugins/eclipse/common-eclipse-util/src/AbstractEclipseClasspathReader.java index 22dce5bfe9f9..6b1f53e8bc99 100644 --- a/plugins/eclipse/common-eclipse-util/src/AbstractEclipseClasspathReader.java +++ b/plugins/eclipse/common-eclipse-util/src/AbstractEclipseClasspathReader.java @@ -68,6 +68,8 @@ public abstract class AbstractEclipseClasspathReader { String srcUrl, ExpandMacroToPathMap macroMap); protected abstract String expandEclipsePath2Url(T rootModel, String path); + protected abstract Set getDefinedCons(); + protected abstract int rearrange(T rootModel); protected void readClasspathEntry(T rootModel, @@ -197,18 +199,15 @@ public abstract class AbstractEclipseClasspathReader { else if (path.startsWith(EclipseXml.JUNIT_CONTAINER)) { final String junitName = IdeaXml.JUNIT + getPresentableName(path); addJUnitDefaultLib(rootModel, junitName, macroMap); - } - else if (path.equals(EclipseXml.GROOVY_DSL_CONTAINER)) { - eclipseModuleManager.addGroovySupport(EclipseXml.GROOVY_DSL_CONTAINER); - eclipseModuleManager.registerSrcPlace(EclipseXml.GROOVY_DSL_CONTAINER, idx); - } - else if (path.equals(EclipseXml.GROOVY_SUPPORT)) { - eclipseModuleManager.addGroovySupport(EclipseXml.GROOVY_SUPPORT); - eclipseModuleManager.registerSrcPlace(EclipseXml.GROOVY_SUPPORT, idx); - } - else { - eclipseModuleManager.registerUnknownCons(path); - addNamedLibrary(rootModel, new ArrayList(), exported, path, true); + } else { + final Set registeredCons = getDefinedCons(); + if (registeredCons.contains(path)) { + eclipseModuleManager.registerCon(path); + eclipseModuleManager.registerSrcPlace(path, idx); + } else { + eclipseModuleManager.registerUnknownCons(path); + addNamedLibrary(rootModel, new ArrayList(), exported, path, true); + } } } else { diff --git a/plugins/eclipse/common-eclipse-util/src/EclipseModuleManager.java b/plugins/eclipse/common-eclipse-util/src/EclipseModuleManager.java index 1aa34e21763d..1ef8e7492309 100644 --- a/plugins/eclipse/common-eclipse-util/src/EclipseModuleManager.java +++ b/plugins/eclipse/common-eclipse-util/src/EclipseModuleManager.java @@ -30,9 +30,9 @@ public interface EclipseModuleManager { @Nullable String getInvalidJdk(); - void addGroovySupport(String name); + void registerCon(String name); - String[] getGroovySupport(); + String[] getUsedCons(); void registerEclipseVariablePath(String path, String var); @@ -87,10 +87,10 @@ public interface EclipseModuleManager { } @Override - public void addGroovySupport(String name) {} + public void registerCon(String name) {} @Override - public String[] getGroovySupport() { + public String[] getUsedCons() { return ArrayUtil.EMPTY_STRING_ARRAY; } diff --git a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java index 5adca0bb5ed7..72a7065ba800 100644 --- a/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java +++ b/plugins/eclipse/jps-plugin/src/org/jetbrains/jps/eclipse/model/JpsEclipseClasspathReader.java @@ -200,6 +200,11 @@ class JpsEclipseClasspathReader extends AbstractEclipseClasspathReader getDefinedCons() { + return Collections.emptySet(); + } + @Override protected int rearrange(JpsModule rootModel) { diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java index 8ac2a9d1c500..0450e375ab64 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/config/EclipseModuleManagerImpl.java @@ -63,7 +63,7 @@ public class EclipseModuleManagerImpl implements EclipseModuleManager, Persisten private Map mySrcPlace = new LinkedHashMap(); private String myInvalidJdk; - private Set myGroovyDslSupport = new LinkedHashSet(); + private Set myKnownCons = new LinkedHashSet(); public EclipseModuleManagerImpl(Module module) { myModule = module; @@ -80,13 +80,13 @@ public class EclipseModuleManagerImpl implements EclipseModuleManager, Persisten } @Override - public void addGroovySupport(String name) { - myGroovyDslSupport.add(name); + public void registerCon(String name) { + myKnownCons.add(name); } @Override - public String[] getGroovySupport() { - return ArrayUtil.toStringArray(myGroovyDslSupport); + public String[] getUsedCons() { + return ArrayUtil.toStringArray(myKnownCons); } public static EclipseModuleManagerImpl getInstance(Module module) { @@ -260,7 +260,7 @@ public class EclipseModuleManagerImpl implements EclipseModuleManager, Persisten myEclipseVariablePaths.clear(); myUnknownCons.clear(); mySrcPlace.clear(); - myGroovyDslSupport.clear(); + myKnownCons.clear(); } @Override diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java index b02f00013e76..951d161f9354 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java @@ -41,6 +41,7 @@ import org.jdom.Element; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.eclipse.*; import org.jetbrains.idea.eclipse.config.EclipseModuleManagerImpl; +import org.jetbrains.idea.eclipse.importWizard.EclipseNatureImporter; import org.jetbrains.idea.eclipse.util.ErrorLog; import java.io.IOException; @@ -127,6 +128,11 @@ public class EclipseClasspathReader extends AbstractEclipseClasspathReader getDefinedCons() { + return EclipseNatureImporter.getAllDefinedCons(); + } + @Override protected void addModuleLibrary(ModifiableRootModel rootModel, Element element, 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 4234301c7661..598d74cfb3f0 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathWriter.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathWriter.java @@ -80,7 +80,7 @@ public class EclipseClasspathWriter { outputPath = EPathUtil.collapse2EclipsePath(compilerOutputUrl, myModel); } } - for (String support : eclipseModuleManager.getGroovySupport()) { + for (String support : eclipseModuleManager.getUsedCons()) { final Integer place = eclipseModuleManager.getSrcPlace(support); addOrderEntry(EclipseXml.CON_KIND, support, classpathElement, place != null ? place.intValue() : -1); } diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseNatureImporter.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseNatureImporter.java index ca0e33370f78..d496d24145b4 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseNatureImporter.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/importWizard/EclipseNatureImporter.java @@ -1,11 +1,30 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jetbrains.idea.eclipse.importWizard; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.NotNull; +import org.jetbrains.idea.eclipse.EclipseXml; import java.util.List; +import java.util.Set; /** * @author Eugene.Kudelevsky @@ -16,6 +35,18 @@ public abstract class EclipseNatureImporter { @NotNull public abstract String getNatureName(); + public abstract Set getProvidedCons(); public abstract void doImport(@NotNull Project project, @NotNull List modules); + + public static Set getAllDefinedCons() { + final Set allCons = new HashSet(); + allCons.add(EclipseXml.GROOVY_SUPPORT); + allCons.add(EclipseXml.GROOVY_DSL_CONTAINER); + + for (EclipseNatureImporter provider : Extensions.getExtensions(EP_NAME)) { + allCons.addAll(provider.getProvidedCons()); + } + return allCons; + } }