From a6bfa1ff6cc2bd57590d56bea0c19f572395e1f9 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Thu, 27 Dec 2012 18:24:11 +0400 Subject: [PATCH] rename isFunctionType -> isFunctionOrExtensionFunctionType added isFunctionType, isExtensionFunctionType --- .../descriptors/FunctionDescriptorUtil.java | 4 ++-- .../resolve/calls/ArgumentTypeResolver.java | 2 +- .../jet/lang/resolve/calls/CallResolver.java | 3 +-- .../calls/inference/ConstraintSystemImpl.java | 2 +- .../ClosureExpressionsTypingVisitor.java | 5 +++-- .../jet/lang/types/lang/KotlinBuiltIns.java | 18 +++++++++++++----- .../jet/renderer/DescriptorRendererImpl.java | 2 +- .../jetbrains/jet/plugin/JetPluginUtil.java | 2 +- .../completion/DescriptorLookupConverter.java | 3 ++- 9 files changed, 25 insertions(+), 16 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java index cf2ef82c0be..546edb2187c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorUtil.java @@ -127,7 +127,7 @@ public class FunctionDescriptorUtil { @NotNull Visibility visibility ) { - assert KotlinBuiltIns.getInstance().isFunctionType(functionType); + assert KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(functionType); functionDescriptor.initialize(KotlinBuiltIns.getInstance().getReceiverType(functionType), expectedThisObject, Collections.emptyList(), @@ -142,7 +142,7 @@ public class FunctionDescriptorUtil { } public static FunctionDescriptor getInvokeFunction(@NotNull JetType functionType) { - assert KotlinBuiltIns.getInstance().isFunctionType(functionType); + assert KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(functionType); ClassifierDescriptor classDescriptorForFunction = functionType.getConstructor().getDeclarationDescriptor(); assert classDescriptorForFunction instanceof ClassDescriptor; 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 215a4da5acf..c189cb03a13 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 @@ -79,7 +79,7 @@ public class ArgumentTypeResolver { } private static boolean isFunctionOrErrorType(@NotNull JetType supertype) { - return KotlinBuiltIns.getInstance().isFunctionType(supertype) || ErrorUtils.isErrorType(supertype); + return KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(supertype) || ErrorUtils.isErrorType(supertype); } public void checkTypesWithNoCallee(@NotNull ResolutionContext context) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index fd2aff4e7a1..d4285a4eae7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -50,7 +50,6 @@ import java.util.*; import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.*; -import static org.jetbrains.jet.lang.resolve.calls.CallResolverUtil.ResolveMode; import static org.jetbrains.jet.lang.resolve.calls.CallResolverUtil.ResolveMode.RESOLVE_FUNCTION_ARGUMENTS; import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER; import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE; @@ -231,7 +230,7 @@ public class CallResolver { // Here we handle the case where the callee expression must be something of type function, e.g. (foo.bar())(1, 2) JetType calleeType = expressionTypingServices.safeGetType(context.scope, calleeExpression, NO_EXPECTED_TYPE, context.dataFlowInfo, context.trace); // We are actually expecting a function, but there seems to be no easy way of expressing this - if (!KotlinBuiltIns.getInstance().isFunctionType(calleeType)) { + if (!KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(calleeType)) { // checkTypesWithNoCallee(trace, scope, call); if (!ErrorUtils.isErrorType(calleeType)) { context.trace.report(CALLEE_NOT_A_FUNCTION.on(calleeExpression, calleeType)); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/inference/ConstraintSystemImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/inference/ConstraintSystemImpl.java index 8ee4904477d..83b108e4f0b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/inference/ConstraintSystemImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/inference/ConstraintSystemImpl.java @@ -178,7 +178,7 @@ public class ConstraintSystemImpl implements ConstraintSystem { if (ErrorUtils.isErrorType(subjectType)) return; if (constrainingType == PLACEHOLDER_FUNCTION_TYPE) { - if (!KotlinBuiltIns.getInstance().isFunctionType(subjectType)) { + if (!KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(subjectType)) { errorConstraintPositions.add(constraintPosition); } return; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index 4df8f165634..aed9540ce2b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -97,7 +97,8 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { if (bodyExpression == null) return null; JetType expectedType = context.expectedType; - boolean functionTypeExpected = expectedType != NO_EXPECTED_TYPE && KotlinBuiltIns.getInstance().isFunctionType(expectedType); + boolean functionTypeExpected = expectedType != NO_EXPECTED_TYPE && KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType( + expectedType); SimpleFunctionDescriptorImpl functionDescriptor = createFunctionDescriptor(expression, context, functionTypeExpected); JetType safeReturnType = computeReturnType(expression, context, functionDescriptor, functionTypeExpected); @@ -107,7 +108,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { List valueParametersTypes = DescriptorUtils.getValueParametersTypes(functionDescriptor.getValueParameters()); JetType resultType = KotlinBuiltIns.getInstance().getFunctionType( Collections.emptyList(), receiver, valueParametersTypes, safeReturnType); - if (expectedType != NO_EXPECTED_TYPE && KotlinBuiltIns.getInstance().isFunctionType(expectedType)) { + if (expectedType != NO_EXPECTED_TYPE && KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(expectedType)) { // all checks were done before return JetTypeInfo.create(resultType, context.dataFlowInfo); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index c8d2153ce25..95d69780cb9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -846,13 +846,21 @@ public class KotlinBuiltIns { return builder.build(); } + public boolean isFunctionOrExtensionFunctionType(@NotNull JetType type) { + return isFunctionType(type) || isExtensionFunctionType(type); + } + public boolean isFunctionType(@NotNull JetType type) { - return setContainsClassOf(functionClassesSet, type) || setContainsClassOf(extensionFunctionClassesSet, type); + return setContainsClassOf(functionClassesSet, type); + } + + public boolean isExtensionFunctionType(@NotNull JetType type) { + return setContainsClassOf(extensionFunctionClassesSet, type); } @Nullable public JetType getReceiverType(@NotNull JetType type) { - assert isFunctionType(type) : type; + assert isFunctionOrExtensionFunctionType(type) : type; if (setContainsClassOf(extensionFunctionClassesSet, type)) { return type.getArguments().get(0).getType(); } @@ -861,7 +869,7 @@ public class KotlinBuiltIns { @NotNull public List getValueParameters(@NotNull FunctionDescriptor functionDescriptor, @NotNull JetType type) { - assert isFunctionType(type); + assert isFunctionOrExtensionFunctionType(type); List valueParameters = Lists.newArrayList(); List parameterTypes = getParameterTypeProjectionsFromFunctionType(type); for (int i = 0; i < parameterTypes.size(); i++) { @@ -876,14 +884,14 @@ public class KotlinBuiltIns { @NotNull public JetType getReturnTypeFromFunctionType(@NotNull JetType type) { - assert isFunctionType(type); + assert isFunctionOrExtensionFunctionType(type); List arguments = type.getArguments(); return arguments.get(arguments.size() - 1).getType(); } @NotNull public List getParameterTypeProjectionsFromFunctionType(@NotNull JetType type) { - assert isFunctionType(type); + assert isFunctionOrExtensionFunctionType(type); List arguments = type.getArguments(); int first = setContainsClassOf(extensionFunctionClassesSet, type) ? 1 : 0; int last = arguments.size() - 2; diff --git a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index d829dab0178..198a358d07c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -166,7 +166,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { else if (KotlinBuiltIns.getInstance().isUnit(type)) { return KotlinBuiltIns.UNIT_ALIAS + (type.isNullable() ? "?" : ""); } - else if (KotlinBuiltIns.getInstance().isFunctionType(type)) { + else if (KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(type)) { return renderFunctionType(type); } return renderDefaultType(type); diff --git a/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java b/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java index 4c52de67c3f..a9e1827d67d 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/JetPluginUtil.java @@ -54,7 +54,7 @@ public class JetPluginUtil { public static boolean checkTypeIsStandard(JetType type, Project project) { if (KotlinBuiltIns.getInstance().isAny(type) || KotlinBuiltIns.getInstance().isNothingOrNullableNothing(type) || KotlinBuiltIns.getInstance().isUnit(type) || - KotlinBuiltIns.getInstance().isTupleType(type) || KotlinBuiltIns.getInstance().isFunctionType(type)) { + KotlinBuiltIns.getInstance().isTupleType(type) || KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(type)) { return true; } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java index 5eeb005059a..2b9f2d43613 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java @@ -129,7 +129,8 @@ public final class DescriptorLookupConverter { } if (functionDescriptor.getValueParameters().size() == 1 - && KotlinBuiltIns.getInstance().isFunctionType(functionDescriptor.getValueParameters().get(0).getType())) { + && KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType( + functionDescriptor.getValueParameters().get(0).getType())) { return PARAMS_BRACES_FUNCTION_HANDLER; }