[FIR] Narrow down range of NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER
This uses the same approach as INFERRED_TYPE_VARIABLE_INTO_EMPTY_INTERSECTION where we use a visitor to find a call to a symbol that contains the type variable in question. #KT-56140 Fixed
This commit is contained in:
committed by
Space Team
parent
4690a430f4
commit
fbf68a5bcc
+2
-2
@@ -14,8 +14,8 @@ class B {
|
||||
fun <T> bar(f: (T) -> Unit): T = TODO()
|
||||
|
||||
fun test() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>myWith<!>(A()) {
|
||||
val t1 = bar(::foo)
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>myWith<!>(A()) {
|
||||
val t1 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::foo)
|
||||
|
||||
val t2 = bar(::baz)
|
||||
|
||||
|
||||
+5
-6
@@ -465,7 +465,7 @@ private fun ConstraintSystemError.toDiagnostic(
|
||||
}
|
||||
|
||||
FirErrors.NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER.createOn(
|
||||
source,
|
||||
candidate.sourceOfCallToSymbolWith(this.typeVariable as ConeTypeVariable) ?: source,
|
||||
typeVariableName,
|
||||
)
|
||||
}
|
||||
@@ -479,7 +479,7 @@ private fun ConstraintSystemError.toDiagnostic(
|
||||
|
||||
is InferredEmptyIntersection -> {
|
||||
val typeVariable = typeVariable as ConeTypeVariable
|
||||
val narrowedSource = findInferredEmptyIntersectionNarrowedSource(typeVariable, candidate)
|
||||
val narrowedSource = candidate.sourceOfCallToSymbolWith(typeVariable)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
reportInferredIntoEmptyIntersection(
|
||||
@@ -503,15 +503,14 @@ private fun ConstraintSystemError.toDiagnostic(
|
||||
}
|
||||
}
|
||||
|
||||
private fun findInferredEmptyIntersectionNarrowedSource(
|
||||
private fun AbstractCandidate.sourceOfCallToSymbolWith(
|
||||
typeVariable: ConeTypeVariable,
|
||||
candidate: AbstractCandidate,
|
||||
): KtSourceElement? {
|
||||
if (typeVariable !is ConeTypeParameterBasedTypeVariable) return null
|
||||
|
||||
var narrowedSource: KtSourceElement? = null
|
||||
|
||||
candidate.callInfo.callSite.accept(object : FirVisitorVoid() {
|
||||
callInfo.callSite.accept(object : FirVisitorVoid() {
|
||||
override fun visitElement(element: FirElement) {
|
||||
if (narrowedSource != null) return
|
||||
|
||||
@@ -537,7 +536,7 @@ private fun reportInferredIntoEmptyIntersection(
|
||||
causingTypes: Collection<ConeKotlinType>,
|
||||
kind: EmptyIntersectionTypeKind,
|
||||
isError: Boolean
|
||||
): KtDiagnostic? {
|
||||
): KtDiagnostic {
|
||||
val typeVariableText =
|
||||
(typeVariable.typeConstructor.originalTypeParameter as? ConeTypeParameterLookupTag)?.name?.asString()
|
||||
?: typeVariable.toString()
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
fun <T> materialize(): T = TODO()
|
||||
|
||||
fun main() {
|
||||
val x = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>run<!> { materialize() }
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
fun <T> materialize(): T = TODO()
|
||||
|
||||
+2
-2
@@ -16,8 +16,8 @@ class B {
|
||||
fun <T> bar(f: (T) -> Unit): T = TODO()
|
||||
|
||||
fun test() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>myWith<!>(A()) {
|
||||
val t1 = bar(::foo)
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>myWith<!>(A()) {
|
||||
val t1 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(::foo)
|
||||
t1
|
||||
|
||||
val t2 = bar(::baz)
|
||||
|
||||
compiler/testData/diagnostics/tests/delegatedProperty/inference/differentDelegatedExpressions.fir.kt
Vendored
+4
-4
@@ -9,10 +9,10 @@ class A(outer: Outer) {
|
||||
var g: String by outer.getContainer().getMyProperty()
|
||||
|
||||
|
||||
var b: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(getMyProperty())<!>
|
||||
var r: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(outer.getContainer().getMyProperty())<!>
|
||||
var e: String by + <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(getMyProperty())
|
||||
var f: String by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(getMyProperty()) - 1
|
||||
var b: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>foo(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getMyProperty<!>())<!>
|
||||
var r: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>foo(outer.getContainer().<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getMyProperty<!>())<!>
|
||||
var e: String by + <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getMyProperty<!>())
|
||||
var f: String by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getMyProperty<!>()) - 1
|
||||
}
|
||||
|
||||
fun <A, B> foo(a: Any?) = MyProperty<A, B>()
|
||||
|
||||
+1
-1
@@ -5,5 +5,5 @@ fun <T, R> foo(map: Map<T, R>) : R = throw Exception()
|
||||
fun <F, G> getMap() : Map<F, G> = throw Exception()
|
||||
|
||||
fun bar123() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(<!TOO_MANY_ARGUMENTS!>getMap<!>(
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, TOO_MANY_ARGUMENTS!>getMap<!>(
|
||||
<!SYNTAX!><!>}
|
||||
|
||||
+9
-9
@@ -80,7 +80,7 @@ fun poll05(): Flow<String> {
|
||||
|
||||
fun poll06(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(foo7(), ::Foo7)
|
||||
val inv = select(foo7(), ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ fun poll16(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll17(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { foo7() } else { ::Foo7 }<!>
|
||||
val inv = if (flag) { foo7() } else { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -185,7 +185,7 @@ fun poll25(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll26(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() else -> ::Foo7 }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() else -> ::Foo7 }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -234,7 +234,7 @@ fun poll35(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll36(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -332,7 +332,7 @@ fun poll55(): Flow<String> {
|
||||
|
||||
fun poll56(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::Foo7 } catch (e: Exception) { foo7() } finally { foo7() }<!>
|
||||
val inv = try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> } catch (e: Exception) { foo7() } finally { foo7() }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -430,7 +430,7 @@ fun poll75(): Flow<String> {
|
||||
|
||||
fun poll76(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::Foo7<!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!><!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -479,21 +479,21 @@ fun poll85(): Flow<String> {
|
||||
|
||||
fun poll86(): Flow<String> {
|
||||
return flow {
|
||||
val inv = ::Foo7 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>in<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::Foo7)
|
||||
val inv = ::Foo7 in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
fun poll87(): Flow<String> {
|
||||
return flow {
|
||||
val inv = ::Foo7 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, TYPE_INFERENCE_ONLY_INPUT_TYPES_ERROR!>in<!> setOf(foo7())
|
||||
val inv = ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> <!TYPE_INFERENCE_ONLY_INPUT_TYPES_ERROR!>in<!> setOf(foo7())
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
fun poll88(): Flow<String> {
|
||||
return flow {
|
||||
val inv = foo7() in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::Foo7)
|
||||
val inv = foo7() in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -85,7 +85,7 @@ fun poll16(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll17(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { foo7() } else { ::Foo7 }<!>
|
||||
val inv = if (flag) { foo7() } else { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -183,7 +183,7 @@ fun poll55(): Flow<String> {
|
||||
|
||||
fun poll56(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::Foo7 } catch (e: Exception) { foo7() } finally { foo7() }<!>
|
||||
val inv = try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> } catch (e: Exception) { foo7() } finally { foo7() }
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ fun poll75(): Flow<String> {
|
||||
|
||||
fun poll76(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::Foo7<!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!><!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ fun poll75(): Flow<String> {
|
||||
|
||||
fun poll76(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::Foo7<!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!><!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
+9
-9
@@ -82,7 +82,7 @@ fun poll05(): Flow<String> {
|
||||
|
||||
fun poll06(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(foo7(), ::Foo7)
|
||||
val inv = select(foo7(), ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -138,7 +138,7 @@ fun poll16(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll17(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { foo7() } else { ::Foo7 }<!>
|
||||
val inv = if (flag) { foo7() } else { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -187,7 +187,7 @@ fun poll25(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll26(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() else -> ::Foo7 }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() else -> ::Foo7 }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -236,7 +236,7 @@ fun poll35(flag: Boolean): Flow<String> {
|
||||
|
||||
fun poll36(flag: Boolean): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -334,7 +334,7 @@ fun poll55(): Flow<String> {
|
||||
|
||||
fun poll56(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::Foo7 } catch (e: Exception) { foo7() } finally { foo7() }<!>
|
||||
val inv = try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> } catch (e: Exception) { foo7() } finally { foo7() }
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -432,7 +432,7 @@ fun poll75(): Flow<String> {
|
||||
|
||||
fun poll76(): Flow<String> {
|
||||
return flow {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::Foo7<!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!><!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
inv
|
||||
}
|
||||
}
|
||||
@@ -481,21 +481,21 @@ fun poll85(): Flow<String> {
|
||||
|
||||
fun poll86(): Flow<String> {
|
||||
return flow {
|
||||
val inv = ::Foo7 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>in<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::Foo7)
|
||||
val inv = ::Foo7 in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
fun poll87(): Flow<String> {
|
||||
return flow {
|
||||
val inv = ::Foo7 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, TYPE_INFERENCE_ONLY_INPUT_TYPES_ERROR!>in<!> setOf(foo7())
|
||||
val inv = ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> <!TYPE_INFERENCE_ONLY_INPUT_TYPES_ERROR!>in<!> setOf(foo7())
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
fun poll88(): Flow<String> {
|
||||
return flow {
|
||||
val inv = foo7() in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::Foo7)
|
||||
val inv = foo7() in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,9 +5,9 @@ fun <K> id(x: K) = x
|
||||
|
||||
fun main() {
|
||||
val x1 = select<Any?>(id { x, y -> }, { x: Int, y -> })
|
||||
val x2 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(id { x, <!CANNOT_INFER_PARAMETER_TYPE!>y<!> -> }, { x: Int, <!CANNOT_INFER_PARAMETER_TYPE!>y<!> -> })
|
||||
val x2 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!> { x, <!CANNOT_INFER_PARAMETER_TYPE!>y<!> -> }, { x: Int, <!CANNOT_INFER_PARAMETER_TYPE!>y<!> -> })
|
||||
|
||||
val x3 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(id(fun (x, <!CANNOT_INFER_PARAMETER_TYPE!>y<!>) {}), fun (x: Int, <!CANNOT_INFER_PARAMETER_TYPE!>y<!>) {})
|
||||
val x3 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(fun (x, <!CANNOT_INFER_PARAMETER_TYPE!>y<!>) {}), fun (x: Int, <!CANNOT_INFER_PARAMETER_TYPE!>y<!>) {})
|
||||
|
||||
val x4 = select<Any?>((fun (x, y) {}), fun (x: Int, y) {})
|
||||
val x5 = select<Any?>(id(fun (<!CANNOT_INFER_PARAMETER_TYPE!>x<!>, <!CANNOT_INFER_PARAMETER_TYPE!>y<!>) {}), fun (x: Int, y) {})
|
||||
|
||||
+2
-2
@@ -262,8 +262,8 @@ class Main<L>(x: L?, y: L) {
|
||||
val x471 = foo47(y)
|
||||
|
||||
fun <R> takeLambda(block: () -> R): R = materialize()
|
||||
val x480 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeLambda<!> { foo48 { <!ARGUMENT_TYPE_MISMATCH!>x<!> } }
|
||||
val x481 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeLambda<!> { foo48 { <!ARGUMENT_TYPE_MISMATCH!>y<!> } }
|
||||
val x480 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeLambda<!> { <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo48<!> { <!ARGUMENT_TYPE_MISMATCH!>x<!> } }
|
||||
val x481 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>takeLambda<!> { <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo48<!> { <!ARGUMENT_TYPE_MISMATCH!>y<!> } }
|
||||
val x482 = takeLambda { foo48 { null } }
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ public class Foo {
|
||||
// FILE: test.kt
|
||||
|
||||
fun test(e: <!UNRESOLVED_REFERENCE!>ErrorType<!>) {
|
||||
Foo.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> {
|
||||
Sam.Result.create(e)
|
||||
Foo.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> {
|
||||
Sam.Result.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>create<!>(e)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
interface Inv<I>
|
||||
interface Inv2<I>
|
||||
|
||||
fun <T: Inv2<T>> foo(klass: Inv<T>): String? = null
|
||||
|
||||
fun <X> bar(): Inv<X> = null!!
|
||||
|
||||
fun test() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(bar())
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
interface Inv<I>
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// !LANGUAGE: +ExpectedTypeFromCast
|
||||
|
||||
fun <T> foo(): T = TODO()
|
||||
|
||||
fun <V> id(value: V) = value
|
||||
|
||||
val asString = foo() as String
|
||||
|
||||
val viaId = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(foo()) as String
|
||||
|
||||
val insideId = id(foo() as String)
|
||||
|
||||
val asList = foo() as List<String>
|
||||
|
||||
val asStarList = foo() as List<*>
|
||||
|
||||
val safeAs = foo() as? String
|
||||
|
||||
val fromIs = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>() is String
|
||||
val fromNoIs = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>() !is String
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +ExpectedTypeFromCast
|
||||
|
||||
fun <T> foo(): T = TODO()
|
||||
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
// !CHECK_TYPE
|
||||
|
||||
package a
|
||||
|
||||
import checkSubtype
|
||||
|
||||
fun <T> emptyList(): List<T> = throw Exception()
|
||||
|
||||
fun <T> foo(f: T.() -> Unit, l: List<T>): T = throw Exception("$f$l")
|
||||
|
||||
fun test() {
|
||||
val q = foo(fun Int.() {}, emptyList()) //type inference no information for parameter error
|
||||
checkSubtype<Int>(q)
|
||||
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>({}, emptyList())
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !CHECK_TYPE
|
||||
|
||||
package a
|
||||
|
||||
+4
-4
@@ -13,7 +13,7 @@ fun <T> id(t: T): T = t
|
||||
infix fun <T> Z.foo(a: A<T>): A<T> = a
|
||||
|
||||
fun test(z: Z) {
|
||||
z <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> newA()
|
||||
z <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>newA<!>()
|
||||
val a: A<Int> = id(z foo newA())
|
||||
val b: A<Int> = id(z.foo(newA()))
|
||||
use(a, b)
|
||||
@@ -23,7 +23,7 @@ fun test(z: Z) {
|
||||
operator fun <T> Z.plus(a: A<T>): A<T> = a
|
||||
|
||||
fun test1(z: Z) {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(z + newA())
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(z <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>+<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>newA<!>())
|
||||
val a: A<Z> = z + newA()
|
||||
val b: A<Z> = z.plus(newA())
|
||||
val c: A<Z> = id(z + newA())
|
||||
@@ -35,7 +35,7 @@ fun test1(z: Z) {
|
||||
operator fun <T> Z.compareTo(a: A<T>): Int { use(a); return 1 }
|
||||
|
||||
fun test2(z: Z) {
|
||||
val a: Boolean = id(z <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!><<!> newA())
|
||||
val a: Boolean = id(z <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!><<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>newA<!>())
|
||||
val b: Boolean = id(z < newA<Z>())
|
||||
use(a, b)
|
||||
}
|
||||
@@ -55,7 +55,7 @@ fun test3(z: Z) {
|
||||
|
||||
//'in' operation
|
||||
fun test4(collection: Collection<A<*>>) {
|
||||
id(newA() <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>in<!> collection)
|
||||
id(<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>newA<!>() in collection)
|
||||
id(newA<Int>() in collection)
|
||||
}
|
||||
|
||||
|
||||
compiler/testData/diagnostics/tests/inference/nothingType/implicitInferenceTToFlexibleNothing.fir.kt
Vendored
-10
@@ -1,10 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNCHECKED_CAST -UNUSED_PARAMETER
|
||||
// SKIP_TXT
|
||||
|
||||
import java.util.*
|
||||
|
||||
fun <T> foo (f: () -> List<T>): T = null as T
|
||||
|
||||
fun main() {
|
||||
val x = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!> { Collections.emptyList() }
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNCHECKED_CAST -UNUSED_PARAMETER
|
||||
// SKIP_TXT
|
||||
|
||||
|
||||
Vendored
+6
-6
@@ -16,8 +16,8 @@ fun test1(b: Boolean?) {
|
||||
}
|
||||
|
||||
fun test2() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(
|
||||
materialize()
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>materialize<!>()
|
||||
)
|
||||
select(materialize(), materialize<String>())
|
||||
select(materialize(), null, Inv<String>())
|
||||
@@ -25,12 +25,12 @@ fun test2() {
|
||||
materialize(),
|
||||
null
|
||||
)<!>
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(
|
||||
materialize(),
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>materialize<!>(),
|
||||
materialize()
|
||||
)
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>select<!>(
|
||||
materialize(),
|
||||
select(
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>materialize<!>(),
|
||||
materialize(),
|
||||
null
|
||||
)
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ fun <I> id(arg: I): I = arg
|
||||
fun <S> select(vararg args: S): S = TODO()
|
||||
|
||||
fun test() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(
|
||||
make()
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>make<!>()
|
||||
)
|
||||
|
||||
select(make(), null)
|
||||
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
package a
|
||||
|
||||
import java.util.*
|
||||
|
||||
fun <T> g (f: () -> List<T>) : T {<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
|
||||
fun test() {
|
||||
//here possibly can be a cycle on constraints
|
||||
val x = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>g<!> { Collections.emptyList() }
|
||||
|
||||
val y = g<Int> { Collections.emptyList() }
|
||||
val z : List<Int> = g { Collections.emptyList() }
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package a
|
||||
|
||||
import java.util.*
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun <E> emptyList(): List<E> = TODO()
|
||||
|
||||
data class IntervalTree(
|
||||
val left: IntervalTree?,
|
||||
val right: IntervalTree?,
|
||||
val intervals: List<Interval>,
|
||||
val median: Float
|
||||
)
|
||||
|
||||
class Interval
|
||||
|
||||
fun buildTree(segments: List<Interval>): IntervalTree? = TODO()
|
||||
fun acquireIntervals(): List<Interval> = TODO()
|
||||
|
||||
fun main() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>buildTree(acquireIntervals())
|
||||
?: emptyList()<!>
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun <E> emptyList(): List<E> = TODO()
|
||||
|
||||
@@ -6,19 +6,19 @@ fun <K> id(arg: K): K = arg
|
||||
fun test() {
|
||||
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)!!
|
||||
<!UNRESOLVED_REFERENCE!>unresolved<!>!!<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try {
|
||||
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
} catch (e: Exception) {
|
||||
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
}<!>
|
||||
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (true)
|
||||
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (true)
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
else
|
||||
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)<!>
|
||||
|
||||
when {
|
||||
true -> id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
}
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id(<!UNRESOLVED_REFERENCE!>unresolved<!>) ?: id(<!UNRESOLVED_REFERENCE!>unresolved<!>)<!>
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(<!UNRESOLVED_REFERENCE!>unresolved<!>) ?: id(<!UNRESOLVED_REFERENCE!>unresolved<!>)<!>
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@ fun <K> id(arg: K): K = arg
|
||||
fun <M> materialize(): M = TODO()
|
||||
|
||||
fun test(b: Boolean) {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(if (b) {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(if (b) {
|
||||
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
|
||||
} else {
|
||||
id(
|
||||
materialize()
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>materialize<!>()
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ fun <T> emptyList() : List<T>? = ArrayList<T>()
|
||||
fun foo() {
|
||||
// type arguments shouldn't be required
|
||||
val l : List<Int> = emptyList()!!
|
||||
val l1 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList()!!<!>
|
||||
val l1 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>()!!<!>
|
||||
|
||||
checkSubtype<List<Int>>(emptyList()!!)
|
||||
checkSubtype<List<Int>?>(emptyList())
|
||||
|
||||
+4
-4
@@ -9,21 +9,21 @@ class Foo7<T>
|
||||
fun foo7() = null as Foo7<Int>
|
||||
|
||||
fun poll17(flag: Boolean): Any? {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { foo7() } else { ::Foo7 }<!>
|
||||
val inv = if (flag) { foo7() } else { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> }
|
||||
return inv
|
||||
}
|
||||
|
||||
fun poll26(flag: Boolean): Any? {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() else -> ::Foo7 }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() else -> ::Foo7 }
|
||||
return inv
|
||||
}
|
||||
|
||||
fun poll36(flag: Boolean): Any? {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() }
|
||||
return inv
|
||||
}
|
||||
|
||||
fun poll56(): Any? {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::Foo7 } catch (e: Exception) { foo7() } finally { foo7() }<!>
|
||||
val inv = try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> } catch (e: Exception) { foo7() } finally { foo7() }
|
||||
return inv
|
||||
}
|
||||
|
||||
+15
-15
@@ -44,7 +44,7 @@ fun poll13(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll14(flag: Boolean) {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { ::bar4 } else { ::foo4 }<!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!> } else { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
inv<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ fun poll16(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll17(flag: Boolean) {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (flag) { foo7() } else { ::Foo7 }<!>
|
||||
val inv = if (flag) { foo7() } else { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> }
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ fun poll22(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll23(flag: Boolean) {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::bar4 else -> ::foo4 }<!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!> else -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
inv<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ fun poll25(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll26(flag: Boolean) {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() else -> ::Foo7 }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() else -> ::Foo7 }
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ fun poll32(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll33(flag: Boolean) {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::bar4 false -> ::foo4 }<!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!> false -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
inv<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ fun poll35(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll36(flag: Boolean) {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>when (flag) { true -> ::Foo7 false -> foo7() }<!>
|
||||
val inv = when (flag) { true -> ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> false -> foo7() }
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ fun poll42() {
|
||||
}
|
||||
|
||||
fun poll43() {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::bar4 } finally { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!> } finally { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
inv<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ fun poll52() {
|
||||
}
|
||||
|
||||
fun poll53() {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::bar4 } catch (e: Exception) { ::foo4 } finally { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!> } catch (e: Exception) { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> } finally { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!> }<!>
|
||||
inv<!NO_VALUE_FOR_PARAMETER!>()<!>
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ fun poll55() {
|
||||
}
|
||||
|
||||
fun poll56() {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try { ::Foo7 } catch (e: Exception) { foo7() } finally { foo7() }<!>
|
||||
val inv = try { ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> } catch (e: Exception) { foo7() } finally { foo7() }
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -254,7 +254,7 @@ fun poll72() {
|
||||
}
|
||||
|
||||
fun poll73() {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::bar4<!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!><!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ fun poll75() {
|
||||
}
|
||||
|
||||
fun poll76() {
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::Foo7<!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
val inv = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!><!NOT_NULL_ASSERTION_ON_CALLABLE_REFERENCE!>!!<!><!>
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ fun poll82() {
|
||||
}
|
||||
|
||||
fun poll83() {
|
||||
val inv = ::bar4 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>in<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::foo4)
|
||||
val inv = ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar4<!> in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo4<!>)
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -304,16 +304,16 @@ fun poll85() {
|
||||
}
|
||||
|
||||
fun poll86() {
|
||||
val inv = ::Foo7 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>in<!> <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::Foo7)
|
||||
val inv = ::Foo7 in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
|
||||
fun poll87() {
|
||||
val inv = ::Foo7 <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, TYPE_INFERENCE_ONLY_INPUT_TYPES_ERROR!>in<!> setOf(foo7())
|
||||
val inv = ::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!> <!TYPE_INFERENCE_ONLY_INPUT_TYPES_ERROR!>in<!> setOf(foo7())
|
||||
inv
|
||||
}
|
||||
|
||||
fun poll88() {
|
||||
val inv = foo7() in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::Foo7)
|
||||
val inv = foo7() in <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>setOf<!>(::<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Foo7<!>)
|
||||
inv
|
||||
}
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS
|
||||
|
||||
interface I
|
||||
|
||||
interface Inv<P>
|
||||
interface Out<out T>
|
||||
|
||||
class Bar<U : I>(val x: Inv<Out<U>>)
|
||||
|
||||
fun <T> materializeFoo(): Inv<T> = null as Inv<T>
|
||||
|
||||
fun main() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Bar<!>(materializeFoo())
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -CAST_NEVER_SUCCEEDS
|
||||
|
||||
interface I
|
||||
|
||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun test(a: Int, b: Boolean) {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(a.foo(<!ARGUMENT_TYPE_MISMATCH!>b<!>))
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(a.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>(<!ARGUMENT_TYPE_MISMATCH!>b<!>))
|
||||
}
|
||||
|
||||
fun <T, R> T.foo(l: (T) -> R): R = TODO()
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
// SKIP_TXT
|
||||
|
||||
class Bar {
|
||||
val a: Array<String>? = null
|
||||
}
|
||||
|
||||
fun foo(bar: Bar) = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar.a?.asIterable() ?: emptyArray()<!>
|
||||
|
||||
fun <T> Array<out T>.asIterable(): Iterable<T> = TODO()
|
||||
|
||||
fun testFrontend() {
|
||||
val bar = Bar()
|
||||
foo(bar)
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// SKIP_TXT
|
||||
|
||||
class Bar {
|
||||
|
||||
Vendored
+4
-4
@@ -28,11 +28,11 @@ internal class TowerDataElementsForName2() {
|
||||
}
|
||||
|
||||
internal class TowerDataElementsForName3() {
|
||||
val reversedFilteredLocalScopes by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>lazy<!>(LazyThreadSafetyMode.NONE) {
|
||||
val reversedFilteredLocalScopes by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>lazy<!>(LazyThreadSafetyMode.NONE) {
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
buildList l1@ {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>buildList<!> l1@ {
|
||||
for (i in lastIndex downTo 0) {
|
||||
val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) {
|
||||
val reversedFilteredLocalScopes by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>lazy(LazyThreadSafetyMode.NONE) {
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
buildList {
|
||||
for (i in lastIndex downTo 0) {
|
||||
@@ -40,7 +40,7 @@ internal class TowerDataElementsForName3() {
|
||||
this@l1.add("")
|
||||
}
|
||||
}
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
}
|
||||
}<!>
|
||||
|
||||
+4
-4
@@ -28,11 +28,11 @@ internal class TowerDataElementsForName2() {
|
||||
}
|
||||
|
||||
internal class TowerDataElementsForName3() {
|
||||
val reversedFilteredLocalScopes by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>lazy<!>(LazyThreadSafetyMode.NONE) {
|
||||
val reversedFilteredLocalScopes by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>lazy<!>(LazyThreadSafetyMode.NONE) {
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
buildList l1@ {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>buildList<!> l1@ {
|
||||
for (i in lastIndex downTo 0) {
|
||||
val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) {
|
||||
val reversedFilteredLocalScopes by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>lazy(LazyThreadSafetyMode.NONE) {
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
buildList {
|
||||
for (i in lastIndex downTo 0) {
|
||||
@@ -40,7 +40,7 @@ internal class TowerDataElementsForName3() {
|
||||
this@l1.add("")
|
||||
}
|
||||
}
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
}
|
||||
}<!>
|
||||
|
||||
@@ -271,10 +271,10 @@ fun case_16() {
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 17
|
||||
val case_17 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (nullableIntProperty == null == true == false) 0 else {
|
||||
val case_17 = if (nullableIntProperty == null == true == false) 0 else {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int? & kotlin.Nothing?")!>nullableIntProperty<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int? & kotlin.Nothing?")!>nullableIntProperty<!><!UNSAFE_CALL!>.<!>java
|
||||
}<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int? & kotlin.Nothing?")!>nullableIntProperty<!><!UNSAFE_CALL!>.<!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>java<!>
|
||||
}
|
||||
|
||||
//TESTCASE NUMBER: 18
|
||||
fun case_18(a: DeepObject.A.B.C.D.E.F.G.J?) {
|
||||
|
||||
@@ -741,11 +741,11 @@ fun case_37(x: Nothing?, y: Nothing?) {
|
||||
fun case_38() {
|
||||
val z = null
|
||||
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (<!SENSELESS_COMPARISON!>Object.prop_2 != z<!>)
|
||||
if (<!SENSELESS_COMPARISON!>Object.prop_2 != z<!>)
|
||||
else {
|
||||
Object.prop_2
|
||||
<!UNREACHABLE_CODE!>Object.prop_2.java<!>
|
||||
}<!>
|
||||
<!UNREACHABLE_CODE!>Object.prop_2.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>java<!><!>
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 39
|
||||
|
||||
Reference in New Issue
Block a user