From 833072e1fbf903ddda66dffe0cca9b107244f1ba Mon Sep 17 00:00:00 2001 From: Brian Norman Date: Mon, 21 Aug 2023 06:59:13 -0500 Subject: [PATCH] [FIR] Add checker for MISSING_DEPENDENCY_CLASS #KT-59371 Fixed --- .../diagnostics/KtFirDataClassConverters.kt | 7 ++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 5 ++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 6 ++ .../resolve/arguments/integerOverloads.kt | 6 +- .../diagnostics/FirDiagnosticsList.kt | 4 ++ .../fir/analysis/diagnostics/FirErrors.kt | 1 + .../FirNonSuppressibleErrorNames.kt | 1 + .../checkers/CommonExpressionCheckers.kt | 1 + .../FirMissingDependencyClassChecker.kt | 68 +++++++++++++++++++ .../diagnostics/FirErrorsDefaultMessages.kt | 8 +++ .../imports/AllUnderImportsAmbiguity.fir.kt | 2 +- .../NestedAndTopLevelClassClash.fir.kt | 38 ----------- .../imports/NestedAndTopLevelClassClash.kt | 3 +- .../javac/imports/NestedClassClash.fir.kt | 40 ----------- .../tests/javac/imports/NestedClassClash.kt | 1 + .../inheritance/InheritanceAmbiguity.fir.kt | 27 -------- .../javac/inheritance/InheritanceAmbiguity.kt | 3 +- .../inheritance/InheritanceAmbiguity2.fir.kt | 30 -------- .../inheritance/InheritanceAmbiguity2.kt | 3 +- .../inheritance/InheritanceAmbiguity3.fir.kt | 25 ------- .../inheritance/InheritanceAmbiguity3.kt | 3 +- .../inheritance/InheritanceAmbiguity4.fir.kt | 47 ------------- .../inheritance/InheritanceAmbiguity4.kt | 1 + .../tests/javac/typeParameters/Clash.fir.kt | 33 --------- .../tests/javac/typeParameters/Clash.kt | 3 +- .../analysis/smartcasts/neg/7.fir.kt | 10 +-- .../diagnostics/notLinked/dfa/neg/16.fir.kt | 16 ++--- .../diagnostics/notLinked/dfa/neg/2.fir.kt | 14 ++-- .../diagnostics/notLinked/dfa/neg/3.fir.kt | 6 +- .../diagnostics/notLinked/dfa/pos/68.fir.kt | 10 +-- 30 files changed, 145 insertions(+), 277 deletions(-) create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirMissingDependencyClassChecker.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/javac/typeParameters/Clash.fir.kt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index f54053e6140..223427ad8f3 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -415,6 +415,13 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.MISSING_DEPENDENCY_CLASS) { firDiagnostic -> + MissingDependencyClassImpl( + firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a), + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirErrors.CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS) { firDiagnostic -> CreatingAnInstanceOfAbstractClassImpl( firDiagnostic as KtPsiDiagnostic, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 004193ebd06..64682fe7d4e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -336,6 +336,11 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = DuplicateParameterNameInFunctionType::class } + interface MissingDependencyClass : KtFirDiagnostic { + override val diagnosticClass get() = MissingDependencyClass::class + val type: KtType + } + interface CreatingAnInstanceOfAbstractClass : KtFirDiagnostic { override val diagnosticClass get() = CreatingAnInstanceOfAbstractClass::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 36abd7e28f9..9816fac8c2e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -387,6 +387,12 @@ internal class DuplicateParameterNameInFunctionTypeImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.DuplicateParameterNameInFunctionType +internal class MissingDependencyClassImpl( + override val type: KtType, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.MissingDependencyClass + internal class CreatingAnInstanceOfAbstractClassImpl( firDiagnostic: KtPsiDiagnostic, token: KtLifetimeToken, diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/integerOverloads.kt b/compiler/fir/analysis-tests/testData/resolve/arguments/integerOverloads.kt index 4492127eac3..00099c517db 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/integerOverloads.kt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/integerOverloads.kt @@ -1,8 +1,8 @@ // FILE: J.java public class J { - public static fun f(Byte x) {} - public static fun f(Integer x) {} - public static fun f(Long x) {} + public static void f(Byte x) {} + public static void f(Integer x) {} + public static void f(Long x) {} } // FILE: x.kt diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 52bd6df1662..9278248b279 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -176,6 +176,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { } val DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE by error() + + val MISSING_DEPENDENCY_CLASS by error(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) { + parameter("type") + } } val CALL_RESOLUTION by object : DiagnosticGroup("Call resolution") { diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 59bbcb43d58..c6d1e612479 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -175,6 +175,7 @@ object FirErrors { val UNRESOLVED_REFERENCE_WRONG_RECEIVER by error1>>() val UNRESOLVED_IMPORT by error1(SourceElementPositioningStrategies.IMPORT_LAST_NAME) val DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE by error0() + val MISSING_DEPENDENCY_CLASS by error1(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED) // Call resolution val CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS by error0() diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt index 70b0d040a79..7c781a67bb1 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt @@ -53,6 +53,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set = setOf( "UNRESOLVED_REFERENCE_WRONG_RECEIVER", "UNRESOLVED_IMPORT", "DUPLICATE_PARAMETER_NAME_IN_FUNCTION_TYPE", + "MISSING_DEPENDENCY_CLASS", "CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS", "NO_CONSTRUCTOR", "FUNCTION_CALL_EXPECTED", diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt index 616de7c5493..68888f536fe 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt @@ -68,6 +68,7 @@ object CommonExpressionCheckers : ExpressionCheckers() { FirSpreadOfNullableChecker, FirAssignmentOperatorCallChecker, FirNamedVarargChecker, + FirMissingDependencyClassChecker, FirUnderscoredTypeArgumentSyntaxChecker, FirContractNotFirstStatementChecker, FirProtectedConstructorNotInSuperCallChecker, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirMissingDependencyClassChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirMissingDependencyClassChecker.kt new file mode 100644 index 00000000000..96bb9d50601 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirMissingDependencyClassChecker.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.checkers.expression + +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression +import org.jetbrains.kotlin.fir.references.isError +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError +import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability + +/** + * @see org.jetbrains.kotlin.resolve.checkers.MissingDependencyClassChecker + */ +object FirMissingDependencyClassChecker : FirFunctionCallChecker() { + override fun check(expression: FirFunctionCall, context: CheckerContext, reporter: DiagnosticReporter) { + val calleeReference = expression.calleeReference + if (calleeReference.isError()) { + // To replicate K1 behavior, MISSING_DEPENDENCY_CLASS errors should still be reported on unsafe calls. + // All other callee errors should skip reporting of MISSING_DEPENDENCY_CLASS. + val diagnostic = calleeReference.diagnostic + if (diagnostic !is ConeInapplicableCandidateError || diagnostic.applicability != CandidateApplicability.UNSAFE_CALL) { + return + } + } + + fun consider(type: ConeKotlinType) { + var hasError = false + var hasMissingClass = false + type.forEachClassLikeType { + when (it) { + is ConeErrorType -> hasError = true + else -> hasMissingClass = hasMissingClass || it.lookupTag.toSymbol(context.session) == null + } + } + + if (hasMissingClass && !hasError) { + reporter.reportOn(expression.source, FirErrors.MISSING_DEPENDENCY_CLASS, type, context) + } + } + + expression.coneTypeOrNull?.let(::consider) + expression.extensionReceiver.takeIf { it !is FirNoReceiverExpression }?.coneTypeOrNull?.let(::consider) + expression.argumentList.arguments.forEach { it.coneTypeOrNull?.let(::consider) } + } + + private fun ConeKotlinType.forEachClassLikeType(action: (ConeClassLikeType) -> Unit) { + when (this) { + is ConeFlexibleType -> { + lowerBound.forEachClassLikeType(action) + upperBound.forEachClassLikeType(action) + } + + is ConeDefinitelyNotNullType -> original.forEachClassLikeType(action) + is ConeIntersectionType -> intersectedTypes.forEach { it.forEachClassLikeType(action) } + is ConeClassLikeType -> action(this) + else -> {} // Ignore all type parameters. + } + } +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 355aa7a4192..dadfca35704 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -360,6 +360,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MANY_LAMBDA_EXPRE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISPLACED_TYPE_PARAMETER_CONSTRAINTS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_CONSTRUCTOR_KEYWORD +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_DEPENDENCY_CLASS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_STDLIB_CLASS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_VAL_ON_ANNOTATION_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MIXING_FUNCTIONAL_KINDS_IN_SUPERTYPES @@ -743,6 +744,13 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { TO_STRING, TO_STRING, ) + + map.put( + MISSING_DEPENDENCY_CLASS, + "Cannot access class ''{0}''. Check your module classpath for missing or conflicting dependencies.", + RENDER_TYPE, + ) + map.put(ASSIGNMENT_IN_EXPRESSION_CONTEXT, "Only expressions are allowed in this context.") map.put(EXPRESSION_EXPECTED, "Only expressions are allowed here.") diff --git a/compiler/testData/diagnostics/tests/javac/imports/AllUnderImportsAmbiguity.fir.kt b/compiler/testData/diagnostics/tests/javac/imports/AllUnderImportsAmbiguity.fir.kt index 3cff0558dd1..f636d4ce945 100644 --- a/compiler/testData/diagnostics/tests/javac/imports/AllUnderImportsAmbiguity.fir.kt +++ b/compiler/testData/diagnostics/tests/javac/imports/AllUnderImportsAmbiguity.fir.kt @@ -24,4 +24,4 @@ package c import a.* import b.* -fun test(): x = d().x() +fun test(): x = d().x() diff --git a/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.fir.kt b/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.fir.kt deleted file mode 100644 index acc89c2038d..00000000000 --- a/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.fir.kt +++ /dev/null @@ -1,38 +0,0 @@ -// SKIP_JAVAC -// FILE: a/B.java -package a; - -public class B {} - -// FILE: a/D.java -package a; - -public class D { - public static class B {} -} - -// FILE: b/A1.java -package b; - -import a.B; -import a.D.B; - -public class A1 { - public B getB() { return null; } -} - -// FILE: b/A2.java -package b; - -import a.*; -import a.D.*; - -public class A2 { - public B getB() { return null; } -} - -// FILE: a.kt -package b - -fun test() = A1().getB() -fun test2() = A2().getB() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.kt b/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.kt index 6661cb0aa83..4e500ef7ebf 100644 --- a/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.kt +++ b/compiler/testData/diagnostics/tests/javac/imports/NestedAndTopLevelClassClash.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // SKIP_JAVAC // FILE: a/B.java package a; @@ -35,4 +36,4 @@ public class A2 { package b fun test() = A1().getB() -fun test2() = A2().getB() \ No newline at end of file +fun test2() = A2().getB() diff --git a/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.fir.kt b/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.fir.kt deleted file mode 100644 index 289b60b8d6c..00000000000 --- a/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.fir.kt +++ /dev/null @@ -1,40 +0,0 @@ -// SKIP_JAVAC -// FILE: a/A.java -package a; - -public class A { - public static class B {} -} - -// FILE: a/D.java -package a; - -public class D { - public static class B {} -} - -// FILE: b/A1.java -package b; - -import a.A.B; -import a.D.B; - -public class A1 { - public B getB() { return null; } -} - -// FILE: b/A2.java -package b; - -import a.A.*; -import a.D.*; - -public class A2 { - public B getB() { return null; } -} - -// FILE: a.kt -package b - -fun test() = A1().getB() -fun test2() = A2().getB() diff --git a/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.kt b/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.kt index 1c9a491d6e5..b6319c6e443 100644 --- a/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.kt +++ b/compiler/testData/diagnostics/tests/javac/imports/NestedClassClash.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // SKIP_JAVAC // FILE: a/A.java package a; diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.fir.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.fir.kt deleted file mode 100644 index d36610b8d74..00000000000 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.fir.kt +++ /dev/null @@ -1,27 +0,0 @@ -// FILE: a/x.java -package a; - -public class x { - public class Z {} -} - -// FILE: a/i.java -package a; - -public interface i { - public class Z {} -} - -// FILE: a/y.java -package a; - -public class y extends x implements i { - - public Z getZ() { return null; } - -} - -// FILE: test.kt -package a - -fun test() = y().getZ() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.kt index 04ea71dba8b..30c073a7013 100644 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.kt +++ b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: a/x.java package a; @@ -24,4 +25,4 @@ public class y extends x implements i { // FILE: test.kt package a -fun test() = y().getZ() \ No newline at end of file +fun test() = y().getZ() diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.fir.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.fir.kt deleted file mode 100644 index 2fa29683ef7..00000000000 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.fir.kt +++ /dev/null @@ -1,30 +0,0 @@ -// FILE: a/x.java -package a; - -public class x { - public class Z {} -} - -// FILE: a/i.java -package a; - -public interface i { - public class Z {} -} - -// FILE: a/i2.java -package a; - -public interface i2 extends i {} - -// FILE: a/y.java -package a; - -public class y extends x implements i2 { - public Z getZ() { return null; } -} - -// FILE: test.kt -package a - -fun test() = y().getZ() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.kt index 14278b34f32..9bfbe0735b4 100644 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.kt +++ b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity2.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: a/x.java package a; @@ -27,4 +28,4 @@ public class y extends x implements i2 { // FILE: test.kt package a -fun test() = y().getZ() \ No newline at end of file +fun test() = y().getZ() diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.fir.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.fir.kt deleted file mode 100644 index cf43f950efd..00000000000 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.fir.kt +++ /dev/null @@ -1,25 +0,0 @@ -// FILE: a/i.java -package a; - -public interface i { - public class Z {} -} - -// FILE: a/i2.java -package a; - -public interface i2 { - public class Z {} -} - -// FILE: a/x.java -package a; - -public class x implements i, i2 { - public Z getZ() { return null; } -} - -// FILE: test.kt -package a - -fun test() = x().getZ() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.kt index 78edd294c15..8d9a288b2df 100644 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.kt +++ b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity3.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: a/i.java package a; @@ -22,4 +23,4 @@ public class x implements i, i2 { // FILE: test.kt package a -fun test() = x().getZ() \ No newline at end of file +fun test() = x().getZ() diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.fir.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.fir.kt deleted file mode 100644 index a6efde77d02..00000000000 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.fir.kt +++ /dev/null @@ -1,47 +0,0 @@ -// FILE: a/x.java -package a; - -public class x { - class O {} -} - -// FILE: a/x1.java -package a; - -public class x1 extends x {} - -// FILE: a/x2.java -package a; - -public class x2 extends x1 {} - -// FILE: a/i.java -package a; - -public interface i { - public class O {} -} - -// FILE: a/i2.java -package a; - -public interface i2 extends i { - public class O {} -} - -// FILE: a/i3.java -package a; - -public interface i3 extends i2 {} - -// FILE: a/test.java -package a; - -public class test extends x2 implements i3 { - public O getO() { return null; } -} - -// FILE: test.kt -package a - -fun test1() = test().getO() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.kt b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.kt index 2b34576f96e..40087685f08 100644 --- a/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.kt +++ b/compiler/testData/diagnostics/tests/javac/inheritance/InheritanceAmbiguity4.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: a/x.java package a; diff --git a/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.fir.kt b/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.fir.kt deleted file mode 100644 index 7eaf99dfb65..00000000000 --- a/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.fir.kt +++ /dev/null @@ -1,33 +0,0 @@ -// FILE: a/x.java -package a; - -public class x { - public class O {} -} - -// FILE: a/i.java -package a; - -public interface i { - public class O {} -} - -// FILE: a/i2.java -package a; - -public interface i2 extends i { - public O getO(); -} - -// FILE: a/Test.java -package a; - -public class Test extends x implements i2 { - @Override - public O getO() { return null; } -} - -// FILE: test.kt -package a - -fun test() = Test().getO() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.kt b/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.kt index b98446aff82..65ef77ad912 100644 --- a/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.kt +++ b/compiler/testData/diagnostics/tests/javac/typeParameters/Clash.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: a/x.java package a; @@ -30,4 +31,4 @@ public class Test extends x implements i2 { // FILE: test.kt package a -fun test() = Test().getO() \ No newline at end of file +fun test() = Test().getO() diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/analysis/smartcasts/neg/7.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/analysis/smartcasts/neg/7.fir.kt index 3a3a9f875ea..e23cd50ceba 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/analysis/smartcasts/neg/7.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/analysis/smartcasts/neg/7.fir.kt @@ -247,7 +247,7 @@ fun case_4(value_1: Any?) { case_4_2(value_1) value_1.toByte() case_4_3(value_1) - value_1.inv() + value_1.inv() } // TESTCASE NUMBER: 5 @@ -340,28 +340,28 @@ fun case_8(value_1: Any?) { value_1?.toByte() if (case_8_2(value_1)) { value_1.toByte() - if (case_8_3(value_1)) value_1.inv() + if (case_8_3(value_1)) value_1.inv() } } if (!case_8_4(value_1)) { value_1?.toByte() if (!case_8_5(value_1)) { value_1.toByte() - if (!case_8_6(value_1)) value_1.inv() + if (!case_8_6(value_1)) value_1.inv() } } if (case_8_7(value_1) == null) { value_1?.toByte() if (case_8_8(value_1) != null) { value_1.toByte() - if (case_8_9(value_1) != null) value_1.inv() + if (case_8_9(value_1) != null) value_1.inv() } } if (case_8_10(value_1) != null) { value_1?.toByte() if (case_8_11(value_1) == null) { value_1.toByte() - if (case_8_12(value_1) == null) value_1.inv() + if (case_8_12(value_1) == null) value_1.inv() } } } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/16.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/16.fir.kt index 2c34b745447..b65bee6da53 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/16.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/16.fir.kt @@ -19,7 +19,7 @@ fun case_1(x: ClassWithCustomEquals) { val y = null if (x == y) { x - x.inv() + x.inv() } } @@ -27,7 +27,7 @@ fun case_1(x: ClassWithCustomEquals) { fun case_2(x: ClassWithCustomEquals) { if (x == null) { x - x.inv() + x.inv() } } @@ -39,7 +39,7 @@ fun case_2(x: ClassWithCustomEquals) { fun case_3(x: ClassWithCustomEquals, y: Nothing?) { if (x == y) { x - x.inv() + x.inv() } } @@ -52,7 +52,7 @@ fun case_4(x: ClassWithCustomEquals) { val y = null if (y == x) { x - x.inv() + x.inv() } } @@ -64,7 +64,7 @@ fun case_4(x: ClassWithCustomEquals) { fun case_5(x: ClassWithCustomEquals, y: Nothing?) { if (y == x) { x - x.inv() + x.inv() } } @@ -77,7 +77,7 @@ fun case_6(x: ClassWithCustomEquals) { val y = null if (x == y == true) { x - x.inv() + x.inv() } } @@ -85,7 +85,7 @@ fun case_6(x: ClassWithCustomEquals) { fun case_7(x: ClassWithCustomEquals) { if ((x != null) == false) { x - x.inv() + x.inv() } } @@ -97,7 +97,7 @@ fun case_7(x: ClassWithCustomEquals) { fun case_8(x: ClassWithCustomEquals, y: Nothing?) { if (!(y == x) == false) { x - x.inv() + x.inv() } } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/2.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/2.fir.kt index 4fa0a03db0e..7d18b6e4c80 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/2.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/2.fir.kt @@ -13,7 +13,7 @@ fun case_1(x: Any?) { if (x is Nothing) { x - x.inv() + x.inv() } } @@ -21,7 +21,7 @@ fun case_1(x: Any?) { fun case_2(x: Any) { if (x is Nothing) { x - x.inv() + x.inv() } } @@ -29,7 +29,7 @@ fun case_2(x: Any) { fun case_3(x: Any?) { if (x !is Nothing) else { x - x.inv() + x.inv() } } @@ -37,7 +37,7 @@ fun case_3(x: Any?) { fun case_4(x: Any) { if (x !is Nothing) else { x - x.inv() + x.inv() } } @@ -53,7 +53,7 @@ fun case_5(x: Any?) { fun case_6(x: Any?) { if (!(x !is Nothing)) { x - x.inv() + x.inv() } } @@ -61,7 +61,7 @@ fun case_6(x: Any?) { fun case_7(x: Any) { if (!(x is Nothing)) else { x - x.inv() + x.inv() } } @@ -85,7 +85,7 @@ fun case_9(x: Any?) { fun case_10(x: Any?) { if (!!(x !is Nothing)) else { x - x.inv() + x.inv() } } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/3.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/3.fir.kt index a463027674a..8414e77e535 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/3.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/neg/3.fir.kt @@ -15,7 +15,7 @@ fun case_1(x: Nothing?) { if (x is Int) { x - x.inv() + x.inv() } } @@ -23,7 +23,7 @@ fun case_1(x: Nothing?) { fun case_2(x: Nothing) { if (x is Unit) { x - x.inv() + x.inv() } } @@ -71,7 +71,7 @@ fun case_7(x: Nothing) { fun case_8(x: Nothing?) { if (!(x is Int?)) else { x - x?.inv() + x?.inv() } } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/68.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/68.fir.kt index f3a0b3bf25c..38fc3227f33 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/68.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/dfa/pos/68.fir.kt @@ -25,7 +25,7 @@ fun case_1(x: Any?) { fun case_2(x: Any?) { (x as Nothing?)!! x - x.inv() + x.inv() } // TESTCASE NUMBER: 3 @@ -40,7 +40,7 @@ fun case_3(x: Any?) { fun case_4(x: Any?) { if (x as Class? is Class) { x - x.prop_1 + x.prop_1 } } @@ -48,7 +48,7 @@ fun case_4(x: Any?) { fun case_5(x: Any?) { if (x as Nothing? is Nothing) { x - x.inv() + x.inv() } } @@ -56,14 +56,14 @@ fun case_5(x: Any?) { fun case_6(x: Any?) { (x as String?)!! x - x.length + x.length } // TESTCASE NUMBER: 7 fun case_7(x: Any?) { if (x as String? != null) { x - x.length + x.length } }