[KAPT] Support type annotations in K2 KAPT. Fixes KT-64479

This commit is contained in:
strangepleasures
2024-01-15 10:24:38 +00:00
committed by Space Team
parent 7e9d6e601d
commit 0dd3abba2a
6 changed files with 197 additions and 7 deletions
@@ -0,0 +1,86 @@
package org.jetbrains;
/**
* public final annotation class org/jetbrains/A : kotlin/Annotation {
*
* // signature: <init>()V
* public constructor()
*
* // module name: main
* }
*/
@kotlin.Metadata()
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER})
@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.TYPE_USE, java.lang.annotation.ElementType.TYPE_PARAMETER})
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface A {
}
////////////////////
package org.jetbrains;
/**
* public final class org/jetbrains/Outer : kotlin/Any {
*
* // signature: <init>()V
* public constructor()
*
* // nested class: Inner
*
* // module name: main
* }
*/
@kotlin.Metadata()
public final class Outer {
public Outer() {
super();
}
/**
* public final class org/jetbrains/Outer.Inner : kotlin/Any {
*
* // signature: <init>()V
* public constructor()
*
* // module name: main
* }
*/
@kotlin.Metadata()
public static final class Inner {
public Inner() {
super();
}
}
}
////////////////////
package org.jetbrains;
/**
* package {
*
* // signature: foo(Ljava/util/List;Lorg/jetbrains/Outer$Inner;I)Ljava/lang/String;
* public final fun foo(x: @org/jetbrains/A kotlin/collections/List<@org/jetbrains/A kotlin/String>, y: @org/jetbrains/A org/jetbrains/Outer.Inner, z: @org/jetbrains/A kotlin/Int): @org/jetbrains/A kotlin/String
*
* // module name: main
* }
*/
@kotlin.Metadata()
public final class TypeAnnotationsKt {
public TypeAnnotationsKt() {
super();
}
@org.jetbrains.annotations.NotNull()
public static final java.lang.@org.jetbrains.A() String foo(@org.jetbrains.annotations.NotNull()
java.util.@org.jetbrains.A() List<java.lang.@org.jetbrains.A() String> x, @org.jetbrains.annotations.NotNull()
org.jetbrains.Outer.@org.jetbrains.A() Inner y, @org.jetbrains.A()
int z) {
return null;
}
}
@@ -0,0 +1,10 @@
package org.jetbrains
@Target(allowedTargets = [AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER])
annotation class A
class Outer {
class Inner
}
fun foo(x: @A List<@A String>, y: @A Outer.Inner, z: @A Int): @A String = ""
@@ -0,0 +1,85 @@
package org.jetbrains;
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.TYPE, kotlin.annotation.AnnotationTarget.TYPE_PARAMETER})
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target(value = {})
/**
* public final annotation class org/jetbrains/A : kotlin/Annotation {
*
* // signature: <init>()V
* public constructor()
*
* // module name: main
* }
*/
@kotlin.Metadata()
public abstract @interface A {
}
////////////////////
package org.jetbrains;
/**
* public final class org/jetbrains/Outer : kotlin/Any {
*
* // signature: <init>()V
* public constructor()
*
* // nested class: Inner
*
* // module name: main
* }
*/
@kotlin.Metadata()
public final class Outer {
public Outer() {
super();
}
/**
* public final class org/jetbrains/Outer.Inner : kotlin/Any {
*
* // signature: <init>()V
* public constructor()
*
* // module name: main
* }
*/
@kotlin.Metadata()
public static final class Inner {
public Inner() {
super();
}
}
}
////////////////////
package org.jetbrains;
/**
* package {
*
* // signature: foo(Ljava/util/List;Lorg/jetbrains/Outer$Inner;I)Ljava/lang/String;
* public final fun foo(x: @org/jetbrains/A kotlin/collections/List<@org/jetbrains/A kotlin/String>, y: @org/jetbrains/A org/jetbrains/Outer.Inner, z: @org/jetbrains/A kotlin/Int): @org/jetbrains/A kotlin/String
*
* // module name: main
* }
*/
@kotlin.Metadata()
public final class TypeAnnotationsKt {
public TypeAnnotationsKt() {
super();
}
@org.jetbrains.annotations.NotNull()
public static final java.lang.String foo(@org.jetbrains.annotations.NotNull()
java.util.List<java.lang.String> x, @org.jetbrains.annotations.NotNull()
org.jetbrains.Outer.Inner y, int z) {
return null;
}
}
@@ -715,6 +715,12 @@ public class IrClassFileToSourceStubConverterTestGenerated extends AbstractIrCla
runTest("plugins/kapt3/kapt3-compiler/testData/converter/topLevel.kt");
}
@Test
@TestMetadata("typeAnnotations.kt")
public void testTypeAnnotations() throws Exception {
runTest("plugins/kapt3/kapt3-compiler/testData/converter/typeAnnotations.kt");
}
@Test
@TestMetadata("unresolvedDelegateExpression.kt")
public void testUnresolvedDelegateExpression() throws Exception {
@@ -392,7 +392,7 @@ private class StubGenerator(
print(method.name, "(")
method.parameterList.parameters.forEachIndexed{ index, parameter ->
if (index > 0) print(", ")
printTypeSignature(parameter.type)
printTypeSignature(parameter.type, false)
}
print(")")
}
@@ -430,14 +430,11 @@ private class StubGenerator(
private fun Printer.printType(type: PsiType) {
recordErrorTypes(type)
type.annotations.forEach {
printAnnotation(it, false)
}
printTypeSignature(type)
printTypeSignature(type, true)
}
private fun Printer.printTypeSignature(type: PsiType) {
printWithNoIndent((if (type is PsiClassType && isErroneous(type)) type.rawType() else type).canonicalText.replace('$', '.'))
private fun Printer.printTypeSignature(type: PsiType, annotated: Boolean) {
printWithNoIndent((if (type is PsiClassType && isErroneous(type)) type.rawType() else type).getCanonicalText(annotated).replace('$', '.'))
}
private fun Printer.printTypeParams(typeParameters: Array<PsiTypeParameter>) {
@@ -715,6 +715,12 @@ public class KotlinKapt4ContextTestGenerated extends AbstractKotlinKapt4ContextT
runTest("plugins/kapt4/../kapt3/kapt3-compiler/testData/converter/topLevel.kt");
}
@Test
@TestMetadata("typeAnnotations.kt")
public void testTypeAnnotations() throws Exception {
runTest("plugins/kapt4/../kapt3/kapt3-compiler/testData/converter/typeAnnotations.kt");
}
@Test
@TestMetadata("unresolvedDelegateExpression.kt")
public void testUnresolvedDelegateExpression() throws Exception {