mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
groovy switch parsing should preseve brace nesting
This commit is contained in:
+7
@@ -104,6 +104,13 @@ public class SwitchStatement implements GroovyElementTypes {
|
||||
parser.parseSwitchCaseList(builder);
|
||||
}
|
||||
sectionMarker.done(CASE_SECTION);
|
||||
|
||||
if (builder.getTokenType() != kCASE && builder.getTokenType() != kDEFAULT && builder.getTokenType() != mRCURLY) {
|
||||
builder.error("case, default or } expected");
|
||||
while (!builder.eof() && builder.getTokenType() != kCASE && builder.getTokenType() != kDEFAULT && builder.getTokenType() != mRCURLY) {
|
||||
builder.advanceLexer();
|
||||
}
|
||||
}
|
||||
}
|
||||
ParserUtils.getToken(builder, mRCURLY, GroovyBundle.message("rcurly.expected"));
|
||||
}
|
||||
|
||||
@@ -98,5 +98,20 @@ class GroovyReparseTest extends LightCodeInsightFixtureTestCase {
|
||||
""", "switch "
|
||||
}
|
||||
|
||||
public void testSwitchCaseDot() throws Exception {
|
||||
checkReparse """
|
||||
def foo() {
|
||||
switch(x) {
|
||||
case 2:
|
||||
return <caret>
|
||||
case 3:
|
||||
return false
|
||||
case 4:
|
||||
return false
|
||||
}
|
||||
}
|
||||
""", "foo."
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
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 ')
|
||||
Switch statement
|
||||
PsiElement(switch)('switch')
|
||||
PsiElement(()('(')
|
||||
Reference expression
|
||||
PsiElement(identifier)('x')
|
||||
PsiElement())(')')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
Case section
|
||||
Case label
|
||||
PsiElement(case)('case')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(Integer)('2')
|
||||
PsiElement(:)(':')
|
||||
PsiElement(new line)('\n ')
|
||||
RETURN statement
|
||||
PsiElement(return)('return')
|
||||
PsiWhiteSpace(' ')
|
||||
Reference expression
|
||||
Reference expression
|
||||
PsiElement(identifier)('foo')
|
||||
PsiElement(.)('.')
|
||||
PsiElement(new line)('\n ')
|
||||
PsiElement(case)('case')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(Integer)('3')
|
||||
PsiErrorElement:case, default or } expected
|
||||
<empty list>
|
||||
PsiElement(:)(':')
|
||||
PsiElement(new line)('\n ')
|
||||
PsiElement(return)('return')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(false)('false')
|
||||
PsiElement(new line)('\n ')
|
||||
Case section
|
||||
Case label
|
||||
PsiElement(case)('case')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(Integer)('4')
|
||||
PsiElement(:)(':')
|
||||
PsiElement(new line)('\n ')
|
||||
RETURN statement
|
||||
PsiElement(return)('return')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(false)('false')
|
||||
PsiElement(new line)('\n ')
|
||||
PsiElement(})('}')
|
||||
PsiElement(new line)('\n ')
|
||||
PsiElement(})('}')
|
||||
PsiElement(new line)('\n')
|
||||
@@ -0,0 +1,70 @@
|
||||
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 ')
|
||||
Switch statement
|
||||
PsiElement(switch)('switch')
|
||||
PsiElement(()('(')
|
||||
Reference expression
|
||||
PsiElement(identifier)('x')
|
||||
PsiElement())(')')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement({)('{')
|
||||
PsiWhiteSpace('\n ')
|
||||
Case section
|
||||
Case label
|
||||
PsiElement(case)('case')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(Integer)('2')
|
||||
PsiElement(:)(':')
|
||||
PsiElement(new line)('\n ')
|
||||
RETURN statement
|
||||
PsiElement(return)('return')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(new line)('\n ')
|
||||
Case section
|
||||
Case label
|
||||
PsiElement(case)('case')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(Integer)('3')
|
||||
PsiElement(:)(':')
|
||||
PsiElement(new line)('\n ')
|
||||
RETURN statement
|
||||
PsiElement(return)('return')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(false)('false')
|
||||
PsiElement(new line)('\n ')
|
||||
Case section
|
||||
Case label
|
||||
PsiElement(case)('case')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(Integer)('4')
|
||||
PsiElement(:)(':')
|
||||
PsiElement(new line)('\n ')
|
||||
RETURN statement
|
||||
PsiElement(return)('return')
|
||||
PsiWhiteSpace(' ')
|
||||
Literal
|
||||
PsiElement(false)('false')
|
||||
PsiElement(new line)('\n ')
|
||||
PsiElement(})('}')
|
||||
PsiElement(new line)('\n ')
|
||||
PsiElement(})('}')
|
||||
PsiElement(new line)('\n')
|
||||
Reference in New Issue
Block a user