[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:
@@ -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
|
||||
}
|
||||
+34
@@ -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())
|
||||
}
|
||||
+34
@@ -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<!>())
|
||||
}
|
||||
+34
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user