@Nullable
  private PsiBuilder.Marker parseLambdaExpression(
      final PsiBuilder builder, final boolean typed, @Nullable final PsiBuilder.Marker typeList) {
    final PsiBuilder.Marker start = typeList != null ? typeList.precede() : builder.mark();

    myParser.getDeclarationParser().parseLambdaParameterList(builder, typed);

    if (!expect(builder, JavaTokenType.ARROW)) {
      start.rollbackTo();
      return null;
    }

    final PsiBuilder.Marker body;
    if (builder.getTokenType() == JavaTokenType.LBRACE) {
      body = myParser.getStatementParser().parseCodeBlock(builder);
    } else {
      body = parse(builder);
    }

    if (body == null) {
      builder.error(JavaErrorMessages.message("expected.lbrace"));
    }

    start.done(JavaElementType.LAMBDA_EXPRESSION);
    return start;
  }
 @Test
 public void testarAnaliseCorretas() throws Throwable {
   assertEquals("E T F T2 E2 T F T2 E2", parser1.run("d + d"));
   assertEquals("E T F T2 F T2 E2", parser1.run("d * d"));
   assertEquals(
       "E T F E T F T2 E2 T F T2 E2 T2 F E T F E T F T2 E2 T2 E2 T2 E2",
       parser1.run("( d + d ) * ( ( d ) )"));
 }
Example #3
0
 public static void main(String argv[]) {
   /*  	Avatar u=new Avatar();
   //    Unicorn u=new Unicorn();
     	JooFrame jf=new JooFrame(u);
     	jf.show();                  */
   for (int i = 0; i < argv.length; i++) {
     String filename = argv[i];
     JavaParser jw = new JavaParser(filename);
     jw.read();
     // ((Class)jw.classes.get(0)).jooify();
     jw.jooify();
     jw.write();
   }
 }
Example #4
0
 public static void main(java.lang.String[] args) throws RecognitionException {
   CharStream cs =
       new ANTLRStringStream(
           "package gw.internal.gosu.parser.java;\n"
               + "import java.util.List;\n"
               + "public class Foo {\n"
               + "int a = 1_2_3;\n"
               + "  public static void main(String[] args) {}\n"
               + "}");
   JavaLexer lexer = new JavaLexer(cs);
   TokenRewriteStream tokens = new TokenRewriteStream(lexer);
   JavaParser parser = new JavaParser(tokens);
   TreeBuilder treeBuilder = new TreeBuilder();
   parser.setTreeBuilder(treeBuilder);
   parser.compilationUnit();
   dumpJavaAST(treeBuilder.getTree());
 }
  @Nullable
  private PsiBuilder.Marker parseUnary(final PsiBuilder builder) {
    final IElementType tokenType = builder.getTokenType();

    if (PREFIX_OPS.contains(tokenType)) {
      final PsiBuilder.Marker unary = builder.mark();
      builder.advanceLexer();

      final PsiBuilder.Marker operand = parseUnary(builder);
      if (operand == null) {
        error(builder, JavaErrorMessages.message("expected.expression"));
      }

      unary.done(JavaElementType.PREFIX_EXPRESSION);
      return unary;
    } else if (tokenType == JavaTokenType.LPARENTH) {
      final PsiBuilder.Marker typeCast = builder.mark();
      builder.advanceLexer();

      ReferenceParser.TypeInfo typeInfo =
          myParser
              .getReferenceParser()
              .parseTypeInfo(
                  builder,
                  ReferenceParser.EAT_LAST_DOT
                      | ReferenceParser.WILDCARD
                      | ReferenceParser.CONJUNCTIONS
                      | ReferenceParser.INCOMPLETE_ANNO);
      if (typeInfo == null || !expect(builder, JavaTokenType.RPARENTH)) {
        typeCast.rollbackTo();
        return parsePostfix(builder);
      }

      if (PREF_ARITHMETIC_OPS.contains(builder.getTokenType()) && !typeInfo.isPrimitive) {
        typeCast.rollbackTo();
        return parsePostfix(builder);
      }

      final PsiBuilder.Marker expr = parseUnary(builder);
      if (expr == null) {
        if (!typeInfo
            .isParameterized) { // cannot parse correct parenthesized expression after correct
                                // parameterized type
          typeCast.rollbackTo();
          return parsePostfix(builder);
        } else {
          error(builder, JavaErrorMessages.message("expected.expression"));
        }
      }

      typeCast.done(JavaElementType.TYPE_CAST_EXPRESSION);
      return typeCast;
    } else {
      return parsePostfix(builder);
    }
  }
 /** Listen to matches of methodDeclaration */
 @Override
 public void enterMethodDeclaration(JavaParser.MethodDeclarationContext ctx) {
   // need parser to get tokens
   TokenStream tokens = parser.getTokenStream();
   String type = "void";
   if (ctx.type() != null) {
     type = tokens.getText(ctx.type());
   }
   String args = tokens.getText(ctx.formalParameters());
   System.out.println("\t" + type + " " + ctx.Identifier() + args + ";");
 }
  @NotNull
  private PsiBuilder.Marker parseMethodReference(
      final PsiBuilder builder, final PsiBuilder.Marker start) {
    builder.advanceLexer();

    myParser.getReferenceParser().parseReferenceParameterList(builder, false, false);

    if (!expect(builder, JavaTokenType.IDENTIFIER) && !expect(builder, JavaTokenType.NEW_KEYWORD)) {
      error(builder, JavaErrorMessages.message("expected.identifier"));
    }

    start.done(JavaElementType.METHOD_REF_EXPRESSION);
    return start;
  }
  @Nullable
  private PsiBuilder.Marker parseClassAccessOrMethodReference(final PsiBuilder builder) {
    final PsiBuilder.Marker expr = builder.mark();

    final boolean primitive = ElementType.PRIMITIVE_TYPE_BIT_SET.contains(builder.getTokenType());
    if (myParser.getReferenceParser().parseType(builder, 0) == null) {
      expr.drop();
      return null;
    }

    final PsiBuilder.Marker result = continueClassAccessOrMethodReference(builder, expr, primitive);
    if (result == null) expr.rollbackTo();
    return result;
  }
