loading jps model from eclipse .classpath files: initial

This commit is contained in:
nik
2012-09-03 09:26:36 +04:00
parent 35d583b485
commit 446b4da83f
16 changed files with 142 additions and 18 deletions
+1
View File
@@ -38,6 +38,7 @@
<module fileurl="file://$PROJECT_DIR$/xml/dom-openapi/dom-openapi.iml" filepath="$PROJECT_DIR$/xml/dom-openapi/dom-openapi.iml" group="xml" />
<module fileurl="file://$PROJECT_DIR$/xml/dom-tests/dom-tests.iml" filepath="$PROJECT_DIR$/xml/dom-tests/dom-tests.iml" group="xml" />
<module fileurl="file://$PROJECT_DIR$/plugins/eclipse/eclipse.iml" filepath="$PROJECT_DIR$/plugins/eclipse/eclipse.iml" group="plugins" />
<module fileurl="file://$PROJECT_DIR$/plugins/eclipse/jps-plugin/eclipse-jps-plugin.iml" filepath="$PROJECT_DIR$/plugins/eclipse/jps-plugin/eclipse-jps-plugin.iml" group="plugins" />
<module fileurl="file://$PROJECT_DIR$/java/execution/impl/execution-impl.iml" filepath="$PROJECT_DIR$/java/execution/impl/execution-impl.iml" group="java" />
<module fileurl="file://$PROJECT_DIR$/java/execution/openapi/execution-openapi.iml" filepath="$PROJECT_DIR$/java/execution/openapi/execution-openapi.iml" group="java" />
<module fileurl="file://$PROJECT_DIR$/platform/extensions/extensions.iml" filepath="$PROJECT_DIR$/platform/extensions/extensions.iml" group="platform" />
+6 -1
View File
@@ -204,7 +204,7 @@ def layoutFull(String home, String targetDirectory, String patchedDescriptorDir
public def layoutCommunityPlugins(String home) {
dir("plugins") {
def simplePlugins = ["commander", "copyright", "properties", "java-i18n", "eclipse", "hg4idea", "github", "ui-designer-new"]
def simplePlugins = ["commander", "copyright", "properties", "java-i18n", "hg4idea", "github", "ui-designer-new"]
simplePlugins.each {
layoutPlugin it
@@ -364,6 +364,11 @@ public def layoutCommunityPlugins(String home) {
}
}
}
layoutPlugin("eclipse") {
jar("eclipse-jps-plugin.jar") {
module("eclipse-jps-plugin")
}
}
layoutPlugin("android") {
fileset(dir: "${home}/plugins/android/lib") {
@@ -13,6 +13,7 @@ import org.jetbrains.jps.model.serialization.facet.JpsFacetConfigurationSerializ
import org.jetbrains.jps.model.serialization.library.JpsLibraryPropertiesSerializer;
import org.jetbrains.jps.model.serialization.library.JpsLibraryRootTypeSerializer;
import org.jetbrains.jps.model.serialization.library.JpsSdkPropertiesSerializer;
import org.jetbrains.jps.model.serialization.module.JpsModuleClasspathSerializer;
import org.jetbrains.jps.model.serialization.module.JpsModulePropertiesSerializer;
import org.jetbrains.jps.service.JpsServiceManager;
@@ -94,4 +95,9 @@ public abstract class JpsModelSerializerExtension {
public List<? extends JpsArtifactPropertiesSerializer<?>> getArtifactTypePropertiesSerializers() {
return Collections.emptyList();
}
@Nullable
public JpsModuleClasspathSerializer getClasspathSerializer() {
return null;
}
}
@@ -18,6 +18,7 @@ import org.jetbrains.jps.model.serialization.artifact.JpsArtifactSerializer;
import org.jetbrains.jps.model.serialization.facet.JpsFacetSerializer;
import org.jetbrains.jps.model.serialization.library.JpsLibraryTableSerializer;
import org.jetbrains.jps.model.serialization.library.JpsSdkTableSerializer;
import org.jetbrains.jps.model.serialization.module.JpsModuleClasspathSerializer;
import org.jetbrains.jps.model.serialization.module.JpsModulePropertiesSerializer;
import org.jetbrains.jps.model.serialization.module.JpsModuleRootModelSerializer;
import org.jetbrains.jps.service.SharedThreadPool;
@@ -36,6 +37,8 @@ import java.util.concurrent.Future;
*/
public class JpsProjectLoader extends JpsLoaderBase {
private static final BoundedTaskExecutor ourThreadPool = new BoundedTaskExecutor(SharedThreadPool.getInstance(), Runtime.getRuntime().availableProcessors());
public static final String CLASSPATH_ATTRIBUTE = "classpath";
public static final String CLASSPATH_DIR_ATTRIBUTE = "classpath-dir";
private final JpsProject myProject;
private final Map<String, String> myPathVariables;
@@ -169,11 +172,23 @@ public class JpsProjectLoader extends JpsLoaderBase {
final String typeId = moduleRoot.getAttributeValue("type");
final JpsModulePropertiesSerializer<?> serializer = getModulePropertiesSerializer(typeId);
final JpsModule module = createModule(name, moduleRoot, serializer);
JpsModuleRootModelSerializer
.loadRootModel(module, JDomSerializationUtil.findComponent(moduleRoot, "NewModuleRootManager"), projectSdkType);
final String moduleDirPath = file.getParent();
JpsFacetSerializer.loadFacets(module, JDomSerializationUtil.findComponent(moduleRoot, "FacetManager"),
FileUtil.toSystemIndependentName(moduleDirPath));
String baseModulePath = FileUtil.toSystemIndependentName(file.getParent());
String classpath = moduleRoot.getAttributeValue(CLASSPATH_ATTRIBUTE);
if (classpath == null) {
JpsModuleRootModelSerializer.loadRootModel(module, JDomSerializationUtil.findComponent(moduleRoot, "NewModuleRootManager"),
projectSdkType);
}
else {
for (JpsModelSerializerExtension extension : JpsModelSerializerExtension.getExtensions()) {
JpsModuleClasspathSerializer classpathSerializer = extension.getClasspathSerializer();
if (classpathSerializer != null && classpathSerializer.getClasspathId().equals(classpath)) {
String classpathDir = moduleRoot.getAttributeValue(CLASSPATH_DIR_ATTRIBUTE);
classpathSerializer.loadClasspath(module, classpathDir, baseModulePath);
}
}
}
JpsFacetSerializer.loadFacets(module, JDomSerializationUtil.findComponent(moduleRoot, "FacetManager"), baseModulePath);
return module;
}
@@ -0,0 +1,22 @@
package org.jetbrains.jps.model.serialization.module;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.module.JpsModule;
/**
* @author nik
*/
public abstract class JpsModuleClasspathSerializer {
private final String myClasspathId;
protected JpsModuleClasspathSerializer(String classpathId) {
myClasspathId = classpathId;
}
public final String getClasspathId() {
return myClasspathId;
}
public abstract void loadClasspath(@NotNull JpsModule module, @Nullable String classpathDir, @NotNull String baseModulePath);
}
@@ -50,6 +50,7 @@ import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.JpsProjectLoader;
import java.io.File;
import java.io.IOException;
@@ -69,8 +70,8 @@ public class ClasspathStorage implements StateStorage {
public static final String DEFAULT_STORAGE_DESCR = ProjectBundle.message("project.roots.classpath.format.default.descr");
@NonNls public static final String CLASSPATH_OPTION = "classpath";
@NonNls public static final String CLASSPATH_DIR_OPTION = "classpath-dir";
@NonNls public static final String CLASSPATH_OPTION = JpsProjectLoader.CLASSPATH_ATTRIBUTE;
@NonNls public static final String CLASSPATH_DIR_OPTION = JpsProjectLoader.CLASSPATH_DIR_ATTRIBUTE;
@NonNls private static final String COMPONENT_TAG = "component";
private Object mySession;
+1
View File
@@ -19,6 +19,7 @@
<orderEntry type="module" module-name="idea-ui" />
<orderEntry type="module" module-name="annotations" />
<orderEntry type="module" module-name="java-impl" />
<orderEntry type="module" module-name="eclipse-jps-plugin" />
</component>
</module>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="util" />
<orderEntry type="module" module-name="jps-model-api" />
<orderEntry type="module" module-name="jps-model-serialization" />
</component>
</module>
@@ -0,0 +1 @@
org.jetbrains.jps.eclipse.model.JpsEclipseModelSerializerExtension
@@ -0,0 +1,22 @@
package org.jetbrains.jps.eclipse.model;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.module.JpsModule;
import org.jetbrains.jps.model.serialization.module.JpsModuleClasspathSerializer;
/**
* @author nik
*/
public class JpsEclipseClasspathSerializer extends JpsModuleClasspathSerializer {
@NonNls public static final String CLASSPATH_STORAGE_ID = "eclipse";
public JpsEclipseClasspathSerializer() {
super(CLASSPATH_STORAGE_ID);
}
@Override
public void loadClasspath(@NotNull JpsModule module, @Nullable String classpathDir, @NotNull String baseModulePath) {
}
}
@@ -0,0 +1,33 @@
/*
* Copyright 2000-2012 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.jps.eclipse.model;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension;
import org.jetbrains.jps.model.serialization.module.JpsModuleClasspathSerializer;
/**
* @author nik
*/
public class JpsEclipseModelSerializerExtension extends JpsModelSerializerExtension {
private static final JpsEclipseClasspathSerializer CLASSPATH_SERIALIZER = new JpsEclipseClasspathSerializer();
@Nullable
@Override
public JpsModuleClasspathSerializer getClasspathSerializer() {
return CLASSPATH_SERIALIZER;
}
}
@@ -6,6 +6,7 @@
<vendor url="http://www.jetbrains.com" logo="/general/ijLogo.png">JetBrains s.r.o.</vendor>
<extensions defaultExtensionNs="com.intellij">
<classpathStorageProvider implementation="org.jetbrains.idea.eclipse.config.EclipseClasspathStorageProvider"/>
<compileServer.plugin classpath="eclipse-jps-plugin.jar"/>
<projectImportProvider implementation="org.jetbrains.idea.eclipse.importWizard.EclipseProjectImportProvider"/>
<projectOpenProcessor id="EclipseProjectOpenProcessor" implementation="org.jetbrains.idea.eclipse.importWizard.EclipseProjectOpenProcessor"/>
<projectImportBuilder implementation="org.jetbrains.idea.eclipse.importWizard.EclipseImportBuilder"/>
@@ -39,6 +39,7 @@ import org.jetbrains.idea.eclipse.EclipseBundle;
import org.jetbrains.idea.eclipse.EclipseXml;
import org.jetbrains.idea.eclipse.IdeaXml;
import org.jetbrains.idea.eclipse.conversion.*;
import org.jetbrains.jps.eclipse.model.JpsEclipseClasspathSerializer;
import java.io.File;
import java.io.IOException;
@@ -50,12 +51,11 @@ import java.util.Set;
* @author Vladislav.Kaznacheev
*/
public class EclipseClasspathStorageProvider implements ClasspathStorageProvider {
@NonNls public static final String ID = "eclipse";
public static final String DESCR = EclipseBundle.message("eclipse.classpath.storage.description");
@NonNls
public String getID() {
return ID;
return JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID;
}
@Nls
@@ -144,7 +144,7 @@ public class EclipseClasspathStorageProvider implements ClasspathStorageProvider
}
public void moduleRenamed(final Module module, String newName) {
if (ClasspathStorage.getStorageType(module).equals(ID)) {
if (ClasspathStorage.getStorageType(module).equals(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID)) {
try {
final CachedXmlDocumentSet documentSet = getFileCache(module);
@@ -25,6 +25,7 @@ import com.intellij.openapi.roots.impl.storage.ClasspathStorage;
import com.intellij.openapi.util.text.StringUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.jps.eclipse.model.JpsEclipseClasspathSerializer;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -154,7 +155,7 @@ public class EclipseModuleManager implements PersistentStateComponent<Element>{
}
public Element getState() {
if (!ClasspathStorage.getStorageType(myModule).equals(EclipseClasspathStorageProvider.ID)) {
if (!ClasspathStorage.getStorageType(myModule).equals(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID)) {
if (!myEclipseUrls.isEmpty() || !myEclipseVariablePaths.isEmpty() || myForceConfigureJDK || !myUnknownCons.isEmpty()) {
Element root = new Element("EclipseModuleSettings");
for (String eclipseUrl : myEclipseUrls) {
@@ -40,8 +40,8 @@ import org.jdom.output.EclipseJDOMUtil;
import org.jetbrains.idea.eclipse.EclipseBundle;
import org.jetbrains.idea.eclipse.EclipseXml;
import org.jetbrains.idea.eclipse.IdeaXml;
import org.jetbrains.idea.eclipse.config.EclipseClasspathStorageProvider;
import org.jetbrains.idea.eclipse.conversion.*;
import org.jetbrains.jps.eclipse.model.JpsEclipseClasspathSerializer;
import java.io.File;
import java.io.IOException;
@@ -64,9 +64,9 @@ public class ExportEclipseProjectsAction extends AnAction implements DumbAware {
final List<Module> modules = new ArrayList<Module>();
final List<Module> incompatibleModules = new ArrayList<Module>();
for (Module module : ModuleManager.getInstance(project).getModules()) {
if (!EclipseClasspathStorageProvider.ID.equals(ClasspathStorage.getStorageType(module))) {
if (!JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID.equals(ClasspathStorage.getStorageType(module))) {
try {
ClasspathStorage.getProvider(EclipseClasspathStorageProvider.ID).assertCompatible(ModuleRootManager.getInstance(module));
ClasspathStorage.getProvider(JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID).assertCompatible(ModuleRootManager.getInstance(module));
modules.add(module);
}
catch (ConfigurationException e1) {
@@ -100,7 +100,7 @@ public class ExportEclipseProjectsAction extends AnAction implements DumbAware {
if (dialog.isOK()) {
if (dialog.isLink()) {
for (Module module : dialog.getSelectedModules()) {
ClasspathStorage.setStorageType(ModuleRootManager.getInstance(module), EclipseClasspathStorageProvider.ID);
ClasspathStorage.setStorageType(ModuleRootManager.getInstance(module), JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID);
}
}
else {
@@ -58,9 +58,9 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.eclipse.EclipseBundle;
import org.jetbrains.idea.eclipse.EclipseXml;
import org.jetbrains.idea.eclipse.IdeaXml;
import org.jetbrains.idea.eclipse.config.EclipseClasspathStorageProvider;
import org.jetbrains.idea.eclipse.conversion.EclipseClasspathReader;
import org.jetbrains.idea.eclipse.conversion.EclipseUserLibrariesHelper;
import org.jetbrains.jps.eclipse.model.JpsEclipseClasspathSerializer;
import javax.swing.*;
import java.io.File;
@@ -280,7 +280,7 @@ public class EclipseImportBuilder extends ProjectImportBuilder<String> implement
EclipseClasspathReader.setupOutput(rootModel, path + "/bin");
}
ClasspathStorage.setStorageType(rootModel,
getParameters().linkConverted ? EclipseClasspathStorageProvider.ID : ClasspathStorage.DEFAULT_STORAGE);
getParameters().linkConverted ? JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID : ClasspathStorage.DEFAULT_STORAGE);
if (model != null) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {