diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt index 36a92965a90..313bc0512b7 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt @@ -17,5 +17,6 @@ object CommonTypeCheckers : TypeCheckers() { FirDefinitelyNotNullableChecker, FirUnsupportedDefaultValueInFunctionTypeParameterChecker, FirUnsupportedModifiersInFunctionTypeParameterChecker, + FirStarProjectionModifierChecker, ) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/type/FirStarProjectionModifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/type/FirStarProjectionModifierChecker.kt new file mode 100644 index 00000000000..0ed9529b922 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/type/FirStarProjectionModifierChecker.kt @@ -0,0 +1,40 @@ +/* + * 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.type + +import org.jetbrains.kotlin.KtRealSourceElementKind +import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget +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.checkers.getModifierList +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors +import org.jetbrains.kotlin.fir.types.* + +object FirStarProjectionModifierChecker : FirTypeRefChecker() { + override fun check(typeRef: FirTypeRef, context: CheckerContext, reporter: DiagnosticReporter) { + if (typeRef !is FirResolvedTypeRef) return + + val delegatedTypeRef = typeRef.delegatedTypeRef as? FirUserTypeRef ?: return + for (part in delegatedTypeRef.qualifier) { + for (typeArgument in part.typeArgumentList.typeArguments) { + if (typeArgument !is FirStarProjection) continue + val source = typeArgument.source?.takeIf { it.kind is KtRealSourceElementKind } ?: continue + val modifierList = source.getModifierList() ?: continue + + for (modifier in modifierList.modifiers) { + reporter.reportOn( + modifier.source, + FirErrors.WRONG_MODIFIER_TARGET, + modifier.token, + KotlinTarget.STAR_PROJECTION.description, + context, + ) + } + } + } + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/instar.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/instar.fir.kt deleted file mode 100644 index 74992217ab5..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/instar.fir.kt +++ /dev/null @@ -1,11 +0,0 @@ -// Reproduces exception in TypeResolver.kt: EA-66870 - -import java.util.ArrayList - -abstract class J { - public abstract fun , S : List> foo(x: T) - fun bar() { - val s = ArrayList>() - foo(s) - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/instar.kt b/compiler/testData/diagnostics/testsWithStdLib/instar.kt index daa63d51d3d..53e7ba8c67e 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/instar.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/instar.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // Reproduces exception in TypeResolver.kt: EA-66870 import java.util.ArrayList diff --git a/compiler/testData/diagnostics/testsWithStdLib/outstar.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/outstar.fir.kt deleted file mode 100644 index 97dbf9f9e05..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/outstar.fir.kt +++ /dev/null @@ -1,11 +0,0 @@ -// Reproduces exception in TypeResolver.kt: EA-66870 - -import java.util.ArrayList - -abstract class J { - public abstract fun , S : List> foo(x: T) - fun bar() { - val s = ArrayList>() - foo(s) - } -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/outstar.kt b/compiler/testData/diagnostics/testsWithStdLib/outstar.kt index 1bed3baf38b..adfe49d744f 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/outstar.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/outstar.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // Reproduces exception in TypeResolver.kt: EA-66870 import java.util.ArrayList