diff options
Diffstat (limited to 'common/src/main/java/com/google/auto/common/Overrides.java')
-rw-r--r-- | common/src/main/java/com/google/auto/common/Overrides.java | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/common/src/main/java/com/google/auto/common/Overrides.java b/common/src/main/java/com/google/auto/common/Overrides.java index 775c304a..cdcd741d 100644 --- a/common/src/main/java/com/google/auto/common/Overrides.java +++ b/common/src/main/java/com/google/auto/common/Overrides.java @@ -117,7 +117,7 @@ abstract class Overrides { // can't be overridden. return false; } - if (!(overridden.getEnclosingElement() instanceof TypeElement)) { + if (!MoreElements.isType(overridden.getEnclosingElement())) { return false; // We don't know how this could happen but we avoid blowing up if it does. } @@ -170,9 +170,14 @@ abstract class Overrides { return false; } } else { - return in.getKind().isInterface(); - // Method mI in or inherited by interface I (JLS 9.4.1.1). We've already checked everything. + // Method mI in or inherited by interface I (JLS 9.4.1.1). We've already checked everything, + // except that `overrider` must also be in a subinterface of `overridden`. // If this is not an interface then we don't know what it is so we say no. + TypeElement overriderType = MoreElements.asType(overrider.getEnclosingElement()); + return in.getKind().isInterface() + && typeUtils.isSubtype( + typeUtils.erasure(overriderType.asType()), + typeUtils.erasure(overriddenType.asType())); } } |