Skip to content

Commit 97f158d

Browse files
ting-yuanKSP Auto Pick
authored and
KSP Auto Pick
committed
KSP2: Enable remaining wildcard tests
(cherry picked from commit 6930fa7)
1 parent 1e4a7d1 commit 97f158d

File tree

2 files changed

+209
-2
lines changed

2 files changed

+209
-2
lines changed

kotlin-analysis-api/src/test/kotlin/com/google/devtools/ksp/test/KSPAATest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,10 @@ class KSPAATest : AbstractKSPAATest() {
256256
runTest("../test-utils/testData/api/equals.kt")
257257
}
258258

259-
@Disabled
260259
@TestMetadata("equivalentJavaWildcards.kt")
261260
@Test
262261
fun testEquivalentJavaWildcards() {
263-
runTest("../test-utils/testData/api/equivalentJavaWildcards.kt")
262+
runTest("../kotlin-analysis-api/testData/equivalentJavaWildcards.kt")
264263
}
265264

266265
@TestMetadata("errorTypes.kt")
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
/*
2+
* Copyright 2020 Google LLC
3+
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
// WITH_RUNTIME
19+
// TEST PROCESSOR: EquivalentJavaWildcardProcessor
20+
// EXPECTED:
21+
// bar1 : [@JvmSuppressWildcards(true)] A<X, X> -> A<X, X>
22+
// - INVARIANT X : X -> X
23+
// - INVARIANT X : X -> X
24+
// - @JvmSuppressWildcards : JvmSuppressWildcards -> JvmSuppressWildcards
25+
// bar2 : [@JvmSuppressWildcards(false)] A<X, X> -> A<in X, out X>
26+
// - INVARIANT X : X -> X
27+
// - INVARIANT X : X -> X
28+
// - @JvmSuppressWildcards : JvmSuppressWildcards -> JvmSuppressWildcards
29+
// bar3 : [@JvmWildcard] A<X, X> -> A<X, X>
30+
// - INVARIANT X : X -> X
31+
// - INVARIANT X : X -> X
32+
// - @JvmWildcard : JvmWildcard -> JvmWildcard
33+
// p1 : A<in X, out X> -> A<X, X>
34+
// - CONTRAVARIANT X : X -> X
35+
// - COVARIANT X : X -> X
36+
// p1.getter() : A<in X, out X> -> A<X, X>
37+
// - CONTRAVARIANT X : X -> X
38+
// - COVARIANT X : X -> X
39+
// p2 : A<Any, Y> -> A<Any, Y>
40+
// - INVARIANT Any : Any -> Any
41+
// - INVARIANT Y : Y -> Y
42+
// p2.getter() : A<Any, Y> -> A<Any, Y>
43+
// - INVARIANT Any : Any -> Any
44+
// - INVARIANT Y : Y -> Y
45+
// p3 : A<*, *> -> A<Any?, Any?>
46+
// p3.getter() : A<*, *> -> A<Any?, Any?>
47+
// p4 : B<X> -> B<X>
48+
// - INVARIANT X : X -> X
49+
// p4.getter() : B<X> -> B<X>
50+
// - INVARIANT X : X -> X
51+
// p5 : B<in X> -> B<in X>
52+
// - CONTRAVARIANT X : X -> X
53+
// p5.getter() : B<in X> -> B<in X>
54+
// - CONTRAVARIANT X : X -> X
55+
// p6 : B<out X> -> B<out X>
56+
// - COVARIANT X : X -> X
57+
// p6.getter() : B<out X> -> B<out X>
58+
// - COVARIANT X : X -> X
59+
// p7 : B<*> -> B<out Any?>
60+
// p7.getter() : B<*> -> B<out Any?>
61+
// p8 : B<A<X, out Y>> -> B<A<X, Y>>
62+
// - INVARIANT A<INVARIANT X, COVARIANT Y> : A<X, out Y> -> A<X, Y>
63+
// - - INVARIANT X : X -> X
64+
// - - COVARIANT Y : Y -> Y
65+
// p8.getter() : B<A<X, out Y>> -> B<A<X, Y>>
66+
// - INVARIANT A<INVARIANT X, COVARIANT Y> : A<X, out Y> -> A<X, Y>
67+
// - - INVARIANT X : X -> X
68+
// - - COVARIANT Y : Y -> Y
69+
// v1 : A<X, X> -> A<in X, out X>
70+
// - INVARIANT X : X -> X
71+
// - INVARIANT X : X -> X
72+
// v2 : A<Any, Y> -> A<Any, Y>
73+
// - INVARIANT Any : Any -> Any
74+
// - INVARIANT Y : Y -> Y
75+
// v3 : A<*, *> -> A<out Any?, out Any?>
76+
// v4 : B<X> -> B<X>
77+
// - INVARIANT X : X -> X
78+
// v5 : B<in X> -> B<in X>
79+
// - CONTRAVARIANT X : X -> X
80+
// v6 : B<out X> -> B<out X>
81+
// - COVARIANT X : X -> X
82+
// v7 : B<*> -> B<out Any?>
83+
// v8 : B<A<X, out Y>> -> B<A<X, Y>>
84+
// - INVARIANT A<INVARIANT X, COVARIANT Y> : A<X, out Y> -> A<X, Y>
85+
// - - INVARIANT X : X -> X
86+
// - - COVARIANT Y : Y -> Y
87+
// foo : Unit -> Unit
88+
// r1 : A<X, X> -> A<X, X>
89+
// - INVARIANT X : X -> X
90+
// - INVARIANT X : X -> X
91+
// r2 : A<Any, Y> -> A<Any, Y>
92+
// - INVARIANT Any : Any -> Any
93+
// - INVARIANT Y : Y -> Y
94+
// r3 : A<*, *> -> A<Any?, Any?>
95+
// r4 : B<X> -> B<X>
96+
// - INVARIANT X : X -> X
97+
// r5 : B<in X> -> B<in X>
98+
// - CONTRAVARIANT X : X -> X
99+
// r6 : B<out X> -> B<out X>
100+
// - COVARIANT X : X -> X
101+
// r7 : B<*> -> B<out Any?>
102+
// r8 : B<A<X, out Y>> -> B<A<X, Y>>
103+
// - INVARIANT A<INVARIANT X, COVARIANT Y> : A<X, out Y> -> A<X, Y>
104+
// - - INVARIANT X : X -> X
105+
// - - COVARIANT Y : Y -> Y
106+
// X : Any -> Any
107+
// <init> : X -> X
108+
// Y : X -> X
109+
// <init> : Y -> Y
110+
// A : Any -> Any
111+
// T1 : Any? -> Any?
112+
// T2 : Any? -> Any?
113+
// <init> : A<*, *> -> A<Any?, Any?>
114+
// T1 : Any? -> Any?
115+
// T2 : Any? -> Any?
116+
// B : Any -> Any
117+
// T : Any? -> Any?
118+
// synthetic constructor for B : B<*> -> B<out Any?>
119+
// T : Any? -> Any?
120+
// C1 : A<X, X> -> A<X, X>
121+
// - INVARIANT X : X -> X
122+
// - INVARIANT X : X -> X
123+
// <init> : C1 -> C1
124+
// C2 : A<Any, Y> -> A<Any, Y>
125+
// - INVARIANT Any : Any -> Any
126+
// - INVARIANT Y : Y -> Y
127+
// <init> : C2 -> C2
128+
// C3 : B<X> -> B<X>
129+
// - INVARIANT X : X -> X
130+
// <init> : C3 -> C3
131+
// C4 : B<A<X, out Y>> -> B<A<in X, out Y>>
132+
// - INVARIANT A<INVARIANT X, COVARIANT Y> : A<X, out Y> -> A<in X, out Y>
133+
// - - INVARIANT X : X -> X
134+
// - - COVARIANT Y : Y -> Y
135+
// <init> : C4 -> C4
136+
// END
137+
138+
open class X()
139+
final class Y() : X()
140+
141+
open class A<in T1, out T2>()
142+
open class B<T>
143+
144+
// FIXME: should this annotation propagate to the return type?
145+
// @JvmSuppressWildcards(false)
146+
// fun bar(): A<X, X> = TODO()
147+
148+
// A<X, X>
149+
fun bar1(): @JvmSuppressWildcards(true) A<X, X> = TODO()
150+
// A<? super X, ? extends X>
151+
fun bar2(): @JvmSuppressWildcards(false) A<X, X> = TODO()
152+
// A<X, X>
153+
fun bar3(): @JvmWildcard A<X, X> = TODO()
154+
155+
// A<X, X>
156+
val p1: A<in X, out X> = TODO()
157+
// A<java.lang.Object, Y>
158+
val p2: A<Any, Y> = TODO()
159+
// A<?, ?>
160+
val p3: A<*, *> = TODO()
161+
// B<X>
162+
val p4: B<X> = TODO()
163+
// B<? super X>
164+
val p5: B<in X> = TODO()
165+
// B<? extends X>
166+
val p6: B<out X> = TODO()
167+
// B<?>
168+
val p7: B<*> = TODO()
169+
// B<A<X, Y>>
170+
val p8: B<A<X, out Y>>
171+
172+
// void foo(A<? super X, ? extends X>, A<java.lang.Object, Y>, A<?, ?>, B<X>, B<? super X>, B<? extends X>, B<?>, B<A<X, Y>>);
173+
fun foo(
174+
v1: A<X, X>,
175+
v2: A<Any, Y>,
176+
v3: A<*, *>,
177+
v4: B<X>,
178+
v5: B<in X>,
179+
v6: B<out X>,
180+
v7: B<*>,
181+
v8: B<A<X, out Y>>,
182+
): Unit = Unit
183+
184+
// A<X, X>
185+
fun r1(): A<X, X> = TODO()
186+
// A<java.lang.Object, Y>
187+
fun r2(): A<Any, Y> = TODO()
188+
// A<?, ?>
189+
fun r3(): A<*, *> = TODO()
190+
// B<X>
191+
fun r4(): B<X> = TODO()
192+
// B<? super X>
193+
fun r5(): B<in X> = TODO()
194+
// B<? extends X>
195+
fun r6(): B<out X> = TODO()
196+
// B<?>
197+
fun r7(): B<*> = TODO()
198+
// B<A<X, Y>>
199+
fun r8(): B<A<X, out Y>> = TODO()
200+
201+
// extends A<X, X>
202+
class C1() : A<X, X>()
203+
// A<java.lang.Object, Y>
204+
class C2() : A<Any, Y>()
205+
// B<X>
206+
class C3() : B<X>()
207+
// B<A<? super X, ? extends Y>>
208+
class C4() : B<A<X, out Y>>()

0 commit comments

Comments
 (0)