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 Lipublic 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 Lipublic 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 Lipublic 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