[FIR] Improve diagnostic reporting & don't use error symbol for candidate if possible

Also introduce few new diagnostics:
- NONE_APPLICABLE more many inapplicable candidates
- HIDDEN for visible candidates
This commit is contained in:
Dmitriy Novozhilov
2020-07-22 16:40:14 +03:00
committed by Mikhail Glukhikh
parent 5c0528b61e
commit f283f2db43
365 changed files with 1400 additions and 1451 deletions
@@ -1,11 +1,11 @@
// TESTCASE NUMBER: 1
fun case_1() {
true checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Boolean?>() }
false checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Boolean?>() }
true checkType { <!NONE_APPLICABLE!>check<!><Boolean?>() }
false checkType { <!NONE_APPLICABLE!>check<!><Boolean?>() }
true checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Any?>() }
false checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Any>() }
true checkType { <!NONE_APPLICABLE!>check<!><Any?>() }
false checkType { <!NONE_APPLICABLE!>check<!><Any>() }
true checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Nothing?>() }
false checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Nothing>() }
true checkType { <!NONE_APPLICABLE!>check<!><Nothing?>() }
false checkType { <!NONE_APPLICABLE!>check<!><Nothing>() }
}
@@ -2,12 +2,12 @@
// TESTCASE NUMBER: 1
fun case_1() {
0L checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
1000000L checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Int>() }
0XAf10cDL checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Int>() }
0x0_0L checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
0b100_000_111_111L checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
0b0L checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
0L checkType { <!NONE_APPLICABLE!>check<!><Short>() }
1000000L checkType { <!NONE_APPLICABLE!>check<!><Int>() }
0XAf10cDL checkType { <!NONE_APPLICABLE!>check<!><Int>() }
0x0_0L checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
0b100_000_111_111L checkType { <!NONE_APPLICABLE!>check<!><Short>() }
0b0L checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(0L)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(1000000L)
@@ -2,83 +2,83 @@
// TESTCASE NUMBER: 1
fun case_1() {
0 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
0 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
0 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
0 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
0 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
0 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
}
// TESTCASE NUMBER: 2
fun case_2() {
127 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
127 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
127 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
127 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
127 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
127 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(128)
128 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
128 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
128 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
128 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
128 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
128 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
-128 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-128 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-128 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-128 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-128 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-128 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(-129)
-129 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-129 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-129 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-129 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-129 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-129 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
}
// TESTCASE NUMBER: 3
fun case_3() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(32767)
32767 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
32767 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
32767 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
32767 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
32767 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
32767 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(32768)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(32768)
32768 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
32768 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
32768 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
32768 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
32768 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
32768 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(-32768)
-32768 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-32768 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-32768 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-32768 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-32768 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-32768 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(-32769)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(-32769)
-32769 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-32769 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-32769 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-32769 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-32769 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-32769 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
}
// TESTCASE NUMBER: 4
fun case_4() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(2147483647)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(2147483647)
2147483647 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
2147483647 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
2147483647 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
2147483647 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
2147483647 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
2147483647 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(2147483648)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(2147483648)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(2147483648)
2147483648 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
2147483648 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
2147483648 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Int>() }
2147483648 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
2147483648 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
2147483648 checkType { <!NONE_APPLICABLE!>check<!><Int>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(-2147483648)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(-2147483648)
-2147483648 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-2147483648 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-2147483648 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-2147483648 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-2147483648 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-2147483648 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(-2147483649)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(-2147483649)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(-2147483649)
-2147483649 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-2147483649 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-2147483649 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-2147483649 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-2147483649 checkType { check<Int>() }
}
@@ -87,15 +87,15 @@ fun case_5() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(9223372036854775807)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(9223372036854775807)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(9223372036854775807)
9223372036854775807 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
9223372036854775807 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
9223372036854775807 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Int>() }
9223372036854775807 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
9223372036854775807 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
9223372036854775807 checkType { <!NONE_APPLICABLE!>check<!><Int>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Byte>(-9223372036854775807)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(-9223372036854775807)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(-9223372036854775807)
-9223372036854775807 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
-9223372036854775807 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
-9223372036854775807 checkType { <!NONE_APPLICABLE!>check<!><Byte>() }
-9223372036854775807 checkType { <!NONE_APPLICABLE!>check<!><Short>() }
-9223372036854775807 checkType { check<Int>() }
}
@@ -105,8 +105,8 @@ fun case_6() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Short>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Int>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Byte>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Short>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Int>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Byte>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Short>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Int>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
}
@@ -3,23 +3,23 @@
// TESTCASE NUMBER: 1
fun case_1() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!>)
<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!ILLEGAL_CONST_EXPRESSION!>9223372036854775808L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
}
// TESTCASE NUMBER: 2
fun case_2() {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!>)
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!>)
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000L<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><Long>(<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!>)
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
<!AMBIGUITY!>-<!><!ILLEGAL_CONST_EXPRESSION!>100000000000000000000000000000000l<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!NONE_APPLICABLE!>check<!><Long>() }
}
@@ -68,7 +68,7 @@ fun case_4() {
checkSubtype<Int>(-2147483648)
checkSubtype<Long>(-2147483648)
-2147483649 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-2147483649 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
checkSubtype<Long>(-2147483649)
}
@@ -77,6 +77,6 @@ fun case_5() {
9223372036854775807 checkType { check<Long>() }
checkSubtype<Long>(9223372036854775807)
-9223372036854775807 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-9223372036854775807 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
checkSubtype<Long>(-9223372036854775807)
}
@@ -68,7 +68,7 @@ fun case_4() {
checkSubtype<Int>(-0x80000000)
checkSubtype<Long>(-0x80000000)
-0x80000001 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-0x80000001 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
checkSubtype<Long>(-0x80000001)
}
@@ -77,6 +77,6 @@ fun case_5() {
0X7FFFFFFFFFFFFFFF checkType { check<Long>() }
checkSubtype<Long>(0X7FFFFFFFFFFFFFFF)
-0X7FFFFFFFFFFFFFFF checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-0X7FFFFFFFFFFFFFFF checkType { <!NONE_APPLICABLE!>check<!><Long>() }
checkSubtype<Long>(-0X7FFFFFFFFFFFFFFF)
}
@@ -68,7 +68,7 @@ fun case_4() {
checkSubtype<Int>(-0B10000000000000000000000000000000)
checkSubtype<Long>(-0B10000000000000000000000000000000)
-0b10000000000000000000000000000001 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-0b10000000000000000000000000000001 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
checkSubtype<Long>(-0b10000000000000000000000000000001)
}
@@ -77,6 +77,6 @@ fun case_5() {
0b111111111111111111111111111111111111111111111111111111111111111 checkType { check<Long>() }
checkSubtype<Long>(0b111111111111111111111111111111111111111111111111111111111111111)
-0B111111111111111111111111111111111111111111111111111111111111111 checkType { <!INAPPLICABLE_CANDIDATE!>check<!><Long>() }
-0B111111111111111111111111111111111111111111111111111111111111111 checkType { <!NONE_APPLICABLE!>check<!><Long>() }
checkSubtype<Long>(-0B111111111111111111111111111111111111111111111111111111111111111)
}