From 1e91fb8d27d5a28a82bdba78d8319a19fcfcadf0 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 29 Aug 2013 20:02:47 +0400 Subject: [PATCH] Using annotations from reexported libraries --- .../KotlinBuilderModuleScriptGenerator.java | 38 ++++++++---------- .../ReexportedDependency/kotlinProject.iml | 2 +- .../ReexportedDependency/kotlinProject.ipr | 15 +++++++ .../module2/lib/j/J.class | Bin 0 -> 254 bytes .../ReexportedDependency/module2/lib/j/J.java | 9 +++++ .../module2/lib/j/annotations.xml | 5 +++ .../ReexportedDependency/module2/module2.iml | 5 ++- .../ReexportedDependency/module3/module3.iml | 2 +- .../ReexportedDependency/module3/src/m3.kt | 5 ++- .../testData/ReexportedDependency/src/main.kt | 1 + 10 files changed, 55 insertions(+), 27 deletions(-) create mode 100644 jps-plugin/testData/ReexportedDependency/module2/lib/j/J.class create mode 100644 jps-plugin/testData/ReexportedDependency/module2/lib/j/J.java create mode 100644 jps-plugin/testData/ReexportedDependency/module2/lib/j/annotations.xml diff --git a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java index f6c25fe36dc..c1b7a2cccf8 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -27,17 +27,13 @@ import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.CompilerMessage; -import org.jetbrains.jps.model.java.JpsAnnotationRootType; -import org.jetbrains.jps.model.java.JpsJavaClasspathKind; -import org.jetbrains.jps.model.java.JpsJavaDependenciesEnumerator; -import org.jetbrains.jps.model.java.JpsJavaExtensionService; +import org.jetbrains.jps.model.JpsDummyElement; +import org.jetbrains.jps.model.java.*; import org.jetbrains.jps.model.library.JpsLibrary; -import org.jetbrains.jps.model.library.JpsLibraryRoot; +import org.jetbrains.jps.model.library.sdk.JpsSdk; import org.jetbrains.jps.model.module.JpsDependencyElement; import org.jetbrains.jps.model.module.JpsLibraryDependency; -import org.jetbrains.jps.model.module.JpsModule; import org.jetbrains.jps.model.module.JpsSdkDependency; -import org.jetbrains.jps.util.JpsPathUtil; import java.io.File; import java.io.IOException; @@ -92,11 +88,8 @@ public class KotlinBuilderModuleScriptGenerator { @NotNull private static Collection findClassPathRoots(@NotNull ModuleBuildTarget target) { - JpsModule module = target.getModule(); - JpsJavaDependenciesEnumerator dependencies = JpsJavaExtensionService.dependencies(module).recursively().exportedOnly() - .includedIn(JpsJavaClasspathKind.compile(target.isTests())); - return dependencies.classes().getRoots(); + return getAllDependencies(target).classes().getRoots(); } @NotNull @@ -114,20 +107,15 @@ public class KotlinBuilderModuleScriptGenerator { @NotNull private static List findAnnotationRoots(@NotNull ModuleBuildTarget target) { - JpsModule module = target.getModule(); - List dependencies = module.getDependenciesList().getDependencies(); - List annotationRootFiles = ContainerUtil.newArrayList(); - for (JpsDependencyElement dependencyElement : dependencies) { - JpsLibrary library = getLibrary(dependencyElement); - if (library == null) continue; - List annotationRoots = library.getRoots(JpsAnnotationRootType.INSTANCE); - for (JpsLibraryRoot root : annotationRoots) { - File file = new File(JpsPathUtil.urlToPath(root.getUrl())); + JpsSdk sdk = target.getModule().getSdk(JpsJavaSdkType.INSTANCE); + if (sdk != null) { + annotationRootFiles.addAll(sdk.getParent().getFiles(JpsAnnotationRootType.INSTANCE)); + } - annotationRootFiles.add(file); - } + for (JpsLibrary library : getAllDependencies(target).getLibraries()) { + annotationRootFiles.addAll(library.getFiles(JpsAnnotationRootType.INSTANCE)); } // JDK is stored locally on user's machine, so its configuration, including external annotation paths @@ -143,6 +131,12 @@ public class KotlinBuilderModuleScriptGenerator { return annotationRootFiles; } + @NotNull + private static JpsJavaDependenciesEnumerator getAllDependencies(@NotNull ModuleBuildTarget target) { + return JpsJavaExtensionService.dependencies(target.getModule()).recursively().exportedOnly() + .includedIn(JpsJavaClasspathKind.compile(target.isTests())); + } + @Nullable private static JpsLibrary getLibrary(@NotNull JpsDependencyElement dependencyElement) { if (dependencyElement instanceof JpsSdkDependency) { diff --git a/jps-plugin/testData/ReexportedDependency/kotlinProject.iml b/jps-plugin/testData/ReexportedDependency/kotlinProject.iml index 96db211cad3..d0e6f385eb5 100644 --- a/jps-plugin/testData/ReexportedDependency/kotlinProject.iml +++ b/jps-plugin/testData/ReexportedDependency/kotlinProject.iml @@ -5,7 +5,7 @@ - + diff --git a/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr b/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr index 15ec79bc197..79176c748e4 100644 --- a/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr +++ b/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr @@ -13,4 +13,19 @@ + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/ReexportedDependency/module2/lib/j/J.class b/jps-plugin/testData/ReexportedDependency/module2/lib/j/J.class new file mode 100644 index 0000000000000000000000000000000000000000..7acb6f1e5255101eae568638ab1f05e2faef0eeb GIT binary patch literal 254 zcmYk0F>iuU6otC=8bdaHAO_wGP#OPqt9rS4)p^y;h?`o$e9r^?OQBBXA z>K)E`_uTI!@A~`w1K!rFPw0u9}xD zFPYfqx)#i$cw1!eSyE=zB{{T>t}c%P|4?_$QEjv#-E?J;01jLMSS^xNF#hlD^Fke4 yEMfCAW-L;qsUEilokckJUyx5e1bwPGGo%jSQw=(&o7A3KAGBN0<2GbwA@~D26eimM literal 0 HcmV?d00001 diff --git a/jps-plugin/testData/ReexportedDependency/module2/lib/j/J.java b/jps-plugin/testData/ReexportedDependency/module2/lib/j/J.java new file mode 100644 index 00000000000..bfa3c7fce0e --- /dev/null +++ b/jps-plugin/testData/ReexportedDependency/module2/lib/j/J.java @@ -0,0 +1,9 @@ +package j; + +import java.lang.String; + +public class J { + public String foo() { + return ""; + } +} \ No newline at end of file diff --git a/jps-plugin/testData/ReexportedDependency/module2/lib/j/annotations.xml b/jps-plugin/testData/ReexportedDependency/module2/lib/j/annotations.xml new file mode 100644 index 00000000000..fed8e0dba5a --- /dev/null +++ b/jps-plugin/testData/ReexportedDependency/module2/lib/j/annotations.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jps-plugin/testData/ReexportedDependency/module2/module2.iml b/jps-plugin/testData/ReexportedDependency/module2/module2.iml index cb508e885e9..053fd136108 100644 --- a/jps-plugin/testData/ReexportedDependency/module2/module2.iml +++ b/jps-plugin/testData/ReexportedDependency/module2/module2.iml @@ -5,9 +5,10 @@ - + - + + diff --git a/jps-plugin/testData/ReexportedDependency/module3/module3.iml b/jps-plugin/testData/ReexportedDependency/module3/module3.iml index f15211f1c99..ec820d23084 100644 --- a/jps-plugin/testData/ReexportedDependency/module3/module3.iml +++ b/jps-plugin/testData/ReexportedDependency/module3/module3.iml @@ -5,7 +5,7 @@ - + diff --git a/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt b/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt index 71200d6e0df..3310c2c0f0f 100644 --- a/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt +++ b/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt @@ -2,4 +2,7 @@ fun f() { JSecond() K2() println("Hi") -} \ No newline at end of file + takeNN(j.J().foo()) +} + +fun takeNN(a: Any) {} \ No newline at end of file diff --git a/jps-plugin/testData/ReexportedDependency/src/main.kt b/jps-plugin/testData/ReexportedDependency/src/main.kt index 62660cffa29..da493d01c7d 100644 --- a/jps-plugin/testData/ReexportedDependency/src/main.kt +++ b/jps-plugin/testData/ReexportedDependency/src/main.kt @@ -3,4 +3,5 @@ fun main() { JSecond() K2() println("Hi") + takeNN(j.J().foo()) } \ No newline at end of file