[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 ->
|
||||
MultipleDefaultsInheritedFromSupertypesImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||
firDiagnostic.c.map { firCallableSymbol ->
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||
},
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||
firDiagnostic.c.map { firCallableSymbol ->
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||
},
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.errorFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||
firDiagnostic.c.map { firCallableSymbol ->
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||
},
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION.warningFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||
firDiagnostic.c.map { firCallableSymbol ->
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||
},
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.errorFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||
firDiagnostic.c.map { firCallableSymbol ->
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||
},
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION.warningFactory) { firDiagnostic ->
|
||||
MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a),
|
||||
firDiagnostic.a,
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b),
|
||||
firDiagnostic.c.map { firCallableSymbol ->
|
||||
firSymbolBuilder.callableBuilder.buildCallableSymbol(firCallableSymbol)
|
||||
},
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
|
||||
+12
@@ -1861,32 +1861,44 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypes : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypes::class
|
||||
val name: Name
|
||||
val valueParameter: KtSymbol
|
||||
val baseFunctions: List<KtCallableSymbol>
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride::class
|
||||
val name: Name
|
||||
val valueParameter: KtSymbol
|
||||
val baseFunctions: List<KtCallableSymbol>
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesDeprecationError : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationError::class
|
||||
val name: Name
|
||||
val valueParameter: KtSymbol
|
||||
val baseFunctions: List<KtCallableSymbol>
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesDeprecationWarning : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesDeprecationWarning::class
|
||||
val name: Name
|
||||
val valueParameter: KtSymbol
|
||||
val baseFunctions: List<KtCallableSymbol>
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError::class
|
||||
val name: Name
|
||||
val valueParameter: KtSymbol
|
||||
val baseFunctions: List<KtCallableSymbol>
|
||||
}
|
||||
|
||||
interface MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning : KtFirDiagnostic<KtElement> {
|
||||
override val diagnosticClass get() = MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarning::class
|
||||
val name: Name
|
||||
val valueParameter: KtSymbol
|
||||
val baseFunctions: List<KtCallableSymbol>
|
||||
}
|
||||
|
||||
interface TypealiasExpandsToArrayOfNothings : KtFirDiagnostic<KtElement> {
|
||||
|
||||
+12
@@ -2233,37 +2233,49 @@ internal class CannotChangeAccessPrivilegeImpl(
|
||||
) : KtAbstractFirDiagnostic<KtModifierListOwner>(firDiagnostic, token), KtFirDiagnostic.CannotChangeAccessPrivilege
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesImpl(
|
||||
override val name: Name,
|
||||
override val valueParameter: KtSymbol,
|
||||
override val baseFunctions: List<KtCallableSymbol>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypes
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideImpl(
|
||||
override val name: Name,
|
||||
override val valueParameter: KtSymbol,
|
||||
override val baseFunctions: List<KtCallableSymbol>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverride
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesDeprecationErrorImpl(
|
||||
override val name: Name,
|
||||
override val valueParameter: KtSymbol,
|
||||
override val baseFunctions: List<KtCallableSymbol>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationError
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesDeprecationWarningImpl(
|
||||
override val name: Name,
|
||||
override val valueParameter: KtSymbol,
|
||||
override val baseFunctions: List<KtCallableSymbol>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesDeprecationWarning
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationErrorImpl(
|
||||
override val name: Name,
|
||||
override val valueParameter: KtSymbol,
|
||||
override val baseFunctions: List<KtCallableSymbol>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : KtAbstractFirDiagnostic<KtElement>(firDiagnostic, token), KtFirDiagnostic.MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationError
|
||||
|
||||
internal class MultipleDefaultsInheritedFromSupertypesWhenNoExplicitOverrideDeprecationWarningImpl(
|
||||
override val name: Name,
|
||||
override val valueParameter: KtSymbol,
|
||||
override val baseFunctions: List<KtCallableSymbol>,
|
||||
firDiagnostic: KtPsiDiagnostic,
|
||||
token: KtLifetimeToken,
|
||||
) : 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) {
|
||||
parameter<Name>("name")
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||
}
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE by error<KtElement>(PositioningStrategy.DECLARATION_NAME) {
|
||||
parameter<Name>("name")
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||
}
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION by deprecationError<KtElement>(
|
||||
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
||||
PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT
|
||||
) {
|
||||
parameter<Name>("name")
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||
}
|
||||
val MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION by deprecationError<KtElement>(
|
||||
LanguageFeature.ProhibitAllMultipleDefaultsInheritedFromSupertypes,
|
||||
PositioningStrategy.DECLARATION_NAME
|
||||
) {
|
||||
parameter<Name>("name")
|
||||
parameter<FirValueParameterSymbol>("valueParameter")
|
||||
parameter<List<FirCallableSymbol<*>>>("baseFunctions")
|
||||
}
|
||||
|
||||
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 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 MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES by error1<KtElement, FirValueParameterSymbol>(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_DEPRECATION by deprecationError1<KtElement, FirValueParameterSymbol>(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 by error3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
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 deprecationError3<KtElement, Name, FirValueParameterSymbol, List<FirCallableSymbol<*>>>(ProhibitAllMultipleDefaultsInheritedFromSupertypes, SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
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 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)
|
||||
|
||||
+17
-8
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.isSubstitutionOverride
|
||||
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecker() {
|
||||
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
@@ -48,9 +49,9 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
|
||||
val overriddenFunctionsK1WouldConsider = overriddenFunctions.filter { it.containingClassLookupTag() in immediateSupertypes }
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@@ -58,11 +59,15 @@ object FirMultipleDefaultsInheritedFromSupertypesChecker : FirRegularClassChecke
|
||||
|
||||
when {
|
||||
!isExplicitOverride -> {
|
||||
reportDiagnosticForImplicitOverride(k1WouldMiss, declaration.source, parameter, context, reporter)
|
||||
reportDiagnosticForImplicitOverride(
|
||||
k1WouldMiss, declaration.source, function.name, parameter, basesWithDefaultValues, context, reporter
|
||||
)
|
||||
// Avoid duplicates
|
||||
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(
|
||||
k1WouldMiss: Boolean,
|
||||
source: KtSourceElement?,
|
||||
name: Name,
|
||||
parameter: FirValueParameterSymbol,
|
||||
basesWithDefaultValues: List<FirNamedFunctionSymbol>,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
): Unit = when {
|
||||
k1WouldMiss -> reporter.reportOn(
|
||||
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
||||
parameter, context,
|
||||
name, parameter, basesWithDefaultValues, context,
|
||||
)
|
||||
else -> reporter.reportOn(
|
||||
source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||
parameter, context,
|
||||
name, parameter, basesWithDefaultValues, context,
|
||||
)
|
||||
}
|
||||
|
||||
private fun reportDiagnosticForExplicitOverride(
|
||||
k1WouldMiss: Boolean,
|
||||
name: Name,
|
||||
parameter: FirValueParameterSymbol,
|
||||
basesWithDefaultValues: List<FirNamedFunctionSymbol>,
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter,
|
||||
): Unit = when {
|
||||
k1WouldMiss -> reporter.reportOn(
|
||||
parameter.source, FirErrors.MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
||||
parameter, context,
|
||||
name, parameter, basesWithDefaultValues, context,
|
||||
)
|
||||
else -> reporter.reportOn(
|
||||
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.Renderer
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
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> ->
|
||||
types.joinToString(separator = ", ") { 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.rendering.BaseDiagnosticRendererFactory
|
||||
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.STRING
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.commaSeparated
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.LanguageFeatureMessageRenderer
|
||||
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.CALLABLES_FQ_NAMES
|
||||
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.FOR_OPTIONAL_OPERATOR
|
||||
@@ -1513,28 +1515,37 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
FQ_NAMES_IN_TYPES
|
||||
)
|
||||
|
||||
val multipleDefaultsMessage = "More than one overridden function declares a default value for ''{0}''."
|
||||
val multipleDefaultsNotAllowed = " As the compiler can not make sure these values agree, this is not allowed."
|
||||
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."
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES,
|
||||
multipleDefaultsMessage + multipleDefaultsNotAllowed,
|
||||
SYMBOL
|
||||
NAME,
|
||||
SYMBOL,
|
||||
CALLABLES_FQ_NAMES,
|
||||
)
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE,
|
||||
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(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION,
|
||||
multipleDefaultsMessage + multipleDefaultsDiscouraged,
|
||||
SYMBOL
|
||||
NAME,
|
||||
SYMBOL,
|
||||
CALLABLES_FQ_NAMES,
|
||||
)
|
||||
map.put(
|
||||
MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE_DEPRECATION,
|
||||
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)
|
||||
|
||||
+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)
|
||||
}
|
||||
|
||||
<!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
|
||||
class AB2 : A, B {
|
||||
@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