Example #9
0
  @Override
  public Object run() throws Exception {

    JavaParser parser = new JavaParser();
    parser.setContent(this.getContent());
    parser.create();

    String packageName = parser.getPackageName();
    String className =
        this.getResourceNode()
            .getName()
            .substring(0, this.getResourceNode().getName().indexOf("."));
    String fullClassName = "";

    if (packageName != null) fullClassName += packageName + ".";

    fullClassName += className;

    ClassLoader prerCl = Thread.currentThread().getContextClassLoader();
    CodiClassLoader cl =
        CodiClassLoader.createClassLoader(
            this.getResourceNode().getProjectId(), session.getEmployee().getGlobalCom(), false);

    Thread.currentThread().setContextClassLoader(cl);

    Object o =
        Thread.currentThread()
            .getContextClassLoader()
            .loadClass(fullClassName)
            .newInstance(); // cl.loadClass(getPackageName() + "." + getClassName()).newInstance();
    if (o instanceof ITool) ((ITool) o).onLoad();

    Thread.currentThread().setContextClassLoader(prerCl);

    return new FormPreview(o);
  }
  @Nullable
  private PsiBuilder.Marker parseExpression(final PsiBuilder builder, final ExprType type) {
    switch (type) {
      case CONDITIONAL_OR:
        return parseBinary(builder, ExprType.CONDITIONAL_AND, CONDITIONAL_OR_OPS);

      case CONDITIONAL_AND:
        return parseBinary(builder, ExprType.OR, CONDITIONAL_AND_OPS);

      case OR:
        return parseBinary(builder, ExprType.XOR, OR_OPS);

      case XOR:
        return parseBinary(builder, ExprType.AND, XOR_OPS);

      case AND:
        return parseBinary(builder, ExprType.EQUALITY, AND_OPS);

      case EQUALITY:
        return parseBinary(builder, ExprType.RELATIONAL, EQUALITY_OPS);

      case RELATIONAL:
        return parseRelational(builder);

      case SHIFT:
        return parseBinary(builder, ExprType.ADDITIVE, SHIFT_OPS);

      case ADDITIVE:
        return parseBinary(builder, ExprType.MULTIPLICATIVE, ADDITIVE_OPS);

      case MULTIPLICATIVE:
        return parseBinary(builder, ExprType.UNARY, MULTIPLICATIVE_OPS);

      case UNARY:
        return parseUnary(builder);

      case TYPE:
        return myParser
            .getReferenceParser()
            .parseType(builder, ReferenceParser.EAT_LAST_DOT | ReferenceParser.WILDCARD);

      default:
        assert false : "Unexpected type: " + type;
        return null;
    }
  }
