New Java parser (work in progress)

This commit is contained in:
Roman Shevchenko
2010-07-28 11:36:09 +04:00
parent 77d68210d8
commit 72d3a0e471
10 changed files with 220 additions and 6 deletions
@@ -0,0 +1,22 @@
PsiJavaFile:FieldMulti.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field1
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field1('field1')
PsiWhiteSpace(' ')
PsiJavaToken:EQ('=')
PsiWhiteSpace(' ')
PsiLiteralExpression:0
PsiJavaToken:INTEGER_LITERAL('0')
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiField:field2
PsiIdentifier:field2('field2')
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,18 @@
PsiJavaFile:FieldSimple.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field('field')
PsiWhiteSpace(' ')
PsiJavaToken:EQ('=')
PsiWhiteSpace(' ')
PsiLiteralExpression:0
PsiJavaToken:INTEGER_LITERAL('0')
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,16 @@
PsiJavaFile:MissingInitializer.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field('field')
PsiWhiteSpace(' ')
PsiJavaToken:EQ('=')
PsiErrorElement:Expression expected
<empty list>
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,16 @@
PsiJavaFile:MissingInitializerExpression.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field('field')
PsiJavaToken:EQ('=')
PsiErrorElement:Expression expected
<empty list>
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,23 @@
PsiJavaFile:MultiLineUnclosed.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiErrorElement:Identifier expected
<empty list>
PsiWhiteSpace(' \n ')
PsiField:o
PsiModifierList:
<empty list>
PsiTypeElement:Object
PsiJavaCodeReferenceElement:Object
PsiIdentifier:Object('Object')
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiIdentifier:o('o')
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,15 @@
PsiJavaFile:UnclosedBracket.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field('field')
PsiJavaToken:LBRACKET('[')
PsiErrorElement:']' expected
<empty list>
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,15 @@
PsiJavaFile:UnclosedComma.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field('field')
PsiJavaToken:COMMA(',')
PsiErrorElement:Identifier expected
<empty list>
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,14 @@
PsiJavaFile:UnclosedSemicolon.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiField:field
PsiModifierList:
<empty list>
PsiTypeElement:int
PsiKeyword:int('int')
PsiWhiteSpace(' ')
PsiIdentifier:field('field')
PsiErrorElement:';' expected
<empty list>
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -35,6 +35,15 @@ public class DeclarationParserTest extends JavaParsingTestCase {
public void testEnumBody4() { doParserTest("{ RED(0), GREEN(1), BLUE(2); }", false, true); }
public void testEnumBody5() { doParserTest("{ @ANNOTATION A(10) }", false, true); }
public void testFieldSimple() { doParserTest("{ int field = 0; }", false, false); }
public void testFieldMulti() { doParserTest("{ int field1 = 0, field2; }", false, false); }
public void testUnclosedBracket() { doParserTest("{ int field[ }", false, false); }
public void testMissingInitializer() { doParserTest("{ int field = }", false, false); }
public void testUnclosedComma() { doParserTest("{ int field, }", false, false); }
public void testUnclosedSemicolon() { doParserTest("{ int field }", false, false); }
public void testMissingInitializerExpression() { doParserTest("{ int field=; }", false, false); }
//public void testMultiLineUnclosed() { doParserTest("{ int \n Object o; }", false, false); } // todo: implement
private void doParserTest(final String text, final boolean isAnnotation, final boolean isEnum) {
doParserTest(text, new Parser() {
public void parse(final PsiBuilder builder) {