| // RUN_PIPELINE_TILL: BACKEND |
| // WITH_STDLIB |
| |
| // MODULE: lib0 |
| // RETURN_VALUE_CHECKER_MODE: DISABLED |
| |
| // FILE: Base.kt |
| |
| interface Base { |
| fun foo(): String |
| } |
| |
| // MODULE: lib1(lib0) |
| // RETURN_VALUE_CHECKER_MODE: FULL |
| |
| // FILE: Lib.kt |
| |
| interface I1: Base { |
| override fun foo(): String |
| } |
| |
| @MustUseReturnValues |
| interface I2: Base { |
| override fun foo(): String |
| } |
| |
| @MustUseReturnValues |
| interface I3: Base { |
| @IgnorableReturnValue override fun foo(): String |
| } |
| |
| fun checkLib(i1: I1, i2: I2, i3: I3) { |
| i1.foo() |
| i2.<!RETURN_VALUE_NOT_USED!>foo<!>() |
| i3.foo() |
| } |
| |
| // MODULE: main(lib0, lib1) |
| // RETURN_VALUE_CHECKER_MODE: CHECKER |
| |
| // FILE: App.kt |
| |
| class C1: I1 { |
| override fun foo(): String = "" |
| } |
| |
| class C2: I2 { |
| override fun foo(): String = "" |
| } |
| |
| open class C3: I3 { |
| override fun foo(): String = "" |
| } |
| |
| @MustUseReturnValues |
| class C4: I3 { |
| override fun <!OVERRIDING_IGNORABLE_WITH_MUST_USE!>foo<!>(): String = "" // Should be a warning on overriding explicit @Ignorable |
| } |
| |
| @MustUseReturnValues |
| class C5: C3() { |
| override fun <!OVERRIDING_IGNORABLE_WITH_MUST_USE!>foo<!>(): String = "" |
| } |
| |
| fun check(c1: C1, c2: C2, c3: C3, c4: C4, c5: C5) { |
| c1.foo() |
| c2.<!RETURN_VALUE_NOT_USED!>foo<!>() |
| c3.foo() |
| c4.<!RETURN_VALUE_NOT_USED!>foo<!>() |
| c5.<!RETURN_VALUE_NOT_USED!>foo<!>() |
| } |
| |
| /* GENERATED_FIR_TAGS: classDeclaration, functionDeclaration, interfaceDeclaration, override */ |