Inject ConstantExpressionEvaluator to some points of usage
This commit is contained in:
+4
-2
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-4
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user