From e092d00c2e1f68faa568dca2ca206f8065f83503 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 27 Aug 2013 15:19:52 +0400 Subject: [PATCH] Support exported dependencies Original commit: 5c58cb946cd73253d35b7b762969fe059c861d15 --- .../KotlinBuilderModuleScriptGenerator.java | 2 +- .../build/AbstractKotlinJpsBuildTestCase.java | 9 +++++---- .../jet/jps/build/KotlinJpsBuildTestCase.java | 17 ++++++++++++++++- .../ReexportedDependency/kotlinProject.iml | 13 +++++++++++++ .../ReexportedDependency/kotlinProject.ipr | 16 ++++++++++++++++ .../ReexportedDependency/module2/module2.iml | 13 +++++++++++++ .../module2/src/JSecond.java | 2 ++ .../ReexportedDependency/module2/src/my.kt | 1 + .../ReexportedDependency/module3/module3.iml | 13 +++++++++++++ .../ReexportedDependency/module3/src/m3.kt | 5 +++++ .../testData/ReexportedDependency/src/main.kt | 6 ++++++ 11 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 jps/jps-plugin/testData/ReexportedDependency/kotlinProject.iml create mode 100644 jps/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr create mode 100644 jps/jps-plugin/testData/ReexportedDependency/module2/module2.iml create mode 100644 jps/jps-plugin/testData/ReexportedDependency/module2/src/JSecond.java create mode 100644 jps/jps-plugin/testData/ReexportedDependency/module2/src/my.kt create mode 100644 jps/jps-plugin/testData/ReexportedDependency/module3/module3.iml create mode 100644 jps/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt create mode 100644 jps/jps-plugin/testData/ReexportedDependency/src/main.kt diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java index 33b523dab54..f6c25fe36dc 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -93,7 +93,7 @@ public class KotlinBuilderModuleScriptGenerator { @NotNull private static Collection findClassPathRoots(@NotNull ModuleBuildTarget target) { JpsModule module = target.getModule(); - JpsJavaDependenciesEnumerator dependencies = JpsJavaExtensionService.dependencies(module) + JpsJavaDependenciesEnumerator dependencies = JpsJavaExtensionService.dependencies(module).recursively().exportedOnly() .includedIn(JpsJavaClasspathKind.compile(target.isTests())); return dependencies.classes().getRoots(); diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractKotlinJpsBuildTestCase.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractKotlinJpsBuildTestCase.java index 7c35ae199be..7dd4d207f22 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractKotlinJpsBuildTestCase.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractKotlinJpsBuildTestCase.java @@ -34,6 +34,7 @@ import org.jetbrains.jps.util.JpsPathUtil; import java.io.File; import java.io.IOException; +import java.util.Collection; public abstract class AbstractKotlinJpsBuildTestCase extends JpsBuildTestCase { protected static final String TEST_DATA_PATH = "jps-plugin/testData/"; @@ -75,15 +76,15 @@ public abstract class AbstractKotlinJpsBuildTestCase extends JpsBuildTestCase { } protected JpsLibrary addKotlinRuntimeDependency() { - return addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE); + return addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE, myProject.getModules(), false); } - protected JpsLibrary addKotlinRuntimeDependency(JpsJavaDependencyScope type) { + protected JpsLibrary addKotlinRuntimeDependency(JpsJavaDependencyScope type, Collection modules, boolean exported) { JpsLibrary library = myProject.addLibrary("kotlin-runtime", JpsJavaLibraryType.INSTANCE); File runtime = PathUtil.getKotlinPathsForDistDirectory().getRuntimePath(); library.addRoot(runtime, JpsOrderRootType.COMPILED); - for (JpsModule module : myProject.getModules()) { - JpsModuleRootModificationUtil.addDependency(module, library, type, false); + for (JpsModule module : modules) { + JpsModuleRootModificationUtil.addDependency(module, library, type, exported); } return library; } diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java index 72c20c11c83..599312d91c1 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTestCase.java @@ -16,8 +16,11 @@ package org.jetbrains.jet.jps.build; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.jps.model.java.*; +import org.jetbrains.jps.model.module.JpsModule; import java.io.File; @@ -88,10 +91,22 @@ public class KotlinJpsBuildTestCase extends AbstractKotlinJpsBuildTestCase { public void testTestDependencyLibrary() throws Throwable { initProject(); - addKotlinRuntimeDependency(JpsJavaDependencyScope.TEST); + addKotlinRuntimeDependency(JpsJavaDependencyScope.TEST, myProject.getModules(), false); makeAll().assertSuccessful(); change(workDir + "/src/src.kt", "fun foo() { println() }"); makeAll().assertFailed(); } + public void testReexportedDependency() { + initProject(); + addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE, + ContainerUtil.filter(myProject.getModules(), new Condition() { + @Override + public boolean value(JpsModule module) { + return module.getName().equals("module2"); + } + }), true); + makeAll().assertSuccessful(); + } + } diff --git a/jps/jps-plugin/testData/ReexportedDependency/kotlinProject.iml b/jps/jps-plugin/testData/ReexportedDependency/kotlinProject.iml new file mode 100644 index 00000000000..96db211cad3 --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/kotlinProject.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr b/jps/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr new file mode 100644 index 00000000000..15ec79bc197 --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/kotlinProject.ipr @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/ReexportedDependency/module2/module2.iml b/jps/jps-plugin/testData/ReexportedDependency/module2/module2.iml new file mode 100644 index 00000000000..cb508e885e9 --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/module2/module2.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/ReexportedDependency/module2/src/JSecond.java b/jps/jps-plugin/testData/ReexportedDependency/module2/src/JSecond.java new file mode 100644 index 00000000000..3e46ffeedad --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/module2/src/JSecond.java @@ -0,0 +1,2 @@ +public class JSecond { +} diff --git a/jps/jps-plugin/testData/ReexportedDependency/module2/src/my.kt b/jps/jps-plugin/testData/ReexportedDependency/module2/src/my.kt new file mode 100644 index 00000000000..ad29e527067 --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/module2/src/my.kt @@ -0,0 +1 @@ +class K2 \ No newline at end of file diff --git a/jps/jps-plugin/testData/ReexportedDependency/module3/module3.iml b/jps/jps-plugin/testData/ReexportedDependency/module3/module3.iml new file mode 100644 index 00000000000..f15211f1c99 --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/module3/module3.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt b/jps/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt new file mode 100644 index 00000000000..71200d6e0df --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/module3/src/m3.kt @@ -0,0 +1,5 @@ +fun f() { + JSecond() + K2() + println("Hi") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/ReexportedDependency/src/main.kt b/jps/jps-plugin/testData/ReexportedDependency/src/main.kt new file mode 100644 index 00000000000..62660cffa29 --- /dev/null +++ b/jps/jps-plugin/testData/ReexportedDependency/src/main.kt @@ -0,0 +1,6 @@ +fun main() { + f() + JSecond() + K2() + println("Hi") +} \ No newline at end of file