Changes on code review
This commit is contained in:
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.codegen;
|
package org.jetbrains.kotlin.codegen;
|
||||||
|
|
||||||
import kotlin.collections.CollectionsKt;
|
|
||||||
import kotlin.jvm.functions.Function1;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.coroutines.CoroutineUtilKt;
|
import org.jetbrains.kotlin.coroutines.CoroutineUtilKt;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
@@ -109,12 +107,7 @@ public class JvmRuntimeTypes {
|
|||||||
Annotations.Companion.getEMPTY(),
|
Annotations.Companion.getEMPTY(),
|
||||||
receiverParameter == null ? null : receiverParameter.getType(),
|
receiverParameter == null ? null : receiverParameter.getType(),
|
||||||
ExpressionTypingUtils.getValueParametersTypes(parameters),
|
ExpressionTypingUtils.getValueParametersTypes(parameters),
|
||||||
CollectionsKt.map(parameters, new Function1<ValueParameterDescriptor, Name>() {
|
null,
|
||||||
@Override
|
|
||||||
public Name invoke(ValueParameterDescriptor descriptor) {
|
|
||||||
return descriptor.getName();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
descriptor.getReturnType()
|
descriptor.getReturnType()
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -143,12 +136,7 @@ public class JvmRuntimeTypes {
|
|||||||
Annotations.Companion.getEMPTY(),
|
Annotations.Companion.getEMPTY(),
|
||||||
isBound ? null : receiverType,
|
isBound ? null : receiverType,
|
||||||
ExpressionTypingUtils.getValueParametersTypes(parameters),
|
ExpressionTypingUtils.getValueParametersTypes(parameters),
|
||||||
CollectionsKt.map(parameters, new Function1<ValueParameterDescriptor, Name>() {
|
null,
|
||||||
@Override
|
|
||||||
public Name invoke(ValueParameterDescriptor descriptor) {
|
|
||||||
return descriptor.getName();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
descriptor.getReturnType()
|
descriptor.getReturnType()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -176,9 +176,8 @@ class DynamicCallableDescriptors(builtIns: KotlinBuiltIns) {
|
|||||||
|
|
||||||
val receiverType = funLiteral.receiverTypeReference?.let { dynamicType }
|
val receiverType = funLiteral.receiverTypeReference?.let { dynamicType }
|
||||||
val parameterTypes = funLiteral.valueParameters.map { dynamicType }
|
val parameterTypes = funLiteral.valueParameters.map { dynamicType }
|
||||||
val parameterNames = funLiteral.valueParameters.map { it.nameAsName ?: SpecialNames.NO_NAME_PROVIDED }
|
|
||||||
|
|
||||||
return createFunctionType(owner.builtIns, Annotations.EMPTY, receiverType, parameterTypes, parameterNames, dynamicType)
|
return createFunctionType(owner.builtIns, Annotations.EMPTY, receiverType, parameterTypes, null, dynamicType)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (arg in call.valueArguments) {
|
for (arg in call.valueArguments) {
|
||||||
|
|||||||
+8
-5
@@ -28,10 +28,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationsImpl
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.KotlinTypeFactory
|
|
||||||
import org.jetbrains.kotlin.types.SimpleType
|
|
||||||
import org.jetbrains.kotlin.types.TypeProjection
|
|
||||||
|
|
||||||
fun createValueParametersForInvokeInFunctionType(
|
fun createValueParametersForInvokeInFunctionType(
|
||||||
functionDescriptor: FunctionDescriptor, parameterTypes: List<TypeProjection>
|
functionDescriptor: FunctionDescriptor, parameterTypes: List<TypeProjection>
|
||||||
@@ -75,7 +72,13 @@ fun createFunctionType(
|
|||||||
AnnotationsImpl(annotations + extensionFunctionAnnotation)
|
AnnotationsImpl(annotations + extensionFunctionAnnotation)
|
||||||
}
|
}
|
||||||
|
|
||||||
return KotlinTypeFactory.functionType(typeAnnotations, classDescriptor, arguments, parameterNames)
|
val simpleType = KotlinTypeFactory.simpleNotNullType(typeAnnotations, classDescriptor, arguments)
|
||||||
|
if (parameterNames == null || parameterNames.all { it.isSpecial }) {
|
||||||
|
return simpleType
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return FunctionType(simpleType, parameterNames)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getValueParametersCountFromFunctionType(type: KotlinType): Int {
|
fun getValueParametersCountFromFunctionType(type: KotlinType): Int {
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ internal class DescriptorRendererImpl(
|
|||||||
append("(")
|
append("(")
|
||||||
val parameterTypes = getValueParameterTypesFromFunctionType(type)
|
val parameterTypes = getValueParameterTypesFromFunctionType(type)
|
||||||
val parameterNames = type.getParameterNamesFromFunctionType() ?: parameterTypes.map { SpecialNames.NO_NAME_PROVIDED }
|
val parameterNames = type.getParameterNamesFromFunctionType() ?: parameterTypes.map { SpecialNames.NO_NAME_PROVIDED }
|
||||||
assert(parameterNames.size == parameterTypes.size)
|
assert(parameterNames.size == parameterTypes.size) { "Number of names does not match number of types for $type"}
|
||||||
|
|
||||||
for (index in parameterTypes.indices) {
|
for (index in parameterTypes.indices) {
|
||||||
val typeProjection = parameterTypes[index]
|
val typeProjection = parameterTypes[index]
|
||||||
|
|||||||
@@ -51,22 +51,6 @@ object KotlinTypeFactory {
|
|||||||
arguments: List<TypeProjection>
|
arguments: List<TypeProjection>
|
||||||
): SimpleType = SimpleTypeImpl(annotations, descriptor.typeConstructor, arguments, false, descriptor.getMemberScope(arguments))
|
): SimpleType = SimpleTypeImpl(annotations, descriptor.typeConstructor, arguments, false, descriptor.getMemberScope(arguments))
|
||||||
|
|
||||||
@JvmStatic
|
|
||||||
fun functionType(
|
|
||||||
annotations: Annotations,
|
|
||||||
descriptor: ClassDescriptor,
|
|
||||||
arguments: List<TypeProjection>,
|
|
||||||
parameterNames: List<Name>?
|
|
||||||
): SimpleType {
|
|
||||||
val simpleType = simpleNotNullType(annotations, descriptor, arguments)
|
|
||||||
if (parameterNames == null || parameterNames.all { it.isSpecial }) {
|
|
||||||
return simpleType
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return FunctionType(simpleType, parameterNames)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun simpleType(
|
fun simpleType(
|
||||||
baseType: SimpleType,
|
baseType: SimpleType,
|
||||||
|
|||||||
+1
-1
@@ -151,6 +151,6 @@ private fun buildTemplate(lambdaType: KotlinType, explicitParameterTypes: Boolea
|
|||||||
private fun functionParameterTypesAndNames(functionType: KotlinType): Pair<List<KotlinType>, List<Name>> {
|
private fun functionParameterTypesAndNames(functionType: KotlinType): Pair<List<KotlinType>, List<Name>> {
|
||||||
val types = getValueParameterTypesFromFunctionType(functionType).map(TypeProjection::getType)
|
val types = getValueParameterTypesFromFunctionType(functionType).map(TypeProjection::getType)
|
||||||
val names = functionType.getParameterNamesFromFunctionType() ?: types.map { SpecialNames.NO_NAME_PROVIDED }
|
val names = functionType.getParameterNamesFromFunctionType() ?: types.map { SpecialNames.NO_NAME_PROVIDED }
|
||||||
assert(names.size == types.size)
|
assert(names.size == types.size) { "Number of names does not match number of types for $functionType"}
|
||||||
return types to names
|
return types to names
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user