Files
kotlin-fork/compiler/testData/diagnostics/tests/Nullability.kt
T
Pavel Kirpichenkov 8c52bb4212 Add frontend checks for missing dependency supertypes
Call checker and declaration checker are used in order to preserve backward compatibility.
Attempt to use classifier usage checker was not good enouth,
since not all errors found with it would actually be reported before.
For example types and constructor calls don't cause supertypes to resolve,
so missing supertypes would not lead to errors in case they are the only use of class name.

Updated tests failing due to missing Java dependencies in superclasses.
2019-11-18 12:06:41 +03:00

297 lines
5.7 KiB
Kotlin
Vendored

// !WITH_NEW_INFERENCE
// FULL_JDK
fun test() {
val a : Int? = 0
if (a != null) {
<!DEBUG_INFO_SMARTCAST!>a<!>.plus(1)
}
else {
<!DEBUG_INFO_CONSTANT!>a<!>?.plus(1)
}
val out : java.io.PrintStream? = null
val ins : java.io.InputStream? = null
out?.println()
ins?.read()
if (ins != null) {
<!DEBUG_INFO_SMARTCAST!>ins<!>.read()
out?.println()
if (out != null) {
<!DEBUG_INFO_SMARTCAST!>ins<!>.read();
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
}
if (out != null && ins != null) {
<!DEBUG_INFO_SMARTCAST!>ins<!>.read();
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
if (out == null) {
<!DEBUG_INFO_CONSTANT!>out<!>?.println()
} else {
<!DEBUG_INFO_SMARTCAST!>out<!>.println()
}
if (out != null && ins != null || out != null) {
ins?.read();
ins<!UNSAFE_CALL!>.<!>read();
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
if (out == null || <!DEBUG_INFO_SMARTCAST!>out<!>.println(0) == Unit) {
out?.println(1)
out<!UNSAFE_CALL!>.<!>println(1)
}
else {
<!DEBUG_INFO_SMARTCAST!>out<!>.println(2)
}
if (out != null && <!DEBUG_INFO_SMARTCAST!>out<!>.println() == Unit) {
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
else {
out?.println();
}
if (out == null || <!DEBUG_INFO_SMARTCAST!>out<!>.println() == Unit) {
out?.println();
}
else {
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
if (1 == 2 || out != null && <!DEBUG_INFO_SMARTCAST!>out<!>.println(1) == Unit) {
out?.println(2);
out<!UNSAFE_CALL!>.<!>println(2);
}
else {
out?.println(3)
out<!UNSAFE_CALL!>.<!>println(3)
}
out?.println()
ins?.read()
if (ins != null) {
<!DEBUG_INFO_SMARTCAST!>ins<!>.read()
out?.println()
if (out != null) {
<!DEBUG_INFO_SMARTCAST!>ins<!>.read();
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
}
if (out != null && ins != null) {
<!DEBUG_INFO_SMARTCAST!>ins<!>.read();
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
if (out == null) {
<!DEBUG_INFO_CONSTANT!>out<!>?.println()
} else {
<!DEBUG_INFO_SMARTCAST!>out<!>.println()
}
if (out != null && ins != null || out != null) {
ins?.read();
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
if (out == null || <!DEBUG_INFO_SMARTCAST!>out<!>.println(0) == Unit) {
out?.println(1)
out<!UNSAFE_CALL!>.<!>println(1)
}
else {
<!DEBUG_INFO_SMARTCAST!>out<!>.println(2)
}
if (out != null && <!DEBUG_INFO_SMARTCAST!>out<!>.println() == Unit) {
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
else {
out?.println();
out<!UNSAFE_CALL!>.<!>println();
}
if (out == null || <!DEBUG_INFO_SMARTCAST!>out<!>.println() == Unit) {
out?.println();
out<!UNSAFE_CALL!>.<!>println();
}
else {
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
if (1 == 2 || out != null && <!DEBUG_INFO_SMARTCAST!>out<!>.println(1) == Unit) {
out?.println(2);
out<!UNSAFE_CALL!>.<!>println(2);
}
else {
out?.println(3)
out<!UNSAFE_CALL!>.<!>println(3)
}
if (1 > 2) {
if (out == null) return;
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
out?.println();
while (out != null) {
<!DEBUG_INFO_SMARTCAST!>out<!>.println();
}
<!DEBUG_INFO_CONSTANT!>out<!>?.println();
val out2 : java.io.PrintStream? = null
while (out2 == null) {
<!DEBUG_INFO_CONSTANT!>out2<!>?.println();
<!OI;DEBUG_INFO_CONSTANT!>out2<!><!UNSAFE_CALL!>.<!>println();
}
<!DEBUG_INFO_SMARTCAST!>out2<!>.println()
}
fun f(out : String?) {
out?.get(0)
out<!UNSAFE_CALL!>.<!>get(0)
if (out != null) else return;
<!DEBUG_INFO_SMARTCAST!>out<!>.get(0)
}
fun f1(out : String?) {
out?.get(0)
if (out != null) else {
1 + 2
return;
}
<!DEBUG_INFO_SMARTCAST!>out<!>.get(0)
}
fun f2(out : String?) {
out?.get(0)
if (out == null) {
1 + 2
return;
}
<!DEBUG_INFO_SMARTCAST!>out<!>.get(0)
}
fun f3(out : String?) {
out?.get(0)
if (out == null) {
1 + 2
return;
}
else {
1 + 2
}
<!DEBUG_INFO_SMARTCAST!>out<!>.get(0)
}
fun f4(s : String?) {
s?.get(0)
while (1 < 2 && s != null) {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
s?.get(0)
while (s == null || 1 < 2) {
s?.get(0)
}
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
fun f5(s : String?) {
s?.get(0)
while (1 < 2 && s != null) {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
s?.get(0)
while (s == null || 1 < 2) {
if (1 > 2) break
s?.get(0)
}
s?.get(0);
}
fun f6(s : String?) {
s?.get(0)
do {
s?.get(0)
if (1 < 2) break;
} while (s == null)
s?.get(0)
do {
s?.get(0)
} while (s == null)
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
fun f7(s : String?, t : String?) {
s?.get(0)
if (!(s == null)) {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
s?.get(0)
if (!(s != null)) {
<!DEBUG_INFO_CONSTANT!>s<!>?.get(0)
}
else {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
s?.get(0)
if (!!(s != null)) {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
}
else {
<!DEBUG_INFO_CONSTANT!>s<!>?.get(0)
}
s?.get(0)
t?.get(0)
if (!(s == null || t == null)) {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
<!DEBUG_INFO_SMARTCAST!>t<!>.get(0)
}
else {
s?.get(0)
t?.get(0)
}
s?.get(0)
t?.get(0)
if (!(s == null)) {
<!DEBUG_INFO_SMARTCAST!>s<!>.get(0)
t?.get(0)
}
else {
<!DEBUG_INFO_CONSTANT!>s<!>?.get(0)
t?.get(0)
}
}
fun f8(b : String?, a : String) {
b?.get(0)
if (b == a) {
<!DEBUG_INFO_SMARTCAST!>b<!>.get(0);
}
b?.get(0)
if (a == b) {
<!DEBUG_INFO_SMARTCAST!>b<!>.get(0)
}
if (a != b) {
b?.get(0)
}
else {
<!DEBUG_INFO_SMARTCAST!>b<!>.get(0)
}
}
fun f9(a : Int?) : Int {
if (a != null)
return <!DEBUG_INFO_SMARTCAST!>a<!>
return 1
}