Eclipse java ASTParser ArrayIndexOutOfBoundsException error - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь сделать AST из java кода в затмении.

Ниже приведен пример https://help.eclipse.org/2019-12/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt%2Fcore%2Fdom%2FASTParser.html

В качестве примера ссылки я пишу свой код для создания образца AST

Но после запустить код, у меня ArrayIndexOutOfBoundsException error.

полный код и сообщение об ошибке прилагается ниже

Кто-нибудь знает, почему эта ошибка произошла?

мой код

import java.util.Map;

import org.eclipse.jface.text.Document;

import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;

public class ASTtest {
    static String src = "public class Sample {\r\n" + 
            "    public static void main(String[] args){\r\n" + 
            "        case1();\r\n" + 
            "        case2();\r\n" + 
            "        case3();\r\n" + 
            "    }\r\n" + 
            "    static void case1(){\r\n" + 
            "     int a = 1000;\r\n" + 
            "     int b = 10000;\r\n" + 
            "\r\n" + 
            "        for (int i = 0; i <100 ; i++) {\r\n" + 
            "           if(a<i){\r\n" + 
            "               a=i;\r\n" + 
            "           }else{\r\n" + 
            "               b--;\r\n" + 
            "           }\r\n" + 
            "        }\r\n" + 
            "    }\r\n" + 
            "    static void case2(){\r\n" + 
            "        int a = 1000;\r\n" + 
            "        int b = 10000;\r\n" + 
            "        for (int i = 0; i <1000 ; i++) {\r\n" + 
            "            if(a<i){\r\n" + 
            "                a=i;\r\n" + 
            "            }else{\r\n" + 
            "                b--;\r\n" + 
            "            }\r\n" + 
            "        }\r\n" + 
            "    }\r\n" + 
            "    static void case3(){\r\n" + 
            "        int a=0;\r\n" + 
            "        int b=120847;\r\n" + 
            "        while(a==10000){\r\n" + 
            "            a++;\r\n" + 
            "            b--;\r\n" + 
            "            b+=200;\r\n" + 
            "            for (int i = 0; i <1000 ; i++) {\r\n" + 
            "                a+=1;\r\n" + 
            "                a-=1;\r\n" + 
            "                int k =1;\r\n" + 
            "                while(k <10000){\r\n" + 
            "                    k++;\r\n" + 
            "                }\r\n" + 
            "            }\r\n" + 
            "        }\r\n" + 
            "        for (int i = 0; i < 900; i++) {\r\n" + 
            "            a++;\r\n" + 
            "            for (int j = 0; j <100 ; j++) {\r\n" + 
            "                a--;\r\n" + 
            "                a++;\r\n" + 
            "            }\r\n" + 
            "            a--;\r\n" + 
            "        }\r\n" + 
            "    }\r\n" + 
            "}\r\n" + 
            "";
    public static void main(String[] args) {
        char[] source = src.toCharArray();
        ASTParser parser = ASTParser.newParser(AST.JLS3);
        parser.setSource(source);
        Map options = JavaCore.getOptions();
        JavaCore.setComplianceOptions(JavaCore.VERSION_1_5, options);
        CompilationUnit result = (CompilationUnit) parser.createAST(null);
    }
}

Сообщение об ошибке

> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11671)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11924)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:11881)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:10286)
    at org.eclipse.jdt.core.dom.CompilationUnitResolver.parse(CompilationUnitResolver.java:535)
    at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1227)
    at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:823)
    at ASTtest.main(ASTtest.java:78)

в сообщении об ошибке, строка проблемы (ASTtest. java: 78) это

CompilationUnit result = (CompilationUnit) parser.createAST(null);
...