Minor, relax parameter type of AsmUtil.putJavaLangClassInstance
This commit is contained in:
@@ -218,9 +218,9 @@ public class AsmUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@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)) {
|
if (InlineClassesUtilsKt.isInlineClassType(kotlinType)) {
|
||||||
return state.getTypeMapper().mapTypeAsDeclaration(kotlinType);
|
return typeMapper.mapTypeAsDeclaration(kotlinType);
|
||||||
}
|
}
|
||||||
|
|
||||||
Type boxedPrimitiveType = boxPrimitiveType(type);
|
Type boxedPrimitiveType = boxPrimitiveType(type);
|
||||||
@@ -1236,10 +1236,10 @@ public class AsmUtil {
|
|||||||
@NotNull InstructionAdapter v,
|
@NotNull InstructionAdapter v,
|
||||||
@NotNull Type type,
|
@NotNull Type type,
|
||||||
@Nullable KotlinType kotlinType,
|
@Nullable KotlinType kotlinType,
|
||||||
@NotNull GenerationState state
|
@NotNull KotlinTypeMapper typeMapper
|
||||||
) {
|
) {
|
||||||
if (kotlinType != null && InlineClassesUtilsKt.isInlineClassType(kotlinType)) {
|
if (kotlinType != null && InlineClassesUtilsKt.isInlineClassType(kotlinType)) {
|
||||||
v.aconst(boxType(type, kotlinType, state));
|
v.aconst(boxType(type, kotlinType, typeMapper));
|
||||||
}
|
}
|
||||||
else if (isPrimitive(type)) {
|
else if (isPrimitive(type)) {
|
||||||
v.getstatic(boxType(type).getInternalName(), "TYPE", "Ljava/lang/Class;");
|
v.getstatic(boxType(type).getInternalName(), "TYPE", "Ljava/lang/Class;");
|
||||||
|
|||||||
@@ -399,16 +399,17 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
|||||||
@NotNull CallableDescriptor descriptor,
|
@NotNull CallableDescriptor descriptor,
|
||||||
@NotNull GenerationState state
|
@NotNull GenerationState state
|
||||||
) {
|
) {
|
||||||
|
KotlinTypeMapper typeMapper = state.getTypeMapper();
|
||||||
DeclarationDescriptor container = descriptor.getContainingDeclaration();
|
DeclarationDescriptor container = descriptor.getContainingDeclaration();
|
||||||
|
|
||||||
if (container instanceof ClassDescriptor) {
|
if (container instanceof ClassDescriptor) {
|
||||||
// TODO: would it work for arrays?
|
// TODO: would it work for arrays?
|
||||||
SimpleType containerKotlinType = ((ClassDescriptor) container).getDefaultType();
|
SimpleType containerKotlinType = ((ClassDescriptor) container).getDefaultType();
|
||||||
Type containerType = state.getTypeMapper().mapClass((ClassDescriptor) container);
|
Type containerType = typeMapper.mapClass((ClassDescriptor) container);
|
||||||
putJavaLangClassInstance(iv, containerType, containerKotlinType, state);
|
putJavaLangClassInstance(iv, containerType, containerKotlinType, typeMapper);
|
||||||
}
|
}
|
||||||
else if (container instanceof PackageFragmentDescriptor) {
|
else if (container instanceof PackageFragmentDescriptor) {
|
||||||
iv.aconst(state.getTypeMapper().mapOwner(descriptor));
|
iv.aconst(typeMapper.mapOwner(descriptor));
|
||||||
}
|
}
|
||||||
else if (descriptor instanceof VariableDescriptorWithAccessors) {
|
else if (descriptor instanceof VariableDescriptorWithAccessors) {
|
||||||
iv.aconst(state.getBindingContext().get(
|
iv.aconst(state.getBindingContext().get(
|
||||||
|
|||||||
@@ -3181,7 +3181,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
putReifiedOperationMarkerIfTypeIsReifiedParameter(type, ReifiedTypeInliner.OperationKind.JAVA_CLASS);
|
putReifiedOperationMarkerIfTypeIsReifiedParameter(type, ReifiedTypeInliner.OperationKind.JAVA_CLASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
putJavaLangClassInstance(v, typeMapper.mapType(type), type, state);
|
putJavaLangClassInstance(v, typeMapper.mapType(type), type, typeMapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wrapIntoKClass) {
|
if (wrapIntoKClass) {
|
||||||
@@ -4468,7 +4468,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
KotlinType elementKotlinType = state.getModule().getBuiltIns().getArrayElementType(arrayKotlinType);
|
KotlinType elementKotlinType = state.getModule().getBuiltIns().getArrayElementType(arrayKotlinType);
|
||||||
Type elementType;
|
Type elementType;
|
||||||
if (KotlinBuiltIns.isArray(arrayKotlinType)) {
|
if (KotlinBuiltIns.isArray(arrayKotlinType)) {
|
||||||
elementType = boxType(asmType(elementKotlinType), elementKotlinType, state);
|
elementType = boxType(asmType(elementKotlinType), elementKotlinType, typeMapper);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
elementType = correctElementType(arrayType);
|
elementType = correctElementType(arrayType);
|
||||||
|
|||||||
@@ -713,7 +713,7 @@ class PsiInlineCodegen(
|
|||||||
val receiverKotlinType = receiver.kotlinType
|
val receiverKotlinType = receiver.kotlinType
|
||||||
val boxedReceiver =
|
val boxedReceiver =
|
||||||
if (receiverKotlinType != null)
|
if (receiverKotlinType != null)
|
||||||
receiver.type.boxReceiverForBoundReference(receiverKotlinType, state)
|
receiver.type.boxReceiverForBoundReference(receiverKotlinType, state.typeMapper)
|
||||||
else
|
else
|
||||||
receiver.type.boxReceiverForBoundReference()
|
receiver.type.boxReceiverForBoundReference()
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,15 @@
|
|||||||
package org.jetbrains.kotlin.codegen.inline
|
package org.jetbrains.kotlin.codegen.inline
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
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.CalculatedClosure
|
||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||||
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.binding.MutableClosure
|
||||||
import org.jetbrains.kotlin.codegen.context.EnclosedValueDescriptor
|
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.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
@@ -177,11 +179,11 @@ class DefaultLambda(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Type.boxReceiverForBoundReference() =
|
internal fun Type.boxReceiverForBoundReference() =
|
||||||
AsmUtil.boxType(this)
|
AsmUtil.boxType(this)
|
||||||
|
|
||||||
fun Type.boxReceiverForBoundReference(kotlinType: KotlinType, state: GenerationState) =
|
internal fun Type.boxReceiverForBoundReference(kotlinType: KotlinType, typeMapper: KotlinTypeMapper) =
|
||||||
AsmUtil.boxType(this, kotlinType, state)
|
AsmUtil.boxType(this, kotlinType, typeMapper)
|
||||||
|
|
||||||
abstract class ExpressionLambda(protected val typeMapper: KotlinTypeMapper, isCrossInline: Boolean) : LambdaInfo(isCrossInline) {
|
abstract class ExpressionLambda(protected val typeMapper: KotlinTypeMapper, isCrossInline: Boolean) : LambdaInfo(isCrossInline) {
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -79,7 +79,7 @@ class ForInArrayLoopGenerator(
|
|||||||
|
|
||||||
override fun assignToLoopParameter() {
|
override fun assignToLoopParameter() {
|
||||||
val arrayElParamType =
|
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(arrayVar, OBJECT_TYPE)
|
||||||
v.load(indexVar, Type.INT_TYPE)
|
v.load(indexVar, Type.INT_TYPE)
|
||||||
|
|||||||
+2
-2
@@ -1185,7 +1185,7 @@ class ExpressionCodegen(
|
|||||||
} else {
|
} else {
|
||||||
val classType = classReference.classType
|
val classType = classReference.classType
|
||||||
if (classType is CrIrType) {
|
if (classType is CrIrType) {
|
||||||
putJavaLangClassInstance(mv, classType.type, null, state)
|
putJavaLangClassInstance(mv, classType.type, null, typeMapper)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
val kotlinType = classType.toKotlinType()
|
val kotlinType = classType.toKotlinType()
|
||||||
@@ -1194,7 +1194,7 @@ class ExpressionCodegen(
|
|||||||
putReifiedOperationMarkerIfTypeIsReifiedParameter(kotlinType, ReifiedTypeInliner.OperationKind.JAVA_CLASS, mv, this)
|
putReifiedOperationMarkerIfTypeIsReifiedParameter(kotlinType, ReifiedTypeInliner.OperationKind.JAVA_CLASS, mv, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
putJavaLangClassInstance(mv, typeMapper.mapType(kotlinType), kotlinType, state)
|
putJavaLangClassInstance(mv, typeMapper.mapType(kotlinType), kotlinType, typeMapper)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user