Example #11
0
  public ArrayList<String> findThisClass() {
    ArrayList<String> classInfo = new ArrayList<String>();

    JavaParser parser = new JavaParser();
    parser.setContent(this.getContent());
    parser.create();

    if (parser.getFields() != null) {
      for (JavaField field : parser.getFields()) {
        if (field.isStatics()) continue;

        String upperCasefieldName = CodiStringUtil.firstUpperCase(field.getName());
        String getterName = "get" + upperCasefieldName;
        String setterName = "set" + upperCasefieldName;

        if (parser.getMethods().contains(new JavaMethod(getterName)))
          classInfo.add(getterName + "()" + "/" + "this" + "/method/");

        if (parser.getMethods().contains(new JavaMethod(setterName)))
          classInfo.add(setterName + "()" + "/" + "this" + "/method/");

        classInfo.add(field.getName() + "/" + "this" + "/field/");
      }
    }

    // TODO: live code
    /*
    ArrayList<ClassField> classFields = classModeler.getClassFields();
    if(classFields!=null) {
    	for (ClassField field : classFields) {
    		classInfo.add(field.getId() + "/" + "this" + "/field/");
    	}
    }

    ArrayList<ClassMethod> classMethods = classModeler.getClassMethods();
    if(classMethods!=null) {
    	for (ClassMethod classMethod : classMethods) {
    		classInfo.add(classMethod.getMethodName() + "/" + "this" + "/method/");
    	}
    }
     */

    return classInfo;
  }
  @Nullable
  private PsiBuilder.Marker parsePrimaryExpressionStart(final PsiBuilder builder) {
    IElementType tokenType = builder.getTokenType();

    if (LITERALS.contains(tokenType)) {
      final PsiBuilder.Marker literal = builder.mark();
      builder.advanceLexer();
      literal.done(JavaElementType.LITERAL_EXPRESSION);
      return literal;
    }

    if (tokenType == JavaTokenType.LBRACE) {
      return parseArrayInitializer(builder);
    }

    if (tokenType == JavaTokenType.NEW_KEYWORD) {
      return parseNew(builder, null);
    }

    if (tokenType == JavaTokenType.LPARENTH) {
      final PsiBuilder.Marker lambda = parseLambdaAfterParenth(builder, null);
      if (lambda != null) {
        return lambda;
      }

      final PsiBuilder.Marker parenth = builder.mark();
      builder.advanceLexer();

      final PsiBuilder.Marker inner = parse(builder);
      if (inner == null) {
        error(builder, JavaErrorMessages.message("expected.expression"));
      }

      if (!expect(builder, JavaTokenType.RPARENTH)) {
        if (inner != null) {
          error(builder, JavaErrorMessages.message("expected.rparen"));
        }
      }

      parenth.done(JavaElementType.PARENTH_EXPRESSION);
      return parenth;
    }

    if (TYPE_START.contains(tokenType)) {
      final PsiBuilder.Marker mark = builder.mark();

      final ReferenceParser.TypeInfo typeInfo =
          myParser.getReferenceParser().parseTypeInfo(builder, 0);
      if (typeInfo != null) {
        boolean optionalClassKeyword = typeInfo.isPrimitive || typeInfo.isArray;
        if (optionalClassKeyword || !typeInfo.hasErrors && typeInfo.isParameterized) {
          final PsiBuilder.Marker result =
              continueClassAccessOrMethodReference(builder, mark, optionalClassKeyword);
          if (result != null) {
            return result;
          }
        }
      }

      mark.rollbackTo();
    }

    PsiBuilder.Marker annotation = null;
    if (tokenType == JavaTokenType.AT) {
      annotation = myParser.getDeclarationParser().parseAnnotations(builder);
      tokenType = builder.getTokenType();
    }

    if (tokenType == JavaTokenType.IDENTIFIER) {
      if (builder.lookAhead(1) == JavaTokenType.ARROW) {
        return parseLambdaExpression(builder, false, null);
      }

      final PsiBuilder.Marker refExpr;
      if (annotation != null) {
        final PsiBuilder.Marker refParam = annotation.precede();
        refParam.doneBefore(JavaElementType.REFERENCE_PARAMETER_LIST, annotation);
        refExpr = refParam.precede();
      } else {
        refExpr = builder.mark();
        builder.mark().done(JavaElementType.REFERENCE_PARAMETER_LIST);
      }

      builder.advanceLexer();
      refExpr.done(JavaElementType.REFERENCE_EXPRESSION);
      return refExpr;
    }

    if (annotation != null) {
      annotation.rollbackTo();
      tokenType = builder.getTokenType();
    }

    PsiBuilder.Marker expr = null;
    if (tokenType == JavaTokenType.LT) {
      expr = builder.mark();

      if (!myParser.getReferenceParser().parseReferenceParameterList(builder, false, false)) {
        expr.rollbackTo();
        return null;
      }

      tokenType = builder.getTokenType();
      if (!THIS_OR_SUPER.contains(tokenType)) {
        expr.rollbackTo();
        return null;
      }
    }

    if (THIS_OR_SUPER.contains(tokenType)) {
      if (expr == null) {
        expr = builder.mark();
        builder.mark().done(JavaElementType.REFERENCE_PARAMETER_LIST);
      }
      builder.advanceLexer();
      expr.done(
          builder.getTokenType() == JavaTokenType.LPARENTH
              ? JavaElementType.REFERENCE_EXPRESSION
              : tokenType == JavaTokenType.THIS_KEYWORD
                  ? JavaElementType.THIS_EXPRESSION
                  : JavaElementType.SUPER_EXPRESSION);
      return expr;
    }

    return null;
  }
  // todo[r.sh] make 'this', 'super' and 'class' reference expressions
  @Nullable
  private PsiBuilder.Marker parsePrimary(
      final PsiBuilder builder, @Nullable final BreakPoint breakPoint, final int breakOffset) {
    PsiBuilder.Marker startMarker = builder.mark();

    PsiBuilder.Marker expr = parsePrimaryExpressionStart(builder);
    if (expr == null) {
      startMarker.drop();
      return null;
    }

    while (true) {
      final IElementType tokenType = builder.getTokenType();
      if (tokenType == JavaTokenType.DOT) {
        final PsiBuilder.Marker dotPos = builder.mark();
        final int dotOffset = builder.getCurrentOffset();
        builder.advanceLexer();

        IElementType dotTokenType = builder.getTokenType();
        if (dotTokenType == JavaTokenType.AT) {
          myParser.getDeclarationParser().parseAnnotations(builder);
          dotTokenType = builder.getTokenType();
        }

        if (dotTokenType == JavaTokenType.CLASS_KEYWORD
            && exprType(expr) == JavaElementType.REFERENCE_EXPRESSION) {
          if (breakPoint == BreakPoint.P1 && builder.getCurrentOffset() == breakOffset) {
            error(builder, JavaErrorMessages.message("expected.identifier"));
            PsiBuilderUtil.drop(startMarker, dotPos);
            return expr;
          }

          final PsiBuilder.Marker copy = startMarker.precede();
          final int offset = builder.getCurrentOffset();
          startMarker.rollbackTo();

          final PsiBuilder.Marker classObjAccess = parseClassAccessOrMethodReference(builder);
          if (classObjAccess == null || builder.getCurrentOffset() < offset) {
            copy.rollbackTo();
            return parsePrimary(builder, BreakPoint.P1, offset);
          }

          startMarker = copy;
          expr = classObjAccess;
        } else if (dotTokenType == JavaTokenType.NEW_KEYWORD) {
          dotPos.drop();
          expr = parseNew(builder, expr);
        } else if (THIS_OR_SUPER.contains(dotTokenType)
            && exprType(expr) == JavaElementType.REFERENCE_EXPRESSION) {
          if (breakPoint == BreakPoint.P2 && builder.getCurrentOffset() == breakOffset) {
            dotPos.rollbackTo();
            startMarker.drop();
            return expr;
          }

          final PsiBuilder.Marker copy = startMarker.precede();
          final int offset = builder.getCurrentOffset();
          startMarker.rollbackTo();

          final PsiBuilder.Marker ref =
              myParser
                  .getReferenceParser()
                  .parseJavaCodeReference(builder, false, true, false, false);
          if (ref == null
              || builder.getTokenType() != JavaTokenType.DOT
              || builder.getCurrentOffset() != dotOffset) {
            copy.rollbackTo();
            return parsePrimary(builder, BreakPoint.P2, offset);
          }
          builder.advanceLexer();

          if (builder.getTokenType() != dotTokenType) {
            copy.rollbackTo();
            return parsePrimary(builder, BreakPoint.P2, offset);
          }
          builder.advanceLexer();

          startMarker = copy;
          expr = ref.precede();
          expr.done(
              dotTokenType == JavaTokenType.THIS_KEYWORD
                  ? JavaElementType.THIS_EXPRESSION
                  : JavaElementType.SUPER_EXPRESSION);
        } else if (dotTokenType == JavaTokenType.SUPER_KEYWORD) {
          dotPos.drop();
          final PsiBuilder.Marker refExpr = expr.precede();
          builder.advanceLexer();
          refExpr.done(JavaElementType.REFERENCE_EXPRESSION);
          expr = refExpr;
        } else {
          dotPos.drop();
          final PsiBuilder.Marker refExpr = expr.precede();
          myParser.getReferenceParser().parseReferenceParameterList(builder, false, false);

          if (!expectOrError(builder, ID_OR_SUPER, "expected.identifier")) {
            refExpr.done(JavaElementType.REFERENCE_EXPRESSION);
            startMarker.drop();
            return refExpr;
          }

          refExpr.done(JavaElementType.REFERENCE_EXPRESSION);
          expr = refExpr;
        }
      } else if (tokenType == JavaTokenType.LPARENTH) {
        if (exprType(expr) != JavaElementType.REFERENCE_EXPRESSION) {
          if (exprType(expr) == JavaElementType.SUPER_EXPRESSION) {
            if (breakPoint == BreakPoint.P3) {
              startMarker.drop();
              return expr;
            }

            final PsiBuilder.Marker copy = startMarker.precede();
            startMarker.rollbackTo();

            final PsiBuilder.Marker qualifier = parsePrimaryExpressionStart(builder);
            if (qualifier != null) {
              final PsiBuilder.Marker refExpr = qualifier.precede();
              if (builder.getTokenType() == JavaTokenType.DOT) {
                builder.advanceLexer();
                if (builder.getTokenType() == JavaTokenType.SUPER_KEYWORD) {
                  builder.advanceLexer();
                  refExpr.done(JavaElementType.REFERENCE_EXPRESSION);
                  expr = refExpr;
                  startMarker = copy;
                  continue;
                }
              }
            }

            copy.rollbackTo();
            return parsePrimary(builder, BreakPoint.P3, -1);
          } else {
            startMarker.drop();
            return expr;
          }
        }

        final PsiBuilder.Marker callExpr = expr.precede();
        parseArgumentList(builder);
        callExpr.done(JavaElementType.METHOD_CALL_EXPRESSION);
        expr = callExpr;
      } else if (tokenType == JavaTokenType.LBRACKET) {
        if (breakPoint == BreakPoint.P4) {
          startMarker.drop();
          return expr;
        }

        builder.advanceLexer();

        if (builder.getTokenType() == JavaTokenType.RBRACKET
            && exprType(expr) == JavaElementType.REFERENCE_EXPRESSION) {
          final int pos = builder.getCurrentOffset();
          final PsiBuilder.Marker copy = startMarker.precede();
          startMarker.rollbackTo();

          final PsiBuilder.Marker classObjAccess = parseClassAccessOrMethodReference(builder);
          if (classObjAccess == null || builder.getCurrentOffset() <= pos) {
            copy.rollbackTo();
            return parsePrimary(builder, BreakPoint.P4, -1);
          }

          startMarker = copy;
          expr = classObjAccess;
        } else {
          final PsiBuilder.Marker arrayAccess = expr.precede();

          final PsiBuilder.Marker index = parse(builder);
          if (index == null) {
            error(builder, JavaErrorMessages.message("expected.expression"));
            arrayAccess.done(JavaElementType.ARRAY_ACCESS_EXPRESSION);
            startMarker.drop();
            return arrayAccess;
          }

          if (builder.getTokenType() != JavaTokenType.RBRACKET) {
            error(builder, JavaErrorMessages.message("expected.rbracket"));
            arrayAccess.done(JavaElementType.ARRAY_ACCESS_EXPRESSION);
            startMarker.drop();
            return arrayAccess;
          }
          builder.advanceLexer();

          arrayAccess.done(JavaElementType.ARRAY_ACCESS_EXPRESSION);
          expr = arrayAccess;
        }
      } else if (tokenType == JavaTokenType.DOUBLE_COLON) {
        return parseMethodReference(builder, startMarker);
      } else {
        startMarker.drop();
        return expr;
      }
    }
  }
 @Test
 public void testarAnaliseIncorretaParser3() throws Throwable {
   Assert.assertContains(parser3.run("id = ="));
   Assert.assertContains(parser3.run("= id"));
 }
 @Test
 public void testarAnaliseIncorretaParser4() throws Throwable {
   Assert.assertContains(parser4.run("a"));
   Assert.assertContains(parser4.run("b"));
 }
 @Test
 public void testarAnaliseIncorretaParser1() throws Throwable {
   Assert.assertContains(parser1.run(""));
   Assert.assertContains(parser1.run("( * )"));
 }
