langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
changeset 14054 7ae16dd77c90
parent 14047 7c7a5611cf76
child 14057 b4b0377b8dba
--- 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())