From 02e19ea8fd62bd3e60f5e3fbec00ee4b95ad6ed0 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Mon, 25 Nov 2013 19:36:31 +0400 Subject: [PATCH] Add compileTimeConstant to checkConstantExpressionType method --- .../resolve/constants/CompileTimeConstantResolver.java | 7 +++++-- .../types/expressions/BasicExpressionTypingVisitor.java | 4 ++-- .../jet/lang/types/expressions/DataFlowUtils.java | 5 ++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java index 51b715a7f20..73becf1f9fb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/constants/CompileTimeConstantResolver.java @@ -51,8 +51,11 @@ public class CompileTimeConstantResolver { } // return true if there is an error - public boolean checkConstantExpressionType(@NotNull JetConstantExpression expression, @NotNull JetType expectedType) { - CompileTimeConstant compileTimeConstant = ConstantExpressionEvaluator.object$.evaluate(expression, trace, expectedType); + public boolean checkConstantExpressionType( + @Nullable CompileTimeConstant compileTimeConstant, + @NotNull JetConstantExpression expression, + @NotNull JetType expectedType + ) { IElementType elementType = expression.getNode().getElementType(); if (elementType == JetNodeTypes.INTEGER_CONSTANT) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index a77dbd03177..56cf2319d5c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -144,11 +144,11 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { } } CompileTimeConstantResolver compileTimeConstantResolver = context.getCompileTimeConstantResolver(); - boolean hasError = compileTimeConstantResolver.checkConstantExpressionType(expression, context.expectedType); + CompileTimeConstant value = ConstantExpressionEvaluator.object$.evaluate(expression, context.trace, context.expectedType); + boolean hasError = compileTimeConstantResolver.checkConstantExpressionType(value, expression, context.expectedType); if (hasError) { return JetTypeInfo.create(getDefaultType(elementType), context.dataFlowInfo); } - CompileTimeConstant value = ConstantExpressionEvaluator.object$.evaluate(expression, context.trace, context.expectedType); assert value != null : "CompileTimeConstant should be evaluated for constant expression or an error should be recorded " + expression.getText(); return DataFlowUtils.checkType(value.getType(builtIns), expression, context, context.dataFlowInfo); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java index ed8b3bf33ec..f6cdc57d748 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/DataFlowUtils.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.evaluate.ConstantExpressionEvaluator; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; @@ -27,6 +28,7 @@ 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.DataFlowValueFactory; import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext; +import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstantResolver; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetTypeInfo; @@ -165,7 +167,8 @@ public class DataFlowUtils { } if (expression instanceof JetConstantExpression) { - new CompileTimeConstantResolver(trace, true).checkConstantExpressionType((JetConstantExpression) expression, expectedType); + CompileTimeConstant value = ConstantExpressionEvaluator.object$.evaluate(expression, trace, expectedType); + new CompileTimeConstantResolver(trace, true).checkConstantExpressionType(value, (JetConstantExpression) expression, expectedType); return expressionType; }