From c50eeb3edb9ab495812ac61cc603ab4b42932aef Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Wed, 22 May 2019 11:08:21 +0300 Subject: [PATCH] Add few tests on internal visibility in MPP --- .../internalFromDependsOn/common/common.kt | 1 + .../internalFromDependsOn/dependencies.txt | 4 +++ .../internalFromDependsOn/jvm/jvm.kt | 3 ++ .../common/common.kt | 1 + .../dependencies.txt | 4 +++ .../jvmTest/jvmTest.kt | 3 ++ .../internalFromProduction/dependencies.txt | 1 + .../internalFromProduction/moduleMain/main.kt | 1 + .../internalFromProduction/moduleTest/test.kt | 3 ++ .../AbstractMultiModuleIdeResolveTest.kt | 29 ++++++++++++++----- .../MultiplatformAnalysisTestGenerated.java | 3 +- 11 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 idea/testData/multiplatform/internalFromDependsOn/common/common.kt create mode 100644 idea/testData/multiplatform/internalFromDependsOn/dependencies.txt create mode 100644 idea/testData/multiplatform/internalFromDependsOn/jvm/jvm.kt create mode 100644 idea/testData/multiplatform/internalFromDependsOnOfProduction/common/common.kt create mode 100644 idea/testData/multiplatform/internalFromDependsOnOfProduction/dependencies.txt create mode 100644 idea/testData/multiplatform/internalFromDependsOnOfProduction/jvmTest/jvmTest.kt create mode 100644 idea/testData/multiplatform/internalFromProduction/dependencies.txt create mode 100644 idea/testData/multiplatform/internalFromProduction/moduleMain/main.kt create mode 100644 idea/testData/multiplatform/internalFromProduction/moduleTest/test.kt diff --git a/idea/testData/multiplatform/internalFromDependsOn/common/common.kt b/idea/testData/multiplatform/internalFromDependsOn/common/common.kt new file mode 100644 index 00000000000..7208cf276f7 --- /dev/null +++ b/idea/testData/multiplatform/internalFromDependsOn/common/common.kt @@ -0,0 +1 @@ +internal fun internalFromCommon() { } \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromDependsOn/dependencies.txt b/idea/testData/multiplatform/internalFromDependsOn/dependencies.txt new file mode 100644 index 00000000000..1d84fa9f0d6 --- /dev/null +++ b/idea/testData/multiplatform/internalFromDependsOn/dependencies.txt @@ -0,0 +1,4 @@ +MODULE common { platform=[JVM, JS, Native]; root=common } +MODULE jvm { platform=[JVM]; root=jvm } + +jvm -> common { kind=DEPENDS_ON } diff --git a/idea/testData/multiplatform/internalFromDependsOn/jvm/jvm.kt b/idea/testData/multiplatform/internalFromDependsOn/jvm/jvm.kt new file mode 100644 index 00000000000..d97a2839def --- /dev/null +++ b/idea/testData/multiplatform/internalFromDependsOn/jvm/jvm.kt @@ -0,0 +1,3 @@ +fun usage() { + internalFromCommon() +} \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromDependsOnOfProduction/common/common.kt b/idea/testData/multiplatform/internalFromDependsOnOfProduction/common/common.kt new file mode 100644 index 00000000000..7208cf276f7 --- /dev/null +++ b/idea/testData/multiplatform/internalFromDependsOnOfProduction/common/common.kt @@ -0,0 +1 @@ +internal fun internalFromCommon() { } \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromDependsOnOfProduction/dependencies.txt b/idea/testData/multiplatform/internalFromDependsOnOfProduction/dependencies.txt new file mode 100644 index 00000000000..db874456086 --- /dev/null +++ b/idea/testData/multiplatform/internalFromDependsOnOfProduction/dependencies.txt @@ -0,0 +1,4 @@ +MODULE common { platform=[JVM, JS, Native]; root=common } +MODULE jvm { platform=[JVM]; root=jvmMain; testRoot=jvmTest } + +jvm -> common { kind=DEPENDS_ON } \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromDependsOnOfProduction/jvmTest/jvmTest.kt b/idea/testData/multiplatform/internalFromDependsOnOfProduction/jvmTest/jvmTest.kt new file mode 100644 index 00000000000..fbe18a4f3e7 --- /dev/null +++ b/idea/testData/multiplatform/internalFromDependsOnOfProduction/jvmTest/jvmTest.kt @@ -0,0 +1,3 @@ +fun usageInTest() { + internalFromCommon() +} \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromProduction/dependencies.txt b/idea/testData/multiplatform/internalFromProduction/dependencies.txt new file mode 100644 index 00000000000..60c3cb89f5f --- /dev/null +++ b/idea/testData/multiplatform/internalFromProduction/dependencies.txt @@ -0,0 +1 @@ +MODULE module { platform=[JVM]; root=moduleMain; testRoot=moduleTest } \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromProduction/moduleMain/main.kt b/idea/testData/multiplatform/internalFromProduction/moduleMain/main.kt new file mode 100644 index 00000000000..a0429d25cf0 --- /dev/null +++ b/idea/testData/multiplatform/internalFromProduction/moduleMain/main.kt @@ -0,0 +1 @@ +internal fun internalFromMain() { } \ No newline at end of file diff --git a/idea/testData/multiplatform/internalFromProduction/moduleTest/test.kt b/idea/testData/multiplatform/internalFromProduction/moduleTest/test.kt new file mode 100644 index 00000000000..e1acc9ed04c --- /dev/null +++ b/idea/testData/multiplatform/internalFromProduction/moduleTest/test.kt @@ -0,0 +1,3 @@ +fun usage() { + internalFromMain() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt index d0d5ce088dd..f624fbd14a7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleIdeResolveTest.kt @@ -5,18 +5,19 @@ package org.jetbrains.kotlin.idea.caches.resolve -import com.intellij.psi.PsiFile +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.vfs.VfsUtilCore +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.PsiManager import com.intellij.util.io.exists import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromTextFile -import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.resolve.frontendService import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.idea.test.allKotlinFiles -import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.idea.util.sourceRoots import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.KotlinTestUtils @@ -35,13 +36,23 @@ abstract class AbstractMultiModuleIdeResolveTest : AbstractMultiModuleTest() { // This will implicitly copy all source files to temporary directory, clearing them from diagnostic markup in process setupMppProjectFromTextFile(testRoot) - for (tempFile in project.allKotlinFiles()) { - checkFile(tempFile, tempFile.findCorrespondingFileInTestDir(testRoot)) + project.allKotlinFiles() + + for (module in ModuleManager.getInstance(project).modules) { + for (sourceRoot in module.sourceRoots) { + VfsUtilCore.processFilesRecursively(sourceRoot) { file -> + if (file.isDirectory) return@processFilesRecursively true + + val tempSourceKtFile = PsiManager.getInstance(project).findFile(file) as KtFile + checkFile(tempSourceKtFile, tempSourceKtFile.findCorrespondingFileInTestDir(sourceRoot, testRoot)) + true + } + } } } - private fun KtFile.findCorrespondingFileInTestDir(testDir: File): File { - val tempRootPath = Paths.get(this.module!!.sourceRoots.single().path) + private fun KtFile.findCorrespondingFileInTestDir(containingRoot: VirtualFile, testDir: File): File { + val tempRootPath = Paths.get(containingRoot.path) val tempProjectDirPath = tempRootPath.parent val tempSourcePath = Paths.get(this.virtualFilePath) @@ -92,4 +103,8 @@ abstract class AbstractMultiModuleIdeResolveTest : AbstractMultiModuleTest() { abstract class AbstractHierarchicalExpectActualTest : AbstractMultiModuleIdeResolveTest() { override fun getTestDataPath(): String = "${PluginTestCaseBase.getTestDataPathBase()}/hierarchicalExpectActual" +} + +abstract class AbstractMultiplatformAnalysisTest : AbstractMultiModuleIdeResolveTest() { + override fun getTestDataPath(): String = "${PluginTestCaseBase.getTestDataPathBase()}/multiplatform" } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java index 10ce67ec3ec..24a9de080ce 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java @@ -61,7 +61,8 @@ public class MultiplatformAnalysisTestGenerated extends AbstractMultiplatformAna } public void testAllFilesPresentInMultiplatformTypeRefinement() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/multiplatformTypeRefinement"), Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false); + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/multiplatformTypeRefinement"), + Pattern.compile("^([^\\.]+)$"), TargetBackend.ANY, false); } @TestMetadata("callableReferences")