diff --git a/idea/testData/checker/Casts.kt b/idea/testData/checker/Casts.kt index 75aadf93089..b5ad02fc9c9 100644 --- a/idea/testData/checker/Casts.kt +++ b/idea/testData/checker/Casts.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun checkSubtype(t: T) = t fun test() : Unit { diff --git a/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt b/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt index 82237028c54..87391bc18b0 100644 --- a/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt +++ b/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt @@ -1 +1,3 @@ +// FIR_COMPARISON + fun foo () {} \ No newline at end of file diff --git a/idea/testData/checker/MainWithWarningOnUnusedParam.kt b/idea/testData/checker/MainWithWarningOnUnusedParam.kt index f503a2e9140..07f402a7eba 100644 --- a/idea/testData/checker/MainWithWarningOnUnusedParam.kt +++ b/idea/testData/checker/MainWithWarningOnUnusedParam.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + // LANGUAGE_VERSION: 1.4 fun main(args: Array) { diff --git a/idea/testData/checker/MainWithoutWarningOnUnusedParam.kt b/idea/testData/checker/MainWithoutWarningOnUnusedParam.kt index d2da7cd6cda..7fb0c29fbfe 100644 --- a/idea/testData/checker/MainWithoutWarningOnUnusedParam.kt +++ b/idea/testData/checker/MainWithoutWarningOnUnusedParam.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + // LANGUAGE_VERSION: 1.3 fun main(args: Array) { diff --git a/idea/testData/checker/MultipleModality.kt b/idea/testData/checker/MultipleModality.kt index 8094a2f109b..405a3c4ea73 100644 --- a/idea/testData/checker/MultipleModality.kt +++ b/idea/testData/checker/MultipleModality.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + sealed abstract class First abstract sealed class Second diff --git a/idea/testData/checker/PackageQualified.kt b/idea/testData/checker/PackageQualified.kt index 45e1dcc1524..0fcc05274f1 100644 --- a/idea/testData/checker/PackageQualified.kt +++ b/idea/testData/checker/PackageQualified.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + package a import java.* diff --git a/idea/testData/checker/Unused.kt b/idea/testData/checker/Unused.kt index 33b3ad70ba3..6c21bfa594c 100644 --- a/idea/testData/checker/Unused.kt +++ b/idea/testData/checker/Unused.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun test(unusedParam: Int) { // UNUSED_PARAMETER val str = ":)" str as String // USELESS_CAST diff --git a/idea/testData/checker/WhenInEnumInExtensionProperty.kt b/idea/testData/checker/WhenInEnumInExtensionProperty.kt index 03f847df429..5db12fdee0a 100644 --- a/idea/testData/checker/WhenInEnumInExtensionProperty.kt +++ b/idea/testData/checker/WhenInEnumInExtensionProperty.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + // KT-3750 When without else enum class A { diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/ambiguous.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/ambiguous.kt index 0ac42f41f7f..268c222e589 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/ambiguous.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/ambiguous.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + package a.b class String diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/class.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/class.kt index 18a43126837..ba9caec2747 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/class.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/class.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class C { val x = 1 fun getX() = 1 diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/classObject.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/classObject.kt index 487d6326158..abb65bf3831 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/classObject.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/classObject.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class C { companion object { val x = 1 diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/localClass.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/localClass.kt index 2fb323c47ce..8afb7a999c7 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/localClass.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/localClass.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun foo() { class C { val x = 1 diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/nestedClass.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/nestedClass.kt index e70ccffb289..b131d130e76 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/nestedClass.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/nestedClass.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class B { class C { val x = 1 diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/object.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/object.kt index 0234305c8d3..8a0f1a752cf 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/object.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/object.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + object C { val x = 1 fun getX() = 1 diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/objectExpression.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/objectExpression.kt index 5b1d0da0fe5..6da4240e309 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/objectExpression.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/objectExpression.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun foo() = object { val x = 1 diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevel.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevel.kt index 71efcfa7655..e894cb0d99b 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevel.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevel.kt @@ -1,2 +1,4 @@ +// FIR_COMPARISON + val x = 1 fun getX() = 1 \ No newline at end of file diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevelMultifileRuntime.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevelMultifileRuntime.kt index 80d6b6cf485..3566bf1a7ba 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevelMultifileRuntime.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/topLevelMultifileRuntime.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + // RUNTIME @file:JvmName("TopLevelMultifile") @file:JvmMultifileClass diff --git a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/trait.kt b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/trait.kt index 12a99607204..f8793460b8e 100644 --- a/idea/testData/checker/duplicateJvmSignature/functionAndProperty/trait.kt +++ b/idea/testData/checker/duplicateJvmSignature/functionAndProperty/trait.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + interface T { enum class En { A } diff --git a/idea/testData/checker/infos/SmartCastToEnum.kt b/idea/testData/checker/infos/SmartCastToEnum.kt index 3542cca816d..e6fef150c5e 100644 --- a/idea/testData/checker/infos/SmartCastToEnum.kt +++ b/idea/testData/checker/infos/SmartCastToEnum.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + package test2 enum class En { A, B, ะก } diff --git a/idea/testData/checker/infos/SmartCastsWithSafeAccess.kt b/idea/testData/checker/infos/SmartCastsWithSafeAccess.kt index e34b3f23323..146cd5f8058 100644 --- a/idea/testData/checker/infos/SmartCastsWithSafeAccess.kt +++ b/idea/testData/checker/infos/SmartCastsWithSafeAccess.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + interface A { fun foo() } diff --git a/idea/testData/checker/infos/WrapIntoRef.kt b/idea/testData/checker/infos/WrapIntoRef.kt index 94fcb64eb9a..7783e1cb7e2 100644 --- a/idea/testData/checker/infos/WrapIntoRef.kt +++ b/idea/testData/checker/infos/WrapIntoRef.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun refs() { var a = 1 val v = { diff --git a/idea/testData/checker/infos/multipleResolvedCalls.kt b/idea/testData/checker/infos/multipleResolvedCalls.kt index 76a6c1e9152..9818e84ef2e 100644 --- a/idea/testData/checker/infos/multipleResolvedCalls.kt +++ b/idea/testData/checker/infos/multipleResolvedCalls.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + interface I1 interface I2 interface I3 diff --git a/idea/testData/checker/infos/smartCastOnElvis.kt b/idea/testData/checker/infos/smartCastOnElvis.kt index 32c812f1d32..cade61c18c6 100644 --- a/idea/testData/checker/infos/smartCastOnElvis.kt +++ b/idea/testData/checker/infos/smartCastOnElvis.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + // COMPILER_ARGUMENTS: -XXLanguage:-NewInference fun foo(s: String) = s.length diff --git a/idea/testData/checker/regression/AssignmentsUnderOperators.kt b/idea/testData/checker/regression/AssignmentsUnderOperators.kt index a92e8e3d10a..ee8f2f88802 100644 --- a/idea/testData/checker/regression/AssignmentsUnderOperators.kt +++ b/idea/testData/checker/regression/AssignmentsUnderOperators.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun test() { var a : Any? = null if (a is Any) else a = null; diff --git a/idea/testData/checker/regression/BadParseForClass.kt b/idea/testData/checker/regression/BadParseForClass.kt index 5ea57af0892..0a49f4d4d12 100644 --- a/idea/testData/checker/regression/BadParseForClass.kt +++ b/idea/testData/checker/regression/BadParseForClass.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun main(args: Array) { String.class } diff --git a/idea/testData/checker/regression/ClassDeclarationAfterDot.kt b/idea/testData/checker/regression/ClassDeclarationAfterDot.kt index e3d955ecb65..16b94e3c8db 100644 --- a/idea/testData/checker/regression/ClassDeclarationAfterDot.kt +++ b/idea/testData/checker/regression/ClassDeclarationAfterDot.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class A fun f() { diff --git a/idea/testData/checker/regression/ClassDeclarationAfterDot2.kt b/idea/testData/checker/regression/ClassDeclarationAfterDot2.kt index 4b784e6a5f6..eb9fd988186 100644 --- a/idea/testData/checker/regression/ClassDeclarationAfterDot2.kt +++ b/idea/testData/checker/regression/ClassDeclarationAfterDot2.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class A fun f() { diff --git a/idea/testData/checker/regression/ClassDeclarationAsExpression.kt b/idea/testData/checker/regression/ClassDeclarationAsExpression.kt index 7949d9b9a40..929179ee461 100644 --- a/idea/testData/checker/regression/ClassDeclarationAsExpression.kt +++ b/idea/testData/checker/regression/ClassDeclarationAsExpression.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + val p = 1 < class A { fun f() { f() diff --git a/idea/testData/checker/regression/ClassDeclarationAsExpression2.kt b/idea/testData/checker/regression/ClassDeclarationAsExpression2.kt index 2d07edac099..a9be69fd58f 100644 --- a/idea/testData/checker/regression/ClassDeclarationAsExpression2.kt +++ b/idea/testData/checker/regression/ClassDeclarationAsExpression2.kt @@ -1 +1,3 @@ +// FIR_COMPARISON + fun g() = 1 < class A \ No newline at end of file diff --git a/idea/testData/checker/regression/ClassDeclarationAsExpression3.kt b/idea/testData/checker/regression/ClassDeclarationAsExpression3.kt index b0b3a1847bf..273083550f4 100644 --- a/idea/testData/checker/regression/ClassDeclarationAsExpression3.kt +++ b/idea/testData/checker/regression/ClassDeclarationAsExpression3.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun f(i: Int = 3 < class A { fun f() { f() diff --git a/idea/testData/checker/regression/DestructuringDeclarationInLambda.kt b/idea/testData/checker/regression/DestructuringDeclarationInLambda.kt index a181daf6143..6e7dcf0a66c 100644 --- a/idea/testData/checker/regression/DestructuringDeclarationInLambda.kt +++ b/idea/testData/checker/regression/DestructuringDeclarationInLambda.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + data class XY(val x: Int, val y: Int) fun convert(xy: XY, f: (XY) -> Int) = f(xy) diff --git a/idea/testData/checker/regression/DollarsInName.kt b/idea/testData/checker/regression/DollarsInName.kt index ccb8340e2f9..df0370d7727 100644 --- a/idea/testData/checker/regression/DollarsInName.kt +++ b/idea/testData/checker/regression/DollarsInName.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class `A$B` { class `$$$` { class `$` diff --git a/idea/testData/checker/regression/FunctionTypes.kt b/idea/testData/checker/regression/FunctionTypes.kt index 79dfe2ba111..b3d7eadf586 100644 --- a/idea/testData/checker/regression/FunctionTypes.kt +++ b/idea/testData/checker/regression/FunctionTypes.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun intercept(block: (key: K, next: (K) -> V, K) -> V) { } diff --git a/idea/testData/checker/regression/Jet124.kt b/idea/testData/checker/regression/Jet124.kt index 6fa400a1acc..c0e02d7503a 100644 --- a/idea/testData/checker/regression/Jet124.kt +++ b/idea/testData/checker/regression/Jet124.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun foo1() : (Int) -> Int = { x: Int -> x } fun foo() { diff --git a/idea/testData/checker/regression/Jet169.kt b/idea/testData/checker/regression/Jet169.kt index e38e1eb9a05..0184765c3c5 100644 --- a/idea/testData/checker/regression/Jet169.kt +++ b/idea/testData/checker/regression/Jet169.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun set(key : String, value : String) { val a : String? = "" when (a) { diff --git a/idea/testData/checker/regression/Jet183-1.kt b/idea/testData/checker/regression/Jet183-1.kt index 256cb1cec68..fb4cfa5464e 100644 --- a/idea/testData/checker/regression/Jet183-1.kt +++ b/idea/testData/checker/regression/Jet183-1.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + enum class ProtocolState { WAITING { override fun signal() = ProtocolState.TALKING diff --git a/idea/testData/checker/regression/Jet183.kt b/idea/testData/checker/regression/Jet183.kt index 0b4ec222520..f308938215a 100644 --- a/idea/testData/checker/regression/Jet183.kt +++ b/idea/testData/checker/regression/Jet183.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + enum class ProtocolState { WAITING { override fun signal() = ProtocolState.TALKING diff --git a/idea/testData/checker/regression/Jet53.kt b/idea/testData/checker/regression/Jet53.kt index bb638c90294..662e006a385 100644 --- a/idea/testData/checker/regression/Jet53.kt +++ b/idea/testData/checker/regression/Jet53.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + import java.util.Collections fun checkSubtype(t: T) = t diff --git a/idea/testData/checker/regression/Jet67.kt b/idea/testData/checker/regression/Jet67.kt index 94549ab8df9..d06b8eed039 100644 --- a/idea/testData/checker/regression/Jet67.kt +++ b/idea/testData/checker/regression/Jet67.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + abstract class XXX { abstract val a : Int get diff --git a/idea/testData/checker/regression/Jet68.kt b/idea/testData/checker/regression/Jet68.kt index 2d9cc4c7b21..fffa246c6e3 100644 --- a/idea/testData/checker/regression/Jet68.kt +++ b/idea/testData/checker/regression/Jet68.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class Foo() fun test() { diff --git a/idea/testData/checker/regression/Jet69.kt b/idea/testData/checker/regression/Jet69.kt index a83894fbebe..80e88d894b5 100644 --- a/idea/testData/checker/regression/Jet69.kt +++ b/idea/testData/checker/regression/Jet69.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class Command() {} fun parse(cmd: String): Command? { return null } diff --git a/idea/testData/checker/regression/Jet72.kt b/idea/testData/checker/regression/Jet72.kt index 0e08d7e23a5..e0f32c079e6 100644 --- a/idea/testData/checker/regression/Jet72.kt +++ b/idea/testData/checker/regression/Jet72.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + // JET-72 Type inference doesn't work when iterating over ArrayList import java.util.ArrayList diff --git a/idea/testData/checker/regression/OverrideResolution.kt b/idea/testData/checker/regression/OverrideResolution.kt index 16ae0bf07b1..2392d370b12 100644 --- a/idea/testData/checker/regression/OverrideResolution.kt +++ b/idea/testData/checker/regression/OverrideResolution.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun box() { val a : C = C() a.foo() diff --git a/idea/testData/checker/regression/ScopeForSecondaryConstructors.kt b/idea/testData/checker/regression/ScopeForSecondaryConstructors.kt index 8c79b0ca048..e542461041e 100644 --- a/idea/testData/checker/regression/ScopeForSecondaryConstructors.kt +++ b/idea/testData/checker/regression/ScopeForSecondaryConstructors.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun checkSubtype(t: T) = t class Foo(var bar : Int, var barr : Int, var barrr : Int) { diff --git a/idea/testData/checker/regression/SpecififcityByReceiver.kt b/idea/testData/checker/regression/SpecififcityByReceiver.kt index 5e1c2d4e331..6fa40fe3a47 100644 --- a/idea/testData/checker/regression/SpecififcityByReceiver.kt +++ b/idea/testData/checker/regression/SpecififcityByReceiver.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + fun Any.equals(other : Any?) : Boolean = true fun main(args: Array) { diff --git a/idea/testData/checker/regression/extensionMemberInClassObject.kt b/idea/testData/checker/regression/extensionMemberInClassObject.kt index 4e5a137e04c..4ef0359c9c0 100644 --- a/idea/testData/checker/regression/extensionMemberInClassObject.kt +++ b/idea/testData/checker/regression/extensionMemberInClassObject.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + interface Bar { fun T.bar() {} } diff --git a/idea/testData/checker/regression/objectLiteralInSupertypeList.kt b/idea/testData/checker/regression/objectLiteralInSupertypeList.kt index 64728b18d95..b652f417b69 100644 --- a/idea/testData/checker/regression/objectLiteralInSupertypeList.kt +++ b/idea/testData/checker/regression/objectLiteralInSupertypeList.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + interface A open class B(i: Int, a: A) diff --git a/idea/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt b/idea/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt index adf5f77d8e9..dda0ad66591 100644 --- a/idea/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt +++ b/idea/tests/org/jetbrains/kotlin/checkers/AbstractFirPsiCheckerTest.kt @@ -9,6 +9,8 @@ import com.intellij.rt.execution.junit.FileComparisonFailure import org.jetbrains.kotlin.idea.fir.FirResolution import org.jetbrains.kotlin.idea.test.configureCompilerOptions import org.jetbrains.kotlin.idea.test.rollbackCompilerOptions +import org.jetbrains.kotlin.test.InTextDirectivesUtils +import java.io.File abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() { override fun setUp() { @@ -28,11 +30,17 @@ abstract class AbstractFirPsiCheckerTest : AbstractPsiCheckerTest() { ): Long { val file = file val configured = configureCompilerOptions(file.text, project, module) + val doComparison = InTextDirectivesUtils.isDirectiveDefined(myFixture.file.text, "FIR_COMPARISON") return try { myFixture.checkHighlighting(checkWarnings, checkInfos, checkWeakWarnings) } catch (e: FileComparisonFailure) { - // NB: yet we do not actually compare highlighting - 0 + if (doComparison) { + // Even this is very partial check (only error compatibility, no warnings / infos) + throw FileComparisonFailure(e.message, e.expected, e.actual, File(e.filePath).absolutePath) + } else { + // Here we just check that we haven't crashed due to exception + 0 + } } finally { if (configured) { rollbackCompilerOptions(project, module)