[FIR] Implement deprecation for accessing private operators from public inline function

This only affects delegation operators as well as the for-loop-related
next and hasNext operators.
All the other operators worked correctly before.
In K2, the previously mentioned operator calls will be flagged with a
deprecation error and will become and error in 2.1.

#KT-59782 Fixed
This commit is contained in:
Kirill Rakhman
2024-02-02 14:23:10 +01:00
committed by Space Team
parent 58c03e021b
commit 376a9b8ace
17 changed files with 370 additions and 1 deletions
@@ -4721,6 +4721,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.NON_PUBLIC_CALL_FROM_PUBLIC_INLINE_DEPRECATION) { firDiagnostic ->
NonPublicCallFromPublicInlineDeprecationImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
firSymbolBuilder.buildSymbol(firDiagnostic.b),
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.PROTECTED_CONSTRUCTOR_CALL_FROM_PUBLIC_INLINE) { firDiagnostic ->
ProtectedConstructorCallFromPublicInlineImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a),
@@ -3288,6 +3288,12 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val referencedDeclaration: KtSymbol
}
interface NonPublicCallFromPublicInlineDeprecation : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = NonPublicCallFromPublicInlineDeprecation::class
val inlineDeclaration: KtSymbol
val referencedDeclaration: KtSymbol
}
interface ProtectedConstructorCallFromPublicInline : KtFirDiagnostic<KtElement> {
override val diagnosticClass get() = ProtectedConstructorCallFromPublicInline::class
val inlineDeclaration: KtSymbol
@@ -3963,6 +3963,13 @@ internal class NonPublicCallFromPublicInlineImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.NonPublicCallFromPublicInline
internal class NonPublicCallFromPublicInlineDeprecationImpl(
override val inlineDeclaration: KtSymbol,
override val referencedDeclaration: KtSymbol,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.NonPublicCallFromPublicInlineDeprecation
internal class ProtectedConstructorCallFromPublicInlineImpl(
override val inlineDeclaration: KtSymbol,
override val referencedDeclaration: KtSymbol,