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()
+}