From cf85e4de36dfd06dcdb925d9693fe0e142445bd1 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Sun, 1 Sep 2013 20:30:55 +0400 Subject: [PATCH] refactoring: moved methods --- .../resolve/calls/ArgumentTypeResolver.java | 55 +++++++++++++++++-- .../lang/resolve/calls/CandidateResolver.java | 49 +---------------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java index 322b34c0d26..3787916f961 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ArgumentTypeResolver.java @@ -25,13 +25,14 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.*; -import org.jetbrains.jet.lang.resolve.calls.context.CallResolutionContext; -import org.jetbrains.jet.lang.resolve.calls.context.CheckValueArgumentsMode; -import org.jetbrains.jet.lang.resolve.calls.context.ResolutionContext; -import org.jetbrains.jet.lang.resolve.calls.context.ContextDependency; +import org.jetbrains.jet.lang.resolve.calls.context.*; import org.jetbrains.jet.lang.resolve.calls.model.MutableDataFlowInfoForArguments; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCallImpl; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument; +import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; +import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstantResolver; +import org.jetbrains.jet.lang.resolve.constants.ErrorValue; +import org.jetbrains.jet.lang.resolve.constants.NumberValueTypeConstructor; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; @@ -246,4 +247,50 @@ public class ArgumentTypeResolver { infoForArguments.updateInfo(argument, typeInfoForCall.getDataFlowInfo()); } } + + @Nullable + public JetType updateResultArgumentTypeIfNotDenotable( + @NotNull ResolutionContext context, + @NotNull JetExpression expression + ) { + JetType type = context.trace.get(BindingContext.EXPRESSION_TYPE, expression); + if (type != null && !type.getConstructor().isDenotable()) { + if (type.getConstructor() instanceof NumberValueTypeConstructor) { + NumberValueTypeConstructor constructor = (NumberValueTypeConstructor) type.getConstructor(); + JetType primitiveType = TypeUtils.getPrimitiveNumberType(constructor, context.expectedType); + updateNumberType(primitiveType, expression, context); + return primitiveType; + } + } + return type; + } + + private void updateNumberType( + @NotNull JetType numberType, + @Nullable JetExpression expression, + @NotNull ResolutionContext context + ) { + if (expression == null) return; + BindingContextUtils.updateRecordedType(numberType, expression, context.trace, false); + + if (!(expression instanceof JetConstantExpression)) { + JetExpression deparenthesized = JetPsiUtil.deparenthesizeWithNoTypeResolution(expression, false); + if (deparenthesized != expression) { + updateNumberType(numberType, deparenthesized, context); + } + if (deparenthesized instanceof JetBlockExpression) { + JetElement lastStatement = JetPsiUtil.getLastStatementInABlock((JetBlockExpression) deparenthesized); + if (lastStatement instanceof JetExpression) { + updateNumberType(numberType, (JetExpression) lastStatement, context); + } + } + return; + } + CompileTimeConstant constant = + new CompileTimeConstantResolver().getCompileTimeConstant((JetConstantExpression) expression, numberType); + + if (!(constant instanceof ErrorValue)) { + context.trace.record(BindingContext.COMPILE_TIME_VALUE, expression, constant); + } + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 59ee863edbc..16fb2c34697 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -43,7 +43,6 @@ import org.jetbrains.jet.lang.resolve.calls.util.ExpressionAsFunctionDescriptor; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstantResolver; import org.jetbrains.jet.lang.resolve.constants.ErrorValue; -import org.jetbrains.jet.lang.resolve.constants.NumberValueTypeConstructor; import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.*; @@ -360,7 +359,7 @@ public class CandidateResolver { || (expression instanceof JetFunctionLiteralExpression)) { return; } - JetType type = updateResultArgumentTypeIfNotDenotable(context, expression); + JetType type = argumentTypeResolver.updateResultArgumentTypeIfNotDenotable(context, expression); checkResultArgumentType(type, argument, context); return; } @@ -436,52 +435,6 @@ public class CandidateResolver { return type != null && type.isNullable(); } - @Nullable - private JetType updateResultArgumentTypeIfNotDenotable( - @NotNull CallCandidateResolutionContext context, - @NotNull JetExpression expression - ) { - JetType type = context.trace.get(BindingContext.EXPRESSION_TYPE, expression); - if (type != null && !type.getConstructor().isDenotable()) { - if (type.getConstructor() instanceof NumberValueTypeConstructor) { - NumberValueTypeConstructor constructor = (NumberValueTypeConstructor) type.getConstructor(); - JetType primitiveType = TypeUtils.getPrimitiveNumberType(constructor, context.expectedType); - updateNumberType(primitiveType, expression, context); - return primitiveType; - } - } - return type; - } - - private void updateNumberType( - @NotNull JetType numberType, - @Nullable JetExpression expression, - @NotNull CallCandidateResolutionContext context - ) { - if (expression == null) return; - BindingContextUtils.updateRecordedType(numberType, expression, context.trace, false); - - if (!(expression instanceof JetConstantExpression)) { - JetExpression deparenthesized = JetPsiUtil.deparenthesizeWithNoTypeResolution(expression, false); - if (deparenthesized != expression) { - updateNumberType(numberType, deparenthesized, context); - } - if (deparenthesized instanceof JetBlockExpression) { - JetElement lastStatement = JetPsiUtil.getLastStatementInABlock((JetBlockExpression) deparenthesized); - if (lastStatement instanceof JetExpression) { - updateNumberType(numberType, (JetExpression) lastStatement, context); - } - } - return; - } - CompileTimeConstant constant = - new CompileTimeConstantResolver().getCompileTimeConstant((JetConstantExpression) expression, numberType); - - if (!(constant instanceof ErrorValue)) { - context.trace.record(BindingContext.COMPILE_TIME_VALUE, expression, constant); - } - } - private void checkResultArgumentType( @Nullable JetType type, @NotNull ValueArgument argument,