Minor: unify error reporting for fun/properties overriding
This commit is contained in:
@@ -203,17 +203,13 @@ class OverrideResolver(
|
|||||||
overriding: CallableMemberDescriptor,
|
overriding: CallableMemberDescriptor,
|
||||||
overridden: CallableMemberDescriptor
|
overridden: CallableMemberDescriptor
|
||||||
) {
|
) {
|
||||||
reportDelegationProblemIfRequired(
|
val (diagnosticFactory, relevantDiagnosticFromInheritance) = if (overridden is PropertyDescriptor)
|
||||||
RETURN_TYPE_MISMATCH_BY_DELEGATION, RETURN_TYPE_MISMATCH_ON_INHERITANCE, overriding, overridden
|
PROPERTY_TYPE_MISMATCH_BY_DELEGATION to PROPERTY_TYPE_MISMATCH_ON_INHERITANCE
|
||||||
)
|
else
|
||||||
}
|
RETURN_TYPE_MISMATCH_BY_DELEGATION to RETURN_TYPE_MISMATCH_ON_INHERITANCE
|
||||||
|
|
||||||
override fun propertyTypeMismatchOnOverride(
|
|
||||||
overriding: PropertyDescriptor,
|
|
||||||
overridden: PropertyDescriptor
|
|
||||||
) {
|
|
||||||
reportDelegationProblemIfRequired(
|
reportDelegationProblemIfRequired(
|
||||||
PROPERTY_TYPE_MISMATCH_BY_DELEGATION, PROPERTY_TYPE_MISMATCH_ON_INHERITANCE, overriding, overridden
|
diagnosticFactory, relevantDiagnosticFromInheritance, overriding, overridden
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,7 +262,6 @@ class OverrideResolver(
|
|||||||
private interface CheckOverrideReportStrategy {
|
private interface CheckOverrideReportStrategy {
|
||||||
fun overridingFinalMember(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor)
|
fun overridingFinalMember(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor)
|
||||||
fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor)
|
fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor)
|
||||||
fun propertyTypeMismatchOnOverride(overriding: PropertyDescriptor, overridden: PropertyDescriptor)
|
|
||||||
fun varOverriddenByVal(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor)
|
fun varOverriddenByVal(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,19 +308,17 @@ class OverrideResolver(
|
|||||||
override fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) {
|
override fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) {
|
||||||
if (!typeMismatchError) {
|
if (!typeMismatchError) {
|
||||||
typeMismatchError = true
|
typeMismatchError = true
|
||||||
trace.report(RETURN_TYPE_MISMATCH_ON_OVERRIDE.on(
|
|
||||||
member, declared, DeclarationWithDiagnosticComponents(overridden, platformSpecificDiagnosticComponents)
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun propertyTypeMismatchOnOverride(overriding: PropertyDescriptor, overridden: PropertyDescriptor) {
|
when {
|
||||||
if (!typeMismatchError) {
|
overridden is PropertyDescriptor && overridden.isVar ->
|
||||||
typeMismatchError = true
|
trace.report(VAR_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden))
|
||||||
if (overridden.isVar) {
|
|
||||||
trace.report(VAR_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden))
|
overridden is PropertyDescriptor && !overridden.isVar ->
|
||||||
} else {
|
trace.report(PROPERTY_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden))
|
||||||
trace.report(PROPERTY_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden))
|
|
||||||
|
else -> trace.report(RETURN_TYPE_MISMATCH_ON_OVERRIDE.on(
|
||||||
|
member, declared, DeclarationWithDiagnosticComponents(overridden, platformSpecificDiagnosticComponents)
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -374,10 +367,6 @@ class OverrideResolver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun propertyTypeMismatchOnOverride(overriding: PropertyDescriptor, overridden: PropertyDescriptor) {
|
|
||||||
throw IllegalStateException("Component functions are not properties")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun varOverriddenByVal(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) {
|
override fun varOverriddenByVal(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) {
|
||||||
throw IllegalStateException("Component functions are not properties")
|
throw IllegalStateException("Component functions are not properties")
|
||||||
}
|
}
|
||||||
@@ -839,20 +828,16 @@ class OverrideResolver(
|
|||||||
reportError: CheckOverrideReportStrategy,
|
reportError: CheckOverrideReportStrategy,
|
||||||
kotlinTypeRefiner: KotlinTypeRefiner
|
kotlinTypeRefiner: KotlinTypeRefiner
|
||||||
) {
|
) {
|
||||||
val propertyMemberDescriptor = if (memberDescriptor is PropertyDescriptor) memberDescriptor else null
|
|
||||||
|
|
||||||
for (overridden in overriddenDescriptors) {
|
for (overridden in overriddenDescriptors) {
|
||||||
if (overridden.modality == Modality.FINAL) {
|
if (overridden.modality == Modality.FINAL) {
|
||||||
reportError.overridingFinalMember(memberDescriptor, overridden)
|
reportError.overridingFinalMember(memberDescriptor, overridden)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isReturnTypeOkForOverride(overridden, memberDescriptor, kotlinTypeRefiner)) {
|
if (!isReturnTypeOkForOverride(overridden, memberDescriptor, kotlinTypeRefiner)) {
|
||||||
if (memberDescriptor is PropertyDescriptor) {
|
require(memberDescriptor !is PropertyDescriptor || overridden is PropertyDescriptor) {
|
||||||
require(overridden is PropertyDescriptor) { "$overridden is overridden by property $propertyMemberDescriptor" }
|
"$overridden is overridden by property $memberDescriptor"
|
||||||
reportError.propertyTypeMismatchOnOverride(memberDescriptor, overridden)
|
|
||||||
} else {
|
|
||||||
reportError.returnTypeMismatchOnOverride(memberDescriptor, overridden)
|
|
||||||
}
|
}
|
||||||
|
reportError.returnTypeMismatchOnOverride(memberDescriptor, overridden)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (checkPropertyKind(overridden, true) && checkPropertyKind(memberDescriptor, false)) {
|
if (checkPropertyKind(overridden, true) && checkPropertyKind(memberDescriptor, false)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user