K1: Adjust positioning for NO_CONTEXT_RECEIVER
This commit is contained in:
+2
-2
@@ -35,10 +35,10 @@ import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluat
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.types.error.ErrorUtils
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
import org.jetbrains.kotlin.types.checker.intersectWrappedTypes
|
||||
import org.jetbrains.kotlin.types.error.ErrorUtils
|
||||
import org.jetbrains.kotlin.types.expressions.ControlStructureTypingUtils
|
||||
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDelegate
|
||||
import org.jetbrains.kotlin.types.model.TypeVariableMarker
|
||||
@@ -119,7 +119,7 @@ class DiagnosticReporterByTrackingStrategy(
|
||||
val callElement = psiKotlinCall.psiCall.callElement
|
||||
trace.report(
|
||||
NO_CONTEXT_RECEIVER.on(
|
||||
callElement,
|
||||
callElement.getCalleeExpressionIfAny() ?: callElement,
|
||||
(diagnostic as NoContextReceiver).receiverDescriptor.value.toString()
|
||||
)
|
||||
)
|
||||
|
||||
+2
-2
@@ -14,5 +14,5 @@ fun test() {
|
||||
with(f) {
|
||||
listOf(1, 2, 3).iterator(null)
|
||||
}
|
||||
listOf(1, 2, 3).<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>iterator<!>(null)<!>
|
||||
}
|
||||
listOf(1, 2, 3).<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>iterator<!>(null)
|
||||
}
|
||||
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
|
||||
interface Semigroup<T> {
|
||||
infix fun T.combine(other: T): T
|
||||
}
|
||||
|
||||
interface Monoid<T> : Semigroup<T> {
|
||||
val unit: T
|
||||
}
|
||||
object IntMonoid : Monoid<Int> {
|
||||
override fun Int.combine(other: Int): Int = this + other
|
||||
override val unit: Int = 0
|
||||
}
|
||||
object StringMonoid : Monoid<String> {
|
||||
override fun String.combine(other: String): String = this + other
|
||||
override val unit: String = ""
|
||||
}
|
||||
|
||||
public inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R = TODO()
|
||||
|
||||
context(Monoid<T>)
|
||||
fun <T> List<T>.sum(): T = fold(unit) { acc, e -> acc.combine(e) }
|
||||
|
||||
fun <T> listOf(vararg items: T): List<T> = null!!
|
||||
|
||||
fun test() {
|
||||
with(IntMonoid) {
|
||||
listOf(1, 2, 3).sum()
|
||||
}
|
||||
with(StringMonoid) {
|
||||
listOf(1, 2, 3).<!NO_CONTEXT_RECEIVER!>sum<!>()
|
||||
listOf("1", "2", "3").sum()
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
|
||||
interface Semigroup<T> {
|
||||
@@ -28,7 +29,7 @@ fun test() {
|
||||
listOf(1, 2, 3).sum()
|
||||
}
|
||||
with(StringMonoid) {
|
||||
listOf(1, 2, 3).<!NO_CONTEXT_RECEIVER!>sum()<!>
|
||||
listOf(1, 2, 3).<!NO_CONTEXT_RECEIVER!>sum<!>()
|
||||
listOf("1", "2", "3").sum()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,35 +16,35 @@ fun <T> f(lazy1: Lazy<Int>, lazy2: Lazy<CharSequence>, lazyT: Lazy<T>, lazyLazyT
|
||||
with(lazy2) {
|
||||
test1()
|
||||
test2()
|
||||
<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>()<!>
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>test3<!>()
|
||||
}
|
||||
}
|
||||
with(lazy2) {
|
||||
with(lazy1) {
|
||||
test1()
|
||||
test2()
|
||||
<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>()<!>
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>test3<!>()
|
||||
}
|
||||
}
|
||||
with(lazyT) {
|
||||
with(lazy1) {
|
||||
<!NO_CONTEXT_RECEIVER!>test1()<!>
|
||||
<!NO_CONTEXT_RECEIVER!>test1<!>()
|
||||
test2()
|
||||
<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>()<!>
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>test3<!>()
|
||||
}
|
||||
}
|
||||
with(lazyLazyT) {
|
||||
with(lazy1) {
|
||||
<!NO_CONTEXT_RECEIVER!>test1()<!>
|
||||
<!NO_CONTEXT_RECEIVER!>test1<!>()
|
||||
test2()
|
||||
test3()
|
||||
}
|
||||
}
|
||||
with(lazy1) {
|
||||
with(lazyLazyT) {
|
||||
<!NO_CONTEXT_RECEIVER!>test1()<!>
|
||||
<!NO_CONTEXT_RECEIVER!>test1<!>()
|
||||
test2()
|
||||
test3()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -8,5 +8,5 @@ context(T)
|
||||
fun <T> T.f(t: B<T>) {}
|
||||
|
||||
fun Int.main(a: A, b: B<String>) {
|
||||
a.<!NO_CONTEXT_RECEIVER!>f(<!TYPE_MISMATCH!>b<!>)<!>
|
||||
}
|
||||
a.<!NO_CONTEXT_RECEIVER!>f<!>(<!TYPE_MISMATCH!>b<!>)
|
||||
}
|
||||
|
||||
Vendored
-18
@@ -1,18 +0,0 @@
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun <T> listOf(vararg e: T): List<T> = null!!
|
||||
|
||||
class A<T>
|
||||
|
||||
context(List<T>)
|
||||
fun <T> A<T>.f() {}
|
||||
|
||||
fun main() {
|
||||
with(listOf(1, 2, 3)) {
|
||||
A<Int>().f()
|
||||
}
|
||||
with(listOf("1", "2", "3")) {
|
||||
A<Int>().<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
@@ -13,6 +14,6 @@ fun main() {
|
||||
A<Int>().f()
|
||||
}
|
||||
with(listOf("1", "2", "3")) {
|
||||
A<Int>().<!NO_CONTEXT_RECEIVER!>f()<!>
|
||||
A<Int>().<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
-20
@@ -1,20 +0,0 @@
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
|
||||
open class A
|
||||
class B
|
||||
class C: A()
|
||||
|
||||
context(A)
|
||||
fun B.f() {}
|
||||
|
||||
fun main() {
|
||||
val b = B()
|
||||
|
||||
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
with(A()) {
|
||||
b.f()
|
||||
}
|
||||
with(C()) {
|
||||
b.f()
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
|
||||
open class A
|
||||
@@ -10,11 +11,11 @@ fun B.f() {}
|
||||
fun main() {
|
||||
val b = B()
|
||||
|
||||
b.<!NO_CONTEXT_RECEIVER!>f()<!>
|
||||
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
with(A()) {
|
||||
b.f()
|
||||
}
|
||||
with(C()) {
|
||||
b.f()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
-20
@@ -1,20 +0,0 @@
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
|
||||
class A
|
||||
class B
|
||||
class C
|
||||
|
||||
context(A)
|
||||
fun B.f() {}
|
||||
|
||||
fun main() {
|
||||
val b = B()
|
||||
|
||||
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
with(A()) {
|
||||
b.f()
|
||||
}
|
||||
with(C()) {
|
||||
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
}
|
||||
}
|
||||
Vendored
+4
-3
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +ContextReceivers
|
||||
|
||||
class A
|
||||
@@ -10,11 +11,11 @@ fun B.f() {}
|
||||
fun main() {
|
||||
val b = B()
|
||||
|
||||
b.<!NO_CONTEXT_RECEIVER!>f()<!>
|
||||
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
with(A()) {
|
||||
b.f()
|
||||
}
|
||||
with(C()) {
|
||||
b.<!NO_CONTEXT_RECEIVER!>f()<!>
|
||||
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user