Example #17
0
  @SuppressWarnings({"ConstantConditions"})
  protected void run(String[] args) {
    System.out.println("parboiled Java parser, performance test");
    System.out.println("---------------------------------------");

    System.out.print("Creating parser... :");
    long start = System.currentTimeMillis();
    Parboiled.createParser(JavaParser.class);
    time(start);

    System.out.print("Creating 100 more parser instances... :");
    JavaParser parser = null;
    start = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
      parser = Parboiled.createParser(JavaParser.class);
    }
    time(start);

    System.out.print("Creating 100 more parser instances using BaseParser.newInstance() ... :");
    start = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
      parser = parser.newInstance();
    }
    time(start);

    start = System.currentTimeMillis();
    File baseDir = args.length == 1 ? new File(args[0]) : null;
    if (baseDir == null || !baseDir.exists()) baseDir = new File(".");
    System.out.printf("Retrieving file list from '%s'", baseDir);
    List<File> sources = recursiveGetAllJavaSources(baseDir, new ArrayList<File>());
    time(start);

    System.out.printf("Parsing all %s given java sources", sources.size());
    Rule rootRule =
        parser.CompilationUnit().suppressNode(); // we want to see the parse-tree-less performance
    start = System.currentTimeMillis();
    long lines = 0, characters = 0;
    for (File sourceFile : sources) {
      long dontCountStart = System.currentTimeMillis();
      String sourceText = readAllText(sourceFile);
      start +=
          System.currentTimeMillis()
              - dontCountStart; // do not count the time for reading the text file

      ParsingResult<?> result = null;
      try {
        result = run(rootRule, sourceText);
      } catch (Exception e) {
        System.out.printf("\nException while parsing file '%s':\n%s", sourceFile, e);
        System.exit(1);
      }
      if (!result.matched) {
        System.out.printf(
            "\nParse error(s) in file '%s':\n%s", sourceFile, printParseErrors(result));
        System.exit(1);
      } else {
        System.out.print('.');
      }
      lines += result.inputBuffer.getLineCount();
      characters += sourceText.length();
    }
    long time = time(start);

    System.out.println("Parsing performance:");
    System.out.printf(
        "    %6d Files -> %6.2f Files/sec\n", sources.size(), sources.size() * 1000.0 / time);
    System.out.printf("    %6d Lines -> %6d Lines/sec\n", lines, lines * 1000 / time);
    System.out.printf("    %6d Chars -> %6d Chars/sec\n", characters, characters * 1000 / time);
  }
 @Test
 public void testarAnaliseIncorretaParser5() throws Throwable {
   Assert.assertContains(parser5.run("begin , id end"));
   Assert.assertContains(parser5.run("beging [ E ] end"));
 }
  @NotNull
  private PsiBuilder.Marker parseNew(PsiBuilder builder, @Nullable PsiBuilder.Marker start) {
    PsiBuilder.Marker newExpr = (start != null ? start.precede() : builder.mark());
    builder.advanceLexer();

    myParser.getReferenceParser().parseReferenceParameterList(builder, false, true);

    PsiBuilder.Marker refOrType;
    PsiBuilder.Marker anno = myParser.getDeclarationParser().parseAnnotations(builder);
    IElementType tokenType = builder.getTokenType();
    if (tokenType == JavaTokenType.IDENTIFIER) {
      if (anno != null) {
        anno.rollbackTo();
      }
      refOrType =
          myParser.getReferenceParser().parseJavaCodeReference(builder, true, true, true, true);
      if (refOrType == null) {
        error(builder, JavaErrorMessages.message("expected.identifier"));
        newExpr.done(JavaElementType.NEW_EXPRESSION);
        return newExpr;
      }
    } else if (ElementType.PRIMITIVE_TYPE_BIT_SET.contains(tokenType)) {
      refOrType = null;
      builder.advanceLexer();
    } else {
      error(builder, JavaErrorMessages.message("expected.identifier"));
      newExpr.done(JavaElementType.NEW_EXPRESSION);
      return newExpr;
    }

    if (refOrType != null && builder.getTokenType() == JavaTokenType.LPARENTH) {
      parseArgumentList(builder);
      if (builder.getTokenType() == JavaTokenType.LBRACE) {
        final PsiBuilder.Marker classElement = refOrType.precede();
        myParser.getDeclarationParser().parseClassBodyWithBraces(builder, false, false);
        classElement.done(JavaElementType.ANONYMOUS_CLASS);
      }
      newExpr.done(JavaElementType.NEW_EXPRESSION);
      return newExpr;
    }

    myParser.getDeclarationParser().parseAnnotations(builder);

    if (builder.getTokenType() != JavaTokenType.LBRACKET) {
      error(
          builder,
          refOrType == null
              ? JavaErrorMessages.message("expected.lbracket")
              : JavaErrorMessages.message("expected.lparen.or.lbracket"));
      newExpr.done(JavaElementType.NEW_EXPRESSION);
      return newExpr;
    }

    int bracketCount = 0;
    int dimCount = 0;
    while (true) {
      myParser.getDeclarationParser().parseAnnotations(builder);

      if (builder.getTokenType() != JavaTokenType.LBRACKET) break;
      builder.advanceLexer();

      if (bracketCount == dimCount) {
        final PsiBuilder.Marker dimExpr = parse(builder);
        if (dimExpr != null) {
          dimCount++;
        }
      }
      bracketCount++;

      if (!expectOrError(builder, JavaTokenType.RBRACKET, "expected.rbracket")) {
        newExpr.done(JavaElementType.NEW_EXPRESSION);
        return newExpr;
      }
    }

    if (dimCount == 0) {
      if (builder.getTokenType() == JavaTokenType.LBRACE) {
        parseArrayInitializer(builder);
      } else {
        error(builder, JavaErrorMessages.message("expected.array.initializer"));
      }
    }

    newExpr.done(JavaElementType.NEW_EXPRESSION);
    return newExpr;
  }
 @Test
 public void testarAnaliseCorretasDeParser3() throws Throwable {
   assertEquals("S L L1 L L", parser3.run("id = * id"));
   assertEquals("S L L1", parser3.run("id"));
 }
 @Test
 public void testarAnaliseCorretasDeParser2() throws Throwable {
   assertEquals("A B C", parser2.run("b c"));
   assertEquals("A B C", parser2.run("c"));
 }
 @Test
 public void testarAnaliseIncorretaParser6() throws Throwable {
   Assert.assertContains(parser6.run("e e"));
   Assert.assertContains(parser6.run("; ; e com com"));
 }
 @Test
 public void testarAnaliseCorretasDeParser5() throws Throwable {
   assertEquals("P D C", parser5.run("begin com end"));
   assertEquals("P D I I I C", parser5.run("begin int , id , id com end"));
 }
 @Test
 public void testarAnaliseCorretasDeParser6() throws Throwable {
   assertEquals("P B K K V V C P1", parser6.run("c v"));
 }
 @Test
 public void testarAnaliseCorretasDeParser4() throws Throwable {
   assertEquals("S A A", parser4.run("a b"));
   assertEquals("S B B", parser4.run("b a"));
 }
