added checkType of TypeInfo method

This commit is contained in:
Svetlana Isakova
2013-09-01 16:57:47 +04:00
parent 70b11f6d39
commit cf22bc7c35
3 changed files with 15 additions and 7 deletions
@@ -284,7 +284,7 @@ public class CallExpressionResolver {
JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck( JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck(
callExpression, receiver, callOperationNode, context); callExpression, receiver, callOperationNode, context);
if (context.contextDependency == ContextDependency.INDEPENDENT) { if (context.contextDependency == ContextDependency.INDEPENDENT) {
DataFlowUtils.checkType(typeInfo.getType(), callExpression, context, typeInfo.getDataFlowInfo()); DataFlowUtils.checkType(typeInfo, callExpression, context);
} }
return typeInfo; return typeInfo;
} }
@@ -409,7 +409,7 @@ public class CallExpressionResolver {
} }
JetTypeInfo typeInfo = JetTypeInfo.create(selectorReturnType, selectorReturnTypeInfo.getDataFlowInfo()); JetTypeInfo typeInfo = JetTypeInfo.create(selectorReturnType, selectorReturnTypeInfo.getDataFlowInfo());
if (context.contextDependency == ContextDependency.INDEPENDENT) { if (context.contextDependency == ContextDependency.INDEPENDENT) {
DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); DataFlowUtils.checkType(typeInfo, expression, context);
} }
return typeInfo; return typeInfo;
} }
@@ -101,7 +101,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
return JetTypeInfo.create(null, context.dataFlowInfo); return JetTypeInfo.create(null, context.dataFlowInfo);
} }
JetTypeInfo typeInfo = facade.getTypeInfo(innerExpression, context.replaceScope(context.scope), isStatement); JetTypeInfo typeInfo = facade.getTypeInfo(innerExpression, context.replaceScope(context.scope), isStatement);
return DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); return DataFlowUtils.checkType(typeInfo, expression, context);
} }
private static JetTypeInfo createNumberValueTypeInfo( private static JetTypeInfo createNumberValueTypeInfo(
@@ -845,7 +845,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
// TODO : Some processing for the label? // TODO : Some processing for the label?
JetTypeInfo typeInfo = facade.getTypeInfo(baseExpression, context, isStatement); JetTypeInfo typeInfo = facade.getTypeInfo(baseExpression, context, isStatement);
context.labelResolver.exitLabeledElement(baseExpression); context.labelResolver.exitLabeledElement(baseExpression);
return DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); return DataFlowUtils.checkType(typeInfo, expression, context);
} }
private static boolean isKnownToBeNotNull(JetExpression expression, ExpressionTypingContext context) { private static boolean isKnownToBeNotNull(JetExpression expression, ExpressionTypingContext context) {
@@ -932,7 +932,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
context.trace.report(UNSUPPORTED.on(operationSign, "Unknown operation")); context.trace.report(UNSUPPORTED.on(operationSign, "Unknown operation"));
result = JetTypeInfo.create(null, context.dataFlowInfo); result = JetTypeInfo.create(null, context.dataFlowInfo);
} }
return DataFlowUtils.checkType(result.getType(), expression, contextWithExpectedType, result.getDataFlowInfo()); return DataFlowUtils.checkType(result, expression, contextWithExpectedType);
} }
private JetTypeInfo visitEquality( private JetTypeInfo visitEquality(
@@ -1166,7 +1166,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
@Override @Override
public JetTypeInfo visitArrayAccessExpression(JetArrayAccessExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitArrayAccessExpression(JetArrayAccessExpression expression, ExpressionTypingContext context) {
JetTypeInfo typeInfo = resolveArrayAccessGetMethod(expression, context); JetTypeInfo typeInfo = resolveArrayAccessGetMethod(expression, context);
return DataFlowUtils.checkType(typeInfo.getType(), expression, context, typeInfo.getDataFlowInfo()); return DataFlowUtils.checkType(typeInfo, expression, context);
} }
@NotNull @NotNull
@@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency;
import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext; import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValue; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowValue;
@@ -140,6 +139,15 @@ public class DataFlowUtils {
return JetTypeInfo.create(checkType(expressionType, expression, context), dataFlowInfo); return JetTypeInfo.create(checkType(expressionType, expression, context), dataFlowInfo);
} }
@NotNull
public static JetTypeInfo checkType(@NotNull JetTypeInfo typeInfo, @NotNull JetExpression expression, @NotNull ResolutionContext context) {
JetType type = checkType(typeInfo.getType(), expression, context);
if (type == typeInfo.getType()) {
return typeInfo;
}
return JetTypeInfo.create(type, typeInfo.getDataFlowInfo());
}
@Nullable @Nullable
public static JetType checkType(@Nullable JetType expressionType, @NotNull JetExpression expression, @NotNull ResolutionContext context) { public static JetType checkType(@Nullable JetType expressionType, @NotNull JetExpression expression, @NotNull ResolutionContext context) {
return checkType(expressionType, expression, context.expectedType, context.dataFlowInfo, context.trace); return checkType(expressionType, expression, context.expectedType, context.dataFlowInfo, context.trace);