diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index a8c687c69b1..8d04c8bd80f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -81,6 +81,7 @@ public abstract class MemberCodegen wrapped, T declaration, FieldOwnerContext codegenContext) { @@ -397,7 +399,7 @@ public abstract class MemberCodegen resolveSupertypes( @@ -848,7 +851,7 @@ public class DescriptorResolver { public ConstantValue invoke() { JetExpression initializer = variable.getInitializer(); JetType initializerType = expressionTypingServices.safeGetType(scope, initializer, variableType, dataFlowInfo, trace); - return ConstantExpressionEvaluator.evaluateToConstantValue(initializer, trace, initializerType); + return constantExpressionEvaluator.evaluateToConstantValue(initializer, trace, initializerType); } }, null) ); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt index 6fa64faccbf..77e3d0c7bd4 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt @@ -44,9 +44,10 @@ import java.util.HashMap import kotlin.platform.platformStatic public class ConstantExpressionEvaluator( - internal val constantValueFactory: ConstantValueFactory, internal val builtIns: KotlinBuiltIns ) { + internal val constantValueFactory = ConstantValueFactory(builtIns) + public fun updateNumberType( numberType: JetType, expression: JetExpression?, @@ -201,18 +202,16 @@ public class ConstantExpressionEvaluator( return if (!constant.isError) constant else null } - companion object { - platformStatic public fun evaluateToConstantValue( - expression: JetExpression, - trace: BindingTrace, - expectedType: JetType - ): ConstantValue<*>? { - val builtIns = KotlinBuiltIns.getInstance() - return ConstantExpressionEvaluator(ConstantValueFactory(builtIns), builtIns). - evaluateExpression(expression, trace, expectedType)?. - toConstantValue(expectedType) - } + public fun evaluateToConstantValue( + expression: JetExpression, + trace: BindingTrace, + expectedType: JetType + ): ConstantValue<*>? { + return evaluateExpression(expression, trace, expectedType)?.toConstantValue(expectedType) + } + + companion object { platformStatic public fun getConstant(expression: JetExpression, bindingContext: BindingContext): CompileTimeConstant<*>? { val constant = getPossiblyErrorConstant(expression, bindingContext) ?: return null return if (!constant.isError) constant else null diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java index bedf7ef725e..48cfce4769f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DataFlowAnalyzer.java @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingTrace; -import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver; import org.jetbrains.kotlin.resolve.calls.checkers.AdditionalTypeChecker; import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; @@ -186,7 +185,7 @@ public class DataFlowAnalyzer { } if (expression instanceof JetConstantExpression) { - ConstantValue constantValue = ConstantExpressionEvaluator.evaluateToConstantValue(expression, c.trace, c.expectedType); + ConstantValue constantValue = constantExpressionEvaluator.evaluateToConstantValue(expression, c.trace, c.expectedType); boolean error = new CompileTimeConstantChecker(c.trace, true) .checkConstantExpressionType(constantValue, (JetConstantExpression) expression, c.expectedType); if (hasError != null) hasError.set(error); diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/constants/evaluate/AbstractEvaluateExpressionTest.kt b/compiler/tests/org/jetbrains/kotlin/resolve/constants/evaluate/AbstractEvaluateExpressionTest.kt index f9ae3baebd7..e20be760786 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/constants/evaluate/AbstractEvaluateExpressionTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/constants/evaluate/AbstractEvaluateExpressionTest.kt @@ -66,8 +66,7 @@ public abstract class AbstractEvaluateExpressionTest : AbstractAnnotationDescrip private fun evaluateInitializer(context: BindingContext, property: VariableDescriptor): CompileTimeConstant<*>? { val propertyDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(property) as JetProperty - val builtIns = KotlinBuiltIns.getInstance() - val compileTimeConstant = ConstantExpressionEvaluator(ConstantValueFactory(builtIns), builtIns).evaluateExpression( + val compileTimeConstant = ConstantExpressionEvaluator(KotlinBuiltIns.getInstance()).evaluateExpression( propertyDeclaration.getInitializer()!!, DelegatingBindingTrace(context, "trace for evaluating compile time constant"), property.getType()