try to parse new statement after an error from '{'

This commit is contained in:
Maxim.Medvedev
2012-08-03 15:15:34 +04:00
parent 5da6238ef1
commit 05c85c58ff
7 changed files with 38 additions and 17 deletions
@@ -41,7 +41,7 @@ public class CompilationUnit implements GroovyElementTypes {
}
cleanAfterError(builder);
while (Separators.parse(builder)) {
while (Separators.parse(builder) || builder.getTokenType() == mLCURLY) {
parser.parseStatementWithImports(builder);
cleanAfterError(builder);
}
@@ -55,16 +55,14 @@ public class CompilationUnit implements GroovyElementTypes {
private static void cleanAfterError(PsiBuilder builder) {
int i = 0;
PsiBuilder.Marker em = builder.mark();
while (!builder.eof() &&
!(mNLS.equals(builder.getTokenType()) ||
mSEMI.equals(builder.getTokenType()))
) {
while (!builder.eof() && mNLS != builder.getTokenType() && mSEMI != builder.getTokenType() && mLCURLY != builder.getTokenType()) {
builder.advanceLexer();
i++;
}
if (i > 0) {
em.error(GroovyBundle.message("separator.expected"));
} else {
}
else {
em.drop();
}
}
@@ -2,7 +2,8 @@ def () {
a(<caret>
}
-----
def () {
a(
<caret>
def ()
{
a()
<caret>
}
@@ -36,6 +36,9 @@ Groovy script
PsiErrorElement:';' or new line expected
PsiElement(identifier)('other')
PsiElement())(')')
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
Closable block
PsiElement({)('{')
Parameter list
<empty list>
PsiElement(})('}')
@@ -37,5 +37,8 @@ Groovy script
PsiElement(++)('++')
PsiErrorElement:';' or new line expected
PsiElement())(')')
Closable block
PsiElement({)('{')
Parameter list
<empty list>
PsiElement(})('}')
@@ -37,5 +37,8 @@ Groovy script
PsiElement(++)('++')
PsiErrorElement:';' or new line expected
PsiElement())(')')
Closable block
PsiElement({)('{')
Parameter list
<empty list>
PsiElement(})('}')
@@ -8,9 +8,15 @@ Groovy script
PsiWhiteSpace(' ')
PsiErrorElement:';' or new line expected
PsiElement(true)('true')
PsiWhiteSpace(' ')
PsiWhiteSpace(' ')
Closable block
PsiElement({)('{')
PsiElement(identifier)('doSomething')
PsiElement(()('(')
PsiElement())(')')
Parameter list
<empty list>
Method call
Reference expression
PsiElement(identifier)('doSomething')
Arguments
PsiElement(()('(')
PsiElement())(')')
PsiElement(})('}')
@@ -27,13 +27,20 @@ Groovy script
PsiErrorElement:')' expected
<empty list>
PsiWhiteSpace(' ')
PsiErrorElement:';' or new line expected
Closable block
PsiElement({)('{')
Parameter list
<empty list>
PsiElement(})('}')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiErrorElement:';' or new line expected
PsiElement(finally)('finally')
Closable block
PsiElement({)('{')
PsiWhiteSpace(' ')
PsiElement(identifier)('doNothing')
Parameter list
<empty list>
Reference expression
PsiElement(identifier)('doNothing')
PsiWhiteSpace(' ')
PsiElement(})('}')