Minor, use ExpressionTypingContext in CallExpressionResolver

Will be needed to use expression-typing-specific things
This commit is contained in:
Alexander Udalov
2013-11-22 16:51:49 +04:00
parent 49f8f0af92
commit d82e8b9a35
@@ -43,6 +43,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.expressions.DataFlowUtils; import org.jetbrains.jet.lang.types.expressions.DataFlowUtils;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingContext;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.lexer.JetTokens;
@@ -71,7 +72,7 @@ public class CallExpressionResolver {
} }
@Nullable @Nullable
private JetType lookupNamespaceOrClassObject(@NotNull JetSimpleNameExpression expression, @NotNull ResolutionContext context) { private JetType lookupNamespaceOrClassObject(@NotNull JetSimpleNameExpression expression, @NotNull ExpressionTypingContext context) {
Name referencedName = expression.getReferencedNameAsName(); Name referencedName = expression.getReferencedNameAsName();
final ClassifierDescriptor classifier = context.scope.getClassifier(referencedName); final ClassifierDescriptor classifier = context.scope.getClassifier(referencedName);
if (classifier != null) { if (classifier != null) {
@@ -133,7 +134,7 @@ public class CallExpressionResolver {
private static void checkClassObjectVisibility( private static void checkClassObjectVisibility(
@NotNull ClassifierDescriptor classifier, @NotNull ClassifierDescriptor classifier,
@NotNull JetSimpleNameExpression expression, @NotNull JetSimpleNameExpression expression,
@NotNull ResolutionContext context @NotNull ExpressionTypingContext context
) { ) {
if (!(classifier instanceof ClassDescriptor)) return; if (!(classifier instanceof ClassDescriptor)) return;
ClassDescriptor classObject = ((ClassDescriptor) classifier).getClassObjectDescriptor(); ClassDescriptor classObject = ((ClassDescriptor) classifier).getClassObjectDescriptor();
@@ -235,7 +236,7 @@ public class CallExpressionResolver {
@Nullable @Nullable
private JetType getVariableType(@NotNull JetSimpleNameExpression nameExpression, @NotNull ReceiverValue receiver, private JetType getVariableType(@NotNull JetSimpleNameExpression nameExpression, @NotNull ReceiverValue receiver,
@Nullable ASTNode callOperationNode, @NotNull ResolutionContext context, @NotNull boolean[] result @Nullable ASTNode callOperationNode, @NotNull ExpressionTypingContext context, @NotNull boolean[] result
) { ) {
TemporaryTraceAndCache temporaryForVariable = TemporaryTraceAndCache.create( TemporaryTraceAndCache temporaryForVariable = TemporaryTraceAndCache.create(
context, "trace to resolve as local variable or property", nameExpression); context, "trace to resolve as local variable or property", nameExpression);
@@ -252,7 +253,7 @@ public class CallExpressionResolver {
return resolutionResult.isSingleResult() ? resolutionResult.getResultingDescriptor().getReturnType() : null; return resolutionResult.isSingleResult() ? resolutionResult.getResultingDescriptor().getReturnType() : null;
} }
ResolutionContext newContext = receiver.exists() ExpressionTypingContext newContext = receiver.exists()
? context.replaceScope(receiver.getType().getMemberScope()) ? context.replaceScope(receiver.getType().getMemberScope())
: context; : context;
TemporaryTraceAndCache temporaryForNamespaceOrClassObject = TemporaryTraceAndCache.create( TemporaryTraceAndCache temporaryForNamespaceOrClassObject = TemporaryTraceAndCache.create(
@@ -276,7 +277,7 @@ public class CallExpressionResolver {
@NotNull @NotNull
public JetTypeInfo getSimpleNameExpressionTypeInfo(@NotNull JetSimpleNameExpression nameExpression, @NotNull ReceiverValue receiver, public JetTypeInfo getSimpleNameExpressionTypeInfo(@NotNull JetSimpleNameExpression nameExpression, @NotNull ReceiverValue receiver,
@Nullable ASTNode callOperationNode, @NotNull ResolutionContext context @Nullable ASTNode callOperationNode, @NotNull ExpressionTypingContext context
) { ) {
boolean[] result = new boolean[1]; boolean[] result = new boolean[1];
@@ -313,10 +314,9 @@ public class CallExpressionResolver {
@NotNull @NotNull
public JetTypeInfo getCallExpressionTypeInfo( public JetTypeInfo getCallExpressionTypeInfo(
@NotNull JetCallExpression callExpression, @NotNull ReceiverValue receiver, @NotNull JetCallExpression callExpression, @NotNull ReceiverValue receiver,
@Nullable ASTNode callOperationNode, @NotNull ResolutionContext context @Nullable ASTNode callOperationNode, @NotNull ExpressionTypingContext context
) { ) {
JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck( JetTypeInfo typeInfo = getCallExpressionTypeInfoWithoutFinalTypeCheck(callExpression, receiver, callOperationNode, context);
callExpression, receiver, callOperationNode, context);
if (context.contextDependency == INDEPENDENT) { if (context.contextDependency == INDEPENDENT) {
DataFlowUtils.checkType(typeInfo, callExpression, context); DataFlowUtils.checkType(typeInfo, callExpression, context);
} }
@@ -326,7 +326,7 @@ public class CallExpressionResolver {
@NotNull @NotNull
public JetTypeInfo getCallExpressionTypeInfoWithoutFinalTypeCheck( public JetTypeInfo getCallExpressionTypeInfoWithoutFinalTypeCheck(
@NotNull JetCallExpression callExpression, @NotNull ReceiverValue receiver, @NotNull JetCallExpression callExpression, @NotNull ReceiverValue receiver,
@Nullable ASTNode callOperationNode, @NotNull ResolutionContext context @Nullable ASTNode callOperationNode, @NotNull ExpressionTypingContext context
) { ) {
boolean[] result = new boolean[1]; boolean[] result = new boolean[1];
Call call = CallMaker.makeCall(receiver, callOperationNode, callExpression); Call call = CallMaker.makeCall(receiver, callOperationNode, callExpression);
@@ -387,7 +387,7 @@ public class CallExpressionResolver {
@NotNull ReceiverValue receiver, @NotNull ReceiverValue receiver,
@Nullable ASTNode callOperationNode, @Nullable ASTNode callOperationNode,
@NotNull JetExpression selectorExpression, @NotNull JetExpression selectorExpression,
@NotNull ResolutionContext context @NotNull ExpressionTypingContext context
) { ) {
if (selectorExpression instanceof JetCallExpression) { if (selectorExpression instanceof JetCallExpression) {
return getCallExpressionTypeInfoWithoutFinalTypeCheck((JetCallExpression) selectorExpression, receiver, return getCallExpressionTypeInfoWithoutFinalTypeCheck((JetCallExpression) selectorExpression, receiver,
@@ -404,7 +404,7 @@ public class CallExpressionResolver {
@NotNull @NotNull
public JetTypeInfo getQualifiedExpressionTypeInfo( public JetTypeInfo getQualifiedExpressionTypeInfo(
@NotNull JetQualifiedExpression expression, @NotNull ResolutionContext context @NotNull JetQualifiedExpression expression, @NotNull ExpressionTypingContext context
) { ) {
// TODO : functions as values // TODO : functions as values
JetExpression selectorExpression = expression.getSelectorExpression(); JetExpression selectorExpression = expression.getSelectorExpression();