--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Fri Sep 28 18:50:40 2012 +0100
+++ b/langtools/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())