langtools/src/share/classes/com/sun/tools/javac/comp/Annotate.java
changeset 21713 b3fcc9c0fea3
parent 21043 3b000be15694
child 22163 3651128c74eb
equal deleted inserted replaced
21712:d363f367d4c0 21713:b3fcc9c0fea3
   253         // need to do it again.
   253         // need to do it again.
   254         Type at = (a.annotationType.type != null ? a.annotationType.type
   254         Type at = (a.annotationType.type != null ? a.annotationType.type
   255                   : attr.attribType(a.annotationType, env));
   255                   : attr.attribType(a.annotationType, env));
   256         a.type = chk.checkType(a.annotationType.pos(), at, expected);
   256         a.type = chk.checkType(a.annotationType.pos(), at, expected);
   257         if (a.type.isErroneous()) {
   257         if (a.type.isErroneous()) {
       
   258             // Need to make sure nested (anno)trees does not have null as .type
       
   259             attr.postAttr(a);
       
   260 
   258             if (typeAnnotation) {
   261             if (typeAnnotation) {
   259                 return new Attribute.TypeCompound(a.type, List.<Pair<MethodSymbol,Attribute>>nil(),
   262                 return new Attribute.TypeCompound(a.type, List.<Pair<MethodSymbol,Attribute>>nil(),
   260                         new TypeAnnotationPosition());
   263                         new TypeAnnotationPosition());
   261             } else {
   264             } else {
   262                 return new Attribute.Compound(a.type, List.<Pair<MethodSymbol,Attribute>>nil());
   265                 return new Attribute.Compound(a.type, List.<Pair<MethodSymbol,Attribute>>nil());
   263             }
   266             }
   264         }
   267         }
   265         if ((a.type.tsym.flags() & Flags.ANNOTATION) == 0) {
   268         if ((a.type.tsym.flags() & Flags.ANNOTATION) == 0) {
   266             log.error(a.annotationType.pos(),
   269             log.error(a.annotationType.pos(),
   267                       "not.annotation.type", a.type.toString());
   270                       "not.annotation.type", a.type.toString());
       
   271 
       
   272             // Need to make sure nested (anno)trees does not have null as .type
       
   273             attr.postAttr(a);
       
   274 
   268             if (typeAnnotation) {
   275             if (typeAnnotation) {
   269                 return new Attribute.TypeCompound(a.type, List.<Pair<MethodSymbol,Attribute>>nil(), null);
   276                 return new Attribute.TypeCompound(a.type, List.<Pair<MethodSymbol,Attribute>>nil(), null);
   270             } else {
   277             } else {
   271                 return new Attribute.Compound(a.type, List.<Pair<MethodSymbol,Attribute>>nil());
   278                 return new Attribute.Compound(a.type, List.<Pair<MethodSymbol,Attribute>>nil());
   272             }
   279             }
   276             // special case: elided "value=" assumed
   283             // special case: elided "value=" assumed
   277             args.head = make.at(args.head.pos).
   284             args.head = make.at(args.head.pos).
   278                 Assign(make.Ident(names.value), args.head);
   285                 Assign(make.Ident(names.value), args.head);
   279         }
   286         }
   280         ListBuffer<Pair<MethodSymbol,Attribute>> buf =
   287         ListBuffer<Pair<MethodSymbol,Attribute>> buf =
   281             new ListBuffer<Pair<MethodSymbol,Attribute>>();
   288             new ListBuffer<>();
   282         for (List<JCExpression> tl = args; tl.nonEmpty(); tl = tl.tail) {
   289         for (List<JCExpression> tl = args; tl.nonEmpty(); tl = tl.tail) {
   283             JCExpression t = tl.head;
   290             JCExpression t = tl.head;
   284             if (!t.hasTag(ASSIGN)) {
   291             if (!t.hasTag(ASSIGN)) {
   285                 log.error(t.pos(), "annotation.value.must.be.name.value");
   292                 log.error(t.pos(), "annotation.value.must.be.name.value");
   286                 continue;
   293                 continue;
   302             if (method.owner != a.type.tsym)
   309             if (method.owner != a.type.tsym)
   303                 log.error(left.pos(), "no.annotation.member", left.name, a.type);
   310                 log.error(left.pos(), "no.annotation.member", left.name, a.type);
   304             Type result = method.type.getReturnType();
   311             Type result = method.type.getReturnType();
   305             Attribute value = enterAttributeValue(result, assign.rhs, env);
   312             Attribute value = enterAttributeValue(result, assign.rhs, env);
   306             if (!method.type.isErroneous())
   313             if (!method.type.isErroneous())
   307                 buf.append(new Pair<MethodSymbol,Attribute>
   314                 buf.append(new Pair<>((MethodSymbol)method, value));
   308                            ((MethodSymbol)method, value));
       
   309             t.type = result;
   315             t.type = result;
   310         }
   316         }
   311         if (typeAnnotation) {
   317         if (typeAnnotation) {
   312             if (a.attribute == null || !(a.attribute instanceof Attribute.TypeCompound)) {
   318             if (a.attribute == null || !(a.attribute instanceof Attribute.TypeCompound)) {
   313                 // Create a new TypeCompound
   319                 // Create a new TypeCompound