[FIR] Add REIFIED_TYPE_PARAMETER_IN_OVERRIDE diagnostic
This commit is contained in:
committed by
teamcityserver
parent
29dbaa4ae1
commit
38cecf8b12
+2
@@ -1177,6 +1177,8 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val DECLARATION_CANT_BE_INLINED by error<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
|
||||
val OVERRIDE_BY_INLINE by warning<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
|
||||
val REIFIED_TYPE_PARAMETER_IN_OVERRIDE by error<KtElement>(PositioningStrategy.REIFIED_MODIFIER)
|
||||
}
|
||||
|
||||
val IMPORTS by object : DiagnosticGroup("Imports") {
|
||||
|
||||
@@ -610,6 +610,7 @@ object FirErrors {
|
||||
val SUPER_CALL_FROM_PUBLIC_INLINE by warning1<KtElement, FirBasedSymbol<*>>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
|
||||
val DECLARATION_CANT_BE_INLINED by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val OVERRIDE_BY_INLINE by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val REIFIED_TYPE_PARAMETER_IN_OVERRIDE by error0<KtElement>(SourceElementPositioningStrategies.REIFIED_MODIFIER)
|
||||
|
||||
// Imports
|
||||
val CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON by error1<KtImportDirective, Name>(SourceElementPositioningStrategies.IMPORT_LAST_NAME)
|
||||
|
||||
+8
@@ -364,6 +364,14 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
if (overriddenSymbols.isNotEmpty()) {
|
||||
for (param in function.typeParameters) {
|
||||
if (param.isReified) {
|
||||
reporter.reportOn(param.source, FirErrors.REIFIED_TYPE_PARAMETER_IN_OVERRIDE, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//check for inherited default values
|
||||
val paramsWithDefaults = overriddenSymbols.flatMap {
|
||||
if (it !is FirFunctionSymbol<*>) return@flatMap emptyList<Int>()
|
||||
|
||||
+2
@@ -338,6 +338,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_SINGLE_
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_VISIBILITY_MODIFIER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REIFIED_TYPE_FORBIDDEN_SUBSTITUTION
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REIFIED_TYPE_IN_CATCH_CLAUSE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REIFIED_TYPE_PARAMETER_IN_OVERRIDE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REIFIED_TYPE_PARAMETER_NO_INLINE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REPEATED_BOUND
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REPEATED_MODIFIER
|
||||
@@ -932,6 +933,7 @@ class FirDefaultErrorMessages {
|
||||
map.put(INLINE_CLASS_CANNOT_BE_RECURSIVE, "Inline class cannot be recursive")
|
||||
map.put(DECLARATION_CANT_BE_INLINED, "'inline' modifier is not allowed on virtual members. Only private or final members can be inlined")
|
||||
map.put(OVERRIDE_BY_INLINE, "Override by an inline function")
|
||||
map.put(REIFIED_TYPE_PARAMETER_IN_OVERRIDE, "Override by a function with reified type parameter")
|
||||
map.put(RESERVED_MEMBER_INSIDE_INLINE_CLASS, "Member with the name ''{0}'' is reserved for future releases", TO_STRING)
|
||||
map.put(
|
||||
SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS,
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER
|
||||
|
||||
interface IBase {
|
||||
fun foo()
|
||||
fun bar()
|
||||
fun <T> qux(x: T)
|
||||
}
|
||||
|
||||
class CDerived : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
|
||||
class CNested : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
}
|
||||
|
||||
val anObject = object : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
}
|
||||
|
||||
fun aMethod() {
|
||||
class CLocal : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open class COpen : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!DECLARATION_CANT_BE_INLINED!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
|
||||
open class COpenNested : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!DECLARATION_CANT_BE_INLINED!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
}
|
||||
|
||||
val anObject = object : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
}
|
||||
|
||||
fun aMethod() {
|
||||
open class COpenLocal : IBase {
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun foo()<!> {}
|
||||
<!DECLARATION_CANT_BE_INLINED!>override inline fun bar()<!> {}
|
||||
<!OVERRIDE_BY_INLINE!>override inline final fun <reified T> qux(x: T)<!> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -NOTHING_TO_INLINE -UNUSED_PARAMETER
|
||||
|
||||
interface IBase {
|
||||
|
||||
+6
@@ -3179,6 +3179,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.REIFIED_TYPE_PARAMETER_IN_OVERRIDE) { firDiagnostic ->
|
||||
ReifiedTypeParameterInOverrideImpl(
|
||||
firDiagnostic as FirPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON) { firDiagnostic ->
|
||||
CannotAllUnderImportFromSingletonImpl(
|
||||
firDiagnostic.a,
|
||||
|
||||
+4
@@ -2218,6 +2218,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = OverrideByInline::class
|
||||
}
|
||||
|
||||
abstract class ReifiedTypeParameterInOverride : KtFirDiagnostic<KtElement>() {
|
||||
override val diagnosticClass get() = ReifiedTypeParameterInOverride::class
|
||||
}
|
||||
|
||||
abstract class CannotAllUnderImportFromSingleton : KtFirDiagnostic<KtImportDirective>() {
|
||||
override val diagnosticClass get() = CannotAllUnderImportFromSingleton::class
|
||||
abstract val objectName: Name
|
||||
|
||||
+7
@@ -3581,6 +3581,13 @@ internal class OverrideByInlineImpl(
|
||||
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
||||
}
|
||||
|
||||
internal class ReifiedTypeParameterInOverrideImpl(
|
||||
firDiagnostic: FirPsiDiagnostic,
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.ReifiedTypeParameterInOverride(), KtAbstractFirDiagnostic<KtElement> {
|
||||
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
||||
}
|
||||
|
||||
internal class CannotAllUnderImportFromSingletonImpl(
|
||||
override val objectName: Name,
|
||||
firDiagnostic: FirPsiDiagnostic,
|
||||
|
||||
Reference in New Issue
Block a user