mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
New Java parser (incomplete methods parsing fixed)
This commit is contained in:
@@ -414,13 +414,7 @@ public class DeclarationParser {
|
||||
}
|
||||
|
||||
final IElementType tokenType = builder.getTokenType();
|
||||
if (tokenType == JavaTokenType.SEMICOLON) {
|
||||
builder.advanceLexer();
|
||||
}
|
||||
else if (tokenType == JavaTokenType.LBRACE) {
|
||||
StatementParser.parseCodeBlock(builder);
|
||||
}
|
||||
else {
|
||||
if (tokenType != JavaTokenType.SEMICOLON && tokenType != JavaTokenType.LBRACE) {
|
||||
final PsiBuilder.Marker error = builder.mark();
|
||||
// heuristic: going to next line obviously means method signature is over, starting new method (actually, another one completion hack)
|
||||
final CharSequence text = builder.getOriginalText();
|
||||
@@ -436,6 +430,12 @@ public class DeclarationParser {
|
||||
error.error(JavaErrorMessages.message("expected.lbrace.or.semicolon"));
|
||||
}
|
||||
|
||||
if (!expect(builder, JavaTokenType.SEMICOLON)) {
|
||||
if (builder.getTokenType() == JavaTokenType.LBRACE) {
|
||||
StatementParser.parseCodeBlock(builder);
|
||||
}
|
||||
}
|
||||
|
||||
declaration.done(anno ? JavaElementType.ANNOTATION_METHOD : JavaElementType.METHOD);
|
||||
return declaration;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class C {
|
||||
public Object fa(int toDelete) sdfskdlfabcdavcd {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
PsiJavaFile:Errors3.java
|
||||
PsiImportList
|
||||
<empty list>
|
||||
PsiClass:C
|
||||
PsiModifierList:
|
||||
<empty list>
|
||||
PsiKeyword:class('class')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiIdentifier:C('C')
|
||||
PsiTypeParameterList
|
||||
<empty list>
|
||||
PsiReferenceList
|
||||
<empty list>
|
||||
PsiReferenceList
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiJavaToken:LBRACE('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiMethod:fa
|
||||
PsiModifierList:public
|
||||
PsiKeyword:public('public')
|
||||
PsiTypeParameterList
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiTypeElement:Object
|
||||
PsiJavaCodeReferenceElement:Object
|
||||
PsiIdentifier:Object('Object')
|
||||
PsiReferenceParameterList
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiIdentifier:fa('fa')
|
||||
PsiParameterList:(int toDelete)
|
||||
PsiJavaToken:LPARENTH('(')
|
||||
PsiParameter:toDelete
|
||||
PsiModifierList:
|
||||
<empty list>
|
||||
PsiTypeElement:int
|
||||
PsiKeyword:int('int')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiIdentifier:toDelete('toDelete')
|
||||
PsiJavaToken:RPARENTH(')')
|
||||
PsiReferenceList
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiErrorElement:'{' or ';' expected
|
||||
PsiIdentifier:sdfskdlfabcdavcd('sdfskdlfabcdavcd')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiCodeBlock
|
||||
PsiJavaToken:LBRACE('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiReturnStatement
|
||||
PsiKeyword:return('return')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiLiteralExpression:null
|
||||
PsiJavaToken:NULL_KEYWORD('null')
|
||||
PsiJavaToken:SEMICOLON(';')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiJavaToken:RBRACE('}')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiJavaToken:RBRACE('}')
|
||||
+1
@@ -40,4 +40,5 @@ public class ClassParsingTest extends JavaParsingTestCase {
|
||||
public void testErrors0() { doTest(true); }
|
||||
public void testErrors1() { doTest(true); }
|
||||
public void testErrors2() { doTest(true); }
|
||||
public void testErrors3() { doTest(true); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user