From 05c85c58ff1f6ae893f87d36d04db93a2a2829be Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Fri, 3 Aug 2012 13:48:32 +0400 Subject: [PATCH] try to parse new statement after an error from '{' --- .../parser/parsing/toplevel/CompilationUnit.java | 10 ++++------ .../groovy/actions/smartEnter/methCallWithArg.test | 7 ++++--- .../groovy/statements/declaration/decl11.test | 5 ++++- .../parsing/groovy/statements/for/for10.test | 3 +++ .../parsing/groovy/statements/for/for9.test | 3 +++ .../parsing/groovy/statements/loop/while2.test | 14 ++++++++++---- .../parsing/groovy/statements/try_catch/try3.test | 13 ++++++++++--- 7 files changed, 38 insertions(+), 17 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/toplevel/CompilationUnit.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/toplevel/CompilationUnit.java index 9220937d26d5..d3e24b2ba181 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/toplevel/CompilationUnit.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/toplevel/CompilationUnit.java @@ -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(); } } diff --git a/plugins/groovy/testdata/groovy/actions/smartEnter/methCallWithArg.test b/plugins/groovy/testdata/groovy/actions/smartEnter/methCallWithArg.test index f4dfbc18e8fb..d67b76245bcf 100644 --- a/plugins/groovy/testdata/groovy/actions/smartEnter/methCallWithArg.test +++ b/plugins/groovy/testdata/groovy/actions/smartEnter/methCallWithArg.test @@ -2,7 +2,8 @@ def () { a( } ----- -def () { - a( - +def () +{ + a() + } \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/statements/declaration/decl11.test b/plugins/groovy/testdata/parsing/groovy/statements/declaration/decl11.test index 77b00b001cbb..c6829fba6223 100644 --- a/plugins/groovy/testdata/parsing/groovy/statements/declaration/decl11.test +++ b/plugins/groovy/testdata/parsing/groovy/statements/declaration/decl11.test @@ -36,6 +36,9 @@ Groovy script PsiErrorElement:';' or new line expected PsiElement(identifier)('other') PsiElement())(')') - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + Closable block PsiElement({)('{') + Parameter list + PsiElement(})('}') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/statements/for/for10.test b/plugins/groovy/testdata/parsing/groovy/statements/for/for10.test index bec24b69f0a0..5e96c804ecf3 100644 --- a/plugins/groovy/testdata/parsing/groovy/statements/for/for10.test +++ b/plugins/groovy/testdata/parsing/groovy/statements/for/for10.test @@ -37,5 +37,8 @@ Groovy script PsiElement(++)('++') PsiErrorElement:';' or new line expected PsiElement())(')') + Closable block PsiElement({)('{') + Parameter list + PsiElement(})('}') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/statements/for/for9.test b/plugins/groovy/testdata/parsing/groovy/statements/for/for9.test index bec24b69f0a0..5e96c804ecf3 100644 --- a/plugins/groovy/testdata/parsing/groovy/statements/for/for9.test +++ b/plugins/groovy/testdata/parsing/groovy/statements/for/for9.test @@ -37,5 +37,8 @@ Groovy script PsiElement(++)('++') PsiErrorElement:';' or new line expected PsiElement())(')') + Closable block PsiElement({)('{') + Parameter list + PsiElement(})('}') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/statements/loop/while2.test b/plugins/groovy/testdata/parsing/groovy/statements/loop/while2.test index d01830144261..b3d3a31763b8 100644 --- a/plugins/groovy/testdata/parsing/groovy/statements/loop/while2.test +++ b/plugins/groovy/testdata/parsing/groovy/statements/loop/while2.test @@ -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 + + Method call + Reference expression + PsiElement(identifier)('doSomething') + Arguments + PsiElement(()('(') + PsiElement())(')') PsiElement(})('}') \ No newline at end of file diff --git a/plugins/groovy/testdata/parsing/groovy/statements/try_catch/try3.test b/plugins/groovy/testdata/parsing/groovy/statements/try_catch/try3.test index 340b7315c0f4..b1329d4d318a 100644 --- a/plugins/groovy/testdata/parsing/groovy/statements/try_catch/try3.test +++ b/plugins/groovy/testdata/parsing/groovy/statements/try_catch/try3.test @@ -27,13 +27,20 @@ Groovy script PsiErrorElement:')' expected PsiWhiteSpace(' ') - PsiErrorElement:';' or new line expected + Closable block PsiElement({)('{') + Parameter list + PsiElement(})('}') - PsiWhiteSpace('\n') + PsiWhiteSpace('\n') + PsiErrorElement:';' or new line expected PsiElement(finally)('finally') + Closable block PsiElement({)('{') PsiWhiteSpace(' ') - PsiElement(identifier)('doNothing') + Parameter list + + Reference expression + PsiElement(identifier)('doNothing') PsiWhiteSpace(' ') PsiElement(})('}') \ No newline at end of file