diff -r f1e6b361a329 -r 73312ec2cf7c src/share/classes/com/sun/tools/javac/comp/Check.java --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Fri Sep 28 18:50:40 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Fri Sep 28 11:39:29 2012 -0700 @@ -2491,6 +2491,7 @@ validateDocumented(t.tsym, s, pos); validateInherited(t.tsym, s, pos); validateTarget(t.tsym, s, pos); + validateDefault(t.tsym, s, pos); } /** @@ -2671,6 +2672,21 @@ return true; } + private void validateDefault(Symbol container, Symbol contained, DiagnosticPosition pos) { + // validate that all other elements of containing type has defaults + Scope scope = container.members(); + for(Symbol elm : scope.getElements()) { + if (elm.name != names.value && + elm.kind == Kinds.MTH && + ((MethodSymbol)elm).defaultValue == null) { + log.error(pos, + "invalid.containedby.annotation.elem.nondefault", + container, + elm); + } + } + } + /** Is s a method symbol that overrides a method in a superclass? */ boolean isOverrider(Symbol s) { if (s.kind != MTH || s.isStatic())