diff --git a/plugins/kotlin/code-insight/line-markers/src/org/jetbrains/kotlin/idea/codeInsight/lineMarkers/KotlinExpectActualLineMarkerProvider.kt b/plugins/kotlin/code-insight/line-markers/src/org/jetbrains/kotlin/idea/codeInsight/lineMarkers/KotlinExpectActualLineMarkerProvider.kt index 887250b10d83..eea5eb407a1c 100644 --- a/plugins/kotlin/code-insight/line-markers/src/org/jetbrains/kotlin/idea/codeInsight/lineMarkers/KotlinExpectActualLineMarkerProvider.kt +++ b/plugins/kotlin/code-insight/line-markers/src/org/jetbrains/kotlin/idea/codeInsight/lineMarkers/KotlinExpectActualLineMarkerProvider.kt @@ -175,11 +175,14 @@ internal fun getModulesStringForMarkerTooltip(navigatableDeclarations: Collectio val project = navigatableDeclarations.first().project val projectStructureProvider = ProjectStructureProvider.getInstance(project) - - return navigatableDeclarations + val moduleNames = navigatableDeclarations .mapNotNull { navigatable -> navigatable.element?.let { projectStructureProvider.getModule(it, null).moduleName } } - .sorted() - .joinToString() + + return when (moduleNames.size) { + 0 -> null + 1 -> moduleNames.single() + else -> moduleNames.sorted().joinToString(", ", prefix = "[", postfix = "]") + } } private val KtModule.moduleName: String diff --git a/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/common/common.kt b/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/common/common.kt index 8e2a8a35103c..95ea9b3c1f1e 100644 --- a/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/common/common.kt +++ b/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/common/common.kt @@ -1,18 +1,18 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package sample -expect class Sample() { - fun checkMe(): Int +expect class Sample() { + fun checkMe(): Int } -expect object Platform { - val name: String +expect object Platform { + val name: String } fun hello(): String = "Hello from ${Platform.name}" -expect fun foo() +expect fun foo() -expect annotation class Preview() +expect annotation class Preview() -expect object SomeObject() +expect object SomeObject() \ No newline at end of file diff --git a/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/js/js.kt b/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/js/js.kt index 1604d0fe10cd..0cde13577921 100644 --- a/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/js/js.kt +++ b/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/js/js.kt @@ -12,4 +12,4 @@ actual object Platform actual fun foo() {} actual annotation class Preview -actual object SomeObject \ No newline at end of file +actual object SomeObject diff --git a/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/jvm/jvm.kt b/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/jvm/jvm.kt index 98d6c397716e..2b5275d09046 100644 --- a/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/jvm/jvm.kt +++ b/plugins/kotlin/code-insight/testData/linemarkers/multiplatform/jvm/jvm.kt @@ -18,5 +18,3 @@ actual typealias Preview< annotation object SomeMyObject actual typealias SomeObject = SomeMyObject - - diff --git a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/codeInsight/AbstractK2MultiModuleLineMarkerTest.kt b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/codeInsight/AbstractK2MultiModuleLineMarkerTest.kt index 160fde44c4cd..5670a046334a 100644 --- a/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/codeInsight/AbstractK2MultiModuleLineMarkerTest.kt +++ b/plugins/kotlin/fir/tests/test/org/jetbrains/kotlin/idea/fir/codeInsight/AbstractK2MultiModuleLineMarkerTest.kt @@ -3,34 +3,19 @@ package org.jetbrains.kotlin.idea.fir.codeInsight import com.intellij.openapi.util.registry.Registry import com.intellij.util.ThrowableRunnable -import org.jetbrains.kotlin.idea.base.projectStructure.compositeAnalysis.KotlinMultiplatformAnalysisModeComponent -import org.jetbrains.kotlin.idea.codeMetaInfo.AbstractLineMarkerCodeMetaInfoTest -import org.jetbrains.kotlin.idea.codeMetaInfo.renderConfigurations.LineMarkerConfiguration -import org.jetbrains.kotlin.idea.test.IDEA_TEST_DATA_DIR +import org.jetbrains.kotlin.idea.codeMetaInfo.AbstractMultiModuleLineMarkerCodeMetaInfoTest import org.jetbrains.kotlin.idea.test.runAll -abstract class AbstractK2MultiModuleLineMarkerTest: AbstractLineMarkerCodeMetaInfoTest() { +abstract class AbstractK2MultiModuleLineMarkerTest: AbstractMultiModuleLineMarkerCodeMetaInfoTest() { override fun isFirPlugin(): Boolean = true - override fun getTestDataDirectory() = IDEA_TEST_DATA_DIR.resolve("multiplatform") - - override fun getConfigurations() = listOf( - LineMarkerConfiguration( - renderTargetIcons = true, - ) - ) - override fun setUp() { super.setUp() Registry.get("kotlin.k2.kmp.enabled").setValue(true) - KotlinMultiplatformAnalysisModeComponent.setMode(project, KotlinMultiplatformAnalysisModeComponent.Mode.COMPOSITE) } override fun tearDown() { runAll( - ThrowableRunnable { - KotlinMultiplatformAnalysisModeComponent.setMode(project, KotlinMultiplatformAnalysisModeComponent.Mode.SEPARATE) - }, ThrowableRunnable { Registry.get("kotlin.k2.kmp.enabled").setValue(false) }, diff --git a/plugins/kotlin/highlighting/highlighting-k1/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectActualMarkerUtil.kt b/plugins/kotlin/highlighting/highlighting-k1/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectActualMarkerUtil.kt index 4a18cca29a0e..adb8c01cae63 100644 --- a/plugins/kotlin/highlighting/highlighting-k1/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectActualMarkerUtil.kt +++ b/plugins/kotlin/highlighting/highlighting-k1/src/org/jetbrains/kotlin/idea/highlighter/markers/HasExpectActualMarkerUtil.kt @@ -14,7 +14,8 @@ fun getModulesStringForExpectActualMarkerTooltip( return when (descriptors.size) { 0 -> null 1 -> descriptors.single().moduleNameForTooltip() - else -> descriptors.joinToString(", ", "[", "]") { it.moduleNameForTooltip() } + else -> descriptors.map { it.moduleNameForTooltip() }.sorted() + .joinToString(", ", prefix = "[", postfix = "]") } } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt index 089127794b61..847f07df0d28 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/caches/resolve/AbstractMultiModuleLineMarkerTest.kt @@ -2,10 +2,10 @@ package org.jetbrains.kotlin.idea.caches.resolve -import org.jetbrains.kotlin.idea.test.IDEA_TEST_DATA_DIR import org.jetbrains.kotlin.idea.codeMetaInfo.AbstractLineMarkerCodeMetaInfoTest +import org.jetbrains.kotlin.idea.test.IDEA_TEST_DATA_DIR import java.io.File abstract class AbstractMultiModuleLineMarkerTest : AbstractLineMarkerCodeMetaInfoTest() { - override fun getTestDataDirectory() = IDEA_TEST_DATA_DIR.resolve("multiModuleLineMarker") + override fun getTestDataDirectory(): File = IDEA_TEST_DATA_DIR.resolve("multiModuleLineMarker") } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/AbstractCodeMetaInfoTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/AbstractCodeMetaInfoTest.kt index b1b3eefad56e..ee2d08184696 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/AbstractCodeMetaInfoTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/AbstractCodeMetaInfoTest.kt @@ -28,6 +28,7 @@ import com.intellij.testFramework.DumbModeTestUtils import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl import com.intellij.testFramework.runInEdtAndWait import com.intellij.util.LineSeparator +import com.intellij.util.ThrowableRunnable import org.jetbrains.kotlin.checkers.diagnostics.DebugInfoDiagnostic import org.jetbrains.kotlin.checkers.diagnostics.SyntaxErrorDiagnostic import org.jetbrains.kotlin.checkers.diagnostics.factories.DebugInfoDiagnosticFactory0 @@ -41,6 +42,7 @@ import org.jetbrains.kotlin.daemon.common.OSKind import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.diagnostics.AbstractDiagnostic import org.jetbrains.kotlin.diagnostics.Severity +import org.jetbrains.kotlin.idea.base.projectStructure.compositeAnalysis.KotlinMultiplatformAnalysisModeComponent import org.jetbrains.kotlin.idea.caches.resolve.AbstractMultiModuleIdeResolveTest import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.codeMetaInfo.models.HighlightingCodeMetaInfo @@ -52,7 +54,9 @@ import org.jetbrains.kotlin.idea.multiplatform.setupMppProjectFromTextFile import org.jetbrains.kotlin.idea.resolve.dataFlowValueFactory import org.jetbrains.kotlin.idea.resolve.languageVersionSettings import org.jetbrains.kotlin.idea.test.AbstractMultiModuleTest +import org.jetbrains.kotlin.idea.test.IDEA_TEST_DATA_DIR import org.jetbrains.kotlin.idea.test.KotlinTestUtils +import org.jetbrains.kotlin.idea.test.runAll import org.jetbrains.kotlin.idea.util.sourceRoots import org.jetbrains.kotlin.psi.KtFile import org.junit.Ignore @@ -269,18 +273,36 @@ class CodeMetaInfoTestCase( } abstract class AbstractDiagnosticCodeMetaInfoTest : AbstractCodeMetaInfoTest() { - override fun getConfigurations() = listOf( + override fun getConfigurations(): List = listOf( DiagnosticCodeMetaInfoRenderConfiguration(), LineMarkerConfiguration() ) } abstract class AbstractLineMarkerCodeMetaInfoTest : AbstractCodeMetaInfoTest() { - override fun getConfigurations() = listOf( + override fun getConfigurations(): List = listOf( LineMarkerConfiguration(renderTargetIcons = true) ) } +abstract class AbstractMultiModuleLineMarkerCodeMetaInfoTest: AbstractLineMarkerCodeMetaInfoTest() { + override fun getTestDataDirectory(): File = IDEA_TEST_DATA_DIR.resolve("multiplatform") + + override fun setUp() { + super.setUp() + KotlinMultiplatformAnalysisModeComponent.setMode(project, KotlinMultiplatformAnalysisModeComponent.Mode.COMPOSITE) + } + + override fun tearDown() { + runAll( + ThrowableRunnable { + KotlinMultiplatformAnalysisModeComponent.setMode(project, KotlinMultiplatformAnalysisModeComponent.Mode.SEPARATE) + }, + ThrowableRunnable { super.tearDown() } + ) + } +} + abstract class AbstractHighlightingCodeMetaInfoTest : AbstractCodeMetaInfoTest() { override fun getConfigurations() = listOf( HighlightingConfiguration() @@ -288,8 +310,8 @@ abstract class AbstractHighlightingCodeMetaInfoTest : AbstractCodeMetaInfoTest() } abstract class AbstractCodeMetaInfoTest : AbstractMultiModuleTest() { - open val checkNoDiagnosticError get() = false - open fun getConfigurations() = listOf( + open val checkNoDiagnosticError: Boolean get() = false + open fun getConfigurations(): List = listOf( DiagnosticCodeMetaInfoRenderConfiguration(), LineMarkerConfiguration(), HighlightingConfiguration() diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/MultiModuleLineMarkerCodeMetaInfoTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/MultiModuleLineMarkerCodeMetaInfoTestGenerated.java new file mode 100644 index 000000000000..31557c5e3aed --- /dev/null +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/MultiModuleLineMarkerCodeMetaInfoTestGenerated.java @@ -0,0 +1,30 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.idea.codeMetaInfo; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.idea.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.idea.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.jetbrains.kotlin.idea.base.test.TestRoot; +import org.junit.runner.RunWith; + +/** + * This class is generated by {@link org.jetbrains.kotlin.testGenerator.generator.TestGenerator}. + * DO NOT MODIFY MANUALLY. + */ +@SuppressWarnings("all") +@TestRoot("idea/tests") +@TestDataPath("$CONTENT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +@TestMetadata("../../code-insight/testData/linemarkers") +public class MultiModuleLineMarkerCodeMetaInfoTestGenerated extends AbstractMultiModuleLineMarkerCodeMetaInfoTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + @TestMetadata("multiplatform") + public void testMultiplatform() throws Exception { + runTest("../../code-insight/testData/linemarkers/multiplatform/"); + } +} diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/renderConfigurations/AbstractCodeMetaInfoRenderConfiguration.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/renderConfigurations/AbstractCodeMetaInfoRenderConfiguration.kt index 13db52656e0b..8c37d67e2d9f 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/renderConfigurations/AbstractCodeMetaInfoRenderConfiguration.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/codeMetaInfo/renderConfigurations/AbstractCodeMetaInfoRenderConfiguration.kt @@ -49,7 +49,7 @@ open class LineMarkerConfiguration( } if (targets.size > 1) { - params.add(targets.joinToString(prefix = "targets=[", postfix = "]", separator = "; ")) + params.add(targets.sorted().joinToString(prefix = "targets=[", postfix = "]", separator = "; ")) } } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualConstructorWithProperties/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualConstructorWithProperties/jvm/jvm.kt index 4968d9f68012..55c8c3407f7f 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualConstructorWithProperties/jvm/jvm.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualConstructorWithProperties/jvm/jvm.kt @@ -1 +1 @@ -actual class WithConstructor actual constructor(actual val x: Int, actual val s: String) +actual class WithConstructor actual constructor(actual val x: Int, actual val s: String) diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualEnumEntriesInOneLine/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualEnumEntriesInOneLine/jvm/jvm.kt index f21e698fedc0..d2d905f2b18f 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualEnumEntriesInOneLine/jvm/jvm.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/actualEnumEntriesInOneLine/jvm/jvm.kt @@ -1,3 +1,3 @@ package test -actual enum class Enum { A, B, C } +actual enum class Enum { A, B, C } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/expectEnumEntriesInOneLine/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/expectEnumEntriesInOneLine/common/common.kt index 69c48c492247..2d69c28bebc3 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/expectEnumEntriesInOneLine/common/common.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/expectEnumEntriesInOneLine/common/common.kt @@ -1,3 +1,3 @@ package test -expect enum class Enum { A, B, C, D } +expect enum class Enum { A, B, C, D } diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/common/common.kt index e07d5bae1f5b..7f5467f8043b 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/common/common.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/common/common.kt @@ -1,4 +1,4 @@ -expect annotation class Ann( - val x: Int, val y: String, - val z: Double, val b: Boolean +expect annotation class Ann( + val x: Int, val y: String, + val z: Double, val b: Boolean ) diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/js/js.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/js/js.kt index 2ed87e7f5848..98c5901df5db 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/js/js.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/js/js.kt @@ -1,4 +1,4 @@ actual annotation class Ann( actual val x: Int, actual val y: String, - actual val z: Double, actual val b: Boolean + actual val z: Double, actual val b: Boolean ) diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/jvm/jvm.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/jvm/jvm.kt index 2ed87e7f5848..98c5901df5db 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/jvm/jvm.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromActualAnnotationWithParametersInOneLine/jvm/jvm.kt @@ -1,4 +1,4 @@ actual annotation class Ann( actual val x: Int, actual val y: String, - actual val z: Double, actual val b: Boolean + actual val z: Double, actual val b: Boolean ) diff --git a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromClassToAlias/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromClassToAlias/common/common.kt index 6da848938dad..9843f031ab55 100644 --- a/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromClassToAlias/common/common.kt +++ b/plugins/kotlin/idea/tests/testData/multiModuleLineMarker/fromClassToAlias/common/common.kt @@ -1,3 +1,3 @@ -expect class Header { +expect class Header { } diff --git a/plugins/kotlin/util/test-generator-fe10/test/org/jetbrains/kotlin/fe10/testGenerator/Fe10GenerateTests.kt b/plugins/kotlin/util/test-generator-fe10/test/org/jetbrains/kotlin/fe10/testGenerator/Fe10GenerateTests.kt index d46fdf9ddaf6..bb2fd0ab5401 100644 --- a/plugins/kotlin/util/test-generator-fe10/test/org/jetbrains/kotlin/fe10/testGenerator/Fe10GenerateTests.kt +++ b/plugins/kotlin/util/test-generator-fe10/test/org/jetbrains/kotlin/fe10/testGenerator/Fe10GenerateTests.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.idea.codeInsight.moveUpDown.AbstractMoveStatementTes import org.jetbrains.kotlin.idea.codeInsight.postfix.AbstractK1PostfixTemplateTest import org.jetbrains.kotlin.idea.codeInsight.surroundWith.AbstractSurroundWithTest import org.jetbrains.kotlin.idea.codeInsight.unwrap.AbstractUnwrapRemoveTest +import org.jetbrains.kotlin.idea.codeMetaInfo.AbstractMultiModuleLineMarkerCodeMetaInfoTest import org.jetbrains.kotlin.idea.compilerPlugin.kotlinxSerialization.AbstractSerializationPluginIdeDiagnosticTest import org.jetbrains.kotlin.idea.compilerPlugin.kotlinxSerialization.AbstractSerializationQuickFixTest import org.jetbrains.kotlin.idea.completion.test.* @@ -1543,6 +1544,12 @@ private fun assembleWorkspace(): TWorkspace = workspace { } } + testGroup("idea/tests", testDataPath = "../../code-insight/testData", category = HIGHLIGHTING) { + testClass { + model("linemarkers", isRecursive = false, pattern = DIRECTORY) + } + } + testGroup("code-insight/intentions-shared/tests/k1", testDataPath = "../testData", category = INTENTIONS) { testClass { model("intentions", pattern = Patterns.forRegex("^([\\w\\-_]+)\\.(kt|kts)$"))