[FIR] Implement DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE diagnostic
#KT-59409 Fixed
This commit is contained in:
committed by
Space Team
parent
d93ffe0aec
commit
53ff4584d4
+4
@@ -1009,6 +1009,10 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val DATA_OBJECT_CUSTOM_EQUALS_OR_HASH_CODE by error<KtNamedFunction>(PositioningStrategy.OVERRIDE_MODIFIER)
|
||||
}
|
||||
|
||||
val PARAMETER_DEFAULT_VALUES by object : DiagnosticGroup("Parameter default values") {
|
||||
val DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE by error<KtElement>()
|
||||
}
|
||||
|
||||
val FUN_INTERFACES by object : DiagnosticGroup("Fun interfaces") {
|
||||
val FUN_INTERFACE_CONSTRUCTOR_REFERENCE by error<KtExpression>(PositioningStrategy.REFERENCE_BY_QUALIFIED)
|
||||
val FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS by error<KtClass>(PositioningStrategy.FUN_MODIFIER)
|
||||
|
||||
@@ -527,6 +527,9 @@ object FirErrors {
|
||||
val TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED by warning0<PsiElement>(SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED)
|
||||
val DATA_OBJECT_CUSTOM_EQUALS_OR_HASH_CODE by error0<KtNamedFunction>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||
|
||||
// Parameter default values
|
||||
val DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE by error0<KtElement>()
|
||||
|
||||
// Fun interfaces
|
||||
val FUN_INTERFACE_CONSTRUCTOR_REFERENCE by error0<KtExpression>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
|
||||
val FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS by error0<KtClass>(SourceElementPositioningStrategies.FUN_MODIFIER)
|
||||
|
||||
+17
@@ -217,6 +217,19 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
return null
|
||||
}
|
||||
|
||||
@OptIn(SymbolInternals::class)
|
||||
private fun FirFunctionSymbol<*>.checkDefaultValues(
|
||||
reporter: DiagnosticReporter,
|
||||
context: CheckerContext,
|
||||
) {
|
||||
for (valueParameterSymbol in valueParameterSymbols) {
|
||||
val defaultValue = valueParameterSymbol.fir.defaultValue
|
||||
if (defaultValue != null) {
|
||||
reporter.reportOn(defaultValue.source, FirErrors.DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkMember(
|
||||
member: FirCallableSymbol<*>,
|
||||
containingClass: FirClass,
|
||||
@@ -299,6 +312,10 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
|
||||
member.checkDeprecation(reporter, overriddenMemberSymbols, context)
|
||||
|
||||
if (member is FirFunctionSymbol) {
|
||||
member.checkDefaultValues(reporter, context)
|
||||
}
|
||||
|
||||
val restriction = member.checkReturnType(
|
||||
overriddenSymbols = overriddenMemberSymbols,
|
||||
typeCheckerState = typeCheckerState,
|
||||
|
||||
+4
@@ -153,6 +153,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_CLASS_WITHOU
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DATA_OBJECT_CUSTOM_EQUALS_OR_HASH_CODE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DECLARATION_CANT_BE_INLINED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DEFINITELY_NON_NULLABLE_AS_REIFIED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.DELEGATED_PROPERTY_INSIDE_VALUE_CLASS
|
||||
@@ -1643,6 +1644,9 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
map.put(TAIL_RECURSION_IN_TRY_IS_NOT_SUPPORTED, "Tail recursion optimization inside try/catch/finally is not supported")
|
||||
map.put(DATA_OBJECT_CUSTOM_EQUALS_OR_HASH_CODE, "Data object cannot have a custom implementation of 'equals' or 'hashCode'")
|
||||
|
||||
// Parameter default values
|
||||
map.put(DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE, "An overriding function is not allowed to specify default values for its parameters.")
|
||||
|
||||
// Fun interfaces
|
||||
map.put(FUN_INTERFACE_CONSTRUCTOR_REFERENCE, "Functional/SAM interface constructor references are prohibited")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user