diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiPlatformCompletionTest.kt b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiPlatformCompletionTest.kt index 686117b3c59..e36f597458f 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiPlatformCompletionTest.kt +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/AbstractMultiPlatformCompletionTest.kt @@ -22,7 +22,7 @@ import java.io.File abstract class AbstractMultiPlatformCompletionTest : AbstractMultiModuleTest() { protected fun doTest(testPath: String) { setupMppProjectFromDirStructure(File(testPath)) - val file = project.findFileWithCaret() + val file = project.findFileWithCaret() as KtFile val doc = PsiDocumentManager.getInstance(myProject).getDocument(file)!! val offset = doc.extractMarkerOffset(project) val editor = EditorFactory.getInstance().createEditor(doc, myProject)!! diff --git a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt index e3c05bcae1b..7d314e86269 100644 --- a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt +++ b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.test import com.intellij.codeInsight.CodeInsightTestCase import com.intellij.codeInsight.daemon.impl.EditorTracker +import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.startup.impl.StartupManagerImpl import com.intellij.openapi.actionSystem.ActionPlaces import com.intellij.openapi.actionSystem.AnActionEvent @@ -22,6 +23,7 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess +import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiManager import com.intellij.psi.search.FileTypeIndex import com.intellij.psi.search.ProjectScope @@ -226,5 +228,14 @@ fun Project.allKotlinFiles(): List { .filterIsInstance() } +fun Project.allJavaFiles(): List { + val virtualFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, ProjectScope.getProjectScope(this)) + return virtualFiles + .map { PsiManager.getInstance(this).findFile(it) } + .filterIsInstance() +} + fun Project.findFileWithCaret() = - allKotlinFiles().single { "" in VfsUtilCore.loadText(it.virtualFile) } + (allKotlinFiles() + allJavaFiles()).single { + "" in VfsUtilCore.loadText(it.virtualFile) && !it.virtualFile.name.endsWith(".after") + } diff --git a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt.173 b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt.173 index b485be5d25e..26e09a8f1c0 100644 --- a/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt.173 +++ b/idea/idea-test-framework/test/org/jetbrains/kotlin/idea/test/KotlinLightCodeInsightFixtureTestCase.kt.173 @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.test import com.intellij.codeInsight.CodeInsightTestCase import com.intellij.codeInsight.daemon.impl.EditorTracker +import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.startup.impl.StartupManagerImpl import com.intellij.openapi.actionSystem.ActionPlaces import com.intellij.openapi.actionSystem.AnActionEvent @@ -22,6 +23,7 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess +import com.intellij.psi.PsiJavaFile import com.intellij.psi.PsiManager import com.intellij.psi.search.FileTypeIndex import com.intellij.psi.search.ProjectScope @@ -227,5 +229,14 @@ fun Project.allKotlinFiles(): List { .filterIsInstance() } +fun Project.allJavaFiles(): List { + val virtualFiles = FileTypeIndex.getFiles(JavaFileType.INSTANCE, ProjectScope.getProjectScope(this)) + return virtualFiles + .map { PsiManager.getInstance(this).findFile(it) } + .filterIsInstance() +} + fun Project.findFileWithCaret() = - allKotlinFiles().single { "" in VfsUtilCore.loadText(it.virtualFile) } + (allKotlinFiles() + allJavaFiles()).single { + "" in VfsUtilCore.loadText(it.virtualFile) && !it.virtualFile.name.endsWith(".after") + } diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt index b9d89faf170..8af9176dde4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleHighlightingTest.kt @@ -16,17 +16,20 @@ package org.jetbrains.kotlin.idea.caches.resolve +import com.intellij.psi.PsiFile import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromDirStructure import org.jetbrains.kotlin.idea.stubs.AbstractMultiHighlightingTest import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.idea.test.allJavaFiles +import org.jetbrains.kotlin.idea.test.allKotlinFiles import java.io.File abstract class AbstractMultiModuleHighlightingTest : AbstractMultiHighlightingTest() { - protected open fun checkHighlightingInAllFiles( - shouldCheckFile: () -> Boolean = { !file.text.contains("// !CHECK_HIGHLIGHTING") } + protected open fun checkHighlightingInProject( + findFiles: () -> List = { project.allKotlinFiles().excludeByDirective() } ) { - checkFiles(shouldCheckFile) { + checkFiles(findFiles) { checkHighlighting(myEditor, true, false) } } @@ -36,8 +39,12 @@ abstract class AbstractMultiPlatformHighlightingTest : AbstractMultiModuleHighli protected open fun doTest(path: String) { setupMppProjectFromDirStructure(File(path)) - checkHighlightingInAllFiles() + checkHighlightingInProject { + (project.allKotlinFiles() + project.allJavaFiles()).excludeByDirective() + } } override fun getTestDataPath() = "${PluginTestCaseBase.getTestDataPathBase()}/multiModuleHighlighting/multiplatform/" -} \ No newline at end of file +} + +private fun List.excludeByDirective() = filter { !it.text.contains("// !CHECK_HIGHLIGHTING") } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt index 06042a39336..4e4cc334bf0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt @@ -32,6 +32,6 @@ abstract class AbstractMultiModuleLineMarkerTest : AbstractMultiModuleHighlighti protected fun doTest(path: String) { setupMppProjectFromDirStructure(File(path)) - checkHighlightingInAllFiles() + checkHighlightingInProject() } } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt index b0cc34728f7..7c465cddbb0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java8MultiModuleHighlightingTest.kt @@ -28,6 +28,6 @@ class Java8MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module1.addDependency(module2) - checkHighlightingInAllFiles() + checkHighlightingInProject() } } 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 0dabb8ab53d..ed9a023a9fd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/Java9MultiModuleHighlightingTest.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.caches.resolve import com.intellij.openapi.module.Module -import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.MockLibraryUtil @@ -30,7 +29,7 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { fun testSimpleModuleExportsPackage() { module("main").addDependency(module("dependency")) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testSimpleLibraryExportsPackage() { @@ -42,22 +41,22 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { ) module("main").addLibrary(library, "library") - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testNamedDependsOnUnnamed() { module("main").addDependency(module("dependency")) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testUnnamedDependsOnNamed() { module("main").addDependency(module("dependency")) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testDeclarationKinds() { module("main").addDependency(module("dependency")) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testExportsTo() { @@ -65,17 +64,17 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module("first").addDependency(d) module("second").addDependency(d) module("unnamed").addDependency(d) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testExportedPackageIsInaccessibleWithoutRequires() { module("main").addDependency(module("dependency")) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testTypealiasToUnexported() { module("main").addDependency(module("dependency")) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testCyclicDependency() { @@ -83,6 +82,6 @@ class Java9MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { val b = module("moduleB") val c = module("moduleC") module("main").addDependency(a).addDependency(b).addDependency(c) - checkHighlightingInAllFiles() + checkHighlightingInProject() } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt index e5a21a56a84..95647a8c3a4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTest.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.project.KotlinCodeBlockModificationListener import org.jetbrains.kotlin.idea.project.KotlinModuleModificationTracker import org.jetbrains.kotlin.idea.test.PluginTestCaseBase +import org.jetbrains.kotlin.idea.test.allKotlinFiles import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.projectStructure.sdk @@ -57,7 +58,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module2.addDependency(module1) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testDependency() { @@ -76,7 +77,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module4.addDependency(module2) module4.addDependency(module3) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testLazyResolvers() { @@ -94,7 +95,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { assertTrue(module2 !in tracker.moduleResolversComputed) assertTrue(module3 !in tracker.moduleResolversComputed) - checkHighlightingInAllFiles { "m3" in file.name } + checkHighlightingInProject { project.allKotlinFiles().filter { "m3" in it.name } } assertTrue(module1 in tracker.moduleResolversComputed) assertTrue(module2 !in tracker.moduleResolversComputed) @@ -129,7 +130,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { assertEquals(0, tracker.sdkResolversComputed.size) - checkHighlightingInAllFiles { "m2" in file.name } + checkHighlightingInProject { project.allKotlinFiles().filter { "m2" in it.name } } assertEquals(2, tracker.moduleResolversComputed.size) @@ -156,14 +157,14 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { assertEquals(currentModCount, module2ModTracker.modificationCount) assertEquals(currentModCount, module3ModTracker.modificationCount) - checkHighlightingInAllFiles { "m2" in file.name } + checkHighlightingInProject { project.allKotlinFiles().filter { "m2" in it.name } } assertEquals(0, tracker.sdkResolversComputed.size) assertEquals(1, tracker.moduleResolversComputed.size) tracker.moduleResolversComputed.clear() (PsiModificationTracker.SERVICE.getInstance(myProject) as PsiModificationTrackerImpl).incOutOfCodeBlockModificationCounter() - checkHighlightingInAllFiles { "m2" in file.name } + checkHighlightingInProject { project.allKotlinFiles().filter { "m2" in it.name } } assertEquals(0, tracker.sdkResolversComputed.size) assertEquals(2, tracker.moduleResolversComputed.size) } @@ -178,7 +179,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module3.addDependency(module2, dependencyScope = DependencyScope.TEST) module2.addDependency(module1, dependencyScope = DependencyScope.COMPILE) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testLanguageVersionsViaFacets() { @@ -192,7 +193,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { m1.addDependency(m2) m2.addDependency(m1) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testSamWithReceiverExtension() { @@ -210,7 +211,7 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { module1.addDependency(module2) module2.addDependency(module1) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testJvmExperimentalLibrary() { @@ -221,8 +222,9 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { "-Xexperimental=lib.ExperimentalAPI" ) ) + module("usage").addLibrary(lib) - checkHighlightingInAllFiles() + checkHighlightingInProject() } fun testJsExperimentalLibrary() { @@ -233,8 +235,9 @@ open class MultiModuleHighlightingTest : AbstractMultiModuleHighlightingTest() { "-Xexperimental=lib.ExperimentalAPI" ) ) + module("usage").addLibrary(lib, kind = JSLibraryKind) - checkHighlightingInAllFiles() + checkHighlightingInProject() } private fun Module.setupKotlinFacet(configure: KotlinFacetConfiguration.() -> Unit) = apply { diff --git a/idea/tests/org/jetbrains/kotlin/idea/navigation/GotoWithMultipleLibrariesTest.kt b/idea/tests/org/jetbrains/kotlin/idea/navigation/GotoWithMultipleLibrariesTest.kt index a8ffe8bc3b1..c55c707f47a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/navigation/GotoWithMultipleLibrariesTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/navigation/GotoWithMultipleLibrariesTest.kt @@ -20,6 +20,7 @@ import com.intellij.ide.util.gotoByName.GotoSymbolModel2 import com.intellij.openapi.module.StdModuleTypes 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.test.MockLibraryUtil import org.jetbrains.kotlin.test.util.addDependency import org.jetbrains.kotlin.test.util.jarRoot @@ -63,7 +64,7 @@ class GotoWithMultipleLibrariesTest : AbstractMultiModuleTest() { module("m${++i}", srcPath).addDependency(projectLibrary("libB", jarRoot, jarRoot.findChild("src")!!)) } - checkFiles { + checkFiles({ project.allKotlinFiles() }) { GotoCheck.checkGotoDirectives(GotoSymbolModel2(project), editor, nonProjectSymbols = true, checkNavigation = true) } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index 09a96b7ec54..af4d0cd14bf 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -21,6 +21,7 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess +import com.intellij.psi.PsiFile import com.intellij.testFramework.PsiTestUtil import org.jetbrains.kotlin.config.CompilerSettings import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider @@ -31,7 +32,6 @@ import org.jetbrains.kotlin.idea.facet.initializeIfNeeded 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.idea.test.allKotlinFiles import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TestJdkKind import org.junit.Assert @@ -111,14 +111,15 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { facetSettings.coroutineSupport = LanguageFeature.State.ENABLED } - protected fun checkFiles(shouldCheckFile: () -> Boolean = { true }, check: () -> Unit) { + protected fun checkFiles( + findFiles: () -> List, + check: () -> Unit + ) { var atLeastOneFile = false - myProject.allKotlinFiles().forEach { file -> + findFiles().forEach { file -> configureByExistingFile(file.virtualFile!!) - if (shouldCheckFile()) { - atLeastOneFile = true - check() - } + atLeastOneFile = true + check() } Assert.assertTrue(atLeastOneFile) }