From cf666135b264130f44a7de837ba7e60e5dec04b8 Mon Sep 17 00:00:00 2001 From: darcy Date: Wed, 20 Mar 2013 15:21:14 -0700 Subject: [PATCH] 8010427: Refine Method.isDefault implementation Reviewed-by: acorn, dlsmith --- src/share/classes/java/lang/reflect/Method.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/share/classes/java/lang/reflect/Method.java b/src/share/classes/java/lang/reflect/Method.java index 30e764694..09438fbeb 100644 --- a/src/share/classes/java/lang/reflect/Method.java +++ b/src/share/classes/java/lang/reflect/Method.java @@ -522,16 +522,19 @@ public final class Method extends Executable { * Returns {@code true} if this method is a default * method; returns {@code false} otherwise. * - * A default method is a non-abstract method, that is, a method - * with a body, declared in an interface type. + * A default method is a public non-abstract instance method, that + * is, a non-static method with a body, declared in an interface + * type. * * @return true if and only if this method is a default * method as defined by the Java Language Specification. * @since 1.8 */ public boolean isDefault() { - return (getModifiers() & Modifier.ABSTRACT) == 0 && - getDeclaringClass().isInterface(); + // Default methods are public non-abstract instance methods + // declared in an interface. + return ((getModifiers() & (Modifier.ABSTRACT | Modifier.PUBLIC | Modifier.STATIC)) == + Modifier.PUBLIC) && getDeclaringClass().isInterface(); } // NOTE that there is no synchronization used here. It is correct -- GitLab