New Java parser (work in progress)

This commit is contained in:
Roman Shevchenko
2010-07-28 11:36:08 +04:00
parent 60be87e12e
commit 77d68210d8
13 changed files with 459 additions and 16 deletions
@@ -0,0 +1,4 @@
PsiJavaFile:EmptyBody0.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,5 @@
PsiJavaFile:EmptyBody1.java
PsiJavaToken:LBRACE('{')
PsiErrorElement:'}' expected
<empty list>
PsiWhiteSpace(' ')
@@ -0,0 +1,6 @@
PsiJavaFile:EnumBody0.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,28 @@
PsiJavaFile:EnumBody1.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiEnumConstant:RED
PsiModifierList:
<empty list>
PsiIdentifier:RED('RED')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:GREEN
PsiModifierList:
<empty list>
PsiIdentifier:GREEN('GREEN')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:BLUE
PsiModifierList:
<empty list>
PsiIdentifier:BLUE('BLUE')
PsiExpressionList
<empty list>
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,27 @@
PsiJavaFile:EnumBody2.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiEnumConstant:RED
PsiModifierList:
<empty list>
PsiIdentifier:RED('RED')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:GREEN
PsiModifierList:
<empty list>
PsiIdentifier:GREEN('GREEN')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:BLUE
PsiModifierList:
<empty list>
PsiIdentifier:BLUE('BLUE')
PsiExpressionList
<empty list>
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,28 @@
PsiJavaFile:EnumBody3.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiEnumConstant:RED
PsiModifierList:
<empty list>
PsiIdentifier:RED('RED')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:GREEN
PsiModifierList:
<empty list>
PsiIdentifier:GREEN('GREEN')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:BLUE
PsiModifierList:
<empty list>
PsiIdentifier:BLUE('BLUE')
PsiExpressionList
<empty list>
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,37 @@
PsiJavaFile:EnumBody4.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiEnumConstant:RED
PsiModifierList:
<empty list>
PsiIdentifier:RED('RED')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiLiteralExpression:0
PsiJavaToken:INTEGER_LITERAL('0')
PsiJavaToken:RPARENTH(')')
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:GREEN
PsiModifierList:
<empty list>
PsiIdentifier:GREEN('GREEN')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiLiteralExpression:1
PsiJavaToken:INTEGER_LITERAL('1')
PsiJavaToken:RPARENTH(')')
PsiJavaToken:COMMA(',')
PsiWhiteSpace(' ')
PsiEnumConstant:BLUE
PsiModifierList:
<empty list>
PsiIdentifier:BLUE('BLUE')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiLiteralExpression:2
PsiJavaToken:INTEGER_LITERAL('2')
PsiJavaToken:RPARENTH(')')
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,22 @@
PsiJavaFile:EnumBody5.java
PsiJavaToken:LBRACE('{')
PsiWhiteSpace(' ')
PsiEnumConstant:A
PsiModifierList:@ANNOTATION
PsiAnnotation
PsiJavaToken:AT('@')
PsiJavaCodeReferenceElement:ANNOTATION
PsiIdentifier:ANNOTATION('ANNOTATION')
PsiReferenceParameterList
<empty list>
PsiAnnotationParameterList
<empty list>
PsiWhiteSpace(' ')
PsiIdentifier:A('A')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiLiteralExpression:10
PsiJavaToken:INTEGER_LITERAL('10')
PsiJavaToken:RPARENTH(')')
PsiWhiteSpace(' ')
PsiJavaToken:RBRACE('}')
@@ -0,0 +1,45 @@
/*
* Copyright 2000-2010 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.lang.java.parser.partial;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.java.parser.DeclarationParser;
import com.intellij.lang.java.parser.JavaParsingTestCase;
public class DeclarationParserTest extends JavaParsingTestCase {
public DeclarationParserTest() {
super("parser-partial/declarations");
}
public void testEmptyBody0() { doParserTest("{ }", false, false); }
public void testEmptyBody1() { doParserTest("{ ", false, false); }
public void testEnumBody0() { doParserTest("{ ; }", false, true); }
public void testEnumBody1() { doParserTest("{ RED, GREEN, BLUE; }", false, true); }
public void testEnumBody2() { doParserTest("{ RED, GREEN, BLUE }", false, true); }
public void testEnumBody3() { doParserTest("{ RED, GREEN, BLUE, }", false, true); }
public void testEnumBody4() { doParserTest("{ RED(0), GREEN(1), BLUE(2); }", false, true); }
public void testEnumBody5() { doParserTest("{ @ANNOTATION A(10) }", false, true); }
private void doParserTest(final String text, final boolean isAnnotation, final boolean isEnum) {
doParserTest(text, new Parser() {
public void parse(final PsiBuilder builder) {
DeclarationParser.parseClassBodyWithBraces(builder, isAnnotation, isEnum);
}
});
}
}