From 469a511f59ecf448ea1134afc3f7c58d1f77e63d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 18 May 2017 19:05:53 +0300 Subject: [PATCH] Implement Java 9 module visibility checks In this commit, only IDE tests are added, because we look for module declarations in the IDE across the whole project, whereas in the compiler we should do this on the module path only and that requires separate work (KT-18599) which is done in the following commits. (The change in Cache.kt is needed so that JvmModuleAccessibilityChecker.ClassifierUsage, which is an inner class, would be injected properly.) #KT-18598 In Progress #KT-18599 In Progress GitOrigin-RevId: 47a81cb8c39b2a085b75e7889848337dc079b453 --- .../idea/modules/IdeJavaModuleResolver.kt | 56 ++++++++++++++ plugins/kotlin/idea/src/META-INF/plugin.xml | 3 + .../AbstractMultiModuleHighlightingTest.kt | 9 ++- .../Java8MultiModuleHighlightingTest.kt | 3 +- .../Java9MultiModuleHighlightingTest.kt | 76 +++++++++++++++++++ .../resolve/MultiModuleHighlightingTest.kt | 7 +- .../idea/stubs/AbstractMultiModuleTest.kt | 10 +-- .../dependency/module-info.java | 2 + .../dependency/unexported/declarationKinds.kt | 12 +++ .../declarationKinds/main/module-info.java | 3 + .../java9/declarationKinds/main/usage.kt | 17 +++++ .../exportsTo/dependency/dependency/Foo.java | 3 + .../exportsTo/dependency/module-info.java | 3 + .../java9/exportsTo/first/firstUsage.kt | 6 ++ .../java9/exportsTo/first/module-info.java | 3 + .../java9/exportsTo/second/module-info.java | 3 + .../java9/exportsTo/second/secondUsage.kt | 6 ++ .../java9/exportsTo/unnamed/unnamedUsage.kt | 6 ++ .../dependency/dependency/J.java | 4 + .../main/module-info.java | 3 + .../java9/namedDependsOnUnnamed/main/usage.kt | 6 ++ .../library/dependency/J.java | 7 ++ .../library/dependency/K.kt | 9 +++ .../library/dependency/impl/JImpl.java | 6 ++ .../library/dependency/impl/KImpl.kt | 5 ++ .../library/module-info.java | 3 + .../main/module-info.java | 3 + .../simpleLibraryExportsPackage/main/usage.kt | 16 ++++ .../dependency/dependency/J.java | 7 ++ .../dependency/dependency/K.kt | 9 +++ .../dependency/dependency/impl/JImpl.java | 6 ++ .../dependency/dependency/impl/KImpl.kt | 5 ++ .../dependency/module-info.java | 3 + .../main/module-info.java | 3 + .../simpleModuleExportsPackage/main/usage.kt | 16 ++++ .../dependency/dependency/J.java | 7 ++ .../dependency/dependency/K.kt | 9 +++ .../dependency/dependency/impl/JImpl.java | 6 ++ .../dependency/dependency/impl/KImpl.kt | 5 ++ .../dependency/module-info.java | 3 + .../java9/unnamedDependsOnNamed/main/usage.kt | 16 ++++ .../kotlin/jps/build/KotlinJpsBuildTest.kt | 2 +- .../kotlin/idea/test/PluginTestCaseBase.java | 25 +++++- .../kotlin/test/KotlinTestUtils.java | 7 +- .../jetbrains/kotlin/test/MockLibraryUtil.kt | 20 +++-- 45 files changed, 414 insertions(+), 25 deletions(-) create mode 100644 plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/modules/IdeJavaModuleResolver.kt create mode 100644 plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/unexported/declarationKinds.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/usage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/dependency/Foo.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/firstUsage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/secondUsage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/unnamed/unnamedUsage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/dependency/dependency/J.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/usage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/J.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/K.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/JImpl.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/KImpl.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/usage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/J.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/K.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/JImpl.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/KImpl.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/usage.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/J.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/K.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/JImpl.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/KImpl.kt create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/module-info.java create mode 100644 plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/main/usage.kt diff --git a/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/modules/IdeJavaModuleResolver.kt b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/modules/IdeJavaModuleResolver.kt new file mode 100644 index 000000000000..3a1658ed5744 --- /dev/null +++ b/plugins/kotlin/analysis/src/org/jetbrains/kotlin/idea/modules/IdeJavaModuleResolver.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.modules + +import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.PsiCompiledElement +import com.intellij.psi.PsiJavaModule +import com.intellij.psi.PsiManager +import com.intellij.psi.impl.file.impl.JavaFileManager +import com.intellij.psi.impl.light.LightJavaModule +import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.resolve.jvm.modules.* + +class IdeJavaModuleResolver(project: Project) : JavaModuleResolver { + private val psiManager = PsiManager.getInstance(project) + private val fileManager = JavaFileManager.SERVICE.getInstance(project) + private val allScope = GlobalSearchScope.allScope(project) + + override val moduleGraph: JavaModuleGraph = JavaModuleGraph( + object : JavaModuleFinder { + override fun findModule(name: String): JavaModule? { + return fileManager.findModules(name, allScope).singleOrNull()?.toJavaModule() + } + } + ) + + override fun findJavaModule(file: VirtualFile): JavaModule? { + val psiFile = psiManager.findFile(file) ?: return null + return JavaModuleGraphUtil.findDescriptorByElement(psiFile)?.toJavaModule() + } + + private fun PsiJavaModule.toJavaModule(): JavaModule { + if (this is LightJavaModule) { + return JavaModule.Automatic(name, rootVirtualFile) + } + + val virtualFile = containingFile?.virtualFile ?: error("No VirtualFile found for module $this ($javaClass)") + return JavaModule.Explicit(JavaModuleInfo.create(this), virtualFile.parent, virtualFile, this is PsiCompiledElement) + } +} diff --git a/plugins/kotlin/idea/src/META-INF/plugin.xml b/plugins/kotlin/idea/src/META-INF/plugin.xml index de07c6e4151a..0e0e36ff850a 100644 --- a/plugins/kotlin/idea/src/META-INF/plugin.xml +++ b/plugins/kotlin/idea/src/META-INF/plugin.xml @@ -245,6 +245,9 @@ + + diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt index f75e2a6e3a44..1cdd28e1fa4e 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt @@ -20,10 +20,11 @@ import com.intellij.openapi.module.Module import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.idea.stubs.AbstractMultiHighlightingTest +import org.jetbrains.kotlin.test.TestJdkKind abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTest() { - protected fun checkHighlightingInAllFiles( + protected open fun checkHighlightingInAllFiles( shouldCheckFile: () -> Boolean = { !file.text.contains("// !CHECK_HIGHLIGHTING") } ) { checkFiles(shouldCheckFile) { @@ -35,9 +36,9 @@ abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTe vararg platforms: TargetPlatformKind<*>, withStdlibCommon: Boolean = false, configureModule: (Module, TargetPlatformKind<*>) -> Unit = { _, _ -> }, - useFullJdk: Boolean = false + jdk: TestJdkKind = TestJdkKind.MOCK_JDK ) { - val commonModule = module("common", useFullJdk = useFullJdk) + val commonModule = module("common", jdk) commonModule.createFacet(TargetPlatformKind.Common) if (withStdlibCommon) { commonModule.addLibrary(ForTestCompileRuntime.stdlibCommonForTests()) @@ -49,7 +50,7 @@ abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTe is TargetPlatformKind.JavaScript -> "js" else -> error("Unsupported platform: $platform") } - val platformModule = module(path, useFullJdk = useFullJdk) + val platformModule = module(path, jdk) platformModule.createFacet(platform) platformModule.enableMultiPlatform() platformModule.addDependency(commonModule) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt index 11b77d36ea6d..b0cc34728f77 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt @@ -17,12 +17,13 @@ package org.jetbrains.kotlin.idea.caches.resolve import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.test.TestJdkKind class Java8MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { override fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/" fun testDifferentJdk() { - val module1 = module("jdk8", useFullJdk = true) + val module1 = module("jdk8", TestJdkKind.FULL_JDK) val module2 = module("mockJdk") module1.addDependency(module2) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt new file mode 100644 index 000000000000..5df92a156575 --- /dev/null +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt @@ -0,0 +1,76 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.caches.resolve + +import com.intellij.openapi.module.Module +import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.MockLibraryUtil +import org.jetbrains.kotlin.test.TestJdkKind.FULL_JDK_9 + +class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { + override fun getTestDataPath(): String = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/java9/" + + private inline fun doTest(test: () -> Unit) { + // Skip this test if no Java 9 is found + if (KotlinTestUtils.getJdk9HomeIfPossible() != null) { + test() + } + } + + private fun module(name: String): Module = super.module(name, FULL_JDK_9, false) + + fun testSimpleModuleExportsPackage() = doTest { + module("main").addDependency(module("dependency")) + checkHighlightingInAllFiles() + } + + fun testSimpleLibraryExportsPackage() = doTest { + val jdk9Home = KotlinTestUtils.getJdk9HomeIfPossible() ?: return + val library = MockLibraryUtil.compileJvmLibraryToJar( + testDataPath + "${getTestName(true)}/library", "library", + extraOptions = listOf("-jdk-home", jdk9Home.path), + useJava9 = true + ) + + module("main").addLibrary(library, "library") + checkHighlightingInAllFiles() + } + + fun testNamedDependsOnUnnamed() = doTest { + module("main").addDependency(module("dependency")) + checkHighlightingInAllFiles() + } + + fun testUnnamedDependsOnNamed() = doTest { + module("main").addDependency(module("dependency")) + checkHighlightingInAllFiles() + } + + fun testDeclarationKinds() = doTest { + module("main").addDependency(module("dependency")) + checkHighlightingInAllFiles() + } + + fun testExportsTo() = doTest { + val d = module("dependency") + module("first").addDependency(d) + module("second").addDependency(d) + module("unnamed").addDependency(d) + checkHighlightingInAllFiles() + } +} diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt index 093e9141d459..927098d8532b 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.idea.facet.KotlinFacetConfiguration import org.jetbrains.kotlin.idea.facet.KotlinFacetType import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.util.application.runWriteAction +import org.jetbrains.kotlin.test.TestJdkKind.FULL_JDK open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { override fun getTestDataPath() = PluginTestCaseBase.getTestDataPathBase() + "/multiModuleHighlighting/" @@ -110,10 +111,10 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { } fun testLanguageVersionsViaFacets() { - val m1 = module("m1", useFullJdk = true).setupKotlinFacet { + val m1 = module("m1", FULL_JDK).setupKotlinFacet { settings.languageLevel = LanguageVersion.KOTLIN_1_1 } - val m2 = module("m2", useFullJdk = true).setupKotlinFacet { + val m2 = module("m2", FULL_JDK).setupKotlinFacet { settings.languageLevel = LanguageVersion.KOTLIN_1_0 } @@ -174,7 +175,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { fun testUseCorrectBuiltInsForCommonModule() { doMultiPlatformTest(TargetPlatformKind.Jvm[JvmTarget.JVM_1_8], TargetPlatformKind.JavaScript, - withStdlibCommon = true, useFullJdk = true, configureModule = { module, platform -> + withStdlibCommon = true, jdk = FULL_JDK, configureModule = { module, platform -> if (platform == TargetPlatformKind.JavaScript) { module.addLibrary(ForTestCompileRuntime.stdlibJsForTests()) module.addLibrary(ForTestCompileRuntime.stdlibCommonForTests()) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index 647cb9d54c02..e4e62d596f1f 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.TestJdkKind import org.junit.Assert import java.io.File @@ -53,15 +54,14 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { VfsRootAccess.allowRootAccess(KotlinTestUtils.getHomeDirectory()) } - protected fun module(name: String, hasTestRoot: Boolean = false, useFullJdk: Boolean = false): Module { + protected fun module(name: String, jdk: TestJdkKind = TestJdkKind.MOCK_JDK, hasTestRoot: Boolean = false): Module { val srcDir = testDataPath + "${getTestName(true)}/$name" val moduleWithSrcRootSet = createModuleFromTestData(srcDir, name, StdModuleTypes.JAVA, true)!! if (hasTestRoot) { setTestRoot(moduleWithSrcRootSet, name) } - val jdkToUse = if (useFullJdk) PluginTestCaseBase.fullJdk() else PluginTestCaseBase.mockJdk() - ConfigLibraryUtil.configureSdk(moduleWithSrcRootSet, jdkToUse) + ConfigLibraryUtil.configureSdk(moduleWithSrcRootSet, PluginTestCaseBase.jdk(jdk)) return moduleWithSrcRootSet } @@ -86,9 +86,9 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { exported: Boolean = false ) = ModuleRootModificationUtil.addDependency(this, other, dependencyScope, exported) - protected fun Module.addLibrary(jar: File) { + protected fun Module.addLibrary(jar: File, name: String = KotlinJdkAndLibraryProjectDescriptor.LIBRARY_NAME) { ConfigLibraryUtil.addLibrary(NewLibraryEditor().apply { - name = KotlinJdkAndLibraryProjectDescriptor.LIBRARY_NAME + this.name = name addRoot(VfsUtil.getUrlForLibraryRoot(jar), OrderRootType.CLASSES) }, this) } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/module-info.java new file mode 100644 index 000000000000..1bf49a29559e --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/module-info.java @@ -0,0 +1,2 @@ +module dependency { +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/unexported/declarationKinds.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/unexported/declarationKinds.kt new file mode 100644 index 000000000000..3818da9474e7 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/dependency/unexported/declarationKinds.kt @@ -0,0 +1,12 @@ +package unexported + +class Klass +interface Interface + +typealias TypeAliasToPublic = String +typealias TypeAliasToUnexported = Klass + +fun function() {} + +val valProperty = "" +var varProperty = "" diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/module-info.java new file mode 100644 index 000000000000..d069dfb8d7aa --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/module-info.java @@ -0,0 +1,3 @@ +module main { + requires dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/usage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/usage.kt new file mode 100644 index 000000000000..ad6d5883cb10 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/declarationKinds/main/usage.kt @@ -0,0 +1,17 @@ +import unexported.* + +fun usage(): String { + val k: Klass = Klass() + val i: Interface? = null + + val ta1: TypeAliasToPublic = TypeAliasToPublic() + val ta2: TypeAliasToUnexported = TypeAliasToUnexported() + + function() + + valProperty + varProperty + varProperty = "" + + return "$k$i$ta1$ta2" +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/dependency/Foo.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/dependency/Foo.java new file mode 100644 index 000000000000..cb91cdb96377 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/dependency/Foo.java @@ -0,0 +1,3 @@ +package dependency; + +public class Foo {} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/module-info.java new file mode 100644 index 000000000000..aa45063f48eb --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/dependency/module-info.java @@ -0,0 +1,3 @@ +module dependency { + exports dependency to first; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/firstUsage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/firstUsage.kt new file mode 100644 index 000000000000..7ee2415b9f2c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/firstUsage.kt @@ -0,0 +1,6 @@ +import dependency.Foo + +fun firstUsage(): String { + val foo: Foo = Foo() + return foo.toString() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/module-info.java new file mode 100644 index 000000000000..f217d8c488bc --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/first/module-info.java @@ -0,0 +1,3 @@ +module first { + requires dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/module-info.java new file mode 100644 index 000000000000..3a5db6643008 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/module-info.java @@ -0,0 +1,3 @@ +module second { + requires dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/secondUsage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/secondUsage.kt new file mode 100644 index 000000000000..d239e64fd382 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/second/secondUsage.kt @@ -0,0 +1,6 @@ +import dependency.Foo + +fun secondUsage(): String { + val foo: Foo = Foo() + return foo.toString() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/unnamed/unnamedUsage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/unnamed/unnamedUsage.kt new file mode 100644 index 000000000000..a6b343c3ada7 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/exportsTo/unnamed/unnamedUsage.kt @@ -0,0 +1,6 @@ +import dependency.Foo + +fun unnamedUsage(): String { + val foo: Foo = Foo() + return foo.toString() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/dependency/dependency/J.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/dependency/dependency/J.java new file mode 100644 index 000000000000..dfd02f230b19 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/dependency/dependency/J.java @@ -0,0 +1,4 @@ +package dependency; + +public class J { +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/module-info.java new file mode 100644 index 000000000000..d069dfb8d7aa --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/module-info.java @@ -0,0 +1,3 @@ +module main { + requires dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/usage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/usage.kt new file mode 100644 index 000000000000..a03370a901c5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/namedDependsOnUnnamed/main/usage.kt @@ -0,0 +1,6 @@ +import dependency.J + +fun usage(): String { + val j: J = J() + return j.toString() +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/J.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/J.java new file mode 100644 index 000000000000..fbbbdfa60372 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/J.java @@ -0,0 +1,7 @@ +package dependency; + +import dependency.impl.JImpl; + +public class J { + public static JImpl getInstance() { return new JImpl(); } +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/K.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/K.kt new file mode 100644 index 000000000000..c9e701dd7c53 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/K.kt @@ -0,0 +1,9 @@ +package dependency + +import dependency.impl.KImpl + +open class K { + companion object { + fun getInstance(): KImpl = KImpl() + } +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/JImpl.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/JImpl.java new file mode 100644 index 000000000000..24efaacbfe09 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/JImpl.java @@ -0,0 +1,6 @@ +package dependency.impl; + +import dependency.J; + +public class JImpl extends J { +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/KImpl.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/KImpl.kt new file mode 100644 index 000000000000..389e1b0cc6f4 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/dependency/impl/KImpl.kt @@ -0,0 +1,5 @@ +package dependency.impl + +import dependency.K + +class KImpl : K() diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/module-info.java new file mode 100644 index 000000000000..4f71cf3e2230 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/library/module-info.java @@ -0,0 +1,3 @@ +module library { + exports dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/module-info.java new file mode 100644 index 000000000000..e236e735339d --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/module-info.java @@ -0,0 +1,3 @@ +module main { + requires library; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/usage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/usage.kt new file mode 100644 index 000000000000..d90a85f266f5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleLibraryExportsPackage/main/usage.kt @@ -0,0 +1,16 @@ +import dependency.* +import dependency.J +import dependency.K +import dependency.impl.* +import dependency.impl.JImpl +import dependency.impl.KImpl + +fun usage(): String { + val j: J = J.getInstance() + val k: K = K.getInstance() + + val jImpl: JImpl = J.getInstance() + val kImpl: KImpl = K.getInstance() + + return "$j$k$jImpl$kImpl" +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/J.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/J.java new file mode 100644 index 000000000000..fbbbdfa60372 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/J.java @@ -0,0 +1,7 @@ +package dependency; + +import dependency.impl.JImpl; + +public class J { + public static JImpl getInstance() { return new JImpl(); } +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/K.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/K.kt new file mode 100644 index 000000000000..c9e701dd7c53 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/K.kt @@ -0,0 +1,9 @@ +package dependency + +import dependency.impl.KImpl + +open class K { + companion object { + fun getInstance(): KImpl = KImpl() + } +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/JImpl.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/JImpl.java new file mode 100644 index 000000000000..24efaacbfe09 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/JImpl.java @@ -0,0 +1,6 @@ +package dependency.impl; + +import dependency.J; + +public class JImpl extends J { +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/KImpl.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/KImpl.kt new file mode 100644 index 000000000000..389e1b0cc6f4 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/dependency/impl/KImpl.kt @@ -0,0 +1,5 @@ +package dependency.impl + +import dependency.K + +class KImpl : K() diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/module-info.java new file mode 100644 index 000000000000..577768d30c49 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/dependency/module-info.java @@ -0,0 +1,3 @@ +module dependency { + exports dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/module-info.java new file mode 100644 index 000000000000..d069dfb8d7aa --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/module-info.java @@ -0,0 +1,3 @@ +module main { + requires dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/usage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/usage.kt new file mode 100644 index 000000000000..d90a85f266f5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/simpleModuleExportsPackage/main/usage.kt @@ -0,0 +1,16 @@ +import dependency.* +import dependency.J +import dependency.K +import dependency.impl.* +import dependency.impl.JImpl +import dependency.impl.KImpl + +fun usage(): String { + val j: J = J.getInstance() + val k: K = K.getInstance() + + val jImpl: JImpl = J.getInstance() + val kImpl: KImpl = K.getInstance() + + return "$j$k$jImpl$kImpl" +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/J.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/J.java new file mode 100644 index 000000000000..fbbbdfa60372 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/J.java @@ -0,0 +1,7 @@ +package dependency; + +import dependency.impl.JImpl; + +public class J { + public static JImpl getInstance() { return new JImpl(); } +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/K.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/K.kt new file mode 100644 index 000000000000..c9e701dd7c53 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/K.kt @@ -0,0 +1,9 @@ +package dependency + +import dependency.impl.KImpl + +open class K { + companion object { + fun getInstance(): KImpl = KImpl() + } +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/JImpl.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/JImpl.java new file mode 100644 index 000000000000..24efaacbfe09 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/JImpl.java @@ -0,0 +1,6 @@ +package dependency.impl; + +import dependency.J; + +public class JImpl extends J { +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/KImpl.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/KImpl.kt new file mode 100644 index 000000000000..389e1b0cc6f4 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/dependency/impl/KImpl.kt @@ -0,0 +1,5 @@ +package dependency.impl + +import dependency.K + +class KImpl : K() diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/module-info.java b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/module-info.java new file mode 100644 index 000000000000..577768d30c49 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/dependency/module-info.java @@ -0,0 +1,3 @@ +module dependency { + exports dependency; +} diff --git a/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/main/usage.kt b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/main/usage.kt new file mode 100644 index 000000000000..d90a85f266f5 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleHighlighting/java9/unnamedDependsOnNamed/main/usage.kt @@ -0,0 +1,16 @@ +import dependency.* +import dependency.J +import dependency.K +import dependency.impl.* +import dependency.impl.JImpl +import dependency.impl.KImpl + +fun usage(): String { + val j: J = J.getInstance() + val k: K = K.getInstance() + + val jImpl: JImpl = J.getInstance() + val kImpl: KImpl = K.getInstance() + + return "$j$k$jImpl$kImpl" +} diff --git a/plugins/kotlin/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/plugins/kotlin/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 2706d875e560..7a484fa415f4 100644 --- a/plugins/kotlin/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/plugins/kotlin/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -939,7 +939,7 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { } fun testJre9() { - val path = KotlinTestUtils.getJre9HomeIfPossible()?.absolutePath ?: return + val path = KotlinTestUtils.getJdk9HomeIfPossible()?.absolutePath ?: return val jdk = myModel.global.addSdk(JDK_NAME, path, "9", JpsJavaSdkType.INSTANCE) jdk.addRoot(StandardFileSystems.JRT_PROTOCOL_PREFIX + path + URLUtil.JAR_SEPARATOR + "java.base", JpsOrderRootType.COMPILED) diff --git a/plugins/kotlin/test-framework/src/org/jetbrains/kotlin/idea/test/PluginTestCaseBase.java b/plugins/kotlin/test-framework/src/org/jetbrains/kotlin/idea/test/PluginTestCaseBase.java index 0e561b44d2bc..f91c1e84f368 100644 --- a/plugins/kotlin/test-framework/src/org/jetbrains/kotlin/idea/test/PluginTestCaseBase.java +++ b/plugins/kotlin/test-framework/src/org/jetbrains/kotlin/idea/test/PluginTestCaseBase.java @@ -19,8 +19,10 @@ package org.jetbrains.kotlin.idea.test; import com.intellij.openapi.projectRoots.JavaSdk; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestJdkKind; import java.io.File; @@ -38,19 +40,36 @@ public class PluginTestCaseBase { @NotNull private static Sdk getSdk(String sdkHome, String name) { - return JavaSdk.getInstance().createJdk(name + " JDK", sdkHome, true); + return JavaSdk.getInstance().createJdk(name, sdkHome, true); } @NotNull public static Sdk mockJdk() { - return getSdk("compiler/testData/mockJDK/jre", "Mock"); + return getSdk("compiler/testData/mockJDK/jre", "Mock JDK"); } @NotNull public static Sdk fullJdk() { String javaHome = System.getProperty("java.home"); assert new File(javaHome).isDirectory(); - return getSdk(javaHome, "Full"); + return getSdk(javaHome, "Full JDK"); + } + + @NotNull + public static Sdk jdk(@NotNull TestJdkKind kind) { + switch (kind) { + case MOCK_JDK: + return mockJdk(); + case FULL_JDK_9: + File jre9 = KotlinTestUtils.getJdk9HomeIfPossible(); + assert jre9 != null : "JDK_19 environment variable is not set"; + VfsRootAccess.allowRootAccess(jre9.getPath()); + return getSdk(jre9.getPath(), "Full JDK 9"); + case FULL_JDK: + return fullJdk(); + default: + throw new UnsupportedOperationException(kind.toString()); + } } public static boolean isAllFilesPresentTest(@NotNull String testName) { diff --git a/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java b/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java index 37bd31ea8da0..a6e485b8c2d0 100644 --- a/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java +++ b/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/KotlinTestUtils.java @@ -501,7 +501,7 @@ public class KotlinTestUtils { JvmContentRootsKt.addJvmClasspathRoots(configuration, PathUtil.getJdkClassesRootsFromJre(getJreHome(jdk6))); } else if (jdkKind == TestJdkKind.FULL_JDK_9) { - File home = getJre9HomeIfPossible(); + File home = getJdk9HomeIfPossible(); if (home != null) { configuration.put(JVMConfigurationKeys.JDK_HOME, home); } @@ -529,8 +529,11 @@ public class KotlinTestUtils { } @Nullable - public static File getJre9HomeIfPossible() { + public static File getJdk9HomeIfPossible() { String jdk9 = System.getenv("JDK_19"); + if (jdk9 == null) { + jdk9 = System.getenv("JDK_9"); + } if (jdk9 == null) { // TODO: replace this with a failure as soon as Java 9 is installed on all TeamCity agents System.err.println("Environment variable JDK_19 is not set, the test will be skipped"); diff --git a/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/MockLibraryUtil.kt b/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/MockLibraryUtil.kt index 78522bf267fc..d97d9e5f1a88 100644 --- a/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/MockLibraryUtil.kt +++ b/plugins/kotlin/tests-common/org/jetbrains/kotlin/test/MockLibraryUtil.kt @@ -46,11 +46,11 @@ object MockLibraryUtil { jarName: String, addSources: Boolean = false, extraOptions: List = emptyList(), - extraClasspath: List = emptyList() + extraClasspath: List = emptyList(), + useJava9: Boolean = false ): File { - return compileLibraryToJar( - sourcesPath, KotlinTestUtils.tmpDir("testLibrary-" + jarName), jarName, addSources, extraOptions, extraClasspath - ) + return compileLibraryToJar(sourcesPath, KotlinTestUtils.tmpDir("testLibrary-" + jarName), jarName, addSources, + extraOptions, extraClasspath, useJava9) } @JvmStatic @@ -61,7 +61,8 @@ object MockLibraryUtil { jarName: String, addSources: Boolean = false, extraOptions: List = emptyList(), - extraClasspath: List = emptyList() + extraClasspath: List = emptyList(), + useJava9: Boolean = false ): File { val classesDir = File(contentDir, "classes") @@ -91,7 +92,14 @@ object MockLibraryUtil { "-d", classesDir.path ) - KotlinTestUtils.compileJavaFiles(javaFiles, options) + val compile = + if (useJava9) KotlinTestUtils::compileJavaFilesExternallyWithJava9 + else KotlinTestUtils::compileJavaFiles + + val success = compile(javaFiles, options) + if (!success) { + throw AssertionError("Java files are not compiled successfully") + } } return createJarFile(contentDir, classesDir, jarName, sourcesPath.takeIf { addSources })