diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java index ff2ee0ff012..5a099318842 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorForStatements.java @@ -335,6 +335,12 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito final ExpressionTypingContext context = contextWithExpectedType.replaceExpectedType(NO_EXPECTED_TYPE).replaceScope(scope).replaceContextDependency(INDEPENDENT); JetExpression leftOperand = expression.getLeft(); + if (leftOperand instanceof JetAnnotatedExpression) { + // We will lose all annotations during deparenthesizing, so we have to resolve them right now + components.annotationResolver.resolveAnnotationsWithArguments( + scope, ((JetAnnotatedExpression) leftOperand).getAnnotationEntries(), context.trace + ); + } JetExpression left = deparenthesizeWithResolutionStrategy(leftOperand, new Function() { @Override public Void apply(JetTypeReference reference) { diff --git a/compiler/testData/diagnostics/tests/annotations/options/assignment.kt b/compiler/testData/diagnostics/tests/annotations/options/assignment.kt new file mode 100644 index 00000000000..d4df8648343 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/options/assignment.kt @@ -0,0 +1,9 @@ +@Target(AnnotationTarget.EXPRESSION) +annotation class ExprAnn + +fun foo(): Int { + var a: Int + @ExprAnn a = 1 + @ExprAnn a += 1 + return a +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/options/assignment.txt b/compiler/testData/diagnostics/tests/annotations/options/assignment.txt new file mode 100644 index 00000000000..c076523e7bf --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/options/assignment.txt @@ -0,0 +1,10 @@ +package + +public fun foo(): kotlin.Int + +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.EXPRESSION}) @kotlin.annotation.annotation() public final class ExprAnn : kotlin.Annotation { + public constructor ExprAnn() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 8a9e2e8965c..629a335c45c 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -1040,6 +1040,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/annotations/options/assignment.kt"); + doTest(fileName); + } + @TestMetadata("documented.kt") public void testDocumented() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/annotations/options/documented.kt");