diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/PatternMatchingTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/PatternMatchingTypingVisitor.java index efb9959dc70..d4d34a5de75 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/PatternMatchingTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/PatternMatchingTypingVisitor.java @@ -70,6 +70,10 @@ public class PatternMatchingTypingVisitor extends ExpressionTypingVisitor { } public JetTypeInfo visitWhenExpression(JetWhenExpression expression, ExpressionTypingContext contextWithExpectedType, boolean isStatement) { + if (isStatement) { + contextWithExpectedType.trace.record(BindingContext.STATEMENT, expression); + } + DataFlowUtils.recordExpectedType(contextWithExpectedType.trace, expression, contextWithExpectedType.expectedType); ExpressionTypingContext context = contextWithExpectedType.replaceExpectedType(NO_EXPECTED_TYPE).replaceContextDependency(INDEPENDENT); diff --git a/compiler/testData/diagnostics/tests/when/AnnotatedWhenStatement.kt b/compiler/testData/diagnostics/tests/when/AnnotatedWhenStatement.kt new file mode 100644 index 00000000000..410dc44d3fa --- /dev/null +++ b/compiler/testData/diagnostics/tests/when/AnnotatedWhenStatement.kt @@ -0,0 +1,8 @@ +fun foo(a: Int) { + [ann] + when (a) { + 1 -> {} + } +} + +annotation class ann diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index fb72e7d9516..c142a5a186a 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -5888,6 +5888,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/when"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("AnnotatedWhenStatement.kt") + public void testAnnotatedWhenStatement() throws Exception { + doTest("compiler/testData/diagnostics/tests/when/AnnotatedWhenStatement.kt"); + } + @TestMetadata("NoElseExpectedUnit.kt") public void testNoElseExpectedUnit() throws Exception { doTest("compiler/testData/diagnostics/tests/when/NoElseExpectedUnit.kt"); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java index 07a856b18af..3fe020cab01 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java @@ -138,7 +138,10 @@ public final class ExpressionVisitor extends TranslatorVisitor { @NotNull TranslationContext context) { JetExpression expressionInside = expression.getExpression(); if (expressionInside != null) { - return expressionInside.accept(this, context); + JsNode translated = expressionInside.accept(this, context); + if (translated != null) { + return translated; + } } return context.program().getEmptyStatement(); }