diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java index b96c5356fbb..ac2b7d2e6c5 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java @@ -29,9 +29,15 @@ import org.jetbrains.jps.model.java.JpsJavaDependencyScope; import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.jps.model.module.JpsModule; import org.jetbrains.jps.util.JpsPathUtil; +import org.jetbrains.org.objectweb.asm.ClassReader; +import org.jetbrains.org.objectweb.asm.ClassVisitor; +import org.jetbrains.org.objectweb.asm.MethodVisitor; +import org.jetbrains.org.objectweb.asm.Opcodes; import java.io.File; import java.io.IOException; +import java.util.Set; +import java.util.TreeSet; public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { private static final String PROJECT_NAME = "kotlinProject"; @@ -204,6 +210,34 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { checkPackageDeletedFromOutputWhen(Operation.CHANGE, "module2", "module2/src/kt1.kt", "kt1.Kt1Package"); } + public void testCircularDependenciesSamePackage() throws IOException { + initProject(); + BuildResult result = makeAll(); + result.assertSuccessful(); + + // Check that outputs are located properly + File facadeWithA = findFileInOutputDir(findModule("module1"), "test/TestPackage.class"); + File facadeWithB = findFileInOutputDir(findModule("module2"), "test/TestPackage.class"); + assertSameElements(getMethodsOfClass(facadeWithA), "a", "getA"); + assertSameElements(getMethodsOfClass(facadeWithB), "b", "getB", "setB"); + + checkPackageDeletedFromOutputWhen(Operation.CHANGE, "module1", "module1/src/a.kt", "test.TestPackage"); + checkPackageDeletedFromOutputWhen(Operation.CHANGE, "module2", "module2/src/b.kt", "test.TestPackage"); + } + + @NotNull + private static Set getMethodsOfClass(@NotNull File classFile) throws IOException { + final Set result = new TreeSet(); + new ClassReader(FileUtil.loadFileBytes(classFile)).accept(new ClassVisitor(Opcodes.ASM5) { + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + result.add(name); + return null; + } + }, 0); + return result; + } + public void testReexportedDependency() { initProject(); addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE, diff --git a/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/kotlinProject.ipr b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/kotlinProject.ipr new file mode 100644 index 00000000000..c1a403dd047 --- /dev/null +++ b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/kotlinProject.ipr @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module1/module1.iml b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module1/module1.iml new file mode 100644 index 00000000000..b86ce213a79 --- /dev/null +++ b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module1/module1.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module1/src/a.kt b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module1/src/a.kt new file mode 100644 index 00000000000..4987d3f36ec --- /dev/null +++ b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module1/src/a.kt @@ -0,0 +1,7 @@ +package test + +fun a() { + +} + +val a = "" \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module2/module2.iml b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module2/module2.iml new file mode 100644 index 00000000000..ecdc9e147ae --- /dev/null +++ b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module2/module2.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module2/src/b.kt b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module2/src/b.kt new file mode 100644 index 00000000000..1dcef1df913 --- /dev/null +++ b/jps/jps-plugin/testData/general/CircularDependenciesSamePackage/module2/src/b.kt @@ -0,0 +1,7 @@ +package test + +fun b() { + +} + +var b = "" \ No newline at end of file