Move some function type utilities from descriptors to frontend
This commit is contained in:
@@ -17,13 +17,13 @@
|
|||||||
package org.jetbrains.kotlin.codegen;
|
package org.jetbrains.kotlin.codegen;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.builtins.FunctionTypesKt;
|
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor;
|
import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
|
import org.jetbrains.kotlin.resolve.FunctionTypeResolveUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatformKt;
|
import org.jetbrains.kotlin.resolve.TargetPlatformKt;
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
@@ -77,7 +77,7 @@ public class JvmRuntimeTypes {
|
|||||||
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
|
ReceiverParameterDescriptor receiverParameter = descriptor.getExtensionReceiverParameter();
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
KotlinType functionType = FunctionTypesKt.createFunctionType(
|
KotlinType functionType = FunctionTypeResolveUtilsKt.createFunctionType(
|
||||||
DescriptorUtilsKt.getBuiltIns(descriptor),
|
DescriptorUtilsKt.getBuiltIns(descriptor),
|
||||||
Annotations.Companion.getEMPTY(),
|
Annotations.Companion.getEMPTY(),
|
||||||
receiverParameter == null ? null : receiverParameter.getType(),
|
receiverParameter == null ? null : receiverParameter.getType(),
|
||||||
@@ -97,7 +97,7 @@ public class JvmRuntimeTypes {
|
|||||||
extensionReceiver != null ? extensionReceiver.getType() : dispatchReceiver != null ? dispatchReceiver.getType() : null;
|
extensionReceiver != null ? extensionReceiver.getType() : dispatchReceiver != null ? dispatchReceiver.getType() : null;
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
KotlinType functionType = FunctionTypesKt.createFunctionType(
|
KotlinType functionType = FunctionTypeResolveUtilsKt.createFunctionType(
|
||||||
DescriptorUtilsKt.getBuiltIns(descriptor),
|
DescriptorUtilsKt.getBuiltIns(descriptor),
|
||||||
Annotations.Companion.getEMPTY(),
|
Annotations.Companion.getEMPTY(),
|
||||||
receiverType,
|
receiverType,
|
||||||
|
|||||||
+2
-2
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.load.java.sam;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.FunctionTypesKt;
|
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl;
|
||||||
@@ -27,6 +26,7 @@ import org.jetbrains.kotlin.load.java.descriptors.*;
|
|||||||
import org.jetbrains.kotlin.load.java.lazy.types.LazyJavaTypeResolver;
|
import org.jetbrains.kotlin.load.java.lazy.types.LazyJavaTypeResolver;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
import org.jetbrains.kotlin.resolve.DescriptorUtils;
|
||||||
|
import org.jetbrains.kotlin.resolve.FunctionTypeResolveUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JavaResolverUtils;
|
import org.jetbrains.kotlin.resolve.jvm.JavaResolverUtils;
|
||||||
import org.jetbrains.kotlin.types.*;
|
import org.jetbrains.kotlin.types.*;
|
||||||
@@ -90,7 +90,7 @@ public class SingleAbstractMethodUtils {
|
|||||||
for (ValueParameterDescriptor parameter : valueParameters) {
|
for (ValueParameterDescriptor parameter : valueParameters) {
|
||||||
parameterTypes.add(parameter.getType());
|
parameterTypes.add(parameter.getType());
|
||||||
}
|
}
|
||||||
return FunctionTypesKt.createFunctionType(
|
return FunctionTypeResolveUtilsKt.createFunctionType(
|
||||||
DescriptorUtilsKt.getBuiltIns(function), Annotations.Companion.getEMPTY(), null, parameterTypes, returnType
|
DescriptorUtilsKt.getBuiltIns(function), Annotations.Companion.getEMPTY(), null, parameterTypes, returnType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve
|
package org.jetbrains.kotlin.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.*
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType
|
||||||
|
import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType
|
||||||
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl
|
||||||
@@ -223,7 +226,7 @@ class FunctionDescriptorResolver(
|
|||||||
|
|
||||||
private fun KotlinType.getValueParameters(owner: FunctionDescriptor): List<ValueParameterDescriptor>? =
|
private fun KotlinType.getValueParameters(owner: FunctionDescriptor): List<ValueParameterDescriptor>? =
|
||||||
if (functionTypeExpected()) {
|
if (functionTypeExpected()) {
|
||||||
createValueParametersFromFunctionType(owner, getValueParameterTypesFromFunctionType(this))
|
createValueParametersForInvokeInFunctionType(owner, getValueParameterTypesFromFunctionType(this))
|
||||||
}
|
}
|
||||||
else null
|
else null
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.resolve
|
package org.jetbrains.kotlin.resolve
|
||||||
|
|
||||||
import com.intellij.util.SmartList
|
import com.intellij.util.SmartList
|
||||||
import org.jetbrains.kotlin.builtins.createFunctionType
|
|
||||||
import org.jetbrains.kotlin.context.TypeLazinessToken
|
import org.jetbrains.kotlin.context.TypeLazinessToken
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
|
|||||||
+2
-7
@@ -18,8 +18,6 @@ package org.jetbrains.kotlin.resolve.callableReferences
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
import org.jetbrains.kotlin.builtins.ReflectionTypes
|
||||||
import org.jetbrains.kotlin.builtins.createFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.createValueParametersFromFunctionType
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
|
||||||
@@ -30,10 +28,7 @@ import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
|||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||||
import org.jetbrains.kotlin.psi.ValueArgument
|
import org.jetbrains.kotlin.psi.ValueArgument
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.TypeResolver
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver
|
import org.jetbrains.kotlin.resolve.calls.CallResolver
|
||||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.ResolveArgumentsMode
|
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.ResolveArgumentsMode
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
||||||
@@ -214,7 +209,7 @@ private fun bindFunctionReference(expression: KtCallableReferenceExpression, typ
|
|||||||
|
|
||||||
functionDescriptor.initialize(
|
functionDescriptor.initialize(
|
||||||
null, null, emptyList(),
|
null, null, emptyList(),
|
||||||
createValueParametersFromFunctionType(functionDescriptor, type.arguments.dropLast(1)),
|
createValueParametersForInvokeInFunctionType(functionDescriptor, type.arguments.dropLast(1)),
|
||||||
type.arguments.last().type,
|
type.arguments.last().type,
|
||||||
Modality.FINAL,
|
Modality.FINAL,
|
||||||
Visibilities.PUBLIC
|
Visibilities.PUBLIC
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.resolve.calls;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.FunctionTypesKt;
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.builtins.ReflectionTypes;
|
import org.jetbrains.kotlin.builtins.ReflectionTypes;
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
|
||||||
@@ -27,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
|||||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||||
import org.jetbrains.kotlin.psi.*;
|
import org.jetbrains.kotlin.psi.*;
|
||||||
import org.jetbrains.kotlin.resolve.BindingTrace;
|
import org.jetbrains.kotlin.resolve.BindingTrace;
|
||||||
|
import org.jetbrains.kotlin.resolve.FunctionTypeResolveUtilsKt;
|
||||||
import org.jetbrains.kotlin.resolve.TemporaryBindingTrace;
|
import org.jetbrains.kotlin.resolve.TemporaryBindingTrace;
|
||||||
import org.jetbrains.kotlin.resolve.TypeResolver;
|
import org.jetbrains.kotlin.resolve.TypeResolver;
|
||||||
import org.jetbrains.kotlin.resolve.callableReferences.CallableReferencesResolutionUtilsKt;
|
import org.jetbrains.kotlin.resolve.callableReferences.CallableReferencesResolutionUtilsKt;
|
||||||
@@ -276,7 +276,7 @@ public class ArgumentTypeResolver {
|
|||||||
return expectedTypeIsUnknown
|
return expectedTypeIsUnknown
|
||||||
? functionPlaceholders
|
? functionPlaceholders
|
||||||
.createFunctionPlaceholderType(Collections.<KotlinType>emptyList(), /* hasDeclaredArguments = */ false)
|
.createFunctionPlaceholderType(Collections.<KotlinType>emptyList(), /* hasDeclaredArguments = */ false)
|
||||||
: FunctionTypesKt.createFunctionType(
|
: FunctionTypeResolveUtilsKt.createFunctionType(
|
||||||
builtIns, Annotations.Companion.getEMPTY(), null, Collections.<KotlinType>emptyList(), DONT_CARE
|
builtIns, Annotations.Companion.getEMPTY(), null, Collections.<KotlinType>emptyList(), DONT_CARE
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -293,7 +293,9 @@ public class ArgumentTypeResolver {
|
|||||||
|
|
||||||
return expectedTypeIsUnknown && isFunctionLiteral
|
return expectedTypeIsUnknown && isFunctionLiteral
|
||||||
? functionPlaceholders.createFunctionPlaceholderType(parameterTypes, /* hasDeclaredArguments = */ true)
|
? functionPlaceholders.createFunctionPlaceholderType(parameterTypes, /* hasDeclaredArguments = */ true)
|
||||||
: FunctionTypesKt.createFunctionType(builtIns, Annotations.Companion.getEMPTY(), receiverType, parameterTypes, returnType);
|
: FunctionTypeResolveUtilsKt.createFunctionType(
|
||||||
|
builtIns, Annotations.Companion.getEMPTY(), receiverType, parameterTypes, returnType
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import kotlin.Pair;
|
|||||||
import kotlin.jvm.functions.Function0;
|
import kotlin.jvm.functions.Function0;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.builtins.FunctionTypesKt;
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
@@ -289,7 +288,7 @@ public class CallResolver {
|
|||||||
for (int i = 0; i < parameterNumber; i++) {
|
for (int i = 0; i < parameterNumber; i++) {
|
||||||
parameterTypes.add(NO_EXPECTED_TYPE);
|
parameterTypes.add(NO_EXPECTED_TYPE);
|
||||||
}
|
}
|
||||||
expectedType = FunctionTypesKt.createFunctionType(
|
expectedType = FunctionTypeResolveUtilsKt.createFunctionType(
|
||||||
builtIns, Annotations.Companion.getEMPTY(), null, parameterTypes, context.expectedType
|
builtIns, Annotations.Companion.getEMPTY(), null, parameterTypes, context.expectedType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.calls.inference
|
package org.jetbrains.kotlin.resolve.calls.inference
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.createFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
|
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
@@ -27,6 +26,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.TypeBounds.BoundKind.*
|
|||||||
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPosition
|
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPosition
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind
|
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.TYPE_BOUND_POSITION
|
import org.jetbrains.kotlin.resolve.calls.inference.constraintPosition.ConstraintPositionKind.TYPE_BOUND_POSITION
|
||||||
|
import org.jetbrains.kotlin.resolve.createFunctionType
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.hasExactAnnotation
|
import org.jetbrains.kotlin.resolve.descriptorUtil.hasExactAnnotation
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.hasNoInferAnnotation
|
import org.jetbrains.kotlin.resolve.descriptorUtil.hasNoInferAnnotation
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.resolve.calls.tasks
|
package org.jetbrains.kotlin.resolve.calls.tasks
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.createFunctionType
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.descriptors.impl.*
|
import org.jetbrains.kotlin.descriptors.impl.*
|
||||||
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.lexer.KtTokens
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
import org.jetbrains.kotlin.resolve.DescriptorFactory
|
||||||
|
import org.jetbrains.kotlin.resolve.createFunctionType
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl
|
import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2016 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.resolve
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.getFunctionTypeArgumentProjections
|
||||||
|
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
|
||||||
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
import org.jetbrains.kotlin.types.KotlinTypeImpl
|
||||||
|
import org.jetbrains.kotlin.types.TypeProjection
|
||||||
|
|
||||||
|
internal fun createValueParametersForInvokeInFunctionType(
|
||||||
|
functionDescriptor: FunctionDescriptor, parameterTypes: List<TypeProjection>
|
||||||
|
): List<ValueParameterDescriptor> {
|
||||||
|
return parameterTypes.mapIndexed { i, typeProjection ->
|
||||||
|
ValueParameterDescriptorImpl(
|
||||||
|
functionDescriptor, null, i, Annotations.EMPTY,
|
||||||
|
Name.identifier("p${i + 1}"), typeProjection.type,
|
||||||
|
/* declaresDefaultValue = */ false,
|
||||||
|
/* isCrossinline = */ false,
|
||||||
|
/* isNoinline = */ false,
|
||||||
|
null, SourceElement.NO_SOURCE
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createFunctionType(
|
||||||
|
builtIns: KotlinBuiltIns,
|
||||||
|
annotations: Annotations,
|
||||||
|
receiverType: KotlinType?,
|
||||||
|
parameterTypes: List<KotlinType>,
|
||||||
|
returnType: KotlinType
|
||||||
|
): KotlinType {
|
||||||
|
val arguments = getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType)
|
||||||
|
val size = parameterTypes.size
|
||||||
|
val classDescriptor = builtIns.getFunction(if (receiverType == null) size else size + 1)
|
||||||
|
|
||||||
|
val typeAnnotations =
|
||||||
|
if (receiverType == null || annotations.findAnnotation(KotlinBuiltIns.FQ_NAMES.extensionFunctionType) != null) {
|
||||||
|
annotations
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
val extensionFunctionAnnotation = AnnotationDescriptorImpl(
|
||||||
|
builtIns.getBuiltInClassByName(KotlinBuiltIns.FQ_NAMES.extensionFunctionType.shortName()).defaultType,
|
||||||
|
emptyMap(), SourceElement.NO_SOURCE
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO: preserve laziness of given annotations
|
||||||
|
AnnotationsImpl(annotations + extensionFunctionAnnotation)
|
||||||
|
}
|
||||||
|
|
||||||
|
return KotlinTypeImpl.create(typeAnnotations, classDescriptor, false, arguments)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getValueParametersCountFromFunctionType(type: KotlinType): Int {
|
||||||
|
assert(type.isFunctionType) { "Not a function type: $type" }
|
||||||
|
// Function type arguments = receiver? + parameters + return-type
|
||||||
|
return type.arguments.size - (if (type.isExtensionFunctionType) 1 else 0) - 1
|
||||||
|
}
|
||||||
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.types.expressions
|
|||||||
import com.google.common.collect.Lists
|
import com.google.common.collect.Lists
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.createFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
|
|||||||
@@ -17,17 +17,12 @@
|
|||||||
package org.jetbrains.kotlin.builtins
|
package org.jetbrains.kotlin.builtins
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.functions.BuiltInFictitiousFunctionClassFactory
|
import org.jetbrains.kotlin.builtins.functions.BuiltInFictitiousFunctionClassFactory
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
import org.jetbrains.kotlin.types.TypeProjection
|
||||||
|
import org.jetbrains.kotlin.types.TypeProjectionImpl
|
||||||
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.utils.DFS
|
import org.jetbrains.kotlin.utils.DFS
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -84,32 +79,11 @@ fun getReceiverTypeFromFunctionType(type: KotlinType): KotlinType? {
|
|||||||
return if (type.isTypeAnnotatedWithExtensionFunctionType) type.arguments.first().type else null
|
return if (type.isTypeAnnotatedWithExtensionFunctionType) type.arguments.first().type else null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createValueParametersFromFunctionType(
|
|
||||||
functionDescriptor: FunctionDescriptor, parameterTypes: List<TypeProjection>
|
|
||||||
): List<ValueParameterDescriptor> {
|
|
||||||
return parameterTypes.mapIndexed { i, typeProjection ->
|
|
||||||
ValueParameterDescriptorImpl(
|
|
||||||
functionDescriptor, null, i, Annotations.EMPTY,
|
|
||||||
Name.identifier("p${i + 1}"), typeProjection.type,
|
|
||||||
/* declaresDefaultValue = */ false,
|
|
||||||
/* isCrossinline = */ false,
|
|
||||||
/* isNoinline = */ false,
|
|
||||||
null, SourceElement.NO_SOURCE
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getReturnTypeFromFunctionType(type: KotlinType): KotlinType {
|
fun getReturnTypeFromFunctionType(type: KotlinType): KotlinType {
|
||||||
assert(type.isFunctionType) { "Not a function type: $type" }
|
assert(type.isFunctionType) { "Not a function type: $type" }
|
||||||
return type.arguments.last().type
|
return type.arguments.last().type
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getValueParametersCountFromFunctionType(type: KotlinType): Int {
|
|
||||||
assert(type.isFunctionType) { "Not a function type: $type" }
|
|
||||||
// Function type arguments = receiver? + parameters + return-type
|
|
||||||
return type.arguments.size - (if (type.isExtensionFunctionType) 1 else 0) - 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getValueParameterTypesFromFunctionType(type: KotlinType): List<TypeProjection> {
|
fun getValueParameterTypesFromFunctionType(type: KotlinType): List<TypeProjection> {
|
||||||
assert(type.isFunctionType) { "Not a function type: $type" }
|
assert(type.isFunctionType) { "Not a function type: $type" }
|
||||||
val arguments = type.arguments
|
val arguments = type.arguments
|
||||||
@@ -119,35 +93,7 @@ fun getValueParameterTypesFromFunctionType(type: KotlinType): List<TypeProjectio
|
|||||||
return arguments.subList(first, last)
|
return arguments.subList(first, last)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createFunctionType(
|
fun getFunctionTypeArgumentProjections(
|
||||||
builtIns: KotlinBuiltIns,
|
|
||||||
annotations: Annotations,
|
|
||||||
receiverType: KotlinType?,
|
|
||||||
parameterTypes: List<KotlinType>,
|
|
||||||
returnType: KotlinType
|
|
||||||
): KotlinType {
|
|
||||||
val arguments = getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType)
|
|
||||||
val size = parameterTypes.size
|
|
||||||
val classDescriptor = builtIns.getFunction(if (receiverType == null) size else size + 1)
|
|
||||||
|
|
||||||
val typeAnnotations =
|
|
||||||
if (receiverType == null || annotations.findAnnotation(KotlinBuiltIns.FQ_NAMES.extensionFunctionType) != null) {
|
|
||||||
annotations
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
val extensionFunctionAnnotation = AnnotationDescriptorImpl(
|
|
||||||
builtIns.getBuiltInClassByName(KotlinBuiltIns.FQ_NAMES.extensionFunctionType.shortName()).defaultType,
|
|
||||||
emptyMap(), SourceElement.NO_SOURCE
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO: preserve laziness of given annotations
|
|
||||||
AnnotationsImpl(annotations + extensionFunctionAnnotation)
|
|
||||||
}
|
|
||||||
|
|
||||||
return KotlinTypeImpl.create(typeAnnotations, classDescriptor, false, arguments)
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun getFunctionTypeArgumentProjections(
|
|
||||||
receiverType: KotlinType?,
|
receiverType: KotlinType?,
|
||||||
parameterTypes: List<KotlinType>,
|
parameterTypes: List<KotlinType>,
|
||||||
returnType: KotlinType
|
returnType: KotlinType
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.idea.completion
|
|||||||
import com.intellij.codeInsight.completion.InsertHandler
|
import com.intellij.codeInsight.completion.InsertHandler
|
||||||
import com.intellij.codeInsight.lookup.LookupElement
|
import com.intellij.codeInsight.lookup.LookupElement
|
||||||
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType
|
||||||
import org.jetbrains.kotlin.builtins.getValueParametersCountFromFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.idea.completion.handlers.*
|
import org.jetbrains.kotlin.idea.completion.handlers.*
|
||||||
@@ -27,6 +26,7 @@ import org.jetbrains.kotlin.idea.core.ExpectedInfo
|
|||||||
import org.jetbrains.kotlin.idea.core.fuzzyType
|
import org.jetbrains.kotlin.idea.core.fuzzyType
|
||||||
import org.jetbrains.kotlin.idea.util.CallType
|
import org.jetbrains.kotlin.idea.util.CallType
|
||||||
import org.jetbrains.kotlin.idea.util.fuzzyReturnType
|
import org.jetbrains.kotlin.idea.util.fuzzyReturnType
|
||||||
|
import org.jetbrains.kotlin.resolve.getValueParametersCountFromFunctionType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,6 @@ import com.intellij.codeInsight.lookup.LookupElementDecorator
|
|||||||
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
import com.intellij.codeInsight.lookup.LookupElementPresentation
|
||||||
import com.intellij.codeInsight.lookup.impl.LookupCellRenderer
|
import com.intellij.codeInsight.lookup.impl.LookupCellRenderer
|
||||||
import com.intellij.util.SmartList
|
import com.intellij.util.SmartList
|
||||||
import org.jetbrains.kotlin.builtins.getValueParametersCountFromFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.idea.completion.handlers.GenerateLambdaInfo
|
import org.jetbrains.kotlin.idea.completion.handlers.GenerateLambdaInfo
|
||||||
@@ -37,6 +36,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeUniqueAsSequence
|
import org.jetbrains.kotlin.resolve.descriptorUtil.overriddenTreeUniqueAsSequence
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf
|
import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf
|
||||||
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
|
import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors
|
||||||
|
import org.jetbrains.kotlin.resolve.getValueParametersCountFromFunctionType
|
||||||
import org.jetbrains.kotlin.synthetic.SamAdapterExtensionFunctionDescriptor
|
import org.jetbrains.kotlin.synthetic.SamAdapterExtensionFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,6 @@ import com.intellij.openapi.util.TextRange
|
|||||||
import com.intellij.psi.PsiDocumentManager
|
import com.intellij.psi.PsiDocumentManager
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType
|
import org.jetbrains.kotlin.builtins.getValueParameterTypesFromFunctionType
|
||||||
import org.jetbrains.kotlin.builtins.getValueParametersCountFromFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.isFunctionType
|
import org.jetbrains.kotlin.builtins.isFunctionType
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.core.ExpectedInfos
|
import org.jetbrains.kotlin.idea.core.ExpectedInfos
|
||||||
@@ -36,6 +35,7 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
|||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.resolve.getValueParametersCountFromFunctionType
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeProjection
|
import org.jetbrains.kotlin.types.TypeProjection
|
||||||
|
|||||||
@@ -19,12 +19,12 @@ package org.jetbrains.kotlin.idea.completion.smart
|
|||||||
import com.intellij.codeInsight.lookup.LookupElement
|
import com.intellij.codeInsight.lookup.LookupElement
|
||||||
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import org.jetbrains.kotlin.builtins.getValueParametersCountFromFunctionType
|
|
||||||
import org.jetbrains.kotlin.idea.completion.handlers.insertLambdaTemplate
|
import org.jetbrains.kotlin.idea.completion.handlers.insertLambdaTemplate
|
||||||
import org.jetbrains.kotlin.idea.completion.handlers.lambdaPresentation
|
import org.jetbrains.kotlin.idea.completion.handlers.lambdaPresentation
|
||||||
import org.jetbrains.kotlin.idea.completion.suppressAutoInsertion
|
import org.jetbrains.kotlin.idea.completion.suppressAutoInsertion
|
||||||
import org.jetbrains.kotlin.idea.core.ExpectedInfo
|
import org.jetbrains.kotlin.idea.core.ExpectedInfo
|
||||||
import org.jetbrains.kotlin.idea.core.fuzzyType
|
import org.jetbrains.kotlin.idea.core.fuzzyType
|
||||||
|
import org.jetbrains.kotlin.resolve.getValueParametersCountFromFunctionType
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object LambdaItems {
|
object LambdaItems {
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.kotlin.builtins.createFunctionType
|
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode
|
import org.jetbrains.kotlin.cfg.pseudocode.Pseudocode
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.SingleType
|
import org.jetbrains.kotlin.cfg.pseudocode.SingleType
|
||||||
import org.jetbrains.kotlin.cfg.pseudocode.getElementValuesRecursively
|
import org.jetbrains.kotlin.cfg.pseudocode.getElementValuesRecursively
|
||||||
@@ -42,6 +41,7 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
|||||||
import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.hasBothReceivers
|
import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.hasBothReceivers
|
||||||
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
|
||||||
import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke
|
import org.jetbrains.kotlin.resolve.calls.tasks.isSynthesizedInvoke
|
||||||
|
import org.jetbrains.kotlin.resolve.createFunctionType
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
|
import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
|
||||||
|
|||||||
Reference in New Issue
Block a user