code: JCVariableDecl variableDeclaratorId(JCModifiers mods, JCExpression type, boolean lambdaParameter) {
          int pos = token.pos;
          Name name;
          if (lambdaParameter && token.kind == UNDERSCORE) {
              log.error(pos, "underscore.as.identifier.in.lambda");
              name = token.name();
              nextToken();
          } else {
              if (allowThisIdent) {
                  JCExpression pn = qualident(false);
                  if (pn.hasTag(Tag.IDENT) && ((JCIdent)pn).name != names._this) {
                      name = ((JCIdent)pn).name;
                  } else {
                      if ((mods.flags & Flags.VARARGS) != 0) {
                          log.error(token.pos, "varargs.and.receiver");
                      }
                      if (token.kind == LBRACKET) {
                          log.error(token.pos, "array.and.receiver");
                      }
                      return toP(F.at(pos).ReceiverVarDef(mods, pn, type));
                  }
              } else {
                  name = ident();
              }
          }
          if ((mods.flags & Flags.VARARGS) != 0 &&
                  token.kind == LBRACKET) {
              log.error(token.pos, "varargs.and.old.array.syntax");
          }
          type = bracketsOpt(type);
          return toP(F.at(pos).VarDef(mods, name, type, null));
      }
docs: where