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 00000000000..7acb6f1e525 Binary files /dev/null and b/jps-plugin/testData/ReexportedDependency/module2/lib/j/J.class differ 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