From e8a8bdc58e75aeba8aa3ca7f712d2b36257eb314 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 30 Jun 2017 20:25:56 +0300 Subject: [PATCH] Add test on cyclicly dependent Java 9 modules --- .../java9/cyclicDependency/main/module-info.java | 5 +++++ .../java9/cyclicDependency/main/usage.kt | 10 ++++++++++ .../java9/cyclicDependency/moduleA/a/A.java | 3 +++ .../java9/cyclicDependency/moduleA/module-info.java | 4 ++++ .../java9/cyclicDependency/moduleB/b/B.java | 3 +++ .../java9/cyclicDependency/moduleB/module-info.java | 4 ++++ .../java9/cyclicDependency/moduleC/c/C.java | 3 +++ .../java9/cyclicDependency/moduleC/module-info.java | 4 ++++ .../caches/resolve/Java9MultiModuleHighlightingTest.kt | 8 ++++++++ .../kotlin/idea/stubs/AbstractMultiModuleTest.kt | 2 +- 10 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/module-info.java create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/usage.kt create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/a/A.java create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/module-info.java create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/b/B.java create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/module-info.java create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/c/C.java create mode 100644 idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/module-info.java diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/module-info.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/module-info.java new file mode 100644 index 00000000000..5a8c9d16c9a --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/module-info.java @@ -0,0 +1,5 @@ +module main { + requires moduleA; + requires moduleB; + requires moduleC; +} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/usage.kt b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/usage.kt new file mode 100644 index 00000000000..d3faf34228b --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/main/usage.kt @@ -0,0 +1,10 @@ +import a.* +import b.* +import c.* + +fun usage(): String { + val a = A() + val b = B() + val c = C() + return "$a$b$c" +} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/a/A.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/a/A.java new file mode 100644 index 00000000000..e3676563ca3 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/a/A.java @@ -0,0 +1,3 @@ +package a; + +public class A {} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/module-info.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/module-info.java new file mode 100644 index 00000000000..853cf4572d7 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleA/module-info.java @@ -0,0 +1,4 @@ +module moduleA { + exports a; + requires transitive moduleC; +} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/b/B.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/b/B.java new file mode 100644 index 00000000000..f49ee7e84f8 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/b/B.java @@ -0,0 +1,3 @@ +package b; + +public class B {} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/module-info.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/module-info.java new file mode 100644 index 00000000000..3fb018bcfb7 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleB/module-info.java @@ -0,0 +1,4 @@ +module moduleB { + exports b; + requires transitive moduleA; +} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/c/C.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/c/C.java new file mode 100644 index 00000000000..f2f01c42d23 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/c/C.java @@ -0,0 +1,3 @@ +package c; + +public class C {} diff --git a/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/module-info.java b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/module-info.java new file mode 100644 index 00000000000..4754d7d4380 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/java9/cyclicDependency/moduleC/module-info.java @@ -0,0 +1,4 @@ +module moduleC { + exports c; + requires transitive moduleB; +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt index 8b8b53c3f6e..adc4f6d99c5 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt @@ -83,4 +83,12 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module("main").addDependency(module("dependency")) checkHighlightingInAllFiles() } + + fun testCyclicDependency() = doTest { + val a = module("moduleA") + val b = module("moduleB") + val c = module("moduleC") + module("main").addDependency(a).addDependency(b).addDependency(c) + checkHighlightingInAllFiles() + } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index e4e62d596f1..d6b87e40843 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -84,7 +84,7 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { other: Module, dependencyScope: DependencyScope = DependencyScope.COMPILE, exported: Boolean = false - ) = ModuleRootModificationUtil.addDependency(this, other, dependencyScope, exported) + ): Module = this.apply { ModuleRootModificationUtil.addDependency(this, other, dependencyScope, exported) } protected fun Module.addLibrary(jar: File, name: String = KotlinJdkAndLibraryProjectDescriptor.LIBRARY_NAME) { ConfigLibraryUtil.addLibrary(NewLibraryEditor().apply {