Ejemplo n.º 1
0
  /*
   * annotationEntry
   *   : SimpleName{"."} typeArguments? valueArguments?
   *   ;
   */
  private void parseAnnotationEntry() {
    assert _at(IDENTIFIER);

    PsiBuilder.Marker attribute = mark();

    PsiBuilder.Marker reference = mark();
    PsiBuilder.Marker typeReference = mark();
    parseUserType();
    typeReference.done(TYPE_REFERENCE);
    reference.done(CONSTRUCTOR_CALLEE);

    parseTypeArgumentList();

    if (at(LPAR)) {
      myExpressionParsing.parseValueArgumentList();
    }
    attribute.done(ANNOTATION_ENTRY);
  }
Ejemplo n.º 2
0
  /*
   * userType
   *   : ("namespace" ".")? simpleUserType{"."}
   *   ;
   */
  void parseUserType() {
    PsiBuilder.Marker userType = mark();

    if (at(PACKAGE_KEYWORD)) {
      advance(); // PACKAGE_KEYWORD
      expect(DOT, "Expecting '.'", TokenSet.create(IDENTIFIER));
    }

    PsiBuilder.Marker reference = mark();
    while (true) {
      if (expect(
          IDENTIFIER,
          "Expecting type name",
          TokenSet.orSet(
              JetExpressionParsing.EXPRESSION_FIRST, JetExpressionParsing.EXPRESSION_FOLLOW))) {
        reference.done(REFERENCE_EXPRESSION);
      } else {
        reference.drop();
        break;
      }

      parseTypeArgumentList();
      if (!at(DOT)) {
        break;
      }
      if (lookahead(1) == LPAR) {
        // This may be a receiver for a function type
        //   Int.(Int) -> Int
        break;
      }

      PsiBuilder.Marker precede = userType.precede();
      userType.done(USER_TYPE);
      userType = precede;

      advance(); // DOT
      reference = mark();
    }

    userType.done(USER_TYPE);
  }