Don't parse condition if there's no ( for if
This commit is contained in:
@@ -1548,13 +1548,14 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
*/
|
*/
|
||||||
private void parseCondition() {
|
private void parseCondition() {
|
||||||
myBuilder.disableNewlines();
|
myBuilder.disableNewlines();
|
||||||
expect(LPAR, "Expecting a condition in parentheses '(...)'");
|
|
||||||
|
|
||||||
PsiBuilder.Marker condition = mark();
|
if (expect(LPAR, "Expecting a condition in parentheses '(...)'", EXPRESSION_FIRST)) {
|
||||||
parseExpression();
|
PsiBuilder.Marker condition = mark();
|
||||||
condition.done(CONDITION);
|
parseExpression();
|
||||||
|
condition.done(CONDITION);
|
||||||
|
expect(RPAR, "Expecting ')");
|
||||||
|
}
|
||||||
|
|
||||||
expect(RPAR, "Expecting ')");
|
|
||||||
myBuilder.restoreNewlinesState();
|
myBuilder.restoreNewlinesState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fun test(): Boolean {
|
||||||
|
do {
|
||||||
|
|
||||||
|
} while()
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
JetFile: DoWhileWithEmptyCondition.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('test')
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiElement(COLON)(':')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Boolean')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
DO_WHILE
|
||||||
|
PsiElement(do)('do')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BODY
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(while)('while')
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
CONDITION
|
||||||
|
PsiErrorElement:Expecting an expression
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
RETURN
|
||||||
|
PsiElement(return)('return')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BOOLEAN_CONSTANT
|
||||||
|
PsiElement(true)('true')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
fun test(): Boolean {
|
||||||
|
do {
|
||||||
|
|
||||||
|
} while
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
JetFile: DoWhileWithoutLPar.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('test')
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiElement(COLON)(':')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Boolean')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
DO_WHILE
|
||||||
|
PsiElement(do)('do')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BODY
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(while)('while')
|
||||||
|
PsiErrorElement:Expecting a condition in parentheses '(...)'
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
RETURN
|
||||||
|
PsiElement(return)('return')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BOOLEAN_CONSTANT
|
||||||
|
PsiElement(true)('true')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun test() {
|
||||||
|
if ()
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
JetFile: IfWithEmptyCondition.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('test')
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IF
|
||||||
|
PsiElement(if)('if')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
CONDITION
|
||||||
|
PsiErrorElement:Expecting an expression
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
THEN
|
||||||
|
RETURN
|
||||||
|
PsiElement(return)('return')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BOOLEAN_CONSTANT
|
||||||
|
PsiElement(true)('true')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fun test() {
|
||||||
|
if
|
||||||
|
|
||||||
|
if (other) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
JetFile: IfWithoutLPar.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('test')
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
IF
|
||||||
|
PsiElement(if)('if')
|
||||||
|
PsiErrorElement:Expecting a condition in parentheses '(...)'
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
THEN
|
||||||
|
IF
|
||||||
|
PsiElement(if)('if')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
CONDITION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('other')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
THEN
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun test() {
|
||||||
|
while ()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
JetFile: WhileWithEmptyCondition.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('test')
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
WHILE
|
||||||
|
PsiElement(while)('while')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
CONDITION
|
||||||
|
PsiErrorElement:Expecting an expression
|
||||||
|
<empty list>
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
BODY
|
||||||
|
RETURN
|
||||||
|
PsiElement(return)('return')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun test(): Boolean {
|
||||||
|
while
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
JetFile: WhileWithoutLPar.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('test')
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiElement(COLON)(':')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('Boolean')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
WHILE
|
||||||
|
PsiElement(while)('while')
|
||||||
|
PsiErrorElement:Expecting a condition in parentheses '(...)'
|
||||||
|
<empty list>
|
||||||
|
PsiWhiteSpace('\n\n ')
|
||||||
|
BODY
|
||||||
|
RETURN
|
||||||
|
PsiElement(return)('return')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BOOLEAN_CONSTANT
|
||||||
|
PsiElement(true)('true')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
@@ -882,7 +882,19 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testAllFilesPresentInRecovery() throws Exception {
|
public void testAllFilesPresentInRecovery() throws Exception {
|
||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi/recovery"), Pattern.compile("^(.*)\\.kts?$"), true);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage",
|
||||||
|
new File("compiler/testData/psi/recovery"), Pattern.compile("^(.*)\\.kts?$"),
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("DoWhileWithEmptyCondition.kt")
|
||||||
|
public void testDoWhileWithEmptyCondition() throws Exception {
|
||||||
|
doParsingTest("compiler/testData/psi/recovery/DoWhileWithEmptyCondition.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("DoWhileWithoutLPar.kt")
|
||||||
|
public void testDoWhileWithoutLPar() throws Exception {
|
||||||
|
doParsingTest("compiler/testData/psi/recovery/DoWhileWithoutLPar.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("EnumEntryInitList.kt")
|
@TestMetadata("EnumEntryInitList.kt")
|
||||||
@@ -895,6 +907,16 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest {
|
|||||||
doParsingTest("compiler/testData/psi/recovery/ForRecovery.kt");
|
doParsingTest("compiler/testData/psi/recovery/ForRecovery.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("IfWithEmptyCondition.kt")
|
||||||
|
public void testIfWithEmptyCondition() throws Exception {
|
||||||
|
doParsingTest("compiler/testData/psi/recovery/IfWithEmptyCondition.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("IfWithoutLPar.kt")
|
||||||
|
public void testIfWithoutLPar() throws Exception {
|
||||||
|
doParsingTest("compiler/testData/psi/recovery/IfWithoutLPar.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("ImportRecovery.kt")
|
@TestMetadata("ImportRecovery.kt")
|
||||||
public void testImportRecovery() throws Exception {
|
public void testImportRecovery() throws Exception {
|
||||||
doParsingTest("compiler/testData/psi/recovery/ImportRecovery.kt");
|
doParsingTest("compiler/testData/psi/recovery/ImportRecovery.kt");
|
||||||
@@ -950,6 +972,16 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest {
|
|||||||
doParsingTest("compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.kt");
|
doParsingTest("compiler/testData/psi/recovery/ValueParameterNoTypeRecovery.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("WhileWithEmptyCondition.kt")
|
||||||
|
public void testWhileWithEmptyCondition() throws Exception {
|
||||||
|
doParsingTest("compiler/testData/psi/recovery/WhileWithEmptyCondition.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("WhileWithoutLPar.kt")
|
||||||
|
public void testWhileWithoutLPar() throws Exception {
|
||||||
|
doParsingTest("compiler/testData/psi/recovery/WhileWithoutLPar.kt");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/psi/script")
|
@TestMetadata("compiler/testData/psi/script")
|
||||||
|
|||||||
Reference in New Issue
Block a user