moved 'makeTraceInterceptingTypeMismatch' to ExpressionTypingUtils
This commit is contained in:
+1
-21
@@ -21,14 +21,12 @@ import com.google.common.collect.Lists;
|
|||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptorUtil;
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptorUtil;
|
||||||
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
|
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.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.*;
|
import org.jetbrains.jet.lang.resolve.*;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
|
||||||
@@ -47,11 +45,10 @@ import org.jetbrains.jet.lexer.JetTokens;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.*;
|
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.LABEL_TARGET;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.STATEMENT;
|
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.TypeUtils.NO_EXPECTED_TYPE;
|
||||||
|
import static org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils.makeTraceInterceptingTypeMismatch;
|
||||||
|
|
||||||
public class ExpressionTypingServices {
|
public class ExpressionTypingServices {
|
||||||
|
|
||||||
@@ -368,23 +365,6 @@ public class ExpressionTypingServices {
|
|||||||
this, oldContext.labelResolver, trace, scope, dataFlowInfo, expectedType, oldContext.namespacesAllowed);
|
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
|
@Nullable
|
||||||
public JetExpression deparenthesize(
|
public JetExpression deparenthesize(
|
||||||
@NotNull JetExpression expression,
|
@NotNull JetExpression expression,
|
||||||
|
|||||||
+22
@@ -22,11 +22,14 @@ import com.intellij.openapi.util.Pair;
|
|||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.tree.IElementType;
|
import com.intellij.psi.tree.IElementType;
|
||||||
import com.intellij.psi.tree.TokenSet;
|
import com.intellij.psi.tree.TokenSet;
|
||||||
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.JetNodeTypes;
|
import org.jetbrains.jet.JetNodeTypes;
|
||||||
import org.jetbrains.jet.lang.ModuleConfiguration;
|
import org.jetbrains.jet.lang.ModuleConfiguration;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
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.diagnostics.Errors;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.*;
|
import org.jetbrains.jet.lang.resolve.*;
|
||||||
@@ -386,4 +389,23 @@ public class ExpressionTypingUtils {
|
|||||||
return TypeUtils.NO_EXPECTED_TYPE;
|
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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user