xref: /aosp_15_r20/external/ksp/test-utils/testData/api/checkOverride.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 // TEST PROCESSOR: CheckOverrideProcessor
19*af87fb4bSXin Li // EXPECTED:
20*af87fb4bSXin Li // KotlinList.get overrides JavaList.get: false
21*af87fb4bSXin Li // KotlinList.foo overrides JavaList.foo: true
22*af87fb4bSXin Li // KotlinList.fooo overrides JavaList.foo: false
23*af87fb4bSXin Li // KotlinList.foo overrides KotlinList.foo: false
24*af87fb4bSXin Li // KotlinList.equals overrides JavaList.equals: true
25*af87fb4bSXin Li // KotlinList2.baz overrides KotlinList.baz: true
26*af87fb4bSXin Li // KotlinList2.baz overrides KotlinList.bazz: false
27*af87fb4bSXin Li // KotlinList2.bazz overrides KotlinList.bazz: true
28*af87fb4bSXin Li // KotlinList2.bazz overrides KotlinList.baz: false
29*af87fb4bSXin Li // KotlinList2.baz overrides KotlinList2.baz: false
30*af87fb4bSXin Li // JavaImpl.getY overrides JavaImpl.getX: false
31*af87fb4bSXin Li // JavaImpl.getY overrides MyInterface.x: false
32*af87fb4bSXin Li // JavaImpl.getX overrides MyInterface.x: true
33*af87fb4bSXin Li // JavaImpl.setY overrides MyInterface.y: true
34*af87fb4bSXin Li // JavaImpl.setX overrides MyInterface.x: false
35*af87fb4bSXin Li // JavaImpl.getY overrides JavaImpl.getY: false
36*af87fb4bSXin Li // MyInterface.x overrides JavaImpl.getY: false
37*af87fb4bSXin Li // MyInterface.x overrides JavaImpl.getX: false
38*af87fb4bSXin Li // MyInterface.y overrides JavaImpl.setY: false
39*af87fb4bSXin Li // MyInterface.y overrides MyInterface.y: false
40*af87fb4bSXin Li // MyInterface2.receiveList overrides MyInterface2ImplWithoutType.receiveList: false
41*af87fb4bSXin Li // MyInterface2ImplWithoutType.receiveList overrides MyInterface2.receiveList: true
42*af87fb4bSXin Li // MyInterface2ImplWithType.receiveList overrides MyInterface2.receiveList: true
43*af87fb4bSXin Li // MyInterface2ImplWithType.receiveList overrides MyInterface2ImplWithoutType.receiveList: true
44*af87fb4bSXin Li // JavaDifferentReturnType.foo overrides JavaList.foo: true
45*af87fb4bSXin Li // Base.f1 overrides MyInterface3.f1: true
46*af87fb4bSXin Li // Base.prop overrides MyInterface3.prop: true
47*af87fb4bSXin Li // JBase.getProp overrides MyInterface3.prop: true
48*af87fb4bSXin Li // END
49*af87fb4bSXin Li // FILE: a.kt
50*af87fb4bSXin Li 
51*af87fb4bSXin Li annotation class GetAnno
52*af87fb4bSXin Li annotation class FooAnno
53*af87fb4bSXin Li annotation class BarAnno
54*af87fb4bSXin Li annotation class BazAnno
55*af87fb4bSXin Li annotation class Baz2Anno
56*af87fb4bSXin Li annotation class BazzAnno
57*af87fb4bSXin Li annotation class Bazz2Anno
58*af87fb4bSXin Li 
59*af87fb4bSXin Li open class KotlinList(): JavaList() {
60*af87fb4bSXin Li     @GetAnno
getnull61*af87fb4bSXin Li     fun get(): Double {
62*af87fb4bSXin Li         return 2.0
63*af87fb4bSXin Li     }
64*af87fb4bSXin Li 
equalsnull65*af87fb4bSXin Li     override fun equals(other: Any?): Boolean {
66*af87fb4bSXin Li         return false
67*af87fb4bSXin Li     }
68*af87fb4bSXin Li 
69*af87fb4bSXin Li     @FooAnno
foonull70*af87fb4bSXin Li     override fun foo(): Int {
71*af87fb4bSXin Li         return 2
72*af87fb4bSXin Li     }
73*af87fb4bSXin Li 
74*af87fb4bSXin Li     @BarAnno
fooonull75*af87fb4bSXin Li     override fun fooo(): Int {
76*af87fb4bSXin Li         return 2
77*af87fb4bSXin Li     }
78*af87fb4bSXin Li 
79*af87fb4bSXin Li     @Baz2Anno
80*af87fb4bSXin Li     open val baz: Int get() {
81*af87fb4bSXin Li         return 1
82*af87fb4bSXin Li     }
83*af87fb4bSXin Li 
84*af87fb4bSXin Li     @Bazz2Anno
85*af87fb4bSXin Li     open val bazz: Int get() {
86*af87fb4bSXin Li         return 1
87*af87fb4bSXin Li     }
88*af87fb4bSXin Li }
89*af87fb4bSXin Li 
90*af87fb4bSXin Li class KotlinList2(@BazzAnno override val bazz: Int = 2): KotlinList() {
91*af87fb4bSXin Li     @BazAnno
92*af87fb4bSXin Li     override val baz: Int get() {
93*af87fb4bSXin Li         return 2
94*af87fb4bSXin Li     }
95*af87fb4bSXin Li }
96*af87fb4bSXin Li 
97*af87fb4bSXin Li interface MyInterface {
98*af87fb4bSXin Li     val x: Int
99*af87fb4bSXin Li     var y: Int
100*af87fb4bSXin Li }
101*af87fb4bSXin Li 
102*af87fb4bSXin Li enum class EnumType {
103*af87fb4bSXin Li     FOO,
104*af87fb4bSXin Li     BAR;
105*af87fb4bSXin Li }
106*af87fb4bSXin Li 
107*af87fb4bSXin Li interface MyInterface2<T> {
receiveListnull108*af87fb4bSXin Li     fun receiveList(argsInParent : List<T>):Unit
109*af87fb4bSXin Li }
110*af87fb4bSXin Li 
111*af87fb4bSXin Li interface MyInterface2ImplWithoutType<T> : MyInterface2<T> {
112*af87fb4bSXin Li     override fun receiveList(argsInParent : List<T>):Unit
113*af87fb4bSXin Li }
114*af87fb4bSXin Li 
115*af87fb4bSXin Li interface MyInterface2ImplWithType : MyInterface2ImplWithoutType<EnumType> {
receiveListnull116*af87fb4bSXin Li     override fun receiveList(argsInParent : List<EnumType>):Unit
117*af87fb4bSXin Li }
118*af87fb4bSXin Li 
119*af87fb4bSXin Li interface MyInterface3 {
120*af87fb4bSXin Li     fun f1()
121*af87fb4bSXin Li     val prop: String
122*af87fb4bSXin Li }
123*af87fb4bSXin Li 
124*af87fb4bSXin Li open class Base {
125*af87fb4bSXin Li     val prop: String = ""
f1null126*af87fb4bSXin Li     fun f1() {
127*af87fb4bSXin Li     }
128*af87fb4bSXin Li }
129*af87fb4bSXin Li 
130*af87fb4bSXin Li class BaseOverride: MyInterface3, Base() {
f2null131*af87fb4bSXin Li     fun f2() {}
132*af87fb4bSXin Li }
133*af87fb4bSXin Li 
134*af87fb4bSXin Li // FILE: JBaseOverride.java
<lambda>null135*af87fb4bSXin Li public class JBaseOverride extends JBase implements MyInterface3 {
136*af87fb4bSXin Li 
137*af87fb4bSXin Li }
138*af87fb4bSXin Li 
139*af87fb4bSXin Li // FILE: JBase.java
140*af87fb4bSXin Li 
<lambda>null141*af87fb4bSXin Li public class JBase {
142*af87fb4bSXin Li     public String getProp() {
143*af87fb4bSXin Li         return "JBase";
144*af87fb4bSXin Li     }
145*af87fb4bSXin Li }
146*af87fb4bSXin Li 
147*af87fb4bSXin Li // FILE: JavaList.java
148*af87fb4bSXin Li 
149*af87fb4bSXin Li import java.util.*;
150*af87fb4bSXin Li 
151*af87fb4bSXin Li public class JavaList extends List<String> {
152*af87fb4bSXin Li     @Override
153*af87fb4bSXin Li     public String get(int index) {
154*af87fb4bSXin Li         return "OK";
155*af87fb4bSXin Li     }
156*af87fb4bSXin Li 
<lambda>null157*af87fb4bSXin Li     protected int foo() {
158*af87fb4bSXin Li         return 1;
159*af87fb4bSXin Li     }
160*af87fb4bSXin Li }
161*af87fb4bSXin Li 
162*af87fb4bSXin Li // FILE: JavaImpl.java
163*af87fb4bSXin Li 
164*af87fb4bSXin Li public class JavaImpl implements MyInterface {
<lambda>null165*af87fb4bSXin Li     public int getX() {
166*af87fb4bSXin Li         return 1;
167*af87fb4bSXin Li     }
168*af87fb4bSXin Li 
<lambda>null169*af87fb4bSXin Li     public int getY() {
170*af87fb4bSXin Li         return 1;
171*af87fb4bSXin Li     }
172*af87fb4bSXin Li 
173*af87fb4bSXin Li     public void setY(int value) {
174*af87fb4bSXin Li 
175*af87fb4bSXin Li     }
176*af87fb4bSXin Li 
177*af87fb4bSXin Li     // intentional override check for a val property
178*af87fb4bSXin Li     public void setX(int value) {
179*af87fb4bSXin Li         return value;
180*af87fb4bSXin Li     }
181*af87fb4bSXin Li }
182*af87fb4bSXin Li 
183*af87fb4bSXin Li // FILE: JavaDifferentReturnType.java
<lambda>null184*af87fb4bSXin Li public abstract class JavaDifferentReturnType extends JavaList {
185*af87fb4bSXin Li     // intentional different return type
186*af87fb4bSXin Li     protected String foo() {
187*af87fb4bSXin Li         return "";
188*af87fb4bSXin Li     }
189*af87fb4bSXin Li }
190