From 41864c29b21e0371195f0abe6f6fdd2207e79e2f Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 14 Nov 2012 22:45:45 +0400 Subject: [PATCH] analyze left expression in assignment operation when it's incomplete --- .../ExpressionTypingVisitorForStatements.java | 15 ++++++++------- .../tests/incompleteCode/incompleteAssignment.kt | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) 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 4e4fd2a2e74..e196f4e55e5 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 @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.types.expressions; import com.google.common.collect.Sets; -import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -193,9 +192,6 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito } protected JetType visitAssignmentOperation(JetBinaryExpression expression, ExpressionTypingContext contextWithExpectedType) { - JetExpression right = expression.getRight(); - if (right == null) return null; - //There is a temporary binding trace for an opportunity to resolve set method for array if needed (the initial trace should be used there) TemporaryBindingTrace temporaryBindingTrace = TemporaryBindingTrace.create( contextWithExpectedType.trace, "trace to resolve array set method for binary expression", expression); @@ -203,10 +199,15 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito JetSimpleNameExpression operationSign = expression.getOperationReference(); IElementType operationType = operationSign.getReferencedNameElementType(); - JetExpression left = JetPsiUtil.deparenthesize(expression.getLeft()); - if (left == null) return null; + JetType leftType = facade.getTypeInfo(expression.getLeft(), context).getType(); + + JetExpression right = expression.getRight(); + JetExpression left = JetPsiUtil.deparenthesize(expression.getLeft()); + if (right == null || left == null) { + temporaryBindingTrace.commit(); + return null; + } - JetType leftType = facade.getTypeInfo(left, context).getType(); if (leftType == null) { facade.getTypeInfo(right, context); context.trace.report(UNRESOLVED_REFERENCE.on(operationSign)); diff --git a/compiler/testData/diagnostics/tests/incompleteCode/incompleteAssignment.kt b/compiler/testData/diagnostics/tests/incompleteCode/incompleteAssignment.kt index ae97c706035..ee8aa3b74ae 100644 --- a/compiler/testData/diagnostics/tests/incompleteCode/incompleteAssignment.kt +++ b/compiler/testData/diagnostics/tests/incompleteCode/incompleteAssignment.kt @@ -5,7 +5,7 @@ fun sum(a : IntArray) : Int { // Write your solution here res = 0 for (e in a) - res += + res += } fun main(args : Array) { test(0)