eclipse: extend nature importer to provide specific cons

This commit is contained in:
anna
2013-03-01 13:33:51 +01:00
parent b17bf92eaf
commit 28f406c3a4
7 changed files with 64 additions and 23 deletions
@@ -68,6 +68,8 @@ public abstract class AbstractEclipseClasspathReader<T> {
String srcUrl, ExpandMacroToPathMap macroMap);
protected abstract String expandEclipsePath2Url(T rootModel, String path);
protected abstract Set<String> getDefinedCons();
protected abstract int rearrange(T rootModel);
protected void readClasspathEntry(T rootModel,
@@ -197,18 +199,15 @@ public abstract class AbstractEclipseClasspathReader<T> {
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<String>(), exported, path, true);
} else {
final Set<String> registeredCons = getDefinedCons();
if (registeredCons.contains(path)) {
eclipseModuleManager.registerCon(path);
eclipseModuleManager.registerSrcPlace(path, idx);
} else {
eclipseModuleManager.registerUnknownCons(path);
addNamedLibrary(rootModel, new ArrayList<String>(), exported, path, true);
}
}
}
else {
@@ -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;
}
@@ -200,6 +200,11 @@ class JpsEclipseClasspathReader extends AbstractEclipseClasspathReader<JpsModule
return prepareValidUrlInsideJar(url);
}
@Override
protected Set<String> getDefinedCons() {
return Collections.emptySet();
}
@Override
protected int rearrange(JpsModule rootModel) {
@@ -63,7 +63,7 @@ public class EclipseModuleManagerImpl implements EclipseModuleManager, Persisten
private Map<String, Integer> mySrcPlace = new LinkedHashMap<String, Integer>();
private String myInvalidJdk;
private Set<String> myGroovyDslSupport = new LinkedHashSet<String>();
private Set<String> myKnownCons = new LinkedHashSet<String>();
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
@@ -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<Modif
return EPathUtil.expandEclipsePath2Url(path, rootModel, myCurrentRoots);
}
@Override
protected Set<String> getDefinedCons() {
return EclipseNatureImporter.getAllDefinedCons();
}
@Override
protected void addModuleLibrary(ModifiableRootModel rootModel,
Element element,
@@ -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);
}
@@ -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<String> getProvidedCons();
public abstract void doImport(@NotNull Project project, @NotNull List<Module> modules);
public static Set<String> getAllDefinedCons() {
final Set<String> allCons = new HashSet<String>();
allCons.add(EclipseXml.GROOVY_SUPPORT);
allCons.add(EclipseXml.GROOVY_DSL_CONTAINER);
for (EclipseNatureImporter provider : Extensions.getExtensions(EP_NAME)) {
allCons.addAll(provider.getProvidedCons());
}
return allCons;
}
}