Support exported dependencies

Original commit: 5c58cb946c
This commit is contained in:
Andrey Breslav
2013-08-27 15:19:52 +04:00
parent f2ba3cf157
commit e092d00c2e
11 changed files with 91 additions and 6 deletions
@@ -93,7 +93,7 @@ public class KotlinBuilderModuleScriptGenerator {
@NotNull
private static Collection<File> 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();
@@ -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<JpsModule> 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;
}
@@ -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<JpsModule>() {
@Override
public boolean value(JpsModule module) {
return module.getName().equals("module2");
}
}), true);
makeAll().assertSuccessful();
}
}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="module3" />
</component>
</module>
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
</component>
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/kotlinProject.iml" filepath="$PROJECT_DIR$/kotlinProject.iml" />
<module fileurl="file://$PROJECT_DIR$/module2/module2.iml" filepath="$PROJECT_DIR$/module2/module2.iml" />
<module fileurl="file://$PROJECT_DIR$/module3/module3.iml" filepath="$PROJECT_DIR$/module3/module3.iml" />
</modules>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA_JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="KotlinRuntime" level="project" exported="" />
</component>
</module>
@@ -0,0 +1,2 @@
public class JSecond {
}
@@ -0,0 +1 @@
class K2
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="module2" exported="" />
</component>
</module>
@@ -0,0 +1,5 @@
fun f() {
JSecond()
K2()
println("Hi")
}
@@ -0,0 +1,6 @@
fun main() {
f()
JSecond()
K2()
println("Hi")
}