code: private Pair<MethodSymbol, Attribute> attributeAnnotationNameValuePair(JCExpression nameValuePair,
              Type thisAnnotationType, boolean badAnnotation, Env<AttrContext> env, boolean elidedValue)
      {
          if (!nameValuePair.hasTag(ASSIGN)) {
              log.error(nameValuePair.pos(), "annotation.value.must.be.name.value");
              attributeAnnotationValue(nameValuePair.type = syms.errType, nameValuePair, env);
              return null;
          }
          JCAssign assign = (JCAssign)nameValuePair;
          if (!assign.lhs.hasTag(IDENT)) {
              log.error(nameValuePair.pos(), "annotation.value.must.be.name.value");
              attributeAnnotationValue(nameValuePair.type = syms.errType, nameValuePair, env);
              return null;
          }
  
          // Resolve element to MethodSym
          JCIdent left = (JCIdent)assign.lhs;
          Symbol method = resolve.resolveQualifiedMethod(elidedValue ? assign.rhs.pos() : left.pos(),
                  env, thisAnnotationType,
                  left.name, List.nil(), null);
          left.sym = method;
          left.type = method.type;
          if (method.owner != thisAnnotationType.tsym && !badAnnotation)
              log.error(left.pos(), "no.annotation.member", left.name, thisAnnotationType);
          Type resultType = method.type.getReturnType();
  
          // Compute value part
          Attribute value = attributeAnnotationValue(resultType, assign.rhs, env);
          nameValuePair.type = resultType;
  
          return method.type.isErroneous() ? null : new Pair<>((MethodSymbol)method, value);
  
      }
docs: where