Minor. Extract subinterface for specific strategy

It contains only methods related to explicitly declared overrides
This commit is contained in:
Denis Zharkov
2016-09-26 20:05:12 +03:00
parent 0daa2d872a
commit ddb7a6aa13
@@ -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() { void doReportErrors() {
if (!classCanHaveAbstractMembers(classDescriptor)) { if (!classCanHaveAbstractMembers(classDescriptor)) {
if (!abstractInBaseClassNoImpl.isEmpty()) { if (!abstractInBaseClassNoImpl.isEmpty()) {
@@ -576,8 +564,11 @@ public class OverrideResolver {
void returnTypeMismatchOnOverride(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden); void returnTypeMismatchOnOverride(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden);
void propertyTypeMismatchOnOverride(@NotNull PropertyDescriptor overriding, @NotNull PropertyDescriptor overridden); void propertyTypeMismatchOnOverride(@NotNull PropertyDescriptor overriding, @NotNull PropertyDescriptor overridden);
void varOverriddenByVal(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor 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 nothingToOverride(@NotNull CallableMemberDescriptor overriding);
void cannotOverrideInvisibleMember(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor invisibleOverridden);
} }
private void checkOverrideForMember(@NotNull final CallableMemberDescriptor declared) { private void checkOverrideForMember(@NotNull final CallableMemberDescriptor declared) {
@@ -602,7 +593,7 @@ public class OverrideResolver {
Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors();
if (hasOverrideNode) { if (hasOverrideNode) {
checkOverridesForMemberMarkedOverride(declared, true, new CheckOverrideReportStrategy() { checkOverridesForMemberMarkedOverride(declared, new CheckOverrideReportForDeclaredMemberStrategy() {
private boolean finalOverriddenError = false; private boolean finalOverriddenError = false;
private boolean typeMismatchError = false; private boolean typeMismatchError = false;
private boolean kindMismatchError = false; private boolean kindMismatchError = false;
@@ -688,14 +679,13 @@ public class OverrideResolver {
private static void checkOverridesForMemberMarkedOverride( private static void checkOverridesForMemberMarkedOverride(
@NotNull CallableMemberDescriptor declared, @NotNull CallableMemberDescriptor declared,
boolean checkIfOverridesNothing, @NotNull CheckOverrideReportForDeclaredMemberStrategy reportError
@NotNull CheckOverrideReportStrategy reportError
) { ) {
Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors();
checkOverridesForMember(declared, overriddenDescriptors, reportError); checkOverridesForMember(declared, overriddenDescriptors, reportError);
if (checkIfOverridesNothing && overriddenDescriptors.isEmpty()) { if (overriddenDescriptors.isEmpty()) {
DeclarationDescriptor containingDeclaration = declared.getContainingDeclaration(); DeclarationDescriptor containingDeclaration = declared.getContainingDeclaration();
assert containingDeclaration instanceof ClassDescriptor : "Overrides may only be resolved in a class, but " + declared + " comes from " + containingDeclaration; assert containingDeclaration instanceof ClassDescriptor : "Overrides may only be resolved in a class, but " + declared + " comes from " + containingDeclaration;
ClassDescriptor declaringClass = (ClassDescriptor) containingDeclaration; ClassDescriptor declaringClass = (ClassDescriptor) containingDeclaration;
@@ -799,7 +789,7 @@ public class OverrideResolver {
private void checkOverrideForComponentFunction(@NotNull final CallableMemberDescriptor componentFunction) { private void checkOverrideForComponentFunction(@NotNull final CallableMemberDescriptor componentFunction) {
final PsiElement dataModifier = findDataModifierForDataClass(componentFunction.getContainingDeclaration()); final PsiElement dataModifier = findDataModifierForDataClass(componentFunction.getContainingDeclaration());
checkOverridesForMemberMarkedOverride(componentFunction, false, new CheckOverrideReportStrategy() { checkOverridesForMember(componentFunction, componentFunction.getOverriddenDescriptors(), new CheckOverrideReportStrategy() {
private boolean overrideConflict = false; private boolean overrideConflict = false;
@Override @Override
@@ -827,16 +817,6 @@ public class OverrideResolver {
public void varOverriddenByVal(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden) { public void varOverriddenByVal(@NotNull CallableMemberDescriptor overriding, @NotNull CallableMemberDescriptor overridden) {
throw new IllegalStateException("Component functions are not properties"); 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");
}
}); });
} }