Minor. Extract subinterface for specific strategy
It contains only methods related to explicitly declared overrides
This commit is contained in:
@@ -277,18 +277,6 @@ public class OverrideResolver {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cannotOverrideInvisibleMember(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor invisibleOverridden) {
|
||||
assert overriding.getKind() == DELEGATION : "Delegate expected, got " + overriding + " of kind " + overriding.getKind();
|
||||
assert overriding.getKind() != DELEGATION : "Delegated member can't override an invisible member; " + invisibleOverridden;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nothingToOverride(@NotNull CallableMemberDescriptor overriding) {
|
||||
assert overriding.getKind() == DELEGATION : "Delegate expected, got " + overriding + " of kind " + overriding.getKind();
|
||||
assert overriding.getKind() != DELEGATION : "Delegated member can't override nothing; " + overriding;
|
||||
}
|
||||
|
||||
void doReportErrors() {
|
||||
if (!classCanHaveAbstractMembers(classDescriptor)) {
|
||||
if (!abstractInBaseClassNoImpl.isEmpty()) {
|
||||
@@ -576,8 +564,11 @@ public class OverrideResolver {
|
||||
void returnTypeMismatchOnOverride(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden);
|
||||
void propertyTypeMismatchOnOverride(@NotNull PropertyDescriptor overriding, @NotNull PropertyDescriptor overridden);
|
||||
void varOverriddenByVal(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden);
|
||||
void cannotOverrideInvisibleMember(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor invisibleOverridden);
|
||||
}
|
||||
|
||||
private interface CheckOverrideReportForDeclaredMemberStrategy extends CheckOverrideReportStrategy {
|
||||
void nothingToOverride(@NotNull CallableMemberDescriptor overriding);
|
||||
void cannotOverrideInvisibleMember(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor invisibleOverridden);
|
||||
}
|
||||
|
||||
private void checkOverrideForMember(@NotNull final CallableMemberDescriptor declared) {
|
||||
@@ -602,7 +593,7 @@ public class OverrideResolver {
|
||||
Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors();
|
||||
|
||||
if (hasOverrideNode) {
|
||||
checkOverridesForMemberMarkedOverride(declared, true, new CheckOverrideReportStrategy() {
|
||||
checkOverridesForMemberMarkedOverride(declared, new CheckOverrideReportForDeclaredMemberStrategy() {
|
||||
private boolean finalOverriddenError = false;
|
||||
private boolean typeMismatchError = false;
|
||||
private boolean kindMismatchError = false;
|
||||
@@ -688,14 +679,13 @@ public class OverrideResolver {
|
||||
|
||||
private static void checkOverridesForMemberMarkedOverride(
|
||||
@NotNull CallableMemberDescriptor declared,
|
||||
boolean checkIfOverridesNothing,
|
||||
@NotNull CheckOverrideReportStrategy reportError
|
||||
@NotNull CheckOverrideReportForDeclaredMemberStrategy reportError
|
||||
) {
|
||||
Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors();
|
||||
|
||||
checkOverridesForMember(declared, overriddenDescriptors, reportError);
|
||||
|
||||
if (checkIfOverridesNothing && overriddenDescriptors.isEmpty()) {
|
||||
if (overriddenDescriptors.isEmpty()) {
|
||||
DeclarationDescriptor containingDeclaration = declared.getContainingDeclaration();
|
||||
assert containingDeclaration instanceof ClassDescriptor : "Overrides may only be resolved in a class, but " + declared + " comes from " + containingDeclaration;
|
||||
ClassDescriptor declaringClass = (ClassDescriptor) containingDeclaration;
|
||||
@@ -799,7 +789,7 @@ public class OverrideResolver {
|
||||
private void checkOverrideForComponentFunction(@NotNull final CallableMemberDescriptor componentFunction) {
|
||||
final PsiElement dataModifier = findDataModifierForDataClass(componentFunction.getContainingDeclaration());
|
||||
|
||||
checkOverridesForMemberMarkedOverride(componentFunction, false, new CheckOverrideReportStrategy() {
|
||||
checkOverridesForMember(componentFunction, componentFunction.getOverriddenDescriptors(), new CheckOverrideReportStrategy() {
|
||||
private boolean overrideConflict = false;
|
||||
|
||||
@Override
|
||||
@@ -827,16 +817,6 @@ public class OverrideResolver {
|
||||
public void varOverriddenByVal(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden) {
|
||||
throw new IllegalStateException("Component functions are not properties");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cannotOverrideInvisibleMember(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor invisibleOverridden) {
|
||||
throw new IllegalStateException("CANNOT_OVERRIDE_INVISIBLE_MEMBER should be reported on the corresponding property");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nothingToOverride(@NotNull CallableMemberDescriptor overriding) {
|
||||
throw new IllegalStateException("Component functions are OK to override nothing");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user