Inject ConstantExpressionEvaluator to some points of usage

This commit is contained in:
Pavel V. Talanov
2015-07-16 21:54:00 +03:00
parent 92161370f1
commit 251ebc7ca8
2 changed files with 11 additions and 6 deletions
@@ -60,9 +60,11 @@ import static org.jetbrains.kotlin.types.TypeUtils.NO_EXPECTED_TYPE;
public class CallExpressionResolver { public class CallExpressionResolver {
private final CallResolver callResolver; private final CallResolver callResolver;
private final ConstantExpressionEvaluator constantExpressionEvaluator;
public CallExpressionResolver(@NotNull CallResolver callResolver) { public CallExpressionResolver(@NotNull CallResolver callResolver, @NotNull ConstantExpressionEvaluator constantExpressionEvaluator) {
this.callResolver = callResolver; this.callResolver = callResolver;
this.constantExpressionEvaluator = constantExpressionEvaluator;
} }
private ExpressionTypingServices expressionTypingServices; private ExpressionTypingServices expressionTypingServices;
@@ -367,7 +369,7 @@ public class CallExpressionResolver {
context.trace.recordType(selectorExpression, selectorReturnType); context.trace.recordType(selectorExpression, selectorReturnType);
} }
CompileTimeConstant<?> value = ConstantExpressionEvaluator.evaluate(expression, context.trace, context.expectedType); CompileTimeConstant<?> value = constantExpressionEvaluator.evaluateExpression(expression, context.trace, context.expectedType);
if (value != null && value.getIsPure()) { if (value != null && value.getIsPure()) {
return ExpressionTypingUtils.createCompileTimeConstantTypeInfo(value, expression, context); return ExpressionTypingUtils.createCompileTimeConstantTypeInfo(value, expression, context);
} }
@@ -19,17 +19,20 @@ package org.jetbrains.kotlin.types.expressions
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.JetParameter import org.jetbrains.kotlin.psi.JetParameter
import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.DescriptorResolver
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.JetScope
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator
import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.TypeUtils
public class ValueParameterResolver( public class ValueParameterResolver(
private val additionalCheckerProvider: AdditionalCheckerProvider, private val additionalCheckerProvider: AdditionalCheckerProvider,
private val expressionTypingServices: ExpressionTypingServices private val expressionTypingServices: ExpressionTypingServices,
private val constantExpressionEvaluator: ConstantExpressionEvaluator
) { ) {
public fun resolveValueParameters( public fun resolveValueParameters(
valueParameters: List<JetParameter>, valueParameters: List<JetParameter>,
@@ -66,7 +69,7 @@ public class ValueParameterResolver(
val defaultValue = jetParameter.getDefaultValue() ?: return val defaultValue = jetParameter.getDefaultValue() ?: return
expressionTypingServices.getTypeInfo(defaultValue, context.replaceExpectedType(valueParameterDescriptor.getType())) expressionTypingServices.getTypeInfo(defaultValue, context.replaceExpectedType(valueParameterDescriptor.getType()))
if (DescriptorUtils.isAnnotationClass(DescriptorResolver.getContainingClass(context.scope))) { if (DescriptorUtils.isAnnotationClass(DescriptorResolver.getContainingClass(context.scope))) {
ConstantExpressionEvaluator.evaluate(defaultValue, context.trace, valueParameterDescriptor.getType()) constantExpressionEvaluator.evaluateExpression(defaultValue, context.trace, valueParameterDescriptor.getType())
?: context.trace.report(Errors.ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT.on(defaultValue)) ?: context.trace.report(Errors.ANNOTATION_PARAMETER_DEFAULT_VALUE_MUST_BE_CONSTANT.on(defaultValue))
} }
} }