Example #26
0
  public void test() throws IOException {
    // g++ -o test test.cpp
    // chmod +x test
    // ./test

    // TODO initialize fields

    // include files:
    // /usr/include/c++/4.2.1/tr1/stdio.h
    // /usr/include/stdio.h
    // inttypes.h

    // not supported yet:
    // exceptions
    // HexadecimalFloatingPointLiteral
    // int x()[] { return null; }
    // import static
    // import *
    // initializer blocks
    // access to static fields with instance variable
    // final variables (within blocks, parameter list)
    // Identifier : (labels)
    // ClassOrInterfaceDeclaration within blocks (or any other nested classes)
    // assert

    assertEquals("\\\\" + "u0000", JavaParser.replaceUnicode("\\\\" + "u0000"));
    assertEquals("\u0000", JavaParser.replaceUnicode("\\" + "u0000"));
    assertEquals("\u0000", JavaParser.replaceUnicode("\\" + "uu0000"));
    assertEquals("\\\\" + "\u0000", JavaParser.replaceUnicode("\\\\\\" + "u0000"));

    assertEquals("0", JavaParser.readNumber("0a"));
    assertEquals("0l", JavaParser.readNumber("0l"));
    assertEquals("0xFFL", JavaParser.readNumber("0xFFLx"));
    assertEquals("0xDadaCafe", JavaParser.readNumber("0xDadaCafex"));
    assertEquals("1.40e-45f", JavaParser.readNumber("1.40e-45fx"));
    assertEquals("1e1f", JavaParser.readNumber("1e1fx"));
    assertEquals("2.f", JavaParser.readNumber("2.fx"));
    assertEquals(".3d", JavaParser.readNumber(".3dx"));
    assertEquals("6.022137e+23f", JavaParser.readNumber("6.022137e+23f+1"));

    JavaParser parser = new JavaParser();
    parser.parse("src/tools/org/h2", "java.lang.Object");
    parser.parse("src/tools/org/h2", "java.lang.String");
    parser.parse("src/tools/org/h2", "java.lang.Math");
    parser.parse("src/tools/org/h2", "java.lang.Integer");
    parser.parse("src/tools/org/h2", "java.lang.Long");
    parser.parse("src/tools/org/h2", "java.lang.StringBuilder");
    parser.parse("src/tools/org/h2", "java.io.PrintStream");
    parser.parse("src/tools/org/h2", "java.lang.System");
    parser.parse("src/tools/org/h2", "java.util.Arrays");
    parser.parse("src/tools", "org.h2.java.TestApp");

    PrintWriter w = new PrintWriter(System.out);
    parser.writeHeader(w);
    parser.writeSource(w);
    w.flush();
    w = new PrintWriter(new FileWriter("bin/test.cpp"));
    parser.writeHeader(w);
    parser.writeSource(w);
    w.close();
  }