xref: /aosp_15_r20/external/ksp/test-utils/testData/api/overridee.kt (revision af87fb4bb8e3042070d2a054e912924f599b22b7)
1*af87fb4bSXin Li /*
2*af87fb4bSXin Li  * Copyright 2020 Google LLC
3*af87fb4bSXin Li  * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
4*af87fb4bSXin Li  *
5*af87fb4bSXin Li  * Licensed under the Apache License, Version 2.0 (the "License");
6*af87fb4bSXin Li  * you may not use this file except in compliance with the License.
7*af87fb4bSXin Li  * You may obtain a copy of the License at
8*af87fb4bSXin Li  *
9*af87fb4bSXin Li  * http://www.apache.org/licenses/LICENSE-2.0
10*af87fb4bSXin Li  *
11*af87fb4bSXin Li  * Unless required by applicable law or agreed to in writing, software
12*af87fb4bSXin Li  * distributed under the License is distributed on an "AS IS" BASIS,
13*af87fb4bSXin Li  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*af87fb4bSXin Li  * See the License for the specific language governing permissions and
15*af87fb4bSXin Li  * limitations under the License.
16*af87fb4bSXin Li  */
17*af87fb4bSXin Li 
18*af87fb4bSXin Li // WITH_RUNTIME
19*af87fb4bSXin Li // TEST PROCESSOR: OverrideeProcessor
20*af87fb4bSXin Li // EXPECTED:
21*af87fb4bSXin Li // NoOverride:
22*af87fb4bSXin Li // NoOverride.propInParam -> null
23*af87fb4bSXin Li // NoOverride.prop -> null
24*af87fb4bSXin Li // NoOverride.func(param:Int) -> null
25*af87fb4bSXin Li // Subject:
26*af87fb4bSXin Li // Companion.companionMethod() -> null
27*af87fb4bSXin Li // Subject.notOverridingProp -> null
28*af87fb4bSXin Li // Subject.overriddenBaseProp -> Base.overriddenBaseProp
29*af87fb4bSXin Li // Subject.overriddenAbstractBaseProp -> Base.overriddenAbstractBaseProp
30*af87fb4bSXin Li // Subject.openGrandBaseProp -> GrandBase.openGrandBaseProp
31*af87fb4bSXin Li // Subject.abstractGrandBaseProp -> GrandBase.abstractGrandBaseProp
32*af87fb4bSXin Li // Subject.overriddenGrandBaseProp -> Base.overriddenGrandBaseProp
33*af87fb4bSXin Li // Subject.overriddenAbstractGrandBaseProp -> Base.overriddenAbstractGrandBaseProp
34*af87fb4bSXin Li // Subject.openFun() -> Base.openFun()
35*af87fb4bSXin Li // Subject.abstractFun() -> Base.abstractFun()
36*af87fb4bSXin Li // Subject.openFunWithGenericArg(t:String) -> Base.openFunWithGenericArg(t:T)
37*af87fb4bSXin Li // Subject.abstractFunWithGenericArg(t:String) -> Base.abstractFunWithGenericArg(t:T)
38*af87fb4bSXin Li // Subject.nonOverridingMethod() -> null
39*af87fb4bSXin Li // Subject.overriddenGrandBaseFun() -> Base.overriddenGrandBaseFun()
40*af87fb4bSXin Li // Subject.overriddenAbstractGrandBaseFun() -> Base.overriddenAbstractGrandBaseFun()
41*af87fb4bSXin Li // Subject.openGrandBaseFun() -> GrandBase.openGrandBaseFun()
42*af87fb4bSXin Li // Subject.abstractGrandBaseFun() -> GrandBase.abstractGrandBaseFun()
43*af87fb4bSXin Li // JavaSubject.Subject:
44*af87fb4bSXin Li // Subject.openFun() -> Base.openFun()
45*af87fb4bSXin Li // Subject.abstractFun() -> Base.abstractFun()
46*af87fb4bSXin Li // Subject.openFunWithGenericArg(t:String) -> Base.openFunWithGenericArg(t:T)
47*af87fb4bSXin Li // Subject.abstractFunWithGenericArg(t:String) -> Base.abstractFunWithGenericArg(t:T)
48*af87fb4bSXin Li // Subject.nonOverridingMethod() -> null
49*af87fb4bSXin Li // Subject.overriddenGrandBaseFun() -> Base.overriddenGrandBaseFun()
50*af87fb4bSXin Li // Subject.overriddenAbstractGrandBaseFun() -> Base.overriddenAbstractGrandBaseFun()
51*af87fb4bSXin Li // Subject.openGrandBaseFun() -> GrandBase.openGrandBaseFun()
52*af87fb4bSXin Li // Subject.abstractGrandBaseFun() -> GrandBase.abstractGrandBaseFun()
53*af87fb4bSXin Li // Subject.staticMethod() -> null
54*af87fb4bSXin Li // lib.Subject:
55*af87fb4bSXin Li // Companion.companionMethod() -> null
56*af87fb4bSXin Li // Subject.abstractGrandBaseProp -> GrandBase.abstractGrandBaseProp
57*af87fb4bSXin Li // Subject.notOverridingProp -> null
58*af87fb4bSXin Li // Subject.openGrandBaseProp -> GrandBase.openGrandBaseProp
59*af87fb4bSXin Li // Subject.overriddenAbstractBaseProp -> Base.overriddenAbstractBaseProp
60*af87fb4bSXin Li // Subject.overriddenAbstractGrandBaseProp -> Base.overriddenAbstractGrandBaseProp
61*af87fb4bSXin Li // Subject.overriddenBaseProp -> Base.overriddenBaseProp
62*af87fb4bSXin Li // Subject.overriddenGrandBaseProp -> Base.overriddenGrandBaseProp
63*af87fb4bSXin Li // Subject.abstractFun() -> Base.abstractFun()
64*af87fb4bSXin Li // Subject.abstractFunWithGenericArg(t:String) -> Base.abstractFunWithGenericArg(t:T)
65*af87fb4bSXin Li // Subject.abstractGrandBaseFun() -> GrandBase.abstractGrandBaseFun()
66*af87fb4bSXin Li // Subject.nonOverridingMethod() -> null
67*af87fb4bSXin Li // Subject.openFun() -> Base.openFun()
68*af87fb4bSXin Li // Subject.openFunWithGenericArg(t:String) -> Base.openFunWithGenericArg(t:T)
69*af87fb4bSXin Li // Subject.openGrandBaseFun() -> GrandBase.openGrandBaseFun()
70*af87fb4bSXin Li // Subject.overriddenAbstractGrandBaseFun() -> Base.overriddenAbstractGrandBaseFun()
71*af87fb4bSXin Li // Subject.overriddenGrandBaseFun() -> Base.overriddenGrandBaseFun()
72*af87fb4bSXin Li // ConflictingSubject1:
73*af87fb4bSXin Li // ConflictingSubject1.absFoo() -> MyInterface.absFoo()
74*af87fb4bSXin Li // ConflictingSubject2:
75*af87fb4bSXin Li // ConflictingSubject2.absFoo() -> MyAbstract.absFoo()
76*af87fb4bSXin Li // ConflictingSubject3:
77*af87fb4bSXin Li // ConflictingSubject3.absFoo() -> MyInterface.absFoo()
78*af87fb4bSXin Li // ConflictingSubject4:
79*af87fb4bSXin Li // ConflictingSubject4.absFoo() -> MyInterface2.absFoo()
80*af87fb4bSXin Li // OverrideOrder1:
81*af87fb4bSXin Li // OverrideOrder1.foo() -> GrandBaseInterface2.foo()
82*af87fb4bSXin Li // OverrideOrder2:
83*af87fb4bSXin Li // OverrideOrder2.foo() -> GrandBaseInterface1.foo()
84*af87fb4bSXin Li // JavaAccessorImpl:
85*af87fb4bSXin Li // JavaAccessorImpl.getX() -> KtInterfaceWithProperty.x
86*af87fb4bSXin Li // JavaAccessorImpl.getY() -> KtInterfaceWithProperty.y
87*af87fb4bSXin Li // JavaAccessorImpl.setY(value:Int) -> KtInterfaceWithProperty.y
88*af87fb4bSXin Li // JavaAnno:
89*af87fb4bSXin Li // JavaAnno.intParam() -> null
90*af87fb4bSXin Li // JavaAnnos:
91*af87fb4bSXin Li // JavaAnnos.value() -> null
92*af87fb4bSXin Li // PrimaryConstructorOverride:
93*af87fb4bSXin Li // PrimaryConstructorOverride.x -> KtInterfaceWithProperty.x
94*af87fb4bSXin Li // PrimaryConstructorOverride.y -> KtInterfaceWithProperty.y
95*af87fb4bSXin Li // END
96*af87fb4bSXin Li // MODULE: lib
97*af87fb4bSXin Li // FILE: lib.kt
98*af87fb4bSXin Li package lib;
99*af87fb4bSXin Li abstract class GrandBase {
100*af87fb4bSXin Li     open var openGrandBaseProp: Int = 0
101*af87fb4bSXin Li     abstract var abstractGrandBaseProp: Int
102*af87fb4bSXin Li     open var overriddenGrandBaseProp: Int = 0
103*af87fb4bSXin Li     abstract var overriddenAbstractGrandBaseProp: Int
openGrandBaseFunnull104*af87fb4bSXin Li     open fun openGrandBaseFun() {}
abstractGrandBaseFunnull105*af87fb4bSXin Li     abstract fun abstractGrandBaseFun()
106*af87fb4bSXin Li     open fun overriddenGrandBaseFun() {}
overriddenAbstractGrandBaseFunnull107*af87fb4bSXin Li     abstract fun overriddenAbstractGrandBaseFun()
108*af87fb4bSXin Li }
109*af87fb4bSXin Li abstract class Base<T> : GrandBase() {
110*af87fb4bSXin Li     open var overriddenBaseProp: Int = 0
111*af87fb4bSXin Li     abstract var overriddenAbstractBaseProp: Int
112*af87fb4bSXin Li     override var overriddenGrandBaseProp:Int = 0
113*af87fb4bSXin Li     override var overriddenAbstractGrandBaseProp: Int = 0
114*af87fb4bSXin Li     open fun openFun() {}
115*af87fb4bSXin Li     abstract fun abstractFun():Unit
116*af87fb4bSXin Li     open fun openFunWithGenericArg(t:T):T = TODO()
117*af87fb4bSXin Li     abstract fun abstractFunWithGenericArg(t:T):T
118*af87fb4bSXin Li     override open fun overriddenGrandBaseFun() {}
119*af87fb4bSXin Li     override open fun overriddenAbstractGrandBaseFun() {}
120*af87fb4bSXin Li }
121*af87fb4bSXin Li 
122*af87fb4bSXin Li abstract class Subject: Base<String>() {
123*af87fb4bSXin Li     var notOverridingProp: Int = 0
124*af87fb4bSXin Li     override open var overriddenBaseProp: Int = 0
125*af87fb4bSXin Li     override var overriddenAbstractBaseProp: Int = 0
126*af87fb4bSXin Li     override open var openGrandBaseProp: Int = 0
127*af87fb4bSXin Li     override var abstractGrandBaseProp: Int = 0
128*af87fb4bSXin Li     override var overriddenGrandBaseProp:Int = 0
129*af87fb4bSXin Li     override var overriddenAbstractGrandBaseProp: Int = 0
openFunnull130*af87fb4bSXin Li     override fun openFun() {}
abstractFunnull131*af87fb4bSXin Li     override fun abstractFun() {}
openFunWithGenericArgnull132*af87fb4bSXin Li     override fun openFunWithGenericArg(t:String):String = TODO()
133*af87fb4bSXin Li     override fun abstractFunWithGenericArg(t:String):String = TODO()
134*af87fb4bSXin Li     fun nonOverridingMethod(): String =TODO()
135*af87fb4bSXin Li     override fun overriddenGrandBaseFun() {}
overriddenAbstractGrandBaseFunnull136*af87fb4bSXin Li     override fun overriddenAbstractGrandBaseFun() {}
openGrandBaseFunnull137*af87fb4bSXin Li     override fun openGrandBaseFun() {}
abstractGrandBaseFunnull138*af87fb4bSXin Li     override fun abstractGrandBaseFun() {}
139*af87fb4bSXin Li     companion object {
companionMethodnull140*af87fb4bSXin Li         fun companionMethod(): String =TODO()
141*af87fb4bSXin Li     }
142*af87fb4bSXin Li }
143*af87fb4bSXin Li // MODULE: main(lib)
144*af87fb4bSXin Li // FILE: a.kt
145*af87fb4bSXin Li class NoOverride(val propInParam: Int) {
146*af87fb4bSXin Li     val prop: Int
147*af87fb4bSXin Li     fun func(val param: Int) {
148*af87fb4bSXin Li 
149*af87fb4bSXin Li     }
150*af87fb4bSXin Li }
151*af87fb4bSXin Li 
152*af87fb4bSXin Li interface KtInterfaceWithProperty {
153*af87fb4bSXin Li     val x:Int
154*af87fb4bSXin Li     var y:Int
155*af87fb4bSXin Li }
156*af87fb4bSXin Li 
157*af87fb4bSXin Li interface Intermediate: KtInterfaceWithProperty
158*af87fb4bSXin Li 
159*af87fb4bSXin Li class PrimaryConstructorOverride(override val x: Int): Intermediate {
160*af87fb4bSXin Li     override val y: Int = 1
161*af87fb4bSXin Li }
162*af87fb4bSXin Li 
163*af87fb4bSXin Li abstract class GrandBase {
164*af87fb4bSXin Li     open var openGrandBaseProp: Int = 0
165*af87fb4bSXin Li     abstract var abstractGrandBaseProp: Int = 0
166*af87fb4bSXin Li     open var overriddenGrandBaseProp: Int = 0
167*af87fb4bSXin Li     abstract var overriddenAbstractGrandBaseProp: Int = 0
openGrandBaseFunnull168*af87fb4bSXin Li     open fun openGrandBaseFun() {}
abstractGrandBaseFunnull169*af87fb4bSXin Li     abstract fun abstractGrandBaseFun()
170*af87fb4bSXin Li     open fun overriddenGrandBaseFun() {}
overriddenAbstractGrandBaseFunnull171*af87fb4bSXin Li     abstract fun overriddenAbstractGrandBaseFun()
172*af87fb4bSXin Li }
173*af87fb4bSXin Li abstract class Base<T> : GrandBase() {
174*af87fb4bSXin Li     open var overriddenBaseProp: Int = 0
175*af87fb4bSXin Li     var overriddenAbstractBaseProp: Int = 0
176*af87fb4bSXin Li     override var overriddenGrandBaseProp:Int = 0
177*af87fb4bSXin Li     override var overriddenAbstractGrandBaseProp: Int = 0
178*af87fb4bSXin Li     open fun openFun() {}
179*af87fb4bSXin Li     abstract fun abstractFun():Unit
180*af87fb4bSXin Li     open fun openFunWithGenericArg(t:T):T = TODO()
181*af87fb4bSXin Li     abstract fun abstractFunWithGenericArg(t:T):T
182*af87fb4bSXin Li     override open fun overriddenGrandBaseFun() {}
183*af87fb4bSXin Li     override open fun overriddenAbstractGrandBaseFun() {}
184*af87fb4bSXin Li }
185*af87fb4bSXin Li 
186*af87fb4bSXin Li abstract class Subject: Base<String>() {
187*af87fb4bSXin Li     var notOverridingProp: Int = 0
188*af87fb4bSXin Li     override open var overriddenBaseProp: Int = 0
189*af87fb4bSXin Li     override var overriddenAbstractBaseProp: Int = 0
190*af87fb4bSXin Li     override open var openGrandBaseProp: Int = 0
191*af87fb4bSXin Li     override var abstractGrandBaseProp: Int = 0
192*af87fb4bSXin Li     override var overriddenGrandBaseProp:Int = 0
193*af87fb4bSXin Li     override var overriddenAbstractGrandBaseProp: Int = 0
openFunnull194*af87fb4bSXin Li     override fun openFun() {}
abstractFunnull195*af87fb4bSXin Li     override fun abstractFun() {}
openFunWithGenericArgnull196*af87fb4bSXin Li     override fun openFunWithGenericArg(t:String):String = TODO()
197*af87fb4bSXin Li     override fun abstractFunWithGenericArg(t:String):String = TODO()
198*af87fb4bSXin Li     fun nonOverridingMethod(): String =TODO()
199*af87fb4bSXin Li     override fun overriddenGrandBaseFun() {}
overriddenAbstractGrandBaseFunnull200*af87fb4bSXin Li     override fun overriddenAbstractGrandBaseFun() {}
openGrandBaseFunnull201*af87fb4bSXin Li     override fun openGrandBaseFun() {}
abstractGrandBaseFunnull202*af87fb4bSXin Li     override fun abstractGrandBaseFun() {}
203*af87fb4bSXin Li     companion object {
companionMethodnull204*af87fb4bSXin Li         fun companionMethod(): String =TODO()
205*af87fb4bSXin Li     }
206*af87fb4bSXin Li }
207*af87fb4bSXin Li 
208*af87fb4bSXin Li // FILE: conflictingOverrides.kt
209*af87fb4bSXin Li interface MyInterface {
210*af87fb4bSXin Li     fun absFoo(): Unit
211*af87fb4bSXin Li }
212*af87fb4bSXin Li 
213*af87fb4bSXin Li interface MyInterface2 {
absFoonull214*af87fb4bSXin Li     fun absFoo(): Unit
215*af87fb4bSXin Li }
216*af87fb4bSXin Li 
217*af87fb4bSXin Li abstract class MyAbstract: MyInterface {
218*af87fb4bSXin Li     override fun absFoo(): Unit {val a = 1}
219*af87fb4bSXin Li }
220*af87fb4bSXin Li 
221*af87fb4bSXin Li class ConflictingSubject1: MyInterface, MyAbstract() {
absFoonull222*af87fb4bSXin Li     override fun absFoo(): Unit = TODO()
223*af87fb4bSXin Li }
224*af87fb4bSXin Li 
225*af87fb4bSXin Li class ConflictingSubject2: MyAbstract(), MyInterface {
226*af87fb4bSXin Li     override fun absFoo(): Unit = TODO()
227*af87fb4bSXin Li }
228*af87fb4bSXin Li 
229*af87fb4bSXin Li class ConflictingSubject3: MyInterface, MyInterface2 {
absFoonull230*af87fb4bSXin Li     override fun absFoo(): Unit = TODO()
231*af87fb4bSXin Li }
232*af87fb4bSXin Li 
233*af87fb4bSXin Li class ConflictingSubject4: MyInterface2, MyInterface {
234*af87fb4bSXin Li     override fun absFoo(): Unit = TODO()
235*af87fb4bSXin Li }
236*af87fb4bSXin Li 
237*af87fb4bSXin Li // FILE: overrideOrder.kt
238*af87fb4bSXin Li interface GrandBaseInterface1 {
foonull239*af87fb4bSXin Li     fun foo(): Unit
240*af87fb4bSXin Li }
241*af87fb4bSXin Li 
242*af87fb4bSXin Li interface GrandBaseInterface2 {
243*af87fb4bSXin Li     fun foo(): Unit
244*af87fb4bSXin Li }
245*af87fb4bSXin Li 
246*af87fb4bSXin Li interface BaseInterface1 : GrandBaseInterface1 {
247*af87fb4bSXin Li }
248*af87fb4bSXin Li 
249*af87fb4bSXin Li interface BaseInterface2 : GrandBaseInterface2 {
250*af87fb4bSXin Li }
251*af87fb4bSXin Li 
252*af87fb4bSXin Li class OverrideOrder1 : BaseInterface1, GrandBaseInterface2 {
foonull253*af87fb4bSXin Li     override fun foo() = TODO()
254*af87fb4bSXin Li }
255*af87fb4bSXin Li class OverrideOrder2 : BaseInterface2, GrandBaseInterface1 {
256*af87fb4bSXin Li     override fun foo() = TODO()
257*af87fb4bSXin Li }
258*af87fb4bSXin Li 
259*af87fb4bSXin Li // FILE: JavaSubject.java
260*af87fb4bSXin Li public class JavaSubject {
261*af87fb4bSXin Li     static abstract class GrandBase {
262*af87fb4bSXin Li         void openGrandBaseFun() {}
263*af87fb4bSXin Li         abstract void abstractGrandBaseFun();
264*af87fb4bSXin Li         void overriddenGrandBaseFun() {}
265*af87fb4bSXin Li         abstract void overriddenAbstractGrandBaseFun();
266*af87fb4bSXin Li     }
267*af87fb4bSXin Li     static abstract class Base<T> extends GrandBase {
268*af87fb4bSXin Li         void openFun() {}
269*af87fb4bSXin Li         abstract void abstractFun();
270*af87fb4bSXin Li         T openFunWithGenericArg(T t) {
271*af87fb4bSXin Li             return null;
272*af87fb4bSXin Li         }
273*af87fb4bSXin Li         abstract T abstractFunWithGenericArg(T t);
274*af87fb4bSXin Li         void overriddenGrandBaseFun() {}
275*af87fb4bSXin Li         void overriddenAbstractGrandBaseFun() {}
276*af87fb4bSXin Li     }
277*af87fb4bSXin Li 
278*af87fb4bSXin Li     static abstract class Subject extends Base<String> {
279*af87fb4bSXin Li         void openFun() {}
280*af87fb4bSXin Li         void abstractFun() {}
281*af87fb4bSXin Li         String openFunWithGenericArg(String t) {
282*af87fb4bSXin Li             return null;
283*af87fb4bSXin Li         }
284*af87fb4bSXin Li         String abstractFunWithGenericArg(String t) {
285*af87fb4bSXin Li             return null;
286*af87fb4bSXin Li         }
287*af87fb4bSXin Li         String nonOverridingMethod() {
288*af87fb4bSXin Li             return null;
289*af87fb4bSXin Li         }
290*af87fb4bSXin Li         void overriddenGrandBaseFun() {}
291*af87fb4bSXin Li         void overriddenAbstractGrandBaseFun() {}
292*af87fb4bSXin Li         void openGrandBaseFun() {}
293*af87fb4bSXin Li         void abstractGrandBaseFun() {}
<lambda>null294*af87fb4bSXin Li         static String staticMethod() {
295*af87fb4bSXin Li             return null;
296*af87fb4bSXin Li         }
297*af87fb4bSXin Li     }
298*af87fb4bSXin Li }
299*af87fb4bSXin Li 
300*af87fb4bSXin Li // FILE: JavaImpl.java
301*af87fb4bSXin Li class JavaAccessorImpl implements KtInterfaceWithProperty {
<lambda>null302*af87fb4bSXin Li     public int getX() {
303*af87fb4bSXin Li         return 1;
304*af87fb4bSXin Li     }
<lambda>null305*af87fb4bSXin Li     public int getY() {
306*af87fb4bSXin Li         return 1;
307*af87fb4bSXin Li     }
308*af87fb4bSXin Li     public void setY(int value) {
309*af87fb4bSXin Li     }
310*af87fb4bSXin Li }
311*af87fb4bSXin Li 
312*af87fb4bSXin Li // FILE: JavaAnno.java
313*af87fb4bSXin Li @java.lang.annotation.Repeatable(JavaAnnos.class)
314*af87fb4bSXin Li public @interface JavaAnno {
315*af87fb4bSXin Li     int intParam();
316*af87fb4bSXin Li }
317*af87fb4bSXin Li 
318*af87fb4bSXin Li // FILE: JavaAnnos.java
319*af87fb4bSXin Li public @interface JavaAnnos {
320*af87fb4bSXin Li     JavaAnno[] value();
321*af87fb4bSXin Li }
322