jps model: added method to process annotation roots from module and its dependencies

This commit is contained in:
nik
2013-09-11 09:33:17 +04:00
parent de4cbc7c86
commit 7aa6d261c5
7 changed files with 99 additions and 62 deletions
@@ -22,4 +22,7 @@ import org.jetbrains.jps.model.library.JpsOrderRootType;
*/
public class JpsAnnotationRootType extends JpsOrderRootType {
public static final JpsAnnotationRootType INSTANCE = new JpsAnnotationRootType();
private JpsAnnotationRootType() {
}
}
@@ -109,4 +109,11 @@ public interface JpsJavaDependenciesEnumerator extends JpsDependenciesEnumerator
*/
@NotNull
JpsJavaDependenciesRootsEnumerator sources();
/**
*
* @return enumerator for processing annotation roots of the dependencies
*/
@NotNull
JpsJavaDependenciesRootsEnumerator annotations();
}
@@ -15,6 +15,8 @@
*/
package org.jetbrains.jps.model.java;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.JpsElement;
import org.jetbrains.jps.model.JpsUrlList;
@@ -22,21 +24,26 @@ import org.jetbrains.jps.model.JpsUrlList;
* @author nik
*/
public interface JpsJavaModuleExtension extends JpsElement {
@NotNull
JpsUrlList getJavadocRoots();
@NotNull
JpsUrlList getAnnotationRoots();
@Nullable
String getOutputUrl();
void setOutputUrl(String outputUrl);
void setOutputUrl(@Nullable String outputUrl);
@Nullable
String getTestOutputUrl();
void setTestOutputUrl(String testOutputUrl);
void setTestOutputUrl(@Nullable String testOutputUrl);
@Nullable
LanguageLevel getLanguageLevel();
void setLanguageLevel(LanguageLevel languageLevel);
void setLanguageLevel(@Nullable LanguageLevel languageLevel);
boolean isInheritOutput();
@@ -103,6 +103,12 @@ public class JpsJavaDependenciesEnumeratorImpl extends JpsDependenciesEnumerator
return new JpsJavaDependenciesRootsEnumeratorImpl(this, JpsOrderRootType.SOURCES);
}
@NotNull
@Override
public JpsJavaDependenciesRootsEnumerator annotations() {
return new JpsJavaDependenciesRootsEnumeratorImpl(this, JpsAnnotationRootType.INSTANCE);
}
@Override
protected JpsJavaDependenciesEnumeratorImpl self() {
return this;
@@ -16,9 +16,7 @@
package org.jetbrains.jps.model.java.impl;
import com.intellij.util.Consumer;
import org.jetbrains.jps.model.java.JavaSourceRootType;
import org.jetbrains.jps.model.java.JpsJavaDependenciesRootsEnumerator;
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
import org.jetbrains.jps.model.java.*;
import org.jetbrains.jps.model.library.JpsOrderRootType;
import org.jetbrains.jps.model.module.*;
import org.jetbrains.jps.model.module.impl.JpsDependenciesRootsEnumeratorBase;
@@ -83,6 +81,14 @@ public class JpsJavaDependenciesRootsEnumeratorImpl extends JpsDependenciesRoots
}
}
}
else if (myRootType == JpsAnnotationRootType.INSTANCE) {
JpsJavaModuleExtension extension = JpsJavaExtensionService.getInstance().getModuleExtension(module);
if (extension != null) {
for (String url : extension.getAnnotationRoots().getUrls()) {
urlConsumer.consume(url);
}
}
}
return true;
}
}
@@ -53,11 +53,13 @@ public class JpsJavaModuleExtensionImpl extends JpsCompositeElementBase<JpsJavaM
return new JpsJavaModuleExtensionImpl(this);
}
@NotNull
@Override
public JpsUrlList getAnnotationRoots() {
return myContainer.getChild(ANNOTATIONS_ROOTS_ROLE);
}
@NotNull
@Override
public JpsUrlList getJavadocRoots() {
return myContainer.getChild(JAVADOC_ROOTS_ROLE);
@@ -31,33 +31,35 @@ import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import static org.jetbrains.jps.model.java.JpsJavaExtensionService.dependencies;
/**
* @author nik
*/
public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
private JpsTypedLibrary<JpsSdk<JpsDummyElement>> myJdk;
private JpsModule myModule;
@Override
public void setUp() throws Exception {
super.setUp();
File home = PathManagerEx.findFileUnderCommunityHome("java/mockJDK-1.7");
myJdk = myModel.getGlobal().addSdk("mockJDK-1.7", home.getAbsolutePath(), "1.7", JpsJavaSdkType.INSTANCE);
myJdk.addRoot(getRtJar(), JpsOrderRootType.COMPILED);
JpsTypedLibrary<JpsSdk<JpsDummyElement>> jdk =
myModel.getGlobal().addSdk("mockJDK-1.7", home.getAbsolutePath(), "1.7", JpsJavaSdkType.INSTANCE);
jdk.addRoot(getRtJar(), JpsOrderRootType.COMPILED);
myModule = addModule();
myModule.getSdkReferencesTable().setSdkReference(JpsJavaSdkType.INSTANCE, myJdk.getProperties().createReference());
myModule.getSdkReferencesTable().setSdkReference(JpsJavaSdkType.INSTANCE, jdk.getProperties().createReference());
myModule.getDependenciesList().addSdkDependency(JpsJavaSdkType.INSTANCE);
}
public void testLibrary() throws Exception {
JpsModuleRootModificationUtil.addDependency(myModule, createJDomLibrary());
assertClassRoots(orderEntries(myModule), getRtJar(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().productionOnly().runtimeOnly(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutLibraries(), getRtJar());
assertSourceRoots(orderEntries(myModule), getJDomSources());
assertClassRoots(dependencies(myModule), getRtJar(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk().productionOnly().runtimeOnly(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutLibraries(), getRtJar());
assertSourceRoots(dependencies(myModule), getJDomSources());
}
private String getJDomSources() {
@@ -72,11 +74,11 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
return getJarUrlFromLibDir("asm.jar");
}
private String getJarUrlFromLibDir(final String relativePath) {
private static String getJarUrlFromLibDir(final String relativePath) {
return JpsPathUtil.getLibraryRootUrl(PathManager.findFileInLibDirectory(relativePath));
}
private String getRtJar() {
private static String getRtJar() {
return JpsPathUtil.getLibraryRootUrl(PathManagerEx.findFileUnderCommunityHome("java/mockJDK-1.7/jre/lib/rt.jar"));
}
@@ -99,13 +101,13 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
final String output = setModuleOutput(myModule, false);
final String testOutput = setModuleOutput(myModule, true);
assertClassRoots(orderEntries(myModule).withoutSdk(), testOutput, output);
assertClassRoots(orderEntries(myModule).withoutSdk().productionOnly(), output);
assertSourceRoots(orderEntries(myModule), srcRoot, testRoot);
assertSourceRoots(orderEntries(myModule).productionOnly(), srcRoot);
assertClassRoots(dependencies(myModule).withoutSdk(), testOutput, output);
assertClassRoots(dependencies(myModule).withoutSdk().productionOnly(), output);
assertSourceRoots(dependencies(myModule), srcRoot, testRoot);
assertSourceRoots(dependencies(myModule).productionOnly(), srcRoot);
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().classes().withoutSelfModuleOutput(), output);
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().productionOnly().classes().withoutSelfModuleOutput());
assertEnumeratorRoots(dependencies(myModule).withoutSdk().classes().withoutSelfModuleOutput(), output);
assertEnumeratorRoots(dependencies(myModule).withoutSdk().productionOnly().classes().withoutSelfModuleOutput());
}
public void testLibraryScope() throws Exception {
@@ -113,9 +115,9 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
getJavaService().getOrCreateDependencyExtension(dependency).setScope(JpsJavaDependencyScope.RUNTIME);
JpsModuleRootModificationUtil.addDependency(myModule, createJDomLibrary(), JpsJavaDependencyScope.RUNTIME, false);
assertClassRoots(orderEntries(myModule).withoutSdk(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().exportedOnly());
assertClassRoots(orderEntries(myModule).withoutSdk().compileOnly());
assertClassRoots(dependencies(myModule).withoutSdk(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk().exportedOnly());
assertClassRoots(dependencies(myModule).withoutSdk().compileOnly());
}
public void testModuleDependency() throws Exception {
@@ -132,27 +134,27 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
final String output = setModuleOutput(myModule, false);
final String testOutput = setModuleOutput(myModule, true);
assertClassRoots(orderEntries(myModule).withoutSdk(), testOutput, output, depTestOutput, depOutput);
assertClassRoots(orderEntries(myModule).withoutSdk().recursively(), testOutput, output, depTestOutput, depOutput, getJDomJar());
assertSourceRoots(orderEntries(myModule), srcRoot, testRoot, depSrcRoot, depTestRoot);
assertSourceRoots(orderEntries(myModule).recursively(), srcRoot, testRoot, depSrcRoot, depTestRoot, getJDomSources());
assertClassRoots(dependencies(myModule).withoutSdk(), testOutput, output, depTestOutput, depOutput);
assertClassRoots(dependencies(myModule).withoutSdk().recursively(), testOutput, output, depTestOutput, depOutput, getJDomJar());
assertSourceRoots(dependencies(myModule), srcRoot, testRoot, depSrcRoot, depTestRoot);
assertSourceRoots(dependencies(myModule).recursively(), srcRoot, testRoot, depSrcRoot, depTestRoot, getJDomSources());
assertClassRoots(orderEntries(myModule).withoutSdk().withoutModuleSourceEntries().recursively(), getJDomJar());
assertSourceRoots(orderEntries(myModule).withoutSdk().withoutModuleSourceEntries().recursively(), getJDomSources());
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().withoutModuleSourceEntries().recursively().classes(), getJDomJar());
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().withoutModuleSourceEntries().recursively().sources(), getJDomSources());
assertClassRoots(dependencies(myModule).withoutSdk().withoutModuleSourceEntries().recursively(), getJDomJar());
assertSourceRoots(dependencies(myModule).withoutSdk().withoutModuleSourceEntries().recursively(), getJDomSources());
assertEnumeratorRoots(dependencies(myModule).withoutSdk().withoutModuleSourceEntries().recursively().classes(), getJDomJar());
assertEnumeratorRoots(dependencies(myModule).withoutSdk().withoutModuleSourceEntries().recursively().sources(), getJDomSources());
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().recursively().classes().withoutSelfModuleOutput(),
assertEnumeratorRoots(dependencies(myModule).withoutSdk().recursively().classes().withoutSelfModuleOutput(),
output, depTestOutput, depOutput, getJDomJar());
assertEnumeratorRoots(orderEntries(myModule).productionOnly().withoutSdk().recursively().classes().withoutSelfModuleOutput(),
assertEnumeratorRoots(dependencies(myModule).productionOnly().withoutSdk().recursively().classes().withoutSelfModuleOutput(),
depOutput, getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().withoutDepModules().withoutModuleSourceEntries().recursively(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk().withoutDepModules().withoutModuleSourceEntries().recursively(), getJDomJar());
assertEnumeratorRoots(
orderEntries(myModule).productionOnly().withoutSdk().withoutDepModules().withoutModuleSourceEntries().recursively().classes(),
dependencies(myModule).productionOnly().withoutSdk().withoutDepModules().withoutModuleSourceEntries().recursively().classes(),
getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().withoutDepModules().withoutModuleSourceEntries());
assertEnumeratorRoots(orderEntries(myModule).productionOnly().withoutModuleSourceEntries().withoutSdk().withoutDepModules().classes());
assertClassRoots(dependencies(myModule).withoutSdk().withoutDepModules().withoutModuleSourceEntries());
assertEnumeratorRoots(dependencies(myModule).productionOnly().withoutModuleSourceEntries().withoutSdk().withoutDepModules().classes());
}
public void testModuleJpsJavaDependencyScope() throws Exception {
@@ -160,13 +162,13 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
JpsModuleRootModificationUtil.addDependency(dep, createJDomLibrary(), JpsJavaDependencyScope.COMPILE, true);
JpsModuleRootModificationUtil.addDependency(myModule, dep, JpsJavaDependencyScope.TEST, true);
assertClassRoots(orderEntries(myModule).withoutSdk());
assertClassRoots(orderEntries(myModule).withoutSdk().recursively(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().exportedOnly().recursively(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().productionOnly().recursively());
assertClassRoots(dependencies(myModule).withoutSdk());
assertClassRoots(dependencies(myModule).withoutSdk().recursively(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk().exportedOnly().recursively(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk().productionOnly().recursively());
assertClassRoots(orderEntries(myProject).withoutSdk(), getJDomJar());
assertClassRoots(orderEntries(myProject).withoutSdk().productionOnly(), getJDomJar());
assertClassRoots(dependencies(myProject).withoutSdk(), getJDomJar());
assertClassRoots(dependencies(myProject).withoutSdk().productionOnly(), getJDomJar());
}
public void testNotExportedLibrary() throws Exception {
@@ -175,14 +177,26 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
JpsModuleRootModificationUtil.addDependency(myModule, createAsmLibrary(), JpsJavaDependencyScope.COMPILE, false);
JpsModuleRootModificationUtil.addDependency(myModule, dep, JpsJavaDependencyScope.COMPILE, false);
assertClassRoots(orderEntries(myModule).withoutSdk(), getAsmJar());
assertClassRoots(orderEntries(myModule).withoutSdk().recursively(), getAsmJar(), getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().recursivelyExportedOnly(), getAsmJar());
assertClassRoots(orderEntries(myModule).withoutSdk().exportedOnly().recursively());
assertClassRoots(dependencies(myModule).withoutSdk(), getAsmJar());
assertClassRoots(dependencies(myModule).withoutSdk().recursively(), getAsmJar(), getJDomJar());
assertClassRoots(dependencies(myModule).withoutSdk().recursivelyExportedOnly(), getAsmJar());
assertClassRoots(dependencies(myModule).withoutSdk().exportedOnly().recursively());
}
public void testAnnotations() {
JpsLibrary library = addLibrary();
String libraryUrl = "temp:///library";
library.addRoot(libraryUrl, JpsAnnotationRootType.INSTANCE);
JpsModuleRootModificationUtil.addDependency(myModule, library);
assertEnumeratorRoots(dependencies(myModule).annotations(), libraryUrl);
String moduleUrl = "temp://module";
JpsJavaExtensionService.getInstance().getOrCreateModuleExtension(myModule).getAnnotationRoots().addUrl(moduleUrl);
assertEnumeratorRoots(dependencies(myModule).annotations(), moduleUrl, libraryUrl);
}
public void testJdkIsNotExported() throws Exception {
assertClassRoots(orderEntries(myModule).exportedOnly());
assertClassRoots(dependencies(myModule).exportedOnly());
}
public void testProject() throws Exception {
@@ -193,8 +207,8 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
final String output = setModuleOutput(myModule, false);
final String testOutput = setModuleOutput(myModule, true);
assertClassRoots(orderEntries(myProject).withoutSdk(), testOutput, output, getJDomJar());
assertSourceRoots(orderEntries(myProject).withoutSdk(), srcRoot, testRoot, getJDomSources());
assertClassRoots(dependencies(myProject).withoutSdk(), testOutput, output, getJDomJar());
assertSourceRoots(dependencies(myProject).withoutSdk(), srcRoot, testRoot, getJDomSources());
}
public void testModules() throws Exception {
@@ -229,7 +243,7 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
}
}
private String addSourceRoot(JpsModule module, boolean tests) {
private static String addSourceRoot(JpsModule module, boolean tests) {
try {
File file = FileUtil.createTempDirectory(module.getName(), tests ? "testSrc" : "src");
return module.addSourceRoot(JpsPathUtil.getLibraryRootUrl(file), tests ? JavaSourceRootType.TEST_SOURCE : JavaSourceRootType.SOURCE).getUrl();
@@ -239,14 +253,6 @@ public class JpsDependenciesEnumeratorTest extends JpsJavaModelTestCase {
}
}
private JpsJavaDependenciesEnumerator orderEntries(JpsProject project) {
return JpsJavaExtensionService.dependencies(project);
}
private static JpsJavaDependenciesEnumerator orderEntries(JpsModule module) {
return JpsJavaExtensionService.dependencies(module);
}
private static void assertClassRoots(final JpsJavaDependenciesEnumerator enumerator, String... urls) {
assertEnumeratorRoots(enumerator.classes(), urls);
}