langtools/src/share/classes/com/sun/tools/javac/comp/Check.java
changeset 6345 7d98c298aafd
parent 6342 228b73431edb
child 6347 947437d52cc1
equal deleted inserted replaced
6344:f190fb7fdd2d 6345:7d98c298aafd
  2118     /** Check an annotation value.
  2118     /** Check an annotation value.
  2119      */
  2119      */
  2120     public void validateAnnotation(JCAnnotation a) {
  2120     public void validateAnnotation(JCAnnotation a) {
  2121         if (a.type.isErroneous()) return;
  2121         if (a.type.isErroneous()) return;
  2122 
  2122 
  2123         // collect an inventory of the members
  2123         // collect an inventory of the members (sorted alphabetically)
  2124         Set<MethodSymbol> members = new HashSet<MethodSymbol>();
  2124         Set<MethodSymbol> members = new TreeSet<MethodSymbol>(new Comparator<Symbol>() {
       
  2125             public int compare(Symbol t, Symbol t1) {
       
  2126                 return t.name.compareTo(t1.name);
       
  2127             }
       
  2128         });
  2125         for (Scope.Entry e = a.annotationType.type.tsym.members().elems;
  2129         for (Scope.Entry e = a.annotationType.type.tsym.members().elems;
  2126              e != null;
  2130              e != null;
  2127              e = e.sibling)
  2131              e = e.sibling)
  2128             if (e.sym.kind == MTH)
  2132             if (e.sym.kind == MTH)
  2129                 members.add((MethodSymbol) e.sym);
  2133                 members.add((MethodSymbol) e.sym);
  2140             if (assign.rhs.getTag() == ANNOTATION)
  2144             if (assign.rhs.getTag() == ANNOTATION)
  2141                 validateAnnotation((JCAnnotation)assign.rhs);
  2145                 validateAnnotation((JCAnnotation)assign.rhs);
  2142         }
  2146         }
  2143 
  2147 
  2144         // all the remaining ones better have default values
  2148         // all the remaining ones better have default values
  2145         for (MethodSymbol m : members)
  2149         ListBuffer<Name> missingDefaults = ListBuffer.lb();
  2146             if (m.defaultValue == null && !m.type.isErroneous())
  2150         for (MethodSymbol m : members) {
  2147                 log.error(a.pos(), "annotation.missing.default.value",
  2151             if (m.defaultValue == null && !m.type.isErroneous()) {
  2148                           a.type, m.name);
  2152                 missingDefaults.append(m.name);
       
  2153             }
       
  2154         }
       
  2155         if (missingDefaults.nonEmpty()) {
       
  2156             String key = (missingDefaults.size() > 1)
       
  2157                     ? "annotation.missing.default.value.1"
       
  2158                     : "annotation.missing.default.value";
       
  2159             log.error(a.pos(), key, a.type, missingDefaults);
       
  2160         }
  2149 
  2161 
  2150         // special case: java.lang.annotation.Target must not have
  2162         // special case: java.lang.annotation.Target must not have
  2151         // repeated values in its value member
  2163         // repeated values in its value member
  2152         if (a.annotationType.type.tsym != syms.annotationTargetType.tsym ||
  2164         if (a.annotationType.type.tsym != syms.annotationTargetType.tsym ||
  2153             a.args.tail == null)
  2165             a.args.tail == null)