diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 68d15b34b68..6fa552c886a 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -170,15 +170,21 @@ public class KotlinToJVMBytecodeCompiler { for (Module module : chunk) { addKotlinSourceRoots(configuration, getAbsolutePaths(directory, module)); + } + for (Module module : chunk) { for (String javaSourceRoot : module.getJavaSourceRoots()) { addJavaSourceRoot(configuration, new File(javaSourceRoot)); } + } + for (Module module : chunk) { for (String classpathRoot : module.getClasspathRoots()) { addJvmClasspathRoot(configuration, new File(classpathRoot)); } + } + for (Module module : chunk) { for (String annotationsRoot : module.getAnnotationsRoots()) { configuration.add(JVMConfigurationKeys.ANNOTATIONS_PATH_KEY, new File(annotationsRoot)); } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java index b3fb579cc09..39a4728acb3 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.jps.build; +import com.google.common.collect.Lists; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; import com.intellij.testFramework.LightVirtualFile; @@ -33,6 +34,7 @@ import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.kotlin.codegen.AsmUtil; import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils; import org.jetbrains.kotlin.name.FqName; +import org.jetbrains.kotlin.test.MockLibraryUtil; import org.jetbrains.kotlin.utils.PathUtil; import org.jetbrains.org.objectweb.asm.ClassReader; import org.jetbrains.org.objectweb.asm.ClassVisitor; @@ -258,7 +260,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { assertFilesExistInOutput(module, "Foo.class", "Bar.class"); assertFilesNotExistInOutput(module, EXCLUDE_FILES); - checkWhen(touch("src/foo.kt"), null, new String[] { klass("kotlinProject", "Foo")} ); + checkWhen(touch("src/foo.kt"), null, new String[] {klass("kotlinProject", "Foo")}); checkWhen(touch("src/Excluded.kt"), null, NOTHING ); checkWhen(touch("src/dir/YetAnotherExcluded.kt"), null, NOTHING); } @@ -270,7 +272,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { assertFilesExistInOutput(module, "Foo.class", "Bar.class"); assertFilesNotExistInOutput(module, EXCLUDE_FILES); - checkWhen(touch("src/foo.kt"), null, new String[] { klass("kotlinProject", "Foo")} ); + checkWhen(touch("src/foo.kt"), null, new String[] {klass("kotlinProject", "Foo")}); checkWhen(touch("src/dir/subdir/bar.kt"), null, new String[] { klass("kotlinProject", "Bar")} ); checkWhen(touch("src/dir/Excluded.kt"), null, NOTHING ); @@ -284,7 +286,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { assertFilesExistInOutput(module, "Foo.class", "Bar.class"); assertFilesNotExistInOutput(module, EXCLUDE_FILES); - checkWhen(touch("src/foo.kt"), null, new String[] { klass("kotlinProject", "Foo")} ); + checkWhen(touch("src/foo.kt"), null, new String[] {klass("kotlinProject", "Foo")}); checkWhen(touch("src/exclude/Excluded.kt"), null, NOTHING); checkWhen(touch("src/exclude/YetAnotherExcluded.kt"), null, NOTHING); @@ -416,6 +418,19 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { checkWhen(touch("module2/src/b.kt"), null, packageClasses("module2", "module2/src/b.kt", "test.TestPackage")); } + public void testCircularDependencyWithReferenceToOldVersionLib() throws IOException { + initProject(); + + File libraryJar = MockLibraryUtil.compileLibraryToJar( + workDir.getAbsolutePath() + File.separator + "oldModuleLib/src", "module-lib", false); + + addDependency(JpsJavaDependencyScope.COMPILE, Lists.newArrayList(findModule("module1"), findModule("module2")), false, + "module-lib", libraryJar); + + BuildResult result = makeAll(); + result.assertSuccessful(); + } + private void createKotlinJavaScriptLibraryArchive() { File jarFile = new File(workDir, KOTLIN_JS_LIBRARY_JAR); try { diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/kotlinProject.ipr b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/kotlinProject.ipr new file mode 100644 index 00000000000..c1a403dd047 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/kotlinProject.ipr @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/module1.iml b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/module1.iml new file mode 100644 index 00000000000..f8d6a06273d --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/module1.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/src/module1/JavaClass.java b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/src/module1/JavaClass.java new file mode 100644 index 00000000000..6bec9cbc7a6 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/src/module1/JavaClass.java @@ -0,0 +1,6 @@ +package module1; + +public class JavaClass { + public static void newJavaMethod() {} + public static void oldJavaMethod() {} +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/src/module1/b.kt b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/src/module1/b.kt new file mode 100644 index 00000000000..eed0941fbaf --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module1/src/module1/b.kt @@ -0,0 +1,11 @@ +package module1 + +import module2.* + +fun foo() { + JavaClass.oldJavaMethod() + JavaClass.newJavaMethod() + + KotlinObject.oldKotlinMethod() + KotlinObject.newKotlinMethod() +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/module2.iml b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/module2.iml new file mode 100644 index 00000000000..c21105b2c24 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/module2.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/src/module2/KotlinObject.kt b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/src/module2/KotlinObject.kt new file mode 100644 index 00000000000..fa757e1de93 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/src/module2/KotlinObject.kt @@ -0,0 +1,9 @@ +package module2 + +public object KotlinObject { + public fun oldKotlinMethod() { + } + + public fun newKotlinMethod() { + } +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/src/module2/a.kt b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/src/module2/a.kt new file mode 100644 index 00000000000..10ecb462c1d --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/module2/src/module2/a.kt @@ -0,0 +1,11 @@ +package module2 + +import module1.* + +fun bar() { + JavaClass.oldJavaMethod() + JavaClass.newJavaMethod() + + KotlinObject.oldKotlinMethod() + KotlinObject.newKotlinMethod() +} diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module1/JavaClass.java b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module1/JavaClass.java new file mode 100644 index 00000000000..695f1f369ac --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module1/JavaClass.java @@ -0,0 +1,5 @@ +package module1; + +public class JavaClass { + public static void oldJavaMethod() {} +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module1/b.kt b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module1/b.kt new file mode 100644 index 00000000000..f849db6dc81 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module1/b.kt @@ -0,0 +1,9 @@ +package module1 + +import module2.* + +fun foo() { + JavaClass.oldJavaMethod() + + KotlinObject.oldKotlinMethod() +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module2/KotlinObject.kt b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module2/KotlinObject.kt new file mode 100644 index 00000000000..9abb5fd9320 --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module2/KotlinObject.kt @@ -0,0 +1,6 @@ +package module2 + +public object KotlinObject { + public fun oldKotlinMethod() { + } +} \ No newline at end of file diff --git a/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module2/a.kt b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module2/a.kt new file mode 100644 index 00000000000..c595a192cad --- /dev/null +++ b/jps-plugin/testData/general/CircularDependencyWithReferenceToOldVersionLib/oldModuleLib/src/module2/a.kt @@ -0,0 +1,9 @@ +package module2 + +import module1.* + +fun bar() { + JavaClass.oldJavaMethod() + + KotlinObject.oldKotlinMethod() +}