[NI] Move abstract class instantiation check to call checkers

This way the check works for callable reference arguments.
Also candidate applicability during resolution does not change compared to the old inference.
^KT-37530 Fixed
This commit is contained in:
Pavel Kirpichenkov
2020-03-17 11:46:26 +03:00
parent 3f00de5d7b
commit a416fde814
13 changed files with 195 additions and 17 deletions
@@ -0,0 +1,11 @@
// !WITH_NEW_INFERENCE
abstract class Abstract
fun <D> create(fn: () -> D): D {
return fn()
}
fun main() {
create(::Abstract)
}
@@ -0,0 +1,11 @@
// !WITH_NEW_INFERENCE
abstract class Abstract
fun <D> create(fn: () -> D): D {
return fn()
}
fun main() {
create(::<!CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS, OI;CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS, OI;CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS!>Abstract<!>)
}
@@ -0,0 +1,11 @@
package
public fun </*0*/ D> create(/*0*/ fn: () -> D): D
public fun main(): kotlin.Unit
public abstract class Abstract {
public constructor Abstract()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,34 @@
// !WITH_NEW_IFERENCE
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: packageA.kt
package a
abstract class Cls
abstract class Cls2
// FILE: packageB.kt
package b
fun Cls() {}
class Cls2
// FILE: test.kt
package c
import a.*
import b.*
fun take(arg: Any) {}
fun test() {
<!AMBIGUITY!>Cls<!>()
take(<!AMBIGUITY!>Cls<!>())
Cls2()
take(Cls2())
}
@@ -0,0 +1,34 @@
// !WITH_NEW_IFERENCE
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: packageA.kt
package a
abstract class Cls
abstract class Cls2
// FILE: packageB.kt
package b
fun Cls() {}
class Cls2
// FILE: test.kt
package c
import a.*
import b.*
fun take(arg: Any) {}
fun test() {
<!OVERLOAD_RESOLUTION_AMBIGUITY!>Cls<!>()
take(<!OVERLOAD_RESOLUTION_AMBIGUITY!>Cls<!>())
<!UNRESOLVED_REFERENCE!>Cls2<!>()
take(<!UNRESOLVED_REFERENCE!>Cls2<!>())
}
@@ -0,0 +1,34 @@
package
package a {
public abstract class Cls {
public constructor Cls()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class Cls2 {
public constructor Cls2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
package b {
public fun Cls(): kotlin.Unit
public final class Cls2 {
public constructor Cls2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
package c {
public fun take(/*0*/ arg: kotlin.Any): kotlin.Unit
public fun test(): kotlin.Unit
}