From ae63ad0b6df605c95d45eef49ca4440ebcdca320 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Fri, 30 Apr 2021 17:12:58 +0200 Subject: [PATCH] [FIR] Fix annotations invalid references diagnostics --- .../RedundantReturnUnitTypeChecker.kt | 2 +- .../checkers/context/CheckerContext.kt | 3 ++- .../context/PersistentCheckerContext.kt | 16 +++++++-------- .../FirInlineDeclarationChecker.kt | 4 ++-- .../FirStandaloneQualifierChecker.kt | 3 ++- ...irTypeParameterInQualifiedAccessChecker.kt | 2 +- .../AbstractDiagnosticCollectorVisitor.kt | 20 +++++++++++-------- .../ErrorNodeDiagnosticCollectorComponent.kt | 20 ++++++++++++------- .../converter/DeclarationsConverter.kt | 7 ++++++- .../jetbrains/kotlin/fir/FirCallResolver.kt | 4 +++- .../AmbigiousAnnotationConstructor.fir.kt | 2 +- .../annotations/AnnotationIdentifier.fir.kt | 19 ++++++++++++++++++ .../tests/annotations/AnnotationIdentifier.kt | 3 +-- .../annotations/NonAnnotationClass.fir.kt | 3 +++ .../tests/annotations/NonAnnotationClass.kt | 3 +-- ...sivelyIncorrectlyAnnotatedParameter.fir.kt | 2 +- .../typeParameterAsUpperBound.fir.kt | 2 +- .../fullPackageFQNameOnVisiblityError.fir.kt | 2 +- 18 files changed, 78 insertions(+), 39 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.fir.kt create mode 100644 compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.fir.kt diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantReturnUnitTypeChecker.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantReturnUnitTypeChecker.kt index 635831e997f..292a07200ae 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantReturnUnitTypeChecker.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantReturnUnitTypeChecker.kt @@ -5,7 +5,7 @@ interface I { } class A { - fun too(): @Annotation Unit {} + fun too(): @Annotation Unit {} fun foo(): Unit { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt index fad0e16d4b3..991a870c85c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/CheckerContext.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.expressions.FirGetClassCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.ImplicitReceiverStack import org.jetbrains.kotlin.fir.resolve.SessionHolder import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator @@ -23,7 +24,7 @@ abstract class CheckerContext { // Context abstract val implicitReceiverStack: ImplicitReceiverStack abstract val containingDeclarations: List - abstract val qualifiedAccesses: List + abstract val qualifiedAccessOrAnnotationCalls: List abstract val getClassCalls: List // Suppress diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt index 0b47de99cc5..79965372d36 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/context/PersistentCheckerContext.kt @@ -11,7 +11,7 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentSetOf import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.expressions.FirGetClassCall -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.PersistentImplicitReceiverStack import org.jetbrains.kotlin.fir.resolve.SessionHolder import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.name.Name class PersistentCheckerContext private constructor( override val implicitReceiverStack: PersistentImplicitReceiverStack, override val containingDeclarations: PersistentList, - override val qualifiedAccesses: PersistentList, + override val qualifiedAccessOrAnnotationCalls: PersistentList, override val getClassCalls: PersistentList, override val sessionHolder: SessionHolder, override val returnTypeCalculator: ReturnTypeCalculator, @@ -47,7 +47,7 @@ class PersistentCheckerContext private constructor( return PersistentCheckerContext( implicitReceiverStack.add(name, value), containingDeclarations, - qualifiedAccesses, + qualifiedAccessOrAnnotationCalls, getClassCalls, sessionHolder, returnTypeCalculator, @@ -62,7 +62,7 @@ class PersistentCheckerContext private constructor( return PersistentCheckerContext( implicitReceiverStack, containingDeclarations.add(declaration), - qualifiedAccesses, + qualifiedAccessOrAnnotationCalls, getClassCalls, sessionHolder, returnTypeCalculator, @@ -73,11 +73,11 @@ class PersistentCheckerContext private constructor( ) } - fun addQualifiedAccess(qualifiedAccess: FirQualifiedAccess): PersistentCheckerContext { + fun addQualifiedAccessOrAnnotationCall(qualifiedAccessOrAnnotationCall: FirStatement): PersistentCheckerContext { return PersistentCheckerContext( implicitReceiverStack, containingDeclarations, - qualifiedAccesses.add(qualifiedAccess), + this.qualifiedAccessOrAnnotationCalls.add(qualifiedAccessOrAnnotationCall), getClassCalls, sessionHolder, returnTypeCalculator, @@ -92,7 +92,7 @@ class PersistentCheckerContext private constructor( return PersistentCheckerContext( implicitReceiverStack, containingDeclarations, - qualifiedAccesses, + qualifiedAccessOrAnnotationCalls, getClassCalls.add(getClassCall), sessionHolder, returnTypeCalculator, @@ -113,7 +113,7 @@ class PersistentCheckerContext private constructor( return PersistentCheckerContext( implicitReceiverStack, containingDeclarations, - qualifiedAccesses, + qualifiedAccessOrAnnotationCalls, getClassCalls, sessionHolder, returnTypeCalculator, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt index 960a321862e..8252ca59240 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt @@ -184,8 +184,8 @@ object FirInlineDeclarationChecker : FirMemberDeclarationChecker() { private fun FirQualifiedAccess.partOfCall(context: CheckerContext): Boolean { if (this !is FirExpression) return false - val containingQualifiedAccess = context.qualifiedAccesses.getOrNull(context.qualifiedAccesses.size - 2) ?: return false - if (this == containingQualifiedAccess.explicitReceiver) return true + val containingQualifiedAccess = context.qualifiedAccessOrAnnotationCalls.getOrNull(context.qualifiedAccessOrAnnotationCalls.size - 2) ?: return false + if (this == (containingQualifiedAccess as? FirQualifiedAccess)?.explicitReceiver) return true val call = containingQualifiedAccess as? FirCall ?: return false return call.arguments.any { it.unwrapArgument() == this } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirStandaloneQualifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirStandaloneQualifierChecker.kt index 41ba73f0bd0..556abc8c447 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirStandaloneQualifierChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirStandaloneQualifierChecker.kt @@ -10,13 +10,14 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.isUnit object FirStandaloneQualifierChecker : FirResolvedQualifierChecker() { override fun check(expression: FirResolvedQualifier, context: CheckerContext, reporter: DiagnosticReporter) { - val lastQualifiedAccess = context.qualifiedAccesses.lastOrNull() + val lastQualifiedAccess = context.qualifiedAccessOrAnnotationCalls.lastOrNull() as? FirQualifiedAccess if (lastQualifiedAccess?.explicitReceiver === expression) return val lastGetClass = context.getClassCalls.lastOrNull() if (lastGetClass?.argument === expression) return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeParameterInQualifiedAccessChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeParameterInQualifiedAccessChecker.kt index 8a367f1c242..8eb83054e5d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeParameterInQualifiedAccessChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeParameterInQualifiedAccessChecker.kt @@ -30,7 +30,7 @@ object FirTypeParameterInQualifiedAccessChecker : FirQualifiedAccessChecker() { // Make sure the current qualified access is not part of another qualified access or class literals. // E.g., for `T::toString`, which is a callable reference (a subtype of qualified access), type parameter T is checked once as an // explicit receiver (or LHS). When we visit `T` (as a qualified access), we should not regard it as an expression here. - if (context.qualifiedAccesses.size > 1 || context.getClassCalls.isNotEmpty()) return + if (context.qualifiedAccessOrAnnotationCalls.size > 1 || context.getClassCalls.isNotEmpty()) return val diagnostic = expression.typeRef.coneTypeParameterInQualifiedAccess ?: return val source = expression.source ?: return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt index 192f28894bf..1f8a78aaada 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt @@ -175,15 +175,19 @@ abstract class AbstractDiagnosticCollectorVisitor( } override fun visitFunctionCall(functionCall: FirFunctionCall, data: Nothing?) { - visitWithQualifiedAccess(functionCall) + visitWithQualifiedAccessOrAnnotationCall(functionCall) } override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: Nothing?) { - visitWithQualifiedAccess(qualifiedAccessExpression) + visitWithQualifiedAccessOrAnnotationCall(qualifiedAccessExpression) + } + + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) { + visitWithQualifiedAccessOrAnnotationCall(annotationCall) } override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: Nothing?) { - visitWithQualifiedAccess(variableAssignment) + visitWithQualifiedAccessOrAnnotationCall(variableAssignment) } override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Nothing?) { @@ -215,9 +219,9 @@ abstract class AbstractDiagnosticCollectorVisitor( } } - private fun visitWithQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { - return withQualifiedAccess(qualifiedAccess) { - visitElement(qualifiedAccess, null) + private fun visitWithQualifiedAccessOrAnnotationCall(qualifiedAccessOrAnnotationCall: FirStatement) { + return withQualifiedAccessOrAnnotationCall(qualifiedAccessOrAnnotationCall) { + visitElement(qualifiedAccessOrAnnotationCall, null) } } @@ -228,9 +232,9 @@ abstract class AbstractDiagnosticCollectorVisitor( } @OptIn(PrivateForInline::class) - inline fun withQualifiedAccess(qualifiedAccess: FirQualifiedAccess, block: () -> R): R { + inline fun withQualifiedAccessOrAnnotationCall(qualifiedAccessOrAnnotationCall: FirStatement, block: () -> R): R { val existingContext = context - context = context.addQualifiedAccess(qualifiedAccess) + context = context.addQualifiedAccessOrAnnotationCall(qualifiedAccessOrAnnotationCall) try { return block() } finally { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index c9134af05cd..d938d20cbda 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -46,9 +46,13 @@ class ErrorNodeDiagnosticCollectorComponent( override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: CheckerContext) { val source = errorNamedReference.source ?: return - val qualifiedAccess = data.qualifiedAccesses.lastOrNull()?.takeIf { + val qualifiedAccessOrAnnotationCall = data.qualifiedAccessOrAnnotationCalls.lastOrNull()?.takeIf { // Use the source of the enclosing FirQualifiedAccessExpression if it is exactly the call to the erroneous callee. - it is FirQualifiedAccessExpression && it.calleeReference == errorNamedReference + when (it) { + is FirQualifiedAccessExpression -> it.calleeReference == errorNamedReference + is FirAnnotationCall -> it.calleeReference == errorNamedReference + else -> false + } } // Don't report duplicated unresolved reference on annotation entry (already reported on its type) if (source.elementType == KtNodeTypes.ANNOTATION_ENTRY && errorNamedReference.diagnostic is ConeUnresolvedNameError) return @@ -58,12 +62,14 @@ class ErrorNodeDiagnosticCollectorComponent( ) return // If the receiver cannot be resolved, we skip reporting any further problems for this call. - if (qualifiedAccess?.dispatchReceiver.hasUnresolvedNameError() || - qualifiedAccess?.extensionReceiver.hasUnresolvedNameError() || - qualifiedAccess?.explicitReceiver.hasUnresolvedNameError() - ) return + if (qualifiedAccessOrAnnotationCall is FirQualifiedAccess) { + if (qualifiedAccessOrAnnotationCall.dispatchReceiver.hasUnresolvedNameError() || + qualifiedAccessOrAnnotationCall.extensionReceiver.hasUnresolvedNameError() || + qualifiedAccessOrAnnotationCall.explicitReceiver.hasUnresolvedNameError() + ) return + } - reportFirDiagnostic(errorNamedReference.diagnostic, source, reporter, data, qualifiedAccess?.source) + reportFirDiagnostic(errorNamedReference.diagnostic, source, reporter, data, qualifiedAccessOrAnnotationCall?.source) } private fun FirExpression?.hasUnresolvedNameError(): Boolean { diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 1d1beb25a34..d3d5c0ddfea 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -336,7 +336,12 @@ class DeclarationsConverter( useSiteTarget = annotationUseSiteTarget ?: defaultAnnotationUseSiteTarget annotationTypeRef = constructorCalleePair.first calleeReference = buildSimpleNamedReference { - source = this@buildAnnotationCall.source + source = unescapedAnnotation + .getChildNodeByType(CONSTRUCTOR_CALLEE) + ?.getChildNodeByType(TYPE_REFERENCE) + ?.getChildNodeByType(USER_TYPE) + ?.getChildNodeByType(REFERENCE_EXPRESSION) + ?.toFirSourceElement() this.name = name } extractArgumentsFrom(constructorCalleePair.second, stubMode) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index 3043ff15c5e..920485dbf72 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic +import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedReifiedParameterReference import org.jetbrains.kotlin.fir.references.* @@ -410,7 +411,8 @@ class FirCallResolver( buildErrorReference( callInfo, if (annotationClassSymbol != null) ConeIllegalAnnotationError(reference.name) - else ConeUnresolvedNameError(reference.name), + //calleeReference and annotationTypeRef are both error nodes so we need to avoid doubling of the diagnostic report + else ConeStubDiagnostic(ConeUnresolvedNameError(reference.name)), reference.source ) } diff --git a/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.fir.kt b/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.fir.kt index 4882323d7da..6308b7f55af 100644 --- a/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.fir.kt @@ -1,6 +1,6 @@ // !WITH_NEW_INFERENCE import java.util.ArrayList -@ArrayList(1, 1) fun b() {} +@ArrayList(1, 1) fun b() {} @Xoo(x) fun c() {} @java.lang.Deprecated(x) fun a() {} diff --git a/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.fir.kt b/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.fir.kt new file mode 100644 index 00000000000..eee8a883414 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.fir.kt @@ -0,0 +1,19 @@ +// FILE: a.kt + +annotation class annotation + +// FILE: test/b.kt + +package test + +@test.annotation class annotation + +// FILE: other/c.kt + +package other + +annotation class My + +@test.annotation class Your + +@My class Our diff --git a/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.kt b/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.kt index 49f48bda457..191a2d336af 100644 --- a/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.kt +++ b/compiler/testData/diagnostics/tests/annotations/AnnotationIdentifier.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // FILE: a.kt annotation class annotation @@ -17,4 +16,4 @@ annotation class My @test.annotation class Your -@My class Our \ No newline at end of file +@My class Our diff --git a/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.fir.kt b/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.fir.kt new file mode 100644 index 00000000000..dc720d547f2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.fir.kt @@ -0,0 +1,3 @@ +class Foo + +@Foo class Bar diff --git a/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.kt b/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.kt index 895654512f3..0ee54ec746f 100644 --- a/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.kt +++ b/compiler/testData/diagnostics/tests/annotations/NonAnnotationClass.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL class Foo -@Foo class Bar \ No newline at end of file +@Foo class Bar diff --git a/compiler/testData/diagnostics/tests/annotations/RecursivelyIncorrectlyAnnotatedParameter.fir.kt b/compiler/testData/diagnostics/tests/annotations/RecursivelyIncorrectlyAnnotatedParameter.fir.kt index 9c1b0c11faf..d329e381e83 100644 --- a/compiler/testData/diagnostics/tests/annotations/RecursivelyIncorrectlyAnnotatedParameter.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/RecursivelyIncorrectlyAnnotatedParameter.fir.kt @@ -1,2 +1,2 @@ // Class constructor parameter CAN be recursively annotated -class RecursivelyAnnotated(@RecursivelyAnnotated(1) val x: Int) +class RecursivelyAnnotated(@RecursivelyAnnotated(1) val x: Int) diff --git a/compiler/testData/diagnostics/tests/inference/upperBounds/typeParameterAsUpperBound.fir.kt b/compiler/testData/diagnostics/tests/inference/upperBounds/typeParameterAsUpperBound.fir.kt index bf11ce01f7f..c37f1768c20 100644 --- a/compiler/testData/diagnostics/tests/inference/upperBounds/typeParameterAsUpperBound.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/upperBounds/typeParameterAsUpperBound.fir.kt @@ -1,7 +1,7 @@ // !CHECK_TYPE -@kotlin.internal.InlineOnly +@kotlin.internal.InlineOnly public inline fun C.ifEmpty(f: () -> R): R where C : Collection<*>, C : R = if (isEmpty()) f() else this public fun listOf(t: T): List = TODO() diff --git a/idea/testData/checker/diagnosticsMessage/fullPackageFQNameOnVisiblityError.fir.kt b/idea/testData/checker/diagnosticsMessage/fullPackageFQNameOnVisiblityError.fir.kt index 826f8c217af..7f3ed2bd9fb 100644 --- a/idea/testData/checker/diagnosticsMessage/fullPackageFQNameOnVisiblityError.fir.kt +++ b/idea/testData/checker/diagnosticsMessage/fullPackageFQNameOnVisiblityError.fir.kt @@ -2,5 +2,5 @@ package a.b -@kotlin.internal.InlineOnly +@kotlin.internal.InlineOnly inline fun foo() {}