blob: 7a35794efccdc350059abdf9f5d527b0aba6d844 [file]
// RUN_PIPELINE_TILL: FRONTEND
// LANGUAGE: -PreciseSimplificationToFlexibleLowerConstraint
// FILE: Consumer.java
public interface Consumer<T> {
void accept(T t);
}
// FILE: Producer.java
public interface Producer<T> {
T produce();
}
// FILE: JavaBox.java
public class JavaBox<T> {
public JavaBox(T b) {
a = b;
}
public T a;
}
// FILE: Test.kt
private fun takeAny(x: Any) {}
private fun takeNullableAny(x: Any?) {}
private fun returnAny(): Any {
return 1
}
private fun returnNullableAny(): Any? {
return 1
}
fun returnNullableString(): String? {
return "1"
}
private fun returnString(): String {
return "1"
}
class A {
fun doOnSuccessIn(consumer: Consumer<in String>) {
consumer.accept(null)
}
fun doOnSuccessOut(consumer: Consumer<out String>) {
consumer.accept(null)
}
fun doOnSuccessStar(consumer: Consumer<*>) {
consumer.accept(null)
}
fun doOnSuccessString(consumer: Consumer<String>) {
consumer.accept(null)
}
fun doOnSuccessNullableString(consumer: Consumer<String?>) {
consumer.accept(null)
}
fun <T> doOnSuccessTypeParameter(consumer: Consumer<T>) {
consumer.accept(null)
}
fun doOnSuccessJavaBox(consumer: Consumer<JavaBox<in String>>) {
consumer.accept(null)
}
fun doOnSuccessJavaBox2(consumer: Consumer<JavaBox<String>>) {
consumer.accept(null)
}
fun doOnSuccessInProducer(producer: Producer<in String>) {
val k: Any? = producer.produce()
}
fun doOnSuccessOutProducer(producer: Producer<out String>) {
val k: String = producer.produce()
}
fun doOnSuccessStarProducer(producer: Producer<*>) {
val k: Any = producer.produce()
}
fun doOnSuccessStringProducer(producer: Producer<String>) {
val k: String = producer.produce()
}
fun <T> doOnSuccessTypeParameterProducer(producer: Producer<T>) {
val k: T = producer.produce()
}
}
fun main() {
A().doOnSuccessIn(::takeAny)
A().doOnSuccessOut(::takeAny)
A().doOnSuccessStar(::takeAny)
A().doOnSuccessString(::takeAny)
A().doOnSuccessNullableString(::<!INAPPLICABLE_CANDIDATE!>takeAny<!>)
A().doOnSuccessNullableString(::takeNullableAny)
A().doOnSuccessTypeParameter(::takeAny)
A().doOnSuccessTypeParameter(::takeNullableAny)
A().doOnSuccessTypeParameter<String>(::takeAny)
A().doOnSuccessJavaBox(::takeAny)
A().doOnSuccessJavaBox2(::takeAny)
A().doOnSuccessJavaBox2(::takeNullableAny)
A().doOnSuccessInProducer(::<!INAPPLICABLE_CANDIDATE!>returnAny<!>)
A().doOnSuccessInProducer(::returnString)
A().doOnSuccessInProducer(::returnNullableString)
A().doOnSuccessOutProducer(::returnString)
A().doOnSuccessOutProducer(::returnNullableString)
A().doOnSuccessOutProducer(::<!INAPPLICABLE_CANDIDATE!>returnNullableAny<!>)
A().doOnSuccessStarProducer(::returnNullableAny)
A().doOnSuccessStarProducer(::returnAny)
A().doOnSuccessStarProducer(::returnString)
A().doOnSuccessStarProducer(::returnNullableString)
A().doOnSuccessStringProducer(::returnString)
A().doOnSuccessStringProducer(::returnNullableString)
A().doOnSuccessStringProducer(::<!INAPPLICABLE_CANDIDATE!>returnNullableAny<!>)
A().doOnSuccessTypeParameterProducer(::returnNullableAny)
A().doOnSuccessTypeParameterProducer(::returnAny)
A().doOnSuccessTypeParameterProducer(::returnNullableString)
A().doOnSuccessTypeParameterProducer(::returnString)
A().doOnSuccessTypeParameterProducer<String>(::<!INAPPLICABLE_CANDIDATE!>returnNullableString<!>)
}
/* GENERATED_FIR_TAGS: callableReference, classDeclaration, flexibleType, functionDeclaration, inProjection,
integerLiteral, javaType, localProperty, nullableType, outProjection, propertyDeclaration, samConversion, starProjection,
stringLiteral, typeParameter */