FIR: Report INFERENCE_NO_INFORMATION_FOR_PARAMETER diagnostic
This commit is contained in:
committed by
TeamCityServer
parent
6e901e3785
commit
c420957eac
-11
@@ -1,11 +0,0 @@
|
||||
fun <T: Any> fooT22() : T? {
|
||||
return null
|
||||
}
|
||||
|
||||
fun foo1() {
|
||||
fooT22()
|
||||
}
|
||||
|
||||
val n : Nothing = null.sure()
|
||||
|
||||
fun <T : Any> T?.sure() : T = this!!
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
fun <T: Any> fooT22() : T? {
|
||||
return null
|
||||
}
|
||||
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
package noInformationForParameter
|
||||
//+JDK
|
||||
|
||||
import java.util.*
|
||||
|
||||
fun test() {
|
||||
val n = newList()
|
||||
|
||||
val n1 : List<String> = newList()
|
||||
}
|
||||
|
||||
fun <S> newList() : ArrayList<S> {
|
||||
return ArrayList<S>()
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package noInformationForParameter
|
||||
//+JDK
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNREACHABLE_CODE
|
||||
//KT-2445 Calling method with function with generic parameter causes compile-time exception
|
||||
package a
|
||||
|
||||
fun main() {
|
||||
test {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fun <R> test(callback: (R) -> Unit):Unit = callback(null!!)
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNREACHABLE_CODE
|
||||
//KT-2445 Calling method with function with generic parameter causes compile-time exception
|
||||
package a
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
//KT-832 Provide better diagnostics when type inference fails for an expression that returns a function
|
||||
package a
|
||||
|
||||
fun <T> fooT2() : (t : T) -> T {
|
||||
return {it}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
fooT2()(1) // here 1 should not be marked with an error
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
//KT-832 Provide better diagnostics when type inference fails for an expression that returns a function
|
||||
package a
|
||||
|
||||
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
// NI_EXPECTED_FILE
|
||||
val x get() = foo()
|
||||
val y get() = bar()
|
||||
|
||||
fun <E> foo(): E = null!!
|
||||
fun <E> bar(): List<E> = null!!
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// NI_EXPECTED_FILE
|
||||
val x get() = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>()
|
||||
val y get() = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>()
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
// KT-353 Generic type argument inference sometimes doesn't work
|
||||
|
||||
interface A {
|
||||
fun <T> gen() : T
|
||||
}
|
||||
|
||||
fun foo(a: A) {
|
||||
val g : () -> Unit = {
|
||||
a.gen() //it works: Unit is derived
|
||||
}
|
||||
|
||||
val u: Unit = a.gen() // Unit should be inferred
|
||||
|
||||
if (true) {
|
||||
a.gen() // Shouldn't work: no info for inference
|
||||
}
|
||||
|
||||
val b : () -> Unit = {
|
||||
if (true) {
|
||||
a.gen() // unit can be inferred
|
||||
}
|
||||
else {
|
||||
Unit
|
||||
}
|
||||
}
|
||||
|
||||
val f : () -> Int = {
|
||||
a.gen() //type mismatch, but Int can be derived
|
||||
}
|
||||
|
||||
a.gen() // Shouldn't work: no info for inference
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// KT-353 Generic type argument inference sometimes doesn't work
|
||||
|
||||
interface A {
|
||||
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
@file:OptIn(ExperimentalTypeInference::class)
|
||||
|
||||
import kotlin.experimental.ExperimentalTypeInference
|
||||
|
||||
interface Base<K>
|
||||
|
||||
interface Controller<T> : Base<T> {
|
||||
suspend fun yield(t: T) {}
|
||||
}
|
||||
|
||||
interface SpecificController<T> : Base<String> {
|
||||
suspend fun yield(t: T) {}
|
||||
}
|
||||
|
||||
fun <S> generate(@BuilderInference g: suspend Controller<S>.() -> Unit): S = TODO()
|
||||
fun <S> generateSpecific(@BuilderInference g: suspend SpecificController<S>.() -> Unit): S = TODO()
|
||||
|
||||
fun Base<*>.starBase() {}
|
||||
fun Base<String>.stringBase() {}
|
||||
|
||||
val test1 = generate {
|
||||
starBase()
|
||||
yield("foo")
|
||||
}
|
||||
|
||||
val test2 = generate {
|
||||
starBase()
|
||||
}
|
||||
|
||||
val test3 = generate {
|
||||
yield("bar")
|
||||
stringBase()
|
||||
}
|
||||
|
||||
val test4 = generateSpecific {
|
||||
yield(42)
|
||||
starBase()
|
||||
}
|
||||
|
||||
val test5 = generateSpecific {
|
||||
yield(42)
|
||||
stringBase()
|
||||
}
|
||||
|
||||
val test6 = generateSpecific {
|
||||
stringBase()
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
Vendored
-23
@@ -1,23 +0,0 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
@file:OptIn(ExperimentalTypeInference::class)
|
||||
|
||||
import kotlin.experimental.ExperimentalTypeInference
|
||||
|
||||
class GenericController<T> {
|
||||
suspend fun yield(t: T) {}
|
||||
}
|
||||
|
||||
fun <S> generate(@BuilderInference g: suspend GenericController<S>.() -> Unit): List<S> = TODO()
|
||||
|
||||
@BuilderInference
|
||||
suspend fun <S> GenericController<List<S>>.yieldGenerate(g: suspend GenericController<S>.() -> Unit): Unit = TODO()
|
||||
|
||||
val test1 = generate {
|
||||
// TODO: KT-15185
|
||||
yieldGenerate {
|
||||
yield(4)
|
||||
}
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
class Controller<T : Number> {
|
||||
suspend fun yield(t: T) {}
|
||||
}
|
||||
|
||||
fun <S : Number> generate(g: suspend Controller<S>.() -> Unit): S = TODO()
|
||||
|
||||
val test = generate {
|
||||
yield(<!ARGUMENT_TYPE_MISMATCH!>"foo"<!>)
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
|
||||
Vendored
-20
@@ -1,20 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
class GenericController<T> {
|
||||
suspend fun yield(t: T) {}
|
||||
}
|
||||
|
||||
fun <S> generate(g: suspend GenericController<S>.(S) -> Unit): S = TODO()
|
||||
|
||||
val test1 = generate {
|
||||
yield(<!ARGUMENT_TYPE_MISMATCH!>4<!>)
|
||||
}
|
||||
|
||||
val test2 = generate<Int> {
|
||||
yield(4)
|
||||
}
|
||||
|
||||
val test3 = generate { bar: Int ->
|
||||
yield(4)
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_ANONYMOUS_PARAMETER -UNUSED_VARIABLE
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
import kotlin.experimental.ExperimentalTypeInference
|
||||
|
||||
fun test1() {
|
||||
sequence {
|
||||
val a: Array<Int> = arrayOf(1, 2, 3)
|
||||
val b = arrayOf(1, 2, 3)
|
||||
}
|
||||
}
|
||||
|
||||
fun test2() = sequence { arrayOf(1, 2, 3) }
|
||||
|
||||
|
||||
class Foo<T>
|
||||
|
||||
fun <T> f1(f: Foo<T>.() -> Unit) {}
|
||||
|
||||
@OptIn(ExperimentalTypeInference::class)
|
||||
fun <T> f2(@BuilderInference f: Foo<T>.() -> Unit) {
|
||||
}
|
||||
|
||||
fun test3() {
|
||||
f1 {
|
||||
val a: Array<Int> = arrayOf(1, 2, 3)
|
||||
}
|
||||
|
||||
f2 {
|
||||
val a: Array<Int> = arrayOf(1, 2, 3)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +NewInference
|
||||
// !USE_EXPERIMENTAL: kotlin.RequiresOptIn
|
||||
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
Reference in New Issue
Block a user