loading jps model from eclipse: fixed adding library dependencies

This commit is contained in:
nik
2012-10-31 12:58:45 +04:00
parent 23fdb5f3ba
commit 1c54e42e40
5 changed files with 15 additions and 26 deletions
@@ -52,4 +52,7 @@ public interface JpsProject extends JpsCompositeElement, JpsReferenceableElement
@NotNull String getName();
void setName(@NotNull String name);
@NotNull
JpsModel getModel();
}
@@ -15,7 +15,7 @@ import org.jetbrains.jps.model.library.sdk.JpsSdkType;
public class JpsGlobalImpl extends JpsRootElementBase<JpsGlobalImpl> implements JpsGlobal {
private final JpsLibraryCollectionImpl myLibraryCollection;
public JpsGlobalImpl(JpsModel model, JpsEventDispatcher eventDispatcher) {
public JpsGlobalImpl(@NotNull JpsModel model, JpsEventDispatcher eventDispatcher) {
super(model, eventDispatcher);
myLibraryCollection = new JpsLibraryCollectionImpl(myContainer.setChild(JpsLibraryRole.LIBRARIES_COLLECTION_ROLE));
myContainer.setChild(JpsFileTypesConfigurationImpl.ROLE, new JpsFileTypesConfigurationImpl());
@@ -34,7 +34,7 @@ public class JpsProjectImpl extends JpsRootElementBase<JpsProjectImpl> implement
private final JpsLibraryCollection myLibraryCollection;
private String myName = "";
public JpsProjectImpl(JpsModel model, JpsEventDispatcher eventDispatcher) {
public JpsProjectImpl(@NotNull JpsModel model, JpsEventDispatcher eventDispatcher) {
super(model, eventDispatcher);
myContainer.setChild(JpsModuleRole.MODULE_COLLECTION_ROLE);
myContainer.setChild(EXTERNAL_REFERENCES_COLLECTION_ROLE);
@@ -12,7 +12,7 @@ public abstract class JpsRootElementBase<E extends JpsRootElementBase<E>> extend
private final JpsModel myModel;
private final JpsEventDispatcher myEventDispatcher;
protected JpsRootElementBase(JpsModel model, JpsEventDispatcher eventDispatcher) {
protected JpsRootElementBase(@NotNull JpsModel model, JpsEventDispatcher eventDispatcher) {
super();
myModel = model;
myEventDispatcher = eventDispatcher;
@@ -29,8 +29,9 @@ public abstract class JpsRootElementBase<E extends JpsRootElementBase<E>> extend
return myEventDispatcher;
}
@NotNull
@Override
protected JpsModel getModel() {
public JpsModel getModel() {
return myModel;
}
@@ -23,10 +23,9 @@ import org.jdom.Element;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.eclipse.*;
import org.jetbrains.jps.model.JpsElementFactory;
import org.jetbrains.jps.model.JpsModel;
import org.jetbrains.jps.model.JpsProject;
import org.jetbrains.jps.model.java.*;
import org.jetbrains.jps.model.library.JpsLibrary;
import org.jetbrains.jps.model.library.JpsLibraryReference;
import org.jetbrains.jps.model.library.JpsOrderRootType;
import org.jetbrains.jps.model.module.*;
import org.jetbrains.jps.model.serialization.JpsMacroExpander;
@@ -67,11 +66,10 @@ class JpsEclipseClasspathReader extends AbstractEclipseClasspathReader<JpsModule
boolean exported,
String name,
boolean applicationLevel) {
JpsLibrary lib = findLibraryByName(rootModel.getProject(), name);
if (lib != null) {
final JpsLibraryDependency dependency = rootModel.getDependenciesList().addLibraryDependency(lib);
setLibraryEntryExported(exported, dependency);
}
JpsElementFactory factory = JpsElementFactory.getInstance();
JpsLibraryReference libraryReference = factory.createLibraryReference(name, applicationLevel ? factory.createGlobalReference() : factory.createProjectReference());
final JpsLibraryDependency dependency = rootModel.getDependenciesList().addLibraryDependency(libraryReference);
setLibraryEntryExported(dependency, exported);
}
@Override
@@ -160,7 +158,7 @@ class JpsEclipseClasspathReader extends AbstractEclipseClasspathReader<JpsModule
}
jpsLibrary.addRoot(url, JpsOrderRootType.COMPILED);
setLibraryEntryExported(exported, dependency);
setLibraryEntryExported(dependency, exported);
}
@Override
@@ -239,24 +237,11 @@ class JpsEclipseClasspathReader extends AbstractEclipseClasspathReader<JpsModule
extension.setInheritOutput(false);
}
private static void setLibraryEntryExported(boolean exported,
final JpsDependencyElement dependency) {
private static void setLibraryEntryExported(final JpsDependencyElement dependency, boolean exported) {
final JpsJavaDependencyExtension extension = getService().getOrCreateDependencyExtension(dependency);
extension.setExported(exported);
}
public static JpsLibrary findLibraryByName(JpsProject project, String name) {
JpsLibrary lib = project.getLibraryCollection().findLibrary(name);
if (lib == null) {
final JpsModel model = JpsElementFactory.getInstance().createModel();
lib = model.getGlobal().getLibraryCollection().findLibrary(name);
}
return lib;
}
private static JpsJavaExtensionService getService() {
return JpsJavaExtensionService.getInstance();
}