Inject ConstantExpressionEvaluator in BasicExpressionTypingVisitor via ExpressionTypingComponents

This commit is contained in:
Pavel V. Talanov
2015-07-20 18:21:04 +03:00
parent add8387141
commit 855e3d2bf4
2 changed files with 15 additions and 5 deletions
@@ -111,7 +111,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
@Override @Override
public JetTypeInfo visitConstantExpression(@NotNull JetConstantExpression expression, ExpressionTypingContext context) { public JetTypeInfo visitConstantExpression(@NotNull JetConstantExpression expression, ExpressionTypingContext context) {
CompileTimeConstant<?> compileTimeConstant = ConstantExpressionEvaluator.evaluate(expression, context.trace, context.expectedType); CompileTimeConstant<?> compileTimeConstant = components.constantExpressionEvaluator.evaluateExpression(
expression, context.trace, context.expectedType
);
if (!(compileTimeConstant instanceof IntegerValueTypeConstant)) { if (!(compileTimeConstant instanceof IntegerValueTypeConstant)) {
CompileTimeConstantChecker compileTimeConstantChecker = context.getCompileTimeConstantChecker(); CompileTimeConstantChecker compileTimeConstantChecker = context.getCompileTimeConstantChecker();
@@ -776,8 +778,9 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
result = returnType; result = returnType;
} }
CompileTimeConstant<?> value = ConstantExpressionEvaluator.evaluate(expression, contextWithExpectedType.trace, CompileTimeConstant<?> value = components.constantExpressionEvaluator.evaluateExpression(
contextWithExpectedType.expectedType); expression, contextWithExpectedType.trace, contextWithExpectedType.expectedType
);
if (value != null) { if (value != null) {
return createCompileTimeConstantTypeInfo(value, expression, contextWithExpectedType); return createCompileTimeConstantTypeInfo(value, expression, contextWithExpectedType);
} }
@@ -971,7 +974,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
context.trace.report(UNSUPPORTED.on(operationSign, "Unknown operation")); context.trace.report(UNSUPPORTED.on(operationSign, "Unknown operation"));
result = TypeInfoFactoryPackage.noTypeInfo(context); result = TypeInfoFactoryPackage.noTypeInfo(context);
} }
CompileTimeConstant<?> value = ConstantExpressionEvaluator.evaluate( CompileTimeConstant<?> value = components.constantExpressionEvaluator.evaluateExpression(
expression, contextWithExpectedType.trace, contextWithExpectedType.expectedType expression, contextWithExpectedType.trace, contextWithExpectedType.expectedType
); );
if (value != null) { if (value != null) {
@@ -1342,7 +1345,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
for (JetStringTemplateEntry entry : expression.getEntries()) { for (JetStringTemplateEntry entry : expression.getEntries()) {
entry.accept(visitor); entry.accept(visitor);
} }
ConstantExpressionEvaluator.evaluate(expression, context.trace, contextWithExpectedType.expectedType); components.constantExpressionEvaluator.evaluateExpression(expression, context.trace, contextWithExpectedType.expectedType);
return DataFlowUtils.checkType(visitor.typeInfo.replaceType(components.builtIns.getStringType()), return DataFlowUtils.checkType(visitor.typeInfo.replaceType(components.builtIns.getStringType()),
expression, expression,
contextWithExpectedType); contextWithExpectedType);
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
import org.jetbrains.kotlin.resolve.*; import org.jetbrains.kotlin.resolve.*;
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver; import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
import org.jetbrains.kotlin.resolve.calls.CallResolver; import org.jetbrains.kotlin.resolve.calls.CallResolver;
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator;
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator; import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
import org.jetbrains.kotlin.types.DynamicTypesSettings; import org.jetbrains.kotlin.types.DynamicTypesSettings;
import org.jetbrains.kotlin.builtins.ReflectionTypes; import org.jetbrains.kotlin.builtins.ReflectionTypes;
@@ -49,6 +50,7 @@ public class ExpressionTypingComponents {
/*package*/ AnnotationResolver annotationResolver; /*package*/ AnnotationResolver annotationResolver;
/*package*/ ValueParameterResolver valueParameterResolver; /*package*/ ValueParameterResolver valueParameterResolver;
/*package*/ MultiDeclarationResolver multiDeclarationResolver; /*package*/ MultiDeclarationResolver multiDeclarationResolver;
/*package*/ ConstantExpressionEvaluator constantExpressionEvaluator;
@Inject @Inject
public void setGlobalContext(@NotNull GlobalContext globalContext) { public void setGlobalContext(@NotNull GlobalContext globalContext) {
@@ -154,4 +156,9 @@ public class ExpressionTypingComponents {
public AdditionalCheckerProvider getAdditionalCheckerProvider() { public AdditionalCheckerProvider getAdditionalCheckerProvider() {
return additionalCheckerProvider; return additionalCheckerProvider;
} }
@Inject
public void setConstantExpressionEvaluator(@NotNull ConstantExpressionEvaluator constantExpressionEvaluator) {
this.constantExpressionEvaluator = constantExpressionEvaluator;
}
} }