mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
while condition doesn't eat }
This commit is contained in:
@@ -92,17 +92,13 @@ public class GroovyParser implements PsiParser {
|
||||
ParserUtils.getToken(builder, GroovyTokenTypes.mNLS);
|
||||
|
||||
if (!ParserUtils.getToken(builder, GroovyTokenTypes.mRPAREN, GroovyBundle.message("rparen.expected"))) {
|
||||
while (!builder.eof() && GroovyTokenTypes.mNLS == builder.getTokenType()){
|
||||
builder.advanceLexer();
|
||||
}
|
||||
while (ParserUtils.getToken(builder, mNLS)) {}
|
||||
marker.done(FOR_STATEMENT);
|
||||
return true;
|
||||
}
|
||||
|
||||
PsiBuilder.Marker warn = builder.mark();
|
||||
if (builder.getTokenType() == GroovyTokenTypes.mNLS) {
|
||||
ParserUtils.getToken(builder, GroovyTokenTypes.mNLS);
|
||||
}
|
||||
ParserUtils.getToken(builder, GroovyTokenTypes.mNLS);
|
||||
|
||||
if (parseExtendedStatement(builder)) {
|
||||
warn.rollbackTo();
|
||||
@@ -239,14 +235,8 @@ public class GroovyParser implements PsiParser {
|
||||
ParserUtils.getToken(builder, GroovyTokenTypes.mNLS);
|
||||
|
||||
if (!ParserUtils.getToken(builder, GroovyTokenTypes.mRPAREN, GroovyBundle.message("rparen.expected"))) {
|
||||
while (!builder.eof() && !GroovyTokenTypes.mNLS.equals(builder.getTokenType()) && !GroovyTokenTypes.mRPAREN.equals(builder.getTokenType())) {
|
||||
builder.advanceLexer();
|
||||
builder.error(GroovyBundle.message("rparen.expected"));
|
||||
}
|
||||
if (!ParserUtils.getToken(builder, GroovyTokenTypes.mRPAREN)) {
|
||||
marker.done(WHILE_STATEMENT);
|
||||
return true;
|
||||
}
|
||||
marker.done(WHILE_STATEMENT);
|
||||
return true;
|
||||
}
|
||||
|
||||
PsiBuilder.Marker warn = builder.mark();
|
||||
@@ -255,13 +245,12 @@ public class GroovyParser implements PsiParser {
|
||||
if (!parseStatement(builder, true) && !parseExtendedStatement(builder)) {
|
||||
warn.rollbackTo();
|
||||
builder.error(GroovyBundle.message("expression.expected"));
|
||||
marker.done(WHILE_STATEMENT);
|
||||
return true;
|
||||
} else {
|
||||
warn.drop();
|
||||
marker.done(WHILE_STATEMENT);
|
||||
return true;
|
||||
}
|
||||
|
||||
marker.done(WHILE_STATEMENT);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void parseBlockBody(PsiBuilder builder) {
|
||||
|
||||
@@ -149,5 +149,16 @@ def foo() {
|
||||
""", "\b"
|
||||
}
|
||||
|
||||
public void testWhileRParen() {
|
||||
checkReparse """
|
||||
def foo() {
|
||||
def cl = {
|
||||
while (true<caret> {
|
||||
//
|
||||
}
|
||||
}
|
||||
}""", ";"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
Groovy script
|
||||
PsiElement(new line)('\n')
|
||||
Method
|
||||
Modifiers
|
||||
PsiElement(def)('def')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(identifier)('foo')
|
||||
PsiElement(()('(')
|
||||
Parameter list
|
||||
<empty list>
|
||||
PsiElement())(')')
|
||||
PsiWhiteSpace(' ')
|
||||
Throw clause
|
||||
<empty list>
|
||||
Open block
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
Variable definitions
|
||||
Modifiers
|
||||
PsiElement(def)('def')
|
||||
PsiWhiteSpace(' ')
|
||||
Variable
|
||||
PsiElement(identifier)('cl')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(=)('=')
|
||||
PsiWhiteSpace(' ')
|
||||
Closable block
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
Parameter list
|
||||
<empty list>
|
||||
WHILE statement
|
||||
PsiElement(while)('while')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(()('(')
|
||||
Method call
|
||||
Literal
|
||||
PsiElement(true)('true')
|
||||
PsiWhiteSpace(' ')
|
||||
Arguments
|
||||
<empty list>
|
||||
Closable block
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiComment(line comment)('//')
|
||||
PsiElement(new line)('\n ')
|
||||
Parameter list
|
||||
<empty list>
|
||||
PsiElement(})('}')
|
||||
PsiErrorElement:')' expected
|
||||
<empty list>
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiElement(})('}')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(})('}')
|
||||
---
|
||||
Groovy script
|
||||
PsiElement(new line)('\n')
|
||||
Method
|
||||
Modifiers
|
||||
PsiElement(def)('def')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(identifier)('foo')
|
||||
PsiElement(()('(')
|
||||
Parameter list
|
||||
<empty list>
|
||||
PsiElement())(')')
|
||||
PsiWhiteSpace(' ')
|
||||
Throw clause
|
||||
<empty list>
|
||||
Open block
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
Variable definitions
|
||||
Modifiers
|
||||
PsiElement(def)('def')
|
||||
PsiWhiteSpace(' ')
|
||||
Variable
|
||||
PsiElement(identifier)('cl')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(=)('=')
|
||||
PsiWhiteSpace(' ')
|
||||
Closable block
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
Parameter list
|
||||
<empty list>
|
||||
WHILE statement
|
||||
PsiElement(while)('while')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(()('(')
|
||||
Literal
|
||||
PsiElement(true)('true')
|
||||
PsiErrorElement:')' expected
|
||||
<empty list>
|
||||
PsiElement(;)(';')
|
||||
PsiWhiteSpace(' ')
|
||||
Closable block
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiComment(line comment)('//')
|
||||
PsiElement(new line)('\n ')
|
||||
Parameter list
|
||||
<empty list>
|
||||
PsiElement(})('}')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiElement(})('}')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(})('}')
|
||||
Reference in New Issue
Block a user