blob: fea1f42f675b4b481f72b2f462b8ecf245631805 [file]
// RUN_PIPELINE_TILL: BACKEND
// WITH_STDLIB
// FILE: com/google/errorprone/annotations/CheckReturnValue.java
package com.google.errorprone.annotations;
public @interface CheckReturnValue {}
// FILE: com/google/errorprone/annotations/CanIgnoreReturnValue.java
package com.google.errorprone.annotations;
public @interface CanIgnoreReturnValue {}
// FILE: app/JavaList.java
package app;
import com.google.errorprone.annotations.*;
@CheckReturnValue
public class JavaList extends java.util.AbstractList<String> {
@Override
public String get(int index) {
return "";
}
@Override
@CanIgnoreReturnValue
public boolean add(String s) {
return super.add(s);
}
@Override
@CanIgnoreReturnValue
public String set(int index, String element) {
return "";
}
@Override
public int size() {
return 0;
}
public int notAListMember() {
return 0;
}
}
// FILE: app/UnannotatedList.java
package app;
public class UnannotatedList extends java.util.AbstractList<String> {
@Override
public String get(int index) {
return "";
}
@Override
public boolean add(String s) {
return super.add(s);
}
@Override
public String set(int index, String element) {
return "";
}
@Override
public int size() {
return 0;
}
public int notAListMember() {
return 0;
}
}
// FILE: Lists.kt
package app;
class List1: JavaList() {
override fun get(index: Int) = ""
override fun notAListMember(): Int = 42
}
@MustUseReturnValues
class List2: JavaList() {
override fun get(index: Int): String = ""
// Not sure why K1 reports parameter name change, probably some quirk in handling java list as supertype
override fun <!OVERRIDING_IGNORABLE_WITH_MUST_USE!>add<!>(s: String?): Boolean = true
@IgnorableReturnValue
override fun set(index: Int, element: String?): String {
return "super.set(index, element)"
}
}
// Due to enhancements, UnnanotatedList.get/size/add get @MURV from kotlin.collections.List :
class List3: UnannotatedList() {
override fun get(index: Int) = ""
override fun notAListMember(): Int = 42
}
@MustUseReturnValues
class List4: UnannotatedList() {
override fun get(index: Int): String = ""
// Not sure why K1 reports parameter name change, probably some quirk in handling java list as supertype
override fun <!OVERRIDING_IGNORABLE_WITH_MUST_USE!>add<!>(s: String?): Boolean = true
@IgnorableReturnValue
override fun set(index: Int, element: String?): String {
return "super.set(index, element)"
}
}
fun test1(l: List1) {
l.<!RETURN_VALUE_NOT_USED!>get<!>(0)
l.<!RETURN_VALUE_NOT_USED!>notAListMember<!>()
l.<!RETURN_VALUE_NOT_USED!>size<!>
l.set(0, "")
l.add("")
}
fun test2(l: List2) {
l.<!RETURN_VALUE_NOT_USED!>get<!>(0)
l.<!RETURN_VALUE_NOT_USED!>notAListMember<!>()
l.<!RETURN_VALUE_NOT_USED!>size<!>
l.set(0, "")
l.<!RETURN_VALUE_NOT_USED!>add<!>("")
}
fun test3(l: List3) {
l.<!RETURN_VALUE_NOT_USED!>get<!>(0)
l.notAListMember()
l.<!RETURN_VALUE_NOT_USED!>size<!>
l.set(0, "")
l.add("")
}
fun test4(l: List4) {
l.<!RETURN_VALUE_NOT_USED!>get<!>(0)
l.notAListMember()
l.<!RETURN_VALUE_NOT_USED!>size<!>
l.set(0, "")
l.<!RETURN_VALUE_NOT_USED!>add<!>("")
}
/* GENERATED_FIR_TAGS: classDeclaration, flexibleType, functionDeclaration, integerLiteral, javaFunction, javaProperty,
javaType, nullableType, operator, override, stringLiteral */