Resolve parenthesized element as expression

This commit is contained in:
Stanislav Erokhin
2015-02-03 21:51:21 +03:00
parent 3b92cab9e0
commit a33450395c
12 changed files with 26 additions and 43 deletions
@@ -107,15 +107,11 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
@Override @Override
public JetTypeInfo visitParenthesizedExpression(@NotNull JetParenthesizedExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitParenthesizedExpression(@NotNull JetParenthesizedExpression expression, ExpressionTypingContext context) {
return visitParenthesizedExpression(expression, context, false);
}
public JetTypeInfo visitParenthesizedExpression(JetParenthesizedExpression expression, ExpressionTypingContext context, boolean isStatement) {
JetExpression innerExpression = expression.getExpression(); JetExpression innerExpression = expression.getExpression();
if (innerExpression == null) { if (innerExpression == null) {
return JetTypeInfo.create(null, context.dataFlowInfo); return JetTypeInfo.create(null, context.dataFlowInfo);
} }
return facade.getTypeInfo(innerExpression, context.replaceScope(context.scope), isStatement); return facade.getTypeInfo(innerExpression, context.replaceScope(context.scope));
} }
@Override @Override
@@ -415,11 +415,6 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
return components.expressionTypingServices.getBlockReturnedType(expression, context, true); return components.expressionTypingServices.getBlockReturnedType(expression, context, true);
} }
@Override
public JetTypeInfo visitParenthesizedExpression(@NotNull JetParenthesizedExpression expression, ExpressionTypingContext context) {
return basic.visitParenthesizedExpression(expression, context, true);
}
@Override @Override
public JetTypeInfo visitLabeledExpression(@NotNull JetLabeledExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitLabeledExpression(@NotNull JetLabeledExpression expression, ExpressionTypingContext context) {
return basic.visitLabeledExpression(expression, context, true); return basic.visitLabeledExpression(expression, context, true);
@@ -1,16 +0,0 @@
data class A(val a: Int, val b: Int)
fun box() : String
{
(@a val x = 1)
(@b fun a() = 2)
(@c val (z, z2) = A(1, 2))
if (x != 1) return "fail 1"
if (a() != 2) return "fail 2"
if (z != 1 || z2 != 2) return "fail 3"
return "OK"
}
@@ -15,7 +15,7 @@ open class AllEvenNum() {
} }
} }
(i = i + 1) i = i + 1
} }
} }
@@ -1,23 +1,23 @@
class C { class C {
fun f (<!UNUSED_PARAMETER!>a<!> : Boolean, <!UNUSED_PARAMETER!>b<!> : Boolean) { fun f (<!UNUSED_PARAMETER!>a<!> : Boolean, <!UNUSED_PARAMETER!>b<!> : Boolean) {
@b (while (true) @b while (true)
@a { @a {
<!NOT_A_LOOP_LABEL!>break@f<!> <!NOT_A_LOOP_LABEL!>break@f<!>
break break
<!UNREACHABLE_CODE!>break@b<!> <!UNREACHABLE_CODE!>break@b<!>
<!NOT_A_LOOP_LABEL!>break@a<!> <!NOT_A_LOOP_LABEL!>break@a<!>
}) }
<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!> <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>continue<!>
@b (while (true) @b while (true)
@a { @a {
<!NOT_A_LOOP_LABEL!>continue@f<!> <!NOT_A_LOOP_LABEL!>continue@f<!>
continue continue
<!UNREACHABLE_CODE!>continue@b<!> <!UNREACHABLE_CODE!>continue@b<!>
<!NOT_A_LOOP_LABEL!>continue@a<!> <!NOT_A_LOOP_LABEL!>continue@a<!>
}) }
<!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break<!> <!BREAK_OR_CONTINUE_OUTSIDE_A_LOOP!>break<!>
@@ -0,0 +1,3 @@
fun test() {
(@d <!DECLARATION_IN_ILLEGAL_CONTEXT!>val bar = 2<!>)
}
@@ -0,0 +1,3 @@
package
internal fun test(): kotlin.Unit
@@ -3552,6 +3552,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/deparenthesize/checkDeparenthesizedType.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/deparenthesize/checkDeparenthesizedType.kt");
doTest(fileName); doTest(fileName);
} }
@TestMetadata("ParenthesizedVariable.kt")
public void testParenthesizedVariable() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/deparenthesize/ParenthesizedVariable.kt");
doTest(fileName);
}
} }
@TestMetadata("compiler/testData/diagnostics/tests/duplicateJvmSignature") @TestMetadata("compiler/testData/diagnostics/tests/duplicateJvmSignature")
@@ -4317,12 +4317,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName); doTest(fileName);
} }
@TestMetadata("labeledDeclarations2.kt")
public void testLabeledDeclarations2() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/labels/labeledDeclarations2.kt");
doTest(fileName);
}
@TestMetadata("propertyAccessor.kt") @TestMetadata("propertyAccessor.kt")
public void testPropertyAccessor() throws Exception { public void testPropertyAccessor() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/labels/propertyAccessor.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/labels/propertyAccessor.kt");
+6 -6
View File
@@ -1,23 +1,23 @@
class C { class C {
fun f (<warning>a</warning> : Boolean, <warning>b</warning> : Boolean) { fun f (<warning>a</warning> : Boolean, <warning>b</warning> : Boolean) {
@b (while (true) @b (<error descr="[EXPRESSION_EXPECTED] While is not an expression, and only expressions are allowed here">while (true)
@a { @a {
<error>break@f</error> <error>break@f</error>
break break
<warning>break@b</warning> break@b
<error>break@a</error> <error>break@a</error>
}) }</error>)
<error>continue</error> <error>continue</error>
@b (while (true) @b (<error descr="[EXPRESSION_EXPECTED] While is not an expression, and only expressions are allowed here">while (true)
@a { @a {
<error>continue@f</error> <error>continue@f</error>
continue continue
<warning>continue@b</warning> continue@b
<error>continue@a</error> <error>continue@a</error>
}) }</error>)
<error>break</error> <error>break</error>
@@ -1,4 +1,5 @@
// "Suppress 'UNNECESSARY_NOT_NULL_ASSERTION' for statement " "true" // "Suppress 'UNNECESSARY_NOT_NULL_ASSERTION' for statement " "true"
// ERROR: Assignments are not expressions, and only expressions are allowed in this context
fun foo() { fun foo() {
var x = 0 var x = 0
@@ -1,4 +1,5 @@
// "Suppress 'UNNECESSARY_NOT_NULL_ASSERTION' for statement " "true" // "Suppress 'UNNECESSARY_NOT_NULL_ASSERTION' for statement " "true"
// ERROR: Assignments are not expressions, and only expressions are allowed in this context
fun foo() { fun foo() {
var x = 0 var x = 0