From 7aa6d261c5d342d2cad38ab330054de0aef9b518 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 10 Sep 2013 18:59:00 +0400 Subject: [PATCH] jps model: added method to process annotation roots from module and its dependencies --- .../jps/model/java/JpsAnnotationRootType.java | 3 + .../java/JpsJavaDependenciesEnumerator.java | 7 ++ .../model/java/JpsJavaModuleExtension.java | 13 +- .../JpsJavaDependenciesEnumeratorImpl.java | 6 + ...psJavaDependenciesRootsEnumeratorImpl.java | 12 +- .../java/impl/JpsJavaModuleExtensionImpl.java | 2 + .../model/JpsDependenciesEnumeratorTest.java | 118 +++++++++--------- 7 files changed, 99 insertions(+), 62 deletions(-) diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/JpsAnnotationRootType.java b/jps/model-api/src/org/jetbrains/jps/model/java/JpsAnnotationRootType.java index 5253d7ccf28d..b62cc2cbf04a 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/java/JpsAnnotationRootType.java +++ b/jps/model-api/src/org/jetbrains/jps/model/java/JpsAnnotationRootType.java @@ -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() { + } } diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaDependenciesEnumerator.java b/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaDependenciesEnumerator.java index 82cec24868b2..20d78bbd74e3 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaDependenciesEnumerator.java +++ b/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaDependenciesEnumerator.java @@ -109,4 +109,11 @@ public interface JpsJavaDependenciesEnumerator extends JpsDependenciesEnumerator */ @NotNull JpsJavaDependenciesRootsEnumerator sources(); + + /** + * + * @return enumerator for processing annotation roots of the dependencies + */ + @NotNull + JpsJavaDependenciesRootsEnumerator annotations(); } diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaModuleExtension.java b/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaModuleExtension.java index 725063f68ddb..94787454306e 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaModuleExtension.java +++ b/jps/model-api/src/org/jetbrains/jps/model/java/JpsJavaModuleExtension.java @@ -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(); diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesEnumeratorImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesEnumeratorImpl.java index c3ee73665f26..9f172a9881ff 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesEnumeratorImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesEnumeratorImpl.java @@ -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; diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesRootsEnumeratorImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesRootsEnumeratorImpl.java index 30b93e7856ad..b87a5cfa7730 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesRootsEnumeratorImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaDependenciesRootsEnumeratorImpl.java @@ -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; } } diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaModuleExtensionImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaModuleExtensionImpl.java index 9852e91e60b2..dc5d716a6aac 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaModuleExtensionImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/JpsJavaModuleExtensionImpl.java @@ -53,11 +53,13 @@ public class JpsJavaModuleExtensionImpl extends JpsCompositeElementBase> 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> 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); }