Compare commits

...

1 Commits

Author SHA1 Message Date
Ilmir Usmanov
4ded25a5b6 IC Mangling: Generate inline class literal instead of underlying type
literal in annotations.
 #KT-30280 Fixed
2020-12-29 07:59:29 +01:00
7 changed files with 44 additions and 1 deletions

View File

@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.AnnotationChecker;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.InlineClassesUtilsKt;
import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker;
import org.jetbrains.kotlin.resolve.constants.*;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
@@ -497,6 +498,9 @@ public abstract class AnnotationCodegen {
public Void visitKClassValue(KClassValue value, Void data) {
KotlinType classType = value.getArgumentType(module);
innerClassConsumer.addInnerClassInfoFromAnnotation(DescriptorUtils.getClassDescriptorForType(classType));
if (InlineClassesUtilsKt.isInlineClassType(classType)) {
classType = TypeUtils.makeNullable(classType);
}
annotationVisitor.visit(name, typeMapper.mapType(classType));
return null;
}

View File

@@ -13982,6 +13982,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/inlineClasses/jvmStaticVarInInlineClassCompanion.kt");
}
@TestMetadata("kclassInAnnotation.kt")
public void testKclassInAnnotation() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kclassInAnnotation.kt");
}
@TestMetadata("kt25246.kt")
public void testKt25246() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt25246.kt");

View File

@@ -272,8 +272,11 @@ abstract class AnnotationCodegen(
visitor.visitEnd()
}
is IrClassReference -> {
val classType = value.classType
var classType = value.classType
classType.classOrNull?.owner?.let(innerClassConsumer::addInnerClassInfoFromAnnotation)
if (classType.isInlined()) {
classType = classType.makeNullable()
}
annotationVisitor.visit(name, typeMapper.mapType(classType))
}
is IrErrorExpression -> error("Don't know how to compile annotation value ${ir2string(value)}")

View File

@@ -0,0 +1,16 @@
// WITH_REFLECT
// TARGET_BACKEND: JVM
import kotlin.reflect.KClass
inline class IC(val i: Int)
annotation class Ann(val c: KClass<*>)
@Ann(IC::class)
class C
fun box(): String {
val klass = (C::class.annotations.first() as Ann).c.toString()
return if (klass == "class IC") "OK" else klass
}

View File

@@ -13982,6 +13982,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/inlineClasses/jvmStaticVarInInlineClassCompanion.kt");
}
@TestMetadata("kclassInAnnotation.kt")
public void testKclassInAnnotation() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kclassInAnnotation.kt");
}
@TestMetadata("kt25246.kt")
public void testKt25246() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt25246.kt");

View File

@@ -13992,6 +13992,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/inlineClasses/jvmStaticVarInInlineClassCompanion.kt");
}
@TestMetadata("kclassInAnnotation.kt")
public void testKclassInAnnotation() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kclassInAnnotation.kt");
}
@TestMetadata("kt25246.kt")
public void testKt25246() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt25246.kt");

View File

@@ -13982,6 +13982,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/inlineClasses/jvmStaticVarInInlineClassCompanion.kt");
}
@TestMetadata("kclassInAnnotation.kt")
public void testKclassInAnnotation() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kclassInAnnotation.kt");
}
@TestMetadata("kt25246.kt")
public void testKt25246() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt25246.kt");