diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 628af320b3b..02241b6b24b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -1169,6 +1169,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { @Override public JetTypeInfo visitAnnotatedExpression(JetAnnotatedExpression expression, ExpressionTypingContext context) { + return visitAnnotatedExpression(expression, context, false); + } + + public JetTypeInfo visitAnnotatedExpression(JetAnnotatedExpression expression, ExpressionTypingContext context, boolean isStatement) { context.expressionTypingServices.getAnnotationResolver().resolveAnnotationsWithArguments( context.scope, expression.getAnnotationEntries(), context.trace); @@ -1176,7 +1180,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { if (baseExpression == null) { return JetTypeInfo.create(null, context.dataFlowInfo); } - return facade.getTypeInfo(baseExpression, context); + return facade.getTypeInfo(baseExpression, context, isStatement); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java index fe4ed3aa5be..f0b282065d0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java @@ -356,6 +356,13 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito return controlStructures.visitForExpression(expression, context, true); } + @Override + public JetTypeInfo visitAnnotatedExpression( + @NotNull JetAnnotatedExpression expression, ExpressionTypingContext data + ) { + return basic.visitAnnotatedExpression(expression, data, true); + } + @Override public JetTypeInfo visitIfExpression(JetIfExpression expression, ExpressionTypingContext context) { return controlStructures.visitIfExpression(expression, context, true); diff --git a/compiler/testData/diagnostics/tests/annotations/onLoops.kt b/compiler/testData/diagnostics/tests/annotations/onLoops.kt new file mode 100644 index 00000000000..427af32532a --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/onLoops.kt @@ -0,0 +1,12 @@ +fun test() { + [ann] + while (1 < 2) {} + + [ann] + do {} while (1 < 2) + + [ann] + for (i in 1..2) {} +} + +annotation class ann \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 7e7d55b2d5b..fb72e7d9516 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -615,6 +615,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/annotations/onExpression.kt"); } + @TestMetadata("onLoops.kt") + public void testOnLoops() throws Exception { + doTest("compiler/testData/diagnostics/tests/annotations/onLoops.kt"); + } + @TestMetadata("onMultiDeclaration.kt") public void testOnMultiDeclaration() throws Exception { doTest("compiler/testData/diagnostics/tests/annotations/onMultiDeclaration.kt");