[LC] preserve type annotations from wildcard bound

^KT-66603
This commit is contained in:
Dmitrii Gridin
2024-03-14 18:34:10 +01:00
committed by Space Team
parent 96575a0bdb
commit 54aee57fec
6 changed files with 28 additions and 21 deletions
@@ -1,2 +1,2 @@
KtType: @foo.MyAnno(s = "outer") kotlin.collections.List<@foo.MyAnno(s = "middle") kotlin.collections.List<@foo.AnotherAnnotation(k = foo.Nested::class) kotlin.String>>
PsiType: java.util.@foo.MyAnno("outer") List<@foo.MyAnno("middle") ? extends java.util.List<? extends java.lang.String>>
PsiType: java.util.@foo.MyAnno("outer") List<? extends java.util.@foo.MyAnno("middle") List<? extends java.lang.@foo.AnotherAnnotation(Nested::class) String>>
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@@ -96,6 +96,13 @@ fun PsiType.annotateByTypeAnnotationProvider(
fun recursiveAnnotator(psiType: PsiType) {
if (!annotationsIterator.hasNext()) return
if (psiType is PsiWildcardType) {
// Wildcard itself cannot have annotations
psiType.bound?.let(::recursiveAnnotator)
return
}
val typeAnnotations = annotationsIterator.next()
when (psiType) {
@@ -1,14 +1,14 @@
public final class Nested /* foo.Nested*/ {
@org.jetbrains.annotations.Nullable()
private @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>> property;
private @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> property;
@org.jetbrains.annotations.Nullable()
public final @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> function(@org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>, @org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>);// function(@foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>, @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>)
public final @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> function(@org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>, @org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>);// function(@foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>, @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>)
@org.jetbrains.annotations.Nullable()
public final @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> getProperty();// getProperty()
public Nested();// .ctor()
public final void setProperty(@org.jetbrains.annotations.Nullable() @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>);// setProperty(@foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>)
public final void setProperty(@org.jetbrains.annotations.Nullable() @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>);// setProperty(@foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>)
}
@@ -1,14 +1,14 @@
public final class Nested /* foo.Nested*/ {
@org.jetbrains.annotations.Nullable()
private @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>> property = null /* initializer type: null */;
private @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> property = null /* initializer type: null */;
@org.jetbrains.annotations.Nullable()
public final @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> function(@org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>, @org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>);// function(@foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>, @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>)
public final @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> function(@org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>, @org.jetbrains.annotations.NotNull() @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>);// function(@foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>, @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>)
@org.jetbrains.annotations.Nullable()
public final @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>> getProperty();// getProperty()
public Nested();// .ctor()
public final void setProperty(@org.jetbrains.annotations.Nullable() @foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>);// setProperty(@foo.MyAnno(s = "outer") java.util.List<@foo.MyAnno(s = "middle") ? extends java.util.List<java.lang.String>>)
public final void setProperty(@org.jetbrains.annotations.Nullable() @foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>);// setProperty(@foo.MyAnno(s = "outer") java.util.List<? extends @foo.MyAnno(s = "middle") java.util.List<@foo.AnotherAnnotation(k = foo.Nested.class) java.lang.String>>)
}
@@ -33,14 +33,14 @@ public final class JvmWildcardAnnotationsKt /* JvmWildcardAnnotationsKt*/ {
public static final void deepOpen(@org.jetbrains.annotations.NotNull() Out<Out<Out<Open>>>);// deepOpen(Out<Out<Out<Open>>>)
@org.jetbrains.annotations.NotNull()
public static final @kotlin.jvm.JvmSuppressWildcards() OutPair<Open, @kotlin.jvm.JvmWildcard() ? extends OutPair<Open, ? extends Out<Open>>> combination();// combination()
public static final @kotlin.jvm.JvmSuppressWildcards() OutPair<Open, ? extends @kotlin.jvm.JvmWildcard() OutPair<Open, ? extends @kotlin.jvm.JvmWildcard() Out<Open>>> combination();// combination()
@org.jetbrains.annotations.NotNull()
public static final @kotlin.jvm.JvmSuppressWildcards(suppress = false) OutPair<? extends Final, @kotlin.jvm.JvmSuppressWildcards() OutPair<Out<Final>, Out<@kotlin.jvm.JvmSuppressWildcards(suppress = false) ? extends Final>>> falseTrueFalse();// falseTrueFalse()
public static final @kotlin.jvm.JvmSuppressWildcards(suppress = false) OutPair<? extends Final, @kotlin.jvm.JvmSuppressWildcards() OutPair<Out<Final>, Out<? extends @kotlin.jvm.JvmSuppressWildcards(suppress = false) Final>>> falseTrueFalse();// falseTrueFalse()
public static final void simpleIn(@org.jetbrains.annotations.NotNull() In<@kotlin.jvm.JvmWildcard() ? super java.lang.Object>);// simpleIn(In<@kotlin.jvm.JvmWildcard() ? super java.lang.Object>)
public static final void simpleIn(@org.jetbrains.annotations.NotNull() In<? super @kotlin.jvm.JvmWildcard() java.lang.Object>);// simpleIn(In<? super @kotlin.jvm.JvmWildcard() java.lang.Object>)
public static final void simpleOut(@org.jetbrains.annotations.NotNull() Out<@kotlin.jvm.JvmWildcard() ? extends Final>);// simpleOut(Out<@kotlin.jvm.JvmWildcard() ? extends Final>)
public static final void simpleOut(@org.jetbrains.annotations.NotNull() Out<? extends @kotlin.jvm.JvmWildcard() Final>);// simpleOut(Out<? extends @kotlin.jvm.JvmWildcard() Final>)
}
public class Open /* Open*/ {
@@ -28,16 +28,16 @@ public final class Container /* Container*/ {
public final void zoo(@org.jetbrains.annotations.NotNull() Out<Out<Out<Open>>>, @org.jetbrains.annotations.NotNull() @kotlin.jvm.JvmSuppressWildcards(suppress = false) Out<? extends Open>);// zoo(Out<Out<Out<Open>>>, @kotlin.jvm.JvmSuppressWildcards(suppress = false) Out<? extends Open>)
@org.jetbrains.annotations.NotNull()
public final @kotlin.jvm.JvmSuppressWildcards() OutPair<Open, @kotlin.jvm.JvmWildcard() ? extends OutPair<Open, ? extends Out<Open>>> combination();// combination()
public final @kotlin.jvm.JvmSuppressWildcards() OutPair<Open, ? extends @kotlin.jvm.JvmWildcard() OutPair<Open, ? extends @kotlin.jvm.JvmWildcard() Out<Open>>> combination();// combination()
@org.jetbrains.annotations.NotNull()
public final @kotlin.jvm.JvmSuppressWildcards(suppress = false) OutPair<? extends Final, @kotlin.jvm.JvmSuppressWildcards() OutPair<Out<Final>, Out<@kotlin.jvm.JvmSuppressWildcards(suppress = false) ? extends Final>>> falseTrueFalse();// falseTrueFalse()
public final @kotlin.jvm.JvmSuppressWildcards(suppress = false) OutPair<? extends Final, @kotlin.jvm.JvmSuppressWildcards() OutPair<Out<Final>, Out<? extends @kotlin.jvm.JvmSuppressWildcards(suppress = false) Final>>> falseTrueFalse();// falseTrueFalse()
public Container();// .ctor()
public final void simpleIn(@org.jetbrains.annotations.NotNull() In<@kotlin.jvm.JvmWildcard() ? super java.lang.Object>);// simpleIn(In<@kotlin.jvm.JvmWildcard() ? super java.lang.Object>)
public final void simpleIn(@org.jetbrains.annotations.NotNull() In<? super @kotlin.jvm.JvmWildcard() java.lang.Object>);// simpleIn(In<? super @kotlin.jvm.JvmWildcard() java.lang.Object>)
public final void simpleOut(@org.jetbrains.annotations.NotNull() Out<@kotlin.jvm.JvmWildcard() ? extends Final>);// simpleOut(Out<@kotlin.jvm.JvmWildcard() ? extends Final>)
public final void simpleOut(@org.jetbrains.annotations.NotNull() Out<? extends @kotlin.jvm.JvmWildcard() Final>);// simpleOut(Out<? extends @kotlin.jvm.JvmWildcard() Final>)
}
public final class ContainerForPropertyAndAccessors /* ContainerForPropertyAndAccessors*/ {
@@ -45,10 +45,10 @@ public final class ContainerForPropertyAndAccessors /* ContainerForPropertyAndAc
private Out<? extends Open> bar;
@org.jetbrains.annotations.NotNull()
private final In<@kotlin.jvm.JvmWildcard() ? super java.lang.Object> simpleIn;
private final In<? super @kotlin.jvm.JvmWildcard() java.lang.Object> simpleIn;
@org.jetbrains.annotations.NotNull()
private final Out<@kotlin.jvm.JvmWildcard() ? extends Final> simpleOut;
private final Out<? extends @kotlin.jvm.JvmWildcard() Final> simpleOut;
@org.jetbrains.annotations.NotNull()
private final Out<Out<Out<Open>>> deepOpen;
@@ -57,10 +57,10 @@ public final class ContainerForPropertyAndAccessors /* ContainerForPropertyAndAc
public final @kotlin.jvm.JvmSuppressWildcards(suppress = false) Out<? extends Open> getZoo(@org.jetbrains.annotations.NotNull() Out<? extends Out<? extends Out<? extends Open>>>);// getZoo(Out<? extends Out<? extends Out<? extends Open>>>)
@org.jetbrains.annotations.NotNull()
public final In<@kotlin.jvm.JvmWildcard() ? super java.lang.Object> getSimpleIn();// getSimpleIn()
public final In<? super @kotlin.jvm.JvmWildcard() java.lang.Object> getSimpleIn();// getSimpleIn()
@org.jetbrains.annotations.NotNull()
public final Out<@kotlin.jvm.JvmWildcard() ? extends Final> getSimpleOut();// getSimpleOut()
public final Out<? extends @kotlin.jvm.JvmWildcard() Final> getSimpleOut();// getSimpleOut()
@org.jetbrains.annotations.NotNull()
public final Out<Open> getBar();// getBar()