--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Tue Oct 16 21:03:36 2012 -0700
+++ b/langtools/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;
}