// !LANGUAGE: +NewInference // !DIAGNOSTICS: -UNUSED_PARAMETER, -UNUSED_EXPRESSION // Issue: KT-35844 // ---------------------- AssertJ declarations -------------------------- // FILE: AbstractAssert.java public abstract class AbstractAssert, ACTUAL> {} // FILE: EnumerableAssert.java public interface EnumerableAssert, ELEMENT> {} // FILE: ObjectEnumerableAssert.java public interface ObjectEnumerableAssert, ELEMENT> extends EnumerableAssert {} // FILE: IndexedObjectEnumerableAssert.java public interface IndexedObjectEnumerableAssert, ELEMENT> extends ObjectEnumerableAssert {} // FILE: AbstractIterableAssert.java public abstract class AbstractIterableAssert< SELF extends AbstractIterableAssert, ACTUAL extends Iterable, ELEMENT, ELEMENT_ASSERT extends AbstractAssert> extends AbstractAssert implements ObjectEnumerableAssert {} // FILE: AbstractListAssert.java public abstract class AbstractListAssert< SELF extends AbstractListAssert, ACTUAL extends List, ELEMENT, ELEMENT_ASSERT extends AbstractAssert> extends AbstractIterableAssert implements IndexedObjectEnumerableAssert { SELF isNotEmpty() { return null; } } // FILE: ListAssert.java public class ListAssert extends AbstractListAssert, List, ELEMENT, ObjectAssert> {} // FILE: AbstractCharSequenceAssert.java public abstract class AbstractCharSequenceAssert, ACTUAL extends CharSequence> extends AbstractAssert implements EnumerableAssert {} // FILE: AbstractStringAssert.java public class AbstractStringAssert> extends AbstractCharSequenceAssert { public SELF isEqualTo(String expected) { return null; } } // FILE: StringAssert.java public class StringAssert extends AbstractStringAssert {} // FILE: Assertions.java public class Assertions { public static ListAssert assertThat(java.util.List actual) { return null; } public static AbstractStringAssert assertThat(String actual) { return null; } } // ---------------------- AssertJ declarations end -------------------------- // FILE: test.kt fun test() { val assertion = when { true -> Assertions.assertThat(listOf("foo")).isNotEmpty else -> Assertions.assertThat("bar").isEqualTo("bar") } // TODO: FIR // {AbstractAssert<*, out Any!>! & EnumerableAssert<*, {Comparable<*> & java.io.Serializable!}>!} with unfolded flexible nullability & EnumerableAssert<*, out ({Comparable<*> & java.io.Serializable}..{Comparable<*>? & java.io.Serializable?})>}..{AbstractAssert<*, out (kotlin.Any..kotlin.Any?)>? & EnumerableAssert<*, out ({Comparable<*> & java.io.Serializable}..{Comparable<*>? & java.io.Serializable?})>?})")!>assertion }