diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt index 14de5b2b912..d1044f33c5f 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt @@ -818,7 +818,15 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati else -> null } }, - ifNonError = { genericSignature.returnType } + ifNonError = ifNonError@ { + if (descriptor is PropertyDescriptor) { + val containingClass = descriptor.containingDeclaration + if (containingClass is ClassDescriptor && containingClass.kind == ClassKind.ANNOTATION_CLASS) { + return@ifNonError jcReturnType + } + } + genericSignature.returnType + } ) return Pair(genericSignature, returnType) diff --git a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java index 19ab4d2f67c..c4d4cc1b3b6 100644 --- a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java @@ -354,6 +354,11 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi runTest("plugins/kapt3/kapt3-compiler/testData/converter/nonExistentClassWIthoutCorrection.kt"); } + @TestMetadata("outProjection.kt") + public void testOutProjection() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/outProjection.kt"); + } + @TestMetadata("primitiveTypes.kt") public void testPrimitiveTypes() throws Exception { runTest("plugins/kapt3/kapt3-compiler/testData/converter/primitiveTypes.kt"); diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/annotations.txt b/plugins/kapt3/kapt3-compiler/testData/converter/annotations.txt index a4998fe463d..a0daffbe80e 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/annotations.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/annotations.txt @@ -28,9 +28,9 @@ public abstract @interface Anno2 { public abstract Colors[] colors() default {Colors.BLACK, Colors.WHITE}; - public abstract java.lang.Class clazz(); + public abstract java.lang.Class clazz(); - public abstract java.lang.Class[] classes(); + public abstract java.lang.Class[] classes(); } //////////////////// diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/errorLocationMapping.txt b/plugins/kapt3/kapt3-compiler/testData/converter/errorLocationMapping.txt index 8bded353588..480cd5a694f 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/errorLocationMapping.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/errorLocationMapping.txt @@ -4,7 +4,7 @@ import kotlin.reflect.KClass; @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) public abstract @interface Anno { - public abstract java.lang.Class a(); + public abstract java.lang.Class a(); } //////////////////// diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/nestedClasses2.txt b/plugins/kapt3/kapt3-compiler/testData/converter/nestedClasses2.txt index f07267bbe10..587e2610573 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/nestedClasses2.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/nestedClasses2.txt @@ -159,7 +159,7 @@ public abstract interface IFoo { @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) public static abstract @interface Anno { - public abstract java.lang.Class[] value(); + public abstract java.lang.Class[] value(); } @kotlin.Metadata() diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/nestedClassesNonRootPackage.txt b/plugins/kapt3/kapt3-compiler/testData/converter/nestedClassesNonRootPackage.txt index 0d1e5896618..6fad673957b 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/nestedClassesNonRootPackage.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/nestedClassesNonRootPackage.txt @@ -164,7 +164,7 @@ public abstract interface IFoo { @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) public static abstract @interface Anno { - public abstract java.lang.Class[] value(); + public abstract java.lang.Class[] value(); } @kotlin.Metadata() diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/nonExistentClassTypesConversion.txt b/plugins/kapt3/kapt3-compiler/testData/converter/nonExistentClassTypesConversion.txt index 333a325a2d2..1c2e5ec0101 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/nonExistentClassTypesConversion.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/nonExistentClassTypesConversion.txt @@ -5,13 +5,13 @@ import kotlin.reflect.KClass; @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) public abstract @interface Anno { - public abstract java.lang.Class a(); + public abstract java.lang.Class a(); - public abstract java.lang.Class[] b(); + public abstract java.lang.Class[] b(); - public abstract java.lang.Class[] c(); + public abstract java.lang.Class[] c(); - public abstract java.lang.Class[] d(); + public abstract java.lang.Class[] d(); } //////////////////// diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/outProjection.kt b/plugins/kapt3/kapt3-compiler/testData/converter/outProjection.kt new file mode 100644 index 00000000000..ee6e08d56f1 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/outProjection.kt @@ -0,0 +1,10 @@ +import kotlin.reflect.KClass; + +annotation class Anno(val baseClass: KClass>) + +interface Intf + +abstract class Base : Intf + +@Anno(baseClass = Base::class) +interface Impl \ No newline at end of file diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/outProjection.txt b/plugins/kapt3/kapt3-compiler/testData/converter/outProjection.txt new file mode 100644 index 00000000000..5616ca4da90 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/outProjection.txt @@ -0,0 +1,40 @@ +import java.lang.System; + +@kotlin.Metadata() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Anno { + + public abstract java.lang.Class baseClass(); +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public abstract class Base implements Intf { + + public Base() { + super(); + } +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +@Anno(baseClass = Base.class) +public abstract interface Impl { +} + +//////////////////// + + +import java.lang.System; + +@kotlin.Metadata() +public abstract interface Intf { +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/repeatableAnnotations.txt b/plugins/kapt3/kapt3-compiler/testData/converter/repeatableAnnotations.txt index 2779b066bb0..e11b26b5887 100644 --- a/plugins/kapt3/kapt3-compiler/testData/converter/repeatableAnnotations.txt +++ b/plugins/kapt3/kapt3-compiler/testData/converter/repeatableAnnotations.txt @@ -48,7 +48,7 @@ public abstract @interface AnnoClass { public abstract int x(); - public abstract java.lang.Class c(); + public abstract java.lang.Class c(); } ////////////////////