From 8147a88353cf26bf2222fb563576b4ac9997c760 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 29 Apr 2021 12:35:05 +0300 Subject: [PATCH] Cleanup: OverrideResolver.kt --- .../kotlin/resolve/OverrideResolver.kt | 110 +++++++++--------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt index 4021bc730d6..ab0f3460a12 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.kt @@ -253,9 +253,9 @@ class OverrideResolver( ) { assert(delegate.kind == DELEGATION) { "Delegate expected, got " + delegate + " of kind " + delegate.kind } - if (!onceErrorsReported.contains(diagnosticFactory) && (relevantDiagnosticFromInheritance == null || !onceErrorsReported.contains( - relevantDiagnosticFromInheritance - ))) { + if (!onceErrorsReported.contains(diagnosticFactory) && + (relevantDiagnosticFromInheritance == null || !onceErrorsReported.contains(relevantDiagnosticFromInheritance)) + ) { onceErrorsReported.add(diagnosticFactory) trace.report(diagnosticFactory.on(klass, delegate, overridden)) } @@ -313,7 +313,7 @@ class OverrideResolver( } val member = DescriptorToSourceUtils.descriptorToDeclaration(declared) as KtNamedDeclaration? - ?: throw IllegalStateException("declared descriptor is not resolved to declaration: " + declared) + ?: throw IllegalStateException("declared descriptor is not resolved to declaration: $declared") val modifierList = member.modifierList val hasOverrideNode = modifierList != null && modifierList.hasModifier(KtTokens.OVERRIDE_KEYWORD) @@ -322,53 +322,57 @@ class OverrideResolver( if (hasOverrideNode) { checkOverridesForMemberMarkedOverride( declared, kotlinTypeRefiner, object : CheckOverrideReportForDeclaredMemberStrategy { - private var finalOverriddenError = false - private var typeMismatchError = false - private var kindMismatchError = false + private var finalOverriddenError = false + private var typeMismatchError = false + private var kindMismatchError = false - override fun overridingFinalMember(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { - if (!finalOverriddenError) { - finalOverriddenError = true - trace.report(OVERRIDING_FINAL_MEMBER.on(member, overridden, overridden.containingDeclaration)) - } - } - - override fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { - if (!typeMismatchError) { - typeMismatchError = true - - when { - overridden is PropertyDescriptor && overridden.isVar -> - trace.report(VAR_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden)) - - overridden is PropertyDescriptor && !overridden.isVar -> - 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) - )) + override fun overridingFinalMember(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { + if (!finalOverriddenError) { + finalOverriddenError = true + trace.report(OVERRIDING_FINAL_MEMBER.on(member, overridden, overridden.containingDeclaration)) } } - } - override fun varOverriddenByVal(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { - if (!kindMismatchError) { - kindMismatchError = true - trace.report(VAR_OVERRIDDEN_BY_VAL.on(member, declared as PropertyDescriptor, overridden as PropertyDescriptor)) + override fun returnTypeMismatchOnOverride(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { + if (!typeMismatchError) { + typeMismatchError = true + + when { + overridden is PropertyDescriptor && overridden.isVar -> + trace.report(VAR_TYPE_MISMATCH_ON_OVERRIDE.on(member, declared, overridden)) + + overridden is PropertyDescriptor && !overridden.isVar -> + 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) + ) + ) + } + } + } + + override fun varOverriddenByVal(overriding: CallableMemberDescriptor, overridden: CallableMemberDescriptor) { + if (!kindMismatchError) { + kindMismatchError = true + trace.report(VAR_OVERRIDDEN_BY_VAL.on(member, declared as PropertyDescriptor, overridden as PropertyDescriptor)) + } + } + + override fun cannotOverrideInvisibleMember( + overriding: CallableMemberDescriptor, + invisibleOverridden: CallableMemberDescriptor + ) { + trace.report(CANNOT_OVERRIDE_INVISIBLE_MEMBER.on(member, declared, invisibleOverridden)) + } + + override fun nothingToOverride(overriding: CallableMemberDescriptor) { + trace.report(NOTHING_TO_OVERRIDE.on(member, declared)) } } - - override fun cannotOverrideInvisibleMember( - overriding: CallableMemberDescriptor, - invisibleOverridden: CallableMemberDescriptor - ) { - trace.report(CANNOT_OVERRIDE_INVISIBLE_MEMBER.on(member, declared, invisibleOverridden)) - } - - override fun nothingToOverride(overriding: CallableMemberDescriptor) { - trace.report(NOTHING_TO_OVERRIDE.on(member, declared)) - } - }) + ) } else if (!overriddenDescriptors.isEmpty() && !overridesBackwardCompatibilityHelper.overrideCanBeOmitted(declared)) { val overridden = overriddenDescriptors.first() trace.report(VIRTUAL_MEMBER_HIDDEN.on(member, declared, overridden, overridden.containingDeclaration)) @@ -458,7 +462,7 @@ class OverrideResolver( private fun checkNameAndDefaultForDeclaredParameter(descriptor: ValueParameterDescriptor, multipleDefaultsInSuper: Boolean) { val parameter = DescriptorToSourceUtils.descriptorToDeclaration(descriptor) as? KtParameter - ?: error("Declaration not found for parameter: " + descriptor) + ?: error("Declaration not found for parameter: $descriptor") if (descriptor.declaresDefaultValue()) { trace.report(DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE.on(parameter)) @@ -489,7 +493,7 @@ class OverrideResolver( ) { val containingClass = containingFunction.containingDeclaration val classElement = DescriptorToSourceUtils.descriptorToDeclaration(containingClass) as KtClassOrObject? - ?: error("Declaration not found for class: " + containingClass) + ?: error("Declaration not found for class: $containingClass") if (multipleDefaultsInSuper) { trace.report(MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE.on(classElement, descriptor)) @@ -561,7 +565,7 @@ class OverrideResolver( } fun createCannotInferVisibilityReporter(trace: BindingTrace): Function1 { - return fun(descriptor: CallableMemberDescriptor): Unit { + return fun(descriptor: CallableMemberDescriptor) { val reportOn: DeclarationDescriptor = when { descriptor.kind == FAKE_OVERRIDE || descriptor.kind == DELEGATION -> DescriptorUtils.getContainingClass(descriptor) ?: throw AssertionError("Class member expected: $descriptor") @@ -575,7 +579,7 @@ class OverrideResolver( if (element is KtDeclaration) { trace.report(CANNOT_INFER_VISIBILITY.on(element, descriptor)) } - return Unit + return } } @@ -599,7 +603,9 @@ class OverrideResolver( ) { for (member in DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope)) { if (member is CallableMemberDescriptor) { - checkInheritedAndDelegatedSignatures(member, inheritedReportStrategy, overrideReportStrategyForDelegates, kotlinTypeRefiner) + checkInheritedAndDelegatedSignatures( + member, inheritedReportStrategy, overrideReportStrategyForDelegates, kotlinTypeRefiner + ) } } } @@ -827,7 +833,7 @@ class OverrideResolver( for (descriptor in directOverriddenDescriptors) { val overriddenDeclarations = OverridingUtil.getOverriddenDeclarations(descriptor) val filteredOverrides = OverridingUtil.filterOutOverridden(overriddenDeclarations) - overriddenDeclarationsByDirectParent.put(descriptor, LinkedHashSet(filteredOverrides)) + overriddenDeclarationsByDirectParent[descriptor] = LinkedHashSet(filteredOverrides) } return overriddenDeclarationsByDirectParent } @@ -947,7 +953,7 @@ class OverrideResolver( } } - throw IllegalStateException("No data modifier is found for data class " + dataClass) + throw IllegalStateException("No data modifier is found for data class $dataClass") } private fun findInvisibleOverriddenDescriptor(