diff -r 2013982bee34 -r 12cf6bfd8c05 src/share/classes/com/sun/tools/javac/comp/Check.java --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Tue Oct 16 21:03:36 2012 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Oct 17 16:43:26 2012 +0100 @@ -1121,8 +1121,14 @@ mask = PRIVATE; } else mask = ConstructorFlags; - } else if ((sym.owner.flags_field & INTERFACE) != 0) - mask = implicit = InterfaceMethodFlags; + } else if ((sym.owner.flags_field & INTERFACE) != 0) { + if ((flags & DEFAULT) != 0) { + mask = InterfaceDefaultMethodMask; + implicit = PUBLIC; + } else { + mask = implicit = InterfaceMethodFlags; + } + } else { mask = MethodFlags; } @@ -1169,7 +1175,7 @@ default: throw new AssertionError(); } - long illegal = flags & StandardFlags & ~mask; + long illegal = flags & ExtendedStandardFlags & ~mask; if (illegal != 0) { if ((illegal & INTERFACE) != 0) { log.error(pos, "intf.not.allowed.here"); @@ -1185,7 +1191,7 @@ // in the presence of inner classes. Should it be deleted here? checkDisjoint(pos, flags, ABSTRACT, - PRIVATE | STATIC)) + PRIVATE | STATIC | DEFAULT)) && checkDisjoint(pos, flags, ABSTRACT | INTERFACE, @@ -1209,7 +1215,7 @@ STRICTFP))) { // skip } - return flags & (mask | ~StandardFlags) | implicit; + return flags & (mask | ~ExtendedStandardFlags) | implicit; }