[FIR] Harden check of argument type properly

Before this commit, nullable argument could match not null parameter.
Now we require also correct nullability that breaks some cases
This commit is contained in:
simon.ogorodnik
2020-01-28 14:17:24 +03:00
committed by Mikhail Glukhikh
parent fe779bf7bd
commit 34e6649d31
82 changed files with 171 additions and 173 deletions
@@ -6,12 +6,12 @@ fun bar(): String? = null
fun foo() {
var x = ArrayList<String>()
x.add(null)
x.add(bar())
x.<!INAPPLICABLE_CANDIDATE!>add<!>(null)
x.<!INAPPLICABLE_CANDIDATE!>add<!>(bar())
x.add("")
x[0] = null
x[0] = bar()
<!INAPPLICABLE_CANDIDATE!>x[0] = null<!>
<!INAPPLICABLE_CANDIDATE!>x[0] = bar()<!>
x[0] = ""
val b1: MutableList<String?> = x
@@ -24,8 +24,8 @@ fun bar(): String? = null
fun foo() {
var x = A<String>()
x.add(null)
x.add(bar())
x.<!INAPPLICABLE_CANDIDATE!>add<!>(null)
x.<!INAPPLICABLE_CANDIDATE!>add<!>(bar())
x.add("")
val b1: Collection<String?> = x
@@ -24,12 +24,12 @@ fun bar(): String? = null
fun foo() {
var x = A<String>()
x.add(null)
x.add(bar())
x.<!INAPPLICABLE_CANDIDATE!>add<!>(null)
x.<!INAPPLICABLE_CANDIDATE!>add<!>(bar())
x.add("")
x[0] = null
x[0] = bar()
<!INAPPLICABLE_CANDIDATE!>x[0] = null<!>
<!INAPPLICABLE_CANDIDATE!>x[0] = bar()<!>
x[0] = ""
val b1: MutableList<String?> = x
@@ -10,14 +10,14 @@ val nullableInt: Int? = null
fun hashMapTest() {
var x: HashMap<String, Int> = HashMap<String, Int>()
x.put(null, null)
x.put("", null)
x.put(bar(), 1)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>("", null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
x[""] = nullableInt
<!INAPPLICABLE_CANDIDATE!>x[null] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[bar()] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[""] = nullableInt<!>
x[""] = 1
val b1: MutableMap<String, Int?> = x
@@ -34,14 +34,14 @@ fun hashMapTest() {
fun treeMapTest() {
var x: TreeMap<String, Int> = TreeMap<String, Int>()
x.put(null, null)
x.put("", null)
x.put(bar(), 1)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>("", null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
x[""] = nullableInt
<!INAPPLICABLE_CANDIDATE!>x[null] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[bar()] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[""] = nullableInt<!>
x[""] = 1
val b1: MutableMap<String, Int?> = x
@@ -58,14 +58,14 @@ fun treeMapTest() {
fun concurrentHashMapTest() {
var x: ConcurrentHashMap<String, Int> = ConcurrentHashMap<String, Int>()
x.put(null, null)
x.put("", null)
x.put(bar(), 1)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>("", null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
x[""] = nullableInt
<!INAPPLICABLE_CANDIDATE!>x[null] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[bar()] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[""] = nullableInt<!>
x[""] = 1
val b1: MutableMap<String, Int?> = x
@@ -9,14 +9,14 @@ val nullableInt: Int? = null
fun hashMapTest() {
var x: HashMap<String?, Int> = HashMap<String?, Int>()
x.put(null, null)
x.put("", null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>("", null)
x.put(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
x[""] = nullableInt
<!INAPPLICABLE_CANDIDATE!>x[""] = nullableInt<!>
x[""] = 1
val b1: MutableMap<String?, Int?> = x
@@ -34,14 +34,14 @@ fun hashMapTest() {
fun treeMapTest() {
var x: TreeMap<String?, Int> = TreeMap<String?, Int>()
x.put(null, null)
x.put("", null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>("", null)
x.put(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
x[""] = nullableInt
<!INAPPLICABLE_CANDIDATE!>x[""] = nullableInt<!>
x[""] = 1
val b1: MutableMap<String?, Int?> = x
@@ -9,13 +9,13 @@ val nullableInt: Int? = null
fun hashMapTest() {
var x: HashMap<String, Int?> = HashMap<String, Int?>()
x.put(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.put("", null)
x.put(bar(), 1)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
<!INAPPLICABLE_CANDIDATE!>x[null] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[bar()] = 1<!>
x[""] = nullableInt
x[""] = 1
@@ -33,13 +33,13 @@ fun hashMapTest() {
fun treeMapTest() {
var x: TreeMap<String, Int?> = TreeMap<String, Int?>()
x.put(null, null)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(null, null)
x.put("", null)
x.put(bar(), 1)
x.<!INAPPLICABLE_CANDIDATE!>put<!>(bar(), 1)
x.put("", 1)
x[null] = 1
x[bar()] = 1
<!INAPPLICABLE_CANDIDATE!>x[null] = 1<!>
<!INAPPLICABLE_CANDIDATE!>x[bar()] = 1<!>
x[""] = nullableInt
x[""] = 1
@@ -8,8 +8,8 @@ fun bar(): String? = null
fun fooHashSet() {
var x = HashSet<String>()
x.add(null)
x.add(bar())
x.<!INAPPLICABLE_CANDIDATE!>add<!>(null)
x.<!INAPPLICABLE_CANDIDATE!>add<!>(bar())
x.add("")
val b1: MutableSet<String?> = x
@@ -22,8 +22,8 @@ fun fooHashSet() {
fun fooTreeSet() {
var x = TreeSet<String>()
x.add(null)
x.add(bar())
x.<!INAPPLICABLE_CANDIDATE!>add<!>(null)
x.<!INAPPLICABLE_CANDIDATE!>add<!>(bar())
x.add("")
val b1: MutableSet<String?> = x
@@ -36,8 +36,8 @@ fun fooTreeSet() {
fun fooLinkedHashSet() {
var x = LinkedHashSet<String>()
x.add(null)
x.add(bar())
x.<!INAPPLICABLE_CANDIDATE!>add<!>(null)
x.<!INAPPLICABLE_CANDIDATE!>add<!>(bar())
x.add("")
val b1: MutableSet<String?> = x