diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index da861a3b006..c637b4d579a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -218,9 +218,9 @@ public class AsmUtil { } @NotNull - public static Type boxType(@NotNull Type type, @NotNull KotlinType kotlinType, @NotNull GenerationState state) { + public static Type boxType(@NotNull Type type, @NotNull KotlinType kotlinType, @NotNull KotlinTypeMapper typeMapper) { if (InlineClassesUtilsKt.isInlineClassType(kotlinType)) { - return state.getTypeMapper().mapTypeAsDeclaration(kotlinType); + return typeMapper.mapTypeAsDeclaration(kotlinType); } Type boxedPrimitiveType = boxPrimitiveType(type); @@ -1236,10 +1236,10 @@ public class AsmUtil { @NotNull InstructionAdapter v, @NotNull Type type, @Nullable KotlinType kotlinType, - @NotNull GenerationState state + @NotNull KotlinTypeMapper typeMapper ) { if (kotlinType != null && InlineClassesUtilsKt.isInlineClassType(kotlinType)) { - v.aconst(boxType(type, kotlinType, state)); + v.aconst(boxType(type, kotlinType, typeMapper)); } else if (isPrimitive(type)) { v.getstatic(boxType(type).getInternalName(), "TYPE", "Ljava/lang/Class;"); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index 68ea4e2a7ce..4869b1c1907 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -399,16 +399,17 @@ public class ClosureCodegen extends MemberCodegen { @NotNull CallableDescriptor descriptor, @NotNull GenerationState state ) { + KotlinTypeMapper typeMapper = state.getTypeMapper(); DeclarationDescriptor container = descriptor.getContainingDeclaration(); if (container instanceof ClassDescriptor) { // TODO: would it work for arrays? SimpleType containerKotlinType = ((ClassDescriptor) container).getDefaultType(); - Type containerType = state.getTypeMapper().mapClass((ClassDescriptor) container); - putJavaLangClassInstance(iv, containerType, containerKotlinType, state); + Type containerType = typeMapper.mapClass((ClassDescriptor) container); + putJavaLangClassInstance(iv, containerType, containerKotlinType, typeMapper); } else if (container instanceof PackageFragmentDescriptor) { - iv.aconst(state.getTypeMapper().mapOwner(descriptor)); + iv.aconst(typeMapper.mapOwner(descriptor)); } else if (descriptor instanceof VariableDescriptorWithAccessors) { iv.aconst(state.getBindingContext().get( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 9551c199603..67c64b008a7 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -3181,7 +3181,7 @@ public class ExpressionCodegen extends KtVisitor impleme putReifiedOperationMarkerIfTypeIsReifiedParameter(type, ReifiedTypeInliner.OperationKind.JAVA_CLASS); } - putJavaLangClassInstance(v, typeMapper.mapType(type), type, state); + putJavaLangClassInstance(v, typeMapper.mapType(type), type, typeMapper); } if (wrapIntoKClass) { @@ -4468,7 +4468,7 @@ public class ExpressionCodegen extends KtVisitor impleme KotlinType elementKotlinType = state.getModule().getBuiltIns().getArrayElementType(arrayKotlinType); Type elementType; if (KotlinBuiltIns.isArray(arrayKotlinType)) { - elementType = boxType(asmType(elementKotlinType), elementKotlinType, state); + elementType = boxType(asmType(elementKotlinType), elementKotlinType, typeMapper); } else { elementType = correctElementType(arrayType); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt index 5ce27b3b529..07c23aed797 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.kt @@ -713,7 +713,7 @@ class PsiInlineCodegen( val receiverKotlinType = receiver.kotlinType val boxedReceiver = if (receiverKotlinType != null) - receiver.type.boxReceiverForBoundReference(receiverKotlinType, state) + receiver.type.boxReceiverForBoundReference(receiverKotlinType, state.typeMapper) else receiver.type.boxReceiverForBoundReference() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt index 9f44531ac4f..566e9e8df90 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/LambdaInfo.kt @@ -6,13 +6,15 @@ package org.jetbrains.kotlin.codegen.inline import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.codegen.* +import org.jetbrains.kotlin.codegen.AsmUtil +import org.jetbrains.kotlin.codegen.OwnerKind +import org.jetbrains.kotlin.codegen.PropertyReferenceCodegen +import org.jetbrains.kotlin.codegen.StackValue import org.jetbrains.kotlin.codegen.binding.CalculatedClosure import org.jetbrains.kotlin.codegen.binding.CodegenBinding import org.jetbrains.kotlin.codegen.binding.CodegenBinding.* import org.jetbrains.kotlin.codegen.binding.MutableClosure import org.jetbrains.kotlin.codegen.context.EnclosedValueDescriptor -import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* @@ -177,11 +179,11 @@ class DefaultLambda( } } -fun Type.boxReceiverForBoundReference() = +internal fun Type.boxReceiverForBoundReference() = AsmUtil.boxType(this) -fun Type.boxReceiverForBoundReference(kotlinType: KotlinType, state: GenerationState) = - AsmUtil.boxType(this, kotlinType, state) +internal fun Type.boxReceiverForBoundReference(kotlinType: KotlinType, typeMapper: KotlinTypeMapper) = + AsmUtil.boxType(this, kotlinType, typeMapper) abstract class ExpressionLambda(protected val typeMapper: KotlinTypeMapper, isCrossInline: Boolean) : LambdaInfo(isCrossInline) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInArrayLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInArrayLoopGenerator.kt index ee050b284d7..df95ba9f97b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInArrayLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInArrayLoopGenerator.kt @@ -79,7 +79,7 @@ class ForInArrayLoopGenerator( override fun assignToLoopParameter() { val arrayElParamType = - if (KotlinBuiltIns.isArray(loopRangeType)) boxType(asmElementType, elementType, codegen.state) else asmElementType + if (KotlinBuiltIns.isArray(loopRangeType)) boxType(asmElementType, elementType, codegen.state.typeMapper) else asmElementType v.load(arrayVar, OBJECT_TYPE) v.load(indexVar, Type.INT_TYPE) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 0091bd9796b..edfbb70991d 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -1185,7 +1185,7 @@ class ExpressionCodegen( } else { val classType = classReference.classType if (classType is CrIrType) { - putJavaLangClassInstance(mv, classType.type, null, state) + putJavaLangClassInstance(mv, classType.type, null, typeMapper) return } else { val kotlinType = classType.toKotlinType() @@ -1194,7 +1194,7 @@ class ExpressionCodegen( putReifiedOperationMarkerIfTypeIsReifiedParameter(kotlinType, ReifiedTypeInliner.OperationKind.JAVA_CLASS, mv, this) } - putJavaLangClassInstance(mv, typeMapper.mapType(kotlinType), kotlinType, state) + putJavaLangClassInstance(mv, typeMapper.mapType(kotlinType), kotlinType, typeMapper) } }