[FIR] Improve the messages of the multiple defaults diagnostics
Mention the base functions where the default values come from.
This commit is contained in:
committed by
Space Team
parent
4e1dfcd2a8
commit
8755cf75ac
+30
-6
@@ -2619,42 +2619,66 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
|||||||
}
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesImpl(
|
MultipleDefaultsInheritedFromSupertypesImpl(
|
||||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
firDiagnostic.a,
|
||||||
|
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||||
|
firDiagnostic.c.map { firCallableSymbol ->
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||||
|
},
|
||||||
firDiagnostic as KtPsiDiagnostic,
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl(
|
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl(
|
||||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
firDiagnostic.a,
|
||||||
|
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||||
|
firDiagnostic.c.map { firCallableSymbol ->
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||||
|
},
|
||||||
firDiagnostic as KtPsiDiagnostic,
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.errorFactory) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.errorFactory) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
||||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
firDiagnostic.a,
|
||||||
|
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||||
|
firDiagnostic.c.map { firCallableSymbol ->
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||||
|
},
|
||||||
firDiagnostic as KtPsiDiagnostic,
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.warningFactory) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.warningFactory) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
||||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
firDiagnostic.a,
|
||||||
|
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||||
|
firDiagnostic.c.map { firCallableSymbol ->
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||||
|
},
|
||||||
firDiagnostic as KtPsiDiagnostic,
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.errorFactory) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.errorFactory) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
||||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
firDiagnostic.a,
|
||||||
|
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||||
|
firDiagnostic.c.map { firCallableSymbol ->
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||||
|
},
|
||||||
firDiagnostic as KtPsiDiagnostic,
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.warningFactory) { firDiagnostic ->
|
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.warningFactory) { firDiagnostic ->
|
||||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
||||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
firDiagnostic.a,
|
||||||
|
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||||
|
firDiagnostic.c.map { firCallableSymbol ->
|
||||||
|
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||||
|
},
|
||||||
firDiagnostic as KtPsiDiagnostic,
|
firDiagnostic as KtPsiDiagnostic,
|
||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
|
|||||||
+12
@@ -1861,32 +1861,44 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
|||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class
|
||||||
|
val name: Name
|
||||||
val valueParameter: KtSymbol
|
val valueParameter: KtSymbol
|
||||||
|
val baseFunctions: List<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride::class
|
||||||
|
val name: Name
|
||||||
val valueParameter: KtSymbol
|
val valueParameter: KtSymbol
|
||||||
|
val baseFunctions: List<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypesDeprecationError : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypesDeprecationError : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationError::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationError::class
|
||||||
|
val name: Name
|
||||||
val valueParameter: KtSymbol
|
val valueParameter: KtSymbol
|
||||||
|
val baseFunctions: List<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypesDeprecationWarning : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypesDeprecationWarning : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationWarning::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationWarning::class
|
||||||
|
val name: Name
|
||||||
val valueParameter: KtSymbol
|
val valueParameter: KtSymbol
|
||||||
|
val baseFunctions: List<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError::class
|
||||||
|
val name: Name
|
||||||
val valueParameter: KtSymbol
|
val valueParameter: KtSymbol
|
||||||
|
val baseFunctions: List<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning : KtFirDiagnostic<KtElement> {
|
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning : KtFirDiagnostic<KtElement> {
|
||||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning::class
|
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning::class
|
||||||
|
val name: Name
|
||||||
val valueParameter: KtSymbol
|
val valueParameter: KtSymbol
|
||||||
|
val baseFunctions: List<KtCallableSymbol>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic<KtElement> {
|
interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic<KtElement> {
|
||||||
|
|||||||
+12
@@ -2233,37 +2233,49 @@ internal class CannotChangeAccessPrivilegeImpl(
|
|||||||
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege
|
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesImpl(
|
||||||
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
override val baseFunctions: List<KtCallableSymbol>,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypes
|
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypes
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl(
|
||||||
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
override val baseFunctions: List<KtCallableSymbol>,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride
|
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
||||||
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
override val baseFunctions: List<KtCallableSymbol>,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationError
|
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationError
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
||||||
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
override val baseFunctions: List<KtCallableSymbol>,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationWarning
|
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationWarning
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
||||||
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
override val baseFunctions: List<KtCallableSymbol>,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError
|
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError
|
||||||
|
|
||||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
||||||
|
override val name: Name,
|
||||||
override val valueParameter: KtSymbol,
|
override val valueParameter: KtSymbol,
|
||||||
|
override val baseFunctions: List<KtCallableSymbol>,
|
||||||
firDiagnostic: KtPsiDiagnostic,
|
firDiagnostic: KtPsiDiagnostic,
|
||||||
token: KtLifetimeToken,
|
token: KtLifetimeToken,
|
||||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning
|
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning
|
||||||
|
|||||||
+8
@@ -890,22 +890,30 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
||||||
|
parameter<Name>("name")
|
||||||
parameter<FirValueParameterSymbol>("valueParameter")
|
parameter<FirValueParameterSymbol>("valueParameter")
|
||||||
|
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||||
}
|
}
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error<KtElement>(PositioningStrategy.DECLARATION_NAME) {
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error<KtElement>(PositioningStrategy.DECLARATION_NAME) {
|
||||||
|
parameter<Name>("name")
|
||||||
parameter<FirValueParameterSymbol>("valueParameter")
|
parameter<FirValueParameterSymbol>("valueParameter")
|
||||||
|
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||||
}
|
}
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError<KtElement>(
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError<KtElement>(
|
||||||
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
||||||
PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT
|
PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT
|
||||||
) {
|
) {
|
||||||
|
parameter<Name>("name")
|
||||||
parameter<FirValueParameterSymbol>("valueParameter")
|
parameter<FirValueParameterSymbol>("valueParameter")
|
||||||
|
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||||
}
|
}
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError<KtElement>(
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError<KtElement>(
|
||||||
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
||||||
PositioningStrategy.DECLARATION_NAME
|
PositioningStrategy.DECLARATION_NAME
|
||||||
) {
|
) {
|
||||||
|
parameter<Name>("name")
|
||||||
parameter<FirValueParameterSymbol>("valueParameter")
|
parameter<FirValueParameterSymbol>("valueParameter")
|
||||||
|
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||||
}
|
}
|
||||||
|
|
||||||
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error<KtElement> {
|
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error<KtElement> {
|
||||||
|
|||||||
+4
-4
@@ -493,10 +493,10 @@ object FirErrors {
|
|||||||
val DATA_CLASS_OVERRIDE_DEFAULT_VALUES by error2<KtElement, FirCallableSymbol<*>, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
val DATA_CLASS_OVERRIDE_DEFAULT_VALUES by error2<KtElement, FirCallableSymbol<*>, FirClassSymbol<*>>(SourceElementPositioningStrategies.DATA_MODIFIER)
|
||||||
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val CANNOT_WEAKEN_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
val CANNOT_CHANGE_ACCESS_PRIVILEGE by error3<KtModifierListOwner, Visibility, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error1<KtElement, FirValueParameterSymbol>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_NAME)
|
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error1<KtElement, ConeKotlinType>()
|
val TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS by error1<KtElement, ConeKotlinType>()
|
||||||
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
val OVERRIDING_FINAL_MEMBER by error2<KtNamedDeclaration, FirCallableSymbol<*>, Name>(SourceElementPositioningStrategies.OVERRIDE_MODIFIER)
|
||||||
val RETURN_TYPE_MISMATCH_ON_INHERITANCE by error2<KtClassOrObject, FirCallableSymbol<*>, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
val RETURN_TYPE_MISMATCH_ON_INHERITANCE by error2<KtClassOrObject, FirCallableSymbol<*>, FirCallableSymbol<*>>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||||
|
|||||||
+17
-8
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.isSubstitutionOverride
|
|||||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() {
|
object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() {
|
||||||
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
@@ -48,9 +49,9 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
|
|||||||
val overriddenFunctionsK1WouldConsider = overriddenFunctions.filter { it.containingClassLookupTag() in immediateSupertypes }
|
val overriddenFunctionsK1WouldConsider = overriddenFunctions.filter { it.containingClassLookupTag() in immediateSupertypes }
|
||||||
|
|
||||||
for ((index, parameter) in function.valueParameterSymbols.withIndex()) {
|
for ((index, parameter) in function.valueParameterSymbols.withIndex()) {
|
||||||
val basesWithDefaultValues = overriddenFunctions.count { it.valueParameterSymbols[index].hasDefaultValue }
|
val basesWithDefaultValues = overriddenFunctions.filter { it.valueParameterSymbols[index].hasDefaultValue }
|
||||||
|
|
||||||
if (basesWithDefaultValues <= 1) {
|
if (basesWithDefaultValues.size <= 1) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,11 +59,15 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
|
|||||||
|
|
||||||
when {
|
when {
|
||||||
!isExplicitOverride -> {
|
!isExplicitOverride -> {
|
||||||
reportDiagnosticForImplicitOverride(k1WouldMiss, declaration.source, parameter, context, reporter)
|
reportDiagnosticForImplicitOverride(
|
||||||
|
k1WouldMiss, declaration.source, function.name, parameter, basesWithDefaultValues, context, reporter
|
||||||
|
)
|
||||||
// Avoid duplicates
|
// Avoid duplicates
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
else -> reportDiagnosticForExplicitOverride(k1WouldMiss, parameter, context, reporter)
|
else -> reportDiagnosticForExplicitOverride(
|
||||||
|
k1WouldMiss, function.name, parameter, basesWithDefaultValues, context, reporter
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,33 +75,37 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
|
|||||||
private fun reportDiagnosticForImplicitOverride(
|
private fun reportDiagnosticForImplicitOverride(
|
||||||
k1WouldMiss: Boolean,
|
k1WouldMiss: Boolean,
|
||||||
source: KtSourceElement?,
|
source: KtSourceElement?,
|
||||||
|
name: Name,
|
||||||
parameter: FirValueParameterSymbol,
|
parameter: FirValueParameterSymbol,
|
||||||
|
basesWithDefaultValues: List<FirNamedFunctionSymbol>,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter,
|
reporter: DiagnosticReporter,
|
||||||
): Unit = when {
|
): Unit = when {
|
||||||
k1WouldMiss -> reporter.reportOn(
|
k1WouldMiss -> reporter.reportOn(
|
||||||
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
||||||
parameter, context,
|
name, parameter, basesWithDefaultValues, context,
|
||||||
)
|
)
|
||||||
else -> reporter.reportOn(
|
else -> reporter.reportOn(
|
||||||
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||||
parameter, context,
|
name, parameter, basesWithDefaultValues, context,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reportDiagnosticForExplicitOverride(
|
private fun reportDiagnosticForExplicitOverride(
|
||||||
k1WouldMiss: Boolean,
|
k1WouldMiss: Boolean,
|
||||||
|
name: Name,
|
||||||
parameter: FirValueParameterSymbol,
|
parameter: FirValueParameterSymbol,
|
||||||
|
basesWithDefaultValues: List<FirNamedFunctionSymbol>,
|
||||||
context: CheckerContext,
|
context: CheckerContext,
|
||||||
reporter: DiagnosticReporter,
|
reporter: DiagnosticReporter,
|
||||||
): Unit = when {
|
): Unit = when {
|
||||||
k1WouldMiss -> reporter.reportOn(
|
k1WouldMiss -> reporter.reportOn(
|
||||||
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
||||||
parameter, context,
|
name, parameter, basesWithDefaultValues, context,
|
||||||
)
|
)
|
||||||
else -> reporter.reportOn(
|
else -> reporter.reportOn(
|
||||||
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
||||||
parameter, context,
|
name, parameter, basesWithDefaultValues, context,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.diagnostics.WhenMissingCase
|
|||||||
import org.jetbrains.kotlin.diagnostics.rendering.ContextIndependentParameterRenderer
|
import org.jetbrains.kotlin.diagnostics.rendering.ContextIndependentParameterRenderer
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.Renderer
|
import org.jetbrains.kotlin.diagnostics.rendering.Renderer
|
||||||
import org.jetbrains.kotlin.fir.FirModuleData
|
import org.jetbrains.kotlin.fir.FirModuleData
|
||||||
|
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.calleeReference
|
import org.jetbrains.kotlin.fir.expressions.calleeReference
|
||||||
@@ -66,6 +67,13 @@ object FirDiagnosticRenderers {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val CALLABLES_FQ_NAMES = object : ContextIndependentParameterRenderer<Collection<FirCallableSymbol<*>>> {
|
||||||
|
override fun render(obj: Collection<FirCallableSymbol<*>>) = "\n" + obj.joinToString("\n") { symbol ->
|
||||||
|
val origin = symbol.containingClassLookupTag()?.classId?.asFqNameString()
|
||||||
|
INDENTATION_UNIT + SYMBOL.render(symbol) + origin?.let { ", defined in $it" }.orEmpty()
|
||||||
|
} + "\n"
|
||||||
|
}
|
||||||
|
|
||||||
val RENDER_COLLECTION_OF_TYPES = Renderer { types: Collection<ConeKotlinType> ->
|
val RENDER_COLLECTION_OF_TYPES = Renderer { types: Collection<ConeKotlinType> ->
|
||||||
types.joinToString(separator = ", ") { type ->
|
types.joinToString(separator = ", ") { type ->
|
||||||
RENDER_TYPE.render(type)
|
RENDER_TYPE.render(type)
|
||||||
|
|||||||
+18
-7
@@ -16,12 +16,14 @@ import org.jetbrains.kotlin.diagnostics.KtDiagnosticRenderers.TO_STRING
|
|||||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticRenderers.VISIBILITY
|
import org.jetbrains.kotlin.diagnostics.KtDiagnosticRenderers.VISIBILITY
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory
|
import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.CLASS_KIND
|
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.CLASS_KIND
|
||||||
|
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.NAME
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.RENDER_POSITION_VARIANCE
|
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.RENDER_POSITION_VARIANCE
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.STRING
|
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.STRING
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.commaSeparated
|
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.commaSeparated
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.LanguageFeatureMessageRenderer
|
import org.jetbrains.kotlin.diagnostics.rendering.LanguageFeatureMessageRenderer
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.Renderer
|
import org.jetbrains.kotlin.diagnostics.rendering.Renderer
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.AMBIGUOUS_CALLS
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.AMBIGUOUS_CALLS
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.CALLABLES_FQ_NAMES
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.CALLEE_NAME
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.CALLEE_NAME
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.DECLARATION_NAME
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.DECLARATION_NAME
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FOR_OPTIONAL_OPERATOR
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.FOR_OPTIONAL_OPERATOR
|
||||||
@@ -1513,28 +1515,37 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
|||||||
FQ_NAMES_IN_TYPES
|
FQ_NAMES_IN_TYPES
|
||||||
)
|
)
|
||||||
|
|
||||||
val multipleDefaultsMessage = "More than one overridden function declares a default value for ''{0}''."
|
val multipleDefaultsMessage = "More than one function overridden by ''{0}'' declares a default value for ''{1}'': {2}"
|
||||||
val multipleDefaultsNotAllowed = " As the compiler can not make sure these values agree, this is not allowed."
|
val multipleDefaultsNotAllowed = "As the compiler can not make sure these values agree, this is not allowed."
|
||||||
map.put(
|
map.put(
|
||||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
||||||
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
||||||
SYMBOL
|
NAME,
|
||||||
|
SYMBOL,
|
||||||
|
CALLABLES_FQ_NAMES,
|
||||||
)
|
)
|
||||||
map.put(
|
map.put(
|
||||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||||
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
||||||
SYMBOL
|
NAME,
|
||||||
|
SYMBOL,
|
||||||
|
CALLABLES_FQ_NAMES,
|
||||||
)
|
)
|
||||||
val multipleDefaultsDiscouraged = " As the compiler can not make sure these values agree, this will be prohibited in the Future."
|
val multipleDefaultsDiscouraged = "As the compiler can not make sure these values agree, this will be prohibited in the future." +
|
||||||
|
" See: https://youtrack.jetbrains.com/issue/KT-36188"
|
||||||
map.put(
|
map.put(
|
||||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
||||||
multipleDefaultsMessage + multipleDefaultsDiscouraged,
|
multipleDefaultsMessage + multipleDefaultsDiscouraged,
|
||||||
SYMBOL
|
NAME,
|
||||||
|
SYMBOL,
|
||||||
|
CALLABLES_FQ_NAMES,
|
||||||
)
|
)
|
||||||
map.put(
|
map.put(
|
||||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
||||||
multipleDefaultsMessage + multipleDefaultsDiscouraged,
|
multipleDefaultsMessage + multipleDefaultsDiscouraged,
|
||||||
SYMBOL
|
NAME,
|
||||||
|
SYMBOL,
|
||||||
|
CALLABLES_FQ_NAMES,
|
||||||
)
|
)
|
||||||
|
|
||||||
map.put(TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS, "Type alias expanded to malformed type ''{0}''", RENDER_TYPE)
|
map.put(TYPEALIAS_EXPANDS_TO_ARRAY_OF_NOTHINGS, "Type alias expanded to malformed type ''{0}''", RENDER_TYPE)
|
||||||
|
|||||||
+1
-1
@@ -126,4 +126,4 @@ private fun StringBuilder.renderIncompatibleClassScopes(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val INDENTATION_UNIT = " "
|
internal const val INDENTATION_UNIT = " "
|
||||||
|
|||||||
+2
-2
@@ -17,10 +17,10 @@ interface B {
|
|||||||
fun foo(@An a: @An Int = @An 2)
|
fun foo(@An a: @An Int = @An 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE("@An() a: @R|An|() Int = ...")!>class AB1<!> : A, B
|
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE("foo; @An() a: @R|An|() Int = ...; @An() fun foo(@An() a: @R|An|() Int = ...): Unit, defined in A @An() fun foo(@An() a: @R|An|() Int = ...): Unit, defined in B")!>class AB1<!> : A, B
|
||||||
|
|
||||||
@An
|
@An
|
||||||
class AB2 : A, B {
|
class AB2 : A, B {
|
||||||
@An
|
@An
|
||||||
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES("@An() a: @R|An|() Int")!>@An a: @An Int<!>) {}
|
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES("foo; @An() a: @R|An|() Int; @An() fun foo(@An() a: @R|An|() Int = ...): Unit, defined in A @An() fun foo(@An() a: @R|An|() Int = ...): Unit, defined in B")!>@An a: @An Int<!>) {}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user