diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirKotlinHighlightingPassTest.kt b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirKotlinHighlightingPassTest.kt index 485c2a5f502..12fc02bc942 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirKotlinHighlightingPassTest.kt +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/AbstractFirKotlinHighlightingPassTest.kt @@ -6,10 +6,12 @@ package org.jetbrains.kotlin.checkers import com.intellij.rt.execution.junit.FileComparisonFailure +import org.jetbrains.kotlin.idea.highlighter.AbstractHighlightingTest import org.jetbrains.kotlin.idea.invalidateCaches import org.jetbrains.kotlin.idea.test.withCustomCompilerOptions import org.jetbrains.kotlin.idea.withPossiblyDisabledDuplicatedFirSourceElementsException import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.uitls.IgnoreTests import org.jetbrains.kotlin.test.uitls.IgnoreTests.DIRECTIVES import org.jetbrains.kotlin.test.uitls.IgnoreTests.cleanUpIdenticalFirTestFile @@ -45,14 +47,20 @@ abstract class AbstractFirKotlinHighlightingPassTest : AbstractKotlinHighlightin checkWeakWarnings: Boolean ): Long { val fileText = file.text - return withCustomCompilerOptions(fileText, project, module) { - try { - withPossiblyDisabledDuplicatedFirSourceElementsException(fileText) { - myFixture.checkHighlighting(checkWarnings, checkInfos, checkWeakWarnings) + val isDuplicatedHighlightingExpected = + InTextDirectivesUtils.isDirectiveDefined(fileText, AbstractHighlightingTest.EXPECTED_DUPLICATED_HIGHLIGHTING_PREFIX) + var result: Long? = null + AbstractHighlightingTest.withExpectedDuplicatedHighlighting(isDuplicatedHighlightingExpected, /*isFirPlugin*/true) { + withCustomCompilerOptions(fileText, project, module) { + try { + withPossiblyDisabledDuplicatedFirSourceElementsException(fileText) { + result = myFixture.checkHighlighting(checkWarnings, checkInfos, checkWeakWarnings) + } + } catch (e: FileComparisonFailure) { + throw FileComparisonFailure(e.message, e.expected, e.actual, File(e.filePath).absolutePath) } - } catch (e: FileComparisonFailure) { - throw FileComparisonFailure(e.message, e.expected, e.actual, File(e.filePath).absolutePath) } } + return result!! } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt index 00b0ff3ba38..4fb1703bfc6 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/file/structure/FileStructure.kt @@ -64,12 +64,12 @@ internal class FileStructure( fun getAllDiagnosticsForFile(diagnosticCheckerFilter: DiagnosticCheckerFilter): Collection> { val structureElements = getAllStructureElements() - return buildSet { + return buildList { collectDiagnosticsFromStructureElements(structureElements, diagnosticCheckerFilter) } } - private fun MutableSet>.collectDiagnosticsFromStructureElements( + private fun MutableCollection>.collectDiagnosticsFromStructureElements( structureElements: Collection, diagnosticCheckerFilter: DiagnosticCheckerFilter ) { diff --git a/idea/testData/checker/Constructors.fir.kt b/idea/testData/checker/Constructors.fir.kt index d09dcc748c5..8b6d7e843b6 100644 --- a/idea/testData/checker/Constructors.fir.kt +++ b/idea/testData/checker/Constructors.fir.kt @@ -1,4 +1,4 @@ - +// EXPECTED_DUPLICATED_HIGHLIGHTING open class NoC class NoC1 : NoC() @@ -18,7 +18,7 @@ class WithPC1(a : Int) { } -class Foo() : WithPC0(), this() { +class Foo() : WithPC0(), this() { } diff --git a/idea/testData/checker/Constructors.kt b/idea/testData/checker/Constructors.kt index 13ab72a61bc..c3f6a106cb0 100644 --- a/idea/testData/checker/Constructors.kt +++ b/idea/testData/checker/Constructors.kt @@ -1,4 +1,4 @@ - +// EXPECTED_DUPLICATED_HIGHLIGHTING open class NoC class NoC1 : NoC() diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightingTest.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightingTest.java index e8f68fe4340..17bf0fec6ee 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightingTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/AbstractHighlightingTest.java @@ -39,7 +39,7 @@ public abstract class AbstractHighlightingTest extends KotlinLightCodeInsightFix myFixture.configureByFile(fileName()); - withExpectedDuplicatedHighlighting(expectedDuplicatedHighlighting, () -> { + withExpectedDuplicatedHighlighting(expectedDuplicatedHighlighting, isFirPlugin(), () -> { try { checkHighlighting(fileText); } @@ -54,7 +54,7 @@ public abstract class AbstractHighlightingTest extends KotlinLightCodeInsightFix }); } - private void withExpectedDuplicatedHighlighting(boolean expectedDuplicatedHighlighting, Runnable runnable) { + public static void withExpectedDuplicatedHighlighting(boolean expectedDuplicatedHighlighting, boolean isFirPlugin, Runnable runnable) { if (!expectedDuplicatedHighlighting) { runnable.run(); return; @@ -63,7 +63,7 @@ public abstract class AbstractHighlightingTest extends KotlinLightCodeInsightFix try { ExpectedHighlightingData.expectedDuplicatedHighlighting(runnable); } catch (IllegalStateException e) { - if (isFirPlugin()) { + if (isFirPlugin) { runnable.run(); } else { throw e;