rename isFunctionType -> isFunctionOrExtensionFunctionType
added isFunctionType, isExtensionFunctionType
This commit is contained in:
+2
-2
@@ -127,7 +127,7 @@ public class FunctionDescriptorUtil {
|
|||||||
@NotNull Visibility visibility
|
@NotNull Visibility visibility
|
||||||
) {
|
) {
|
||||||
|
|
||||||
assert KotlinBuiltIns.getInstance().isFunctionType(functionType);
|
assert KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(functionType);
|
||||||
functionDescriptor.initialize(KotlinBuiltIns.getInstance().getReceiverType(functionType),
|
functionDescriptor.initialize(KotlinBuiltIns.getInstance().getReceiverType(functionType),
|
||||||
expectedThisObject,
|
expectedThisObject,
|
||||||
Collections.<TypeParameterDescriptorImpl>emptyList(),
|
Collections.<TypeParameterDescriptorImpl>emptyList(),
|
||||||
@@ -142,7 +142,7 @@ public class FunctionDescriptorUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static FunctionDescriptor getInvokeFunction(@NotNull JetType functionType) {
|
public static FunctionDescriptor getInvokeFunction(@NotNull JetType functionType) {
|
||||||
assert KotlinBuiltIns.getInstance().isFunctionType(functionType);
|
assert KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(functionType);
|
||||||
|
|
||||||
ClassifierDescriptor classDescriptorForFunction = functionType.getConstructor().getDeclarationDescriptor();
|
ClassifierDescriptor classDescriptorForFunction = functionType.getConstructor().getDeclarationDescriptor();
|
||||||
assert classDescriptorForFunction instanceof ClassDescriptor;
|
assert classDescriptorForFunction instanceof ClassDescriptor;
|
||||||
|
|||||||
+1
-1
@@ -79,7 +79,7 @@ public class ArgumentTypeResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isFunctionOrErrorType(@NotNull JetType supertype) {
|
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) {
|
public void checkTypesWithNoCallee(@NotNull ResolutionContext context) {
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ import java.util.*;
|
|||||||
import static org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER;
|
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.diagnostics.Errors.*;
|
||||||
import static org.jetbrains.jet.lang.resolve.BindingContext.*;
|
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.calls.CallResolverUtil.ResolveMode.RESOLVE_FUNCTION_ARGUMENTS;
|
||||||
import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER;
|
import static org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue.NO_RECEIVER;
|
||||||
import static org.jetbrains.jet.lang.types.TypeUtils.NO_EXPECTED_TYPE;
|
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)
|
// 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
|
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);
|
// checkTypesWithNoCallee(trace, scope, call);
|
||||||
if (!ErrorUtils.isErrorType(calleeType)) {
|
if (!ErrorUtils.isErrorType(calleeType)) {
|
||||||
context.trace.report(CALLEE_NOT_A_FUNCTION.on(calleeExpression, calleeType));
|
context.trace.report(CALLEE_NOT_A_FUNCTION.on(calleeExpression, calleeType));
|
||||||
|
|||||||
+1
-1
@@ -178,7 +178,7 @@ public class ConstraintSystemImpl implements ConstraintSystem {
|
|||||||
if (ErrorUtils.isErrorType(subjectType)) return;
|
if (ErrorUtils.isErrorType(subjectType)) return;
|
||||||
|
|
||||||
if (constrainingType == PLACEHOLDER_FUNCTION_TYPE) {
|
if (constrainingType == PLACEHOLDER_FUNCTION_TYPE) {
|
||||||
if (!KotlinBuiltIns.getInstance().isFunctionType(subjectType)) {
|
if (!KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(subjectType)) {
|
||||||
errorConstraintPositions.add(constraintPosition);
|
errorConstraintPositions.add(constraintPosition);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
+3
-2
@@ -97,7 +97,8 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
if (bodyExpression == null) return null;
|
if (bodyExpression == null) return null;
|
||||||
|
|
||||||
JetType expectedType = context.expectedType;
|
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);
|
SimpleFunctionDescriptorImpl functionDescriptor = createFunctionDescriptor(expression, context, functionTypeExpected);
|
||||||
JetType safeReturnType = computeReturnType(expression, context, functionDescriptor, functionTypeExpected);
|
JetType safeReturnType = computeReturnType(expression, context, functionDescriptor, functionTypeExpected);
|
||||||
@@ -107,7 +108,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
List<JetType> valueParametersTypes = DescriptorUtils.getValueParametersTypes(functionDescriptor.getValueParameters());
|
List<JetType> valueParametersTypes = DescriptorUtils.getValueParametersTypes(functionDescriptor.getValueParameters());
|
||||||
JetType resultType = KotlinBuiltIns.getInstance().getFunctionType(
|
JetType resultType = KotlinBuiltIns.getInstance().getFunctionType(
|
||||||
Collections.<AnnotationDescriptor>emptyList(), receiver, valueParametersTypes, safeReturnType);
|
Collections.<AnnotationDescriptor>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
|
// all checks were done before
|
||||||
return JetTypeInfo.create(resultType, context.dataFlowInfo);
|
return JetTypeInfo.create(resultType, context.dataFlowInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -846,13 +846,21 @@ public class KotlinBuiltIns {
|
|||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isFunctionOrExtensionFunctionType(@NotNull JetType type) {
|
||||||
|
return isFunctionType(type) || isExtensionFunctionType(type);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isFunctionType(@NotNull JetType 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
|
@Nullable
|
||||||
public JetType getReceiverType(@NotNull JetType type) {
|
public JetType getReceiverType(@NotNull JetType type) {
|
||||||
assert isFunctionType(type) : type;
|
assert isFunctionOrExtensionFunctionType(type) : type;
|
||||||
if (setContainsClassOf(extensionFunctionClassesSet, type)) {
|
if (setContainsClassOf(extensionFunctionClassesSet, type)) {
|
||||||
return type.getArguments().get(0).getType();
|
return type.getArguments().get(0).getType();
|
||||||
}
|
}
|
||||||
@@ -861,7 +869,7 @@ public class KotlinBuiltIns {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<ValueParameterDescriptor> getValueParameters(@NotNull FunctionDescriptor functionDescriptor, @NotNull JetType type) {
|
public List<ValueParameterDescriptor> getValueParameters(@NotNull FunctionDescriptor functionDescriptor, @NotNull JetType type) {
|
||||||
assert isFunctionType(type);
|
assert isFunctionOrExtensionFunctionType(type);
|
||||||
List<ValueParameterDescriptor> valueParameters = Lists.newArrayList();
|
List<ValueParameterDescriptor> valueParameters = Lists.newArrayList();
|
||||||
List<TypeProjection> parameterTypes = getParameterTypeProjectionsFromFunctionType(type);
|
List<TypeProjection> parameterTypes = getParameterTypeProjectionsFromFunctionType(type);
|
||||||
for (int i = 0; i < parameterTypes.size(); i++) {
|
for (int i = 0; i < parameterTypes.size(); i++) {
|
||||||
@@ -876,14 +884,14 @@ public class KotlinBuiltIns {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JetType getReturnTypeFromFunctionType(@NotNull JetType type) {
|
public JetType getReturnTypeFromFunctionType(@NotNull JetType type) {
|
||||||
assert isFunctionType(type);
|
assert isFunctionOrExtensionFunctionType(type);
|
||||||
List<TypeProjection> arguments = type.getArguments();
|
List<TypeProjection> arguments = type.getArguments();
|
||||||
return arguments.get(arguments.size() - 1).getType();
|
return arguments.get(arguments.size() - 1).getType();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<TypeProjection> getParameterTypeProjectionsFromFunctionType(@NotNull JetType type) {
|
public List<TypeProjection> getParameterTypeProjectionsFromFunctionType(@NotNull JetType type) {
|
||||||
assert isFunctionType(type);
|
assert isFunctionOrExtensionFunctionType(type);
|
||||||
List<TypeProjection> arguments = type.getArguments();
|
List<TypeProjection> arguments = type.getArguments();
|
||||||
int first = setContainsClassOf(extensionFunctionClassesSet, type) ? 1 : 0;
|
int first = setContainsClassOf(extensionFunctionClassesSet, type) ? 1 : 0;
|
||||||
int last = arguments.size() - 2;
|
int last = arguments.size() - 2;
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
|||||||
else if (KotlinBuiltIns.getInstance().isUnit(type)) {
|
else if (KotlinBuiltIns.getInstance().isUnit(type)) {
|
||||||
return KotlinBuiltIns.UNIT_ALIAS + (type.isNullable() ? "?" : "");
|
return KotlinBuiltIns.UNIT_ALIAS + (type.isNullable() ? "?" : "");
|
||||||
}
|
}
|
||||||
else if (KotlinBuiltIns.getInstance().isFunctionType(type)) {
|
else if (KotlinBuiltIns.getInstance().isFunctionOrExtensionFunctionType(type)) {
|
||||||
return renderFunctionType(type);
|
return renderFunctionType(type);
|
||||||
}
|
}
|
||||||
return renderDefaultType(type);
|
return renderDefaultType(type);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public class JetPluginUtil {
|
|||||||
|
|
||||||
public static boolean checkTypeIsStandard(JetType type, Project project) {
|
public static boolean checkTypeIsStandard(JetType type, Project project) {
|
||||||
if (KotlinBuiltIns.getInstance().isAny(type) || KotlinBuiltIns.getInstance().isNothingOrNullableNothing(type) || KotlinBuiltIns.getInstance().isUnit(type) ||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ public final class DescriptorLookupConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (functionDescriptor.getValueParameters().size() == 1
|
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;
|
return PARAMS_BRACES_FUNCTION_HANDLER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user