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