new project model: java-specific properties for dependencies

This commit is contained in:
nik
2012-06-07 11:02:30 +04:00
parent 3521d3aedc
commit d2101c6461
7 changed files with 153 additions and 4 deletions
@@ -0,0 +1,18 @@
package org.jetbrains.jps.model.java;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.JpsElement;
/**
* @author nik
*/
public interface JpsJavaDependencyExtension extends JpsElement {
boolean isExported();
void setExported(boolean exported);
@NotNull
JpsJavaDependencyScope getScope();
void setScope(@NotNull JpsJavaDependencyScope scope);
}
@@ -0,0 +1,8 @@
package org.jetbrains.jps.model.java;
/**
* @author nik
*/
public enum JpsJavaDependencyScope {
COMPILE, TEST, RUNTIME, PROVIDED
}
@@ -1,10 +1,10 @@
package org.jetbrains.jps.model.module;
import org.jetbrains.jps.model.JpsElement;
import org.jetbrains.jps.model.JpsCompositeElement;
/**
* @author nik
*/
public interface JpsDependencyElement extends JpsElement {
public interface JpsDependencyElement extends JpsCompositeElement {
void remove();
}
@@ -9,7 +9,7 @@ import org.jetbrains.jps.model.module.JpsModule;
* @author nik
*/
public class JavaModuleExtensionKind extends JpsElementKind<JavaModuleExtensionImpl> implements JpsElementFactory<JavaModuleExtensionImpl> {
public static final JavaModuleExtensionKind INSTANCE = new JavaModuleExtensionKind();
private static final JavaModuleExtensionKind INSTANCE = new JavaModuleExtensionKind();
@NotNull
@Override
@@ -0,0 +1,70 @@
package org.jetbrains.jps.model.java.impl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.JpsEventDispatcher;
import org.jetbrains.jps.model.JpsModel;
import org.jetbrains.jps.model.JpsParentElement;
import org.jetbrains.jps.model.impl.JpsElementBase;
import org.jetbrains.jps.model.java.JpsJavaDependencyExtension;
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
/**
* @author nik
*/
public class JpsJavaDependencyExtensionImpl extends JpsElementBase<JpsJavaDependencyExtensionImpl> implements JpsJavaDependencyExtension {
private boolean myExported;
private JpsJavaDependencyScope myScope;
public JpsJavaDependencyExtensionImpl(JpsEventDispatcher eventDispatcher, JpsParentElement parent, boolean exported, JpsJavaDependencyScope scope) {
super(eventDispatcher, parent);
myExported = exported;
myScope = scope;
}
public JpsJavaDependencyExtensionImpl(JpsJavaDependencyExtensionImpl original, JpsEventDispatcher eventDispatcher, JpsParentElement parent) {
super(original, eventDispatcher, parent);
myExported = original.myExported;
myScope = original.myScope;
}
@Override
public boolean isExported() {
return myExported;
}
@Override
public void setExported(boolean exported) {
if (myExported != exported) {
myExported = exported;
getEventDispatcher().fireElementChanged(this);
}
}
@NotNull
@Override
public JpsJavaDependencyScope getScope() {
return myScope;
}
@Override
public void setScope(@NotNull JpsJavaDependencyScope scope) {
if (!scope.equals(myScope)) {
myScope = scope;
getEventDispatcher().fireElementChanged(this);
}
}
@NotNull
@Override
public JpsJavaDependencyExtensionImpl createCopy(@NotNull JpsModel model,
@NotNull JpsEventDispatcher eventDispatcher,
JpsParentElement parent) {
return new JpsJavaDependencyExtensionImpl(this, eventDispatcher, parent);
}
@Override
public void applyChanges(@NotNull JpsJavaDependencyExtensionImpl modified) {
setExported(modified.myExported);
setScope(modified.myScope);
}
}
@@ -0,0 +1,31 @@
package org.jetbrains.jps.model.java.impl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.*;
import org.jetbrains.jps.model.java.JpsJavaDependencyExtension;
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
import org.jetbrains.jps.model.module.JpsDependencyElement;
/**
* @author nik
*/
public class JpsJavaDependencyExtensionKind extends JpsElementKind<JpsJavaDependencyExtensionImpl>
implements JpsElementFactory<JpsJavaDependencyExtensionImpl> {
public static final JpsJavaDependencyExtensionKind INSTANCE = new JpsJavaDependencyExtensionKind();
@NotNull
@Override
public JpsJavaDependencyExtensionImpl create(@NotNull JpsModel model,
@NotNull JpsEventDispatcher eventDispatcher,
JpsParentElement parent) {
return new JpsJavaDependencyExtensionImpl(eventDispatcher, parent, false, JpsJavaDependencyScope.COMPILE);
}
public static JpsJavaDependencyExtension getExtension(@NotNull JpsDependencyElement element) {
JpsJavaDependencyExtensionImpl extension = element.getContainer().getChild(INSTANCE);
if (extension == null) {
extension = element.getContainer().setChild(INSTANCE);
}
return extension;
}
}
@@ -1,16 +1,38 @@
package org.jetbrains.jps.model;
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
import org.jetbrains.jps.model.java.JpsJavaLibraryType;
import org.jetbrains.jps.model.java.JpsJavaModuleType;
import org.jetbrains.jps.model.java.impl.JavaModuleExtensionKind;
import org.jetbrains.jps.model.java.impl.JpsJavaDependencyExtensionImpl;
import org.jetbrains.jps.model.java.impl.JpsJavaDependencyExtensionKind;
import org.jetbrains.jps.model.library.JpsLibrary;
import org.jetbrains.jps.model.module.JpsDependencyElement;
import org.jetbrains.jps.model.module.JpsLibraryDependency;
import org.jetbrains.jps.model.module.JpsModule;
/**
* @author nik
*/
public class JpsJavaExtensionTest extends JpsModelTestCase {
public void test() {
public void testModule() {
final JpsModule module = myModel.getProject().addModule(JpsJavaModuleType.INSTANCE, "m");
JavaModuleExtensionKind.getExtension(module).setOutputUrl("file://path");
assertEquals("file://path", JavaModuleExtensionKind.getExtension(module).getOutputUrl());
}
public void testDependency() {
final JpsModel model = myModel.createModifiableModel(new TestJpsEventDispatcher());
final JpsModule module = model.getProject().addModule(JpsJavaModuleType.INSTANCE, "m");
final JpsLibrary library = model.getProject().addLibrary(JpsJavaLibraryType.INSTANCE, "l");
final JpsLibraryDependency dependency = module.getDependenciesList().addLibraryDependency(library);
JpsJavaDependencyExtensionKind.getExtension(dependency).setScope(JpsJavaDependencyScope.TEST);
JpsJavaDependencyExtensionKind.getExtension(dependency).setExported(true);
model.commit();
final JpsDependencyElement dep = assertOneElement(assertOneElement(myModel.getProject().getModules()).getDependenciesList().getDependencies());
final JpsJavaDependencyExtensionImpl extension = dep.getContainer().getChild(JpsJavaDependencyExtensionKind.INSTANCE);
assertTrue(extension.isExported());
assertSame(JpsJavaDependencyScope.TEST, extension.getScope());
}
}