From e932b4fa62e16a871ba698c7d22ee54c4c07c6e0 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 30 Jan 2013 16:09:29 +0400 Subject: [PATCH] moved 'makeTraceInterceptingTypeMismatch' to ExpressionTypingUtils --- .../expressions/ExpressionTypingServices.java | 22 +------------------ .../expressions/ExpressionTypingUtils.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java index 789866355b5..91b1a672ae6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingServices.java @@ -21,14 +21,12 @@ import com.google.common.collect.Lists; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; -import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptorUtil; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; -import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; @@ -47,11 +45,10 @@ import org.jetbrains.jet.lexer.JetTokens; import javax.inject.Inject; import java.util.*; -import static org.jetbrains.jet.lang.diagnostics.Errors.TYPE_INFERENCE_ERRORS; -import static org.jetbrains.jet.lang.diagnostics.Errors.TYPE_MISMATCH; import static org.jetbrains.jet.lang.resolve.BindingContext.LABEL_TARGET; import static org.jetbrains.jet.lang.resolve.BindingContext.STATEMENT; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; +import static org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils.makeTraceInterceptingTypeMismatch; public class ExpressionTypingServices { @@ -368,23 +365,6 @@ public class ExpressionTypingServices { this, oldContext.labelResolver, trace, scope, dataFlowInfo, expectedType, oldContext.namespacesAllowed); } - private ObservableBindingTrace makeTraceInterceptingTypeMismatch(final BindingTrace trace, final JetExpression expressionToWatch, final boolean[] mismatchFound) { - return new ObservableBindingTrace(trace) { - - @Override - public void report(@NotNull Diagnostic diagnostic) { - if (diagnostic.getFactory() == TYPE_MISMATCH && diagnostic.getPsiElement() == expressionToWatch) { - mismatchFound[0] = true; - } - if (TYPE_INFERENCE_ERRORS.contains(diagnostic.getFactory()) && - PsiTreeUtil.isAncestor(expressionToWatch, diagnostic.getPsiElement(), false)) { - mismatchFound[0] = true; - } - super.report(diagnostic); - } - }; - } - @Nullable public JetExpression deparenthesize( @NotNull JetExpression expression, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index 3d1f8a19b5a..ba5ffda03c9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -22,11 +22,14 @@ import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; +import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.diagnostics.AbstractDiagnosticFactory; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.*; @@ -386,4 +389,23 @@ public class ExpressionTypingUtils { return TypeUtils.NO_EXPECTED_TYPE; } } + + public static ObservableBindingTrace makeTraceInterceptingTypeMismatch(@NotNull BindingTrace trace, @NotNull final JetElement expressionToWatch, @NotNull final boolean[] mismatchFound) { + return new ObservableBindingTrace(trace) { + + @Override + public void report(@NotNull Diagnostic diagnostic) { + AbstractDiagnosticFactory factory = diagnostic.getFactory(); + if ((factory == TYPE_MISMATCH || factory == ERROR_COMPILE_TIME_VALUE) + && diagnostic.getPsiElement() == expressionToWatch) { + mismatchFound[0] = true; + } + if (TYPE_INFERENCE_ERRORS.contains(factory) && + PsiTreeUtil.isAncestor(expressionToWatch, diagnostic.getPsiElement(), false)) { + mismatchFound[0] = true; + } + super.report(diagnostic); + } + }; + } }