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.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
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.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.kotlin.types.checker.intersectWrappedTypes
|
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.expressions.ControlStructureTypingUtils
|
||||||
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDelegate
|
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDelegate
|
||||||
import org.jetbrains.kotlin.types.model.TypeVariableMarker
|
import org.jetbrains.kotlin.types.model.TypeVariableMarker
|
||||||
@@ -119,7 +119,7 @@ class DiagnosticReporterByTrackingStrategy(
|
|||||||
val callElement = psiKotlinCall.psiCall.callElement
|
val callElement = psiKotlinCall.psiCall.callElement
|
||||||
trace.report(
|
trace.report(
|
||||||
NO_CONTEXT_RECEIVER.on(
|
NO_CONTEXT_RECEIVER.on(
|
||||||
callElement,
|
callElement.getCalleeExpressionIfAny() ?: callElement,
|
||||||
(diagnostic as NoContextReceiver).receiverDescriptor.value.toString()
|
(diagnostic as NoContextReceiver).receiverDescriptor.value.toString()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -14,5 +14,5 @@ fun test() {
|
|||||||
with(f) {
|
with(f) {
|
||||||
listOf(1, 2, 3).iterator(null)
|
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
|
// !LANGUAGE: +ContextReceivers
|
||||||
|
|
||||||
interface Semigroup<T> {
|
interface Semigroup<T> {
|
||||||
@@ -28,7 +29,7 @@ fun test() {
|
|||||||
listOf(1, 2, 3).sum()
|
listOf(1, 2, 3).sum()
|
||||||
}
|
}
|
||||||
with(StringMonoid) {
|
with(StringMonoid) {
|
||||||
listOf(1, 2, 3).<!NO_CONTEXT_RECEIVER!>sum()<!>
|
listOf(1, 2, 3).<!NO_CONTEXT_RECEIVER!>sum<!>()
|
||||||
listOf("1", "2", "3").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) {
|
with(lazy2) {
|
||||||
test1()
|
test1()
|
||||||
test2()
|
test2()
|
||||||
<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>()<!>
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>test3<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
with(lazy2) {
|
with(lazy2) {
|
||||||
with(lazy1) {
|
with(lazy1) {
|
||||||
test1()
|
test1()
|
||||||
test2()
|
test2()
|
||||||
<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>()<!>
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>test3<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
with(lazyT) {
|
with(lazyT) {
|
||||||
with(lazy1) {
|
with(lazy1) {
|
||||||
<!NO_CONTEXT_RECEIVER!>test1()<!>
|
<!NO_CONTEXT_RECEIVER!>test1<!>()
|
||||||
test2()
|
test2()
|
||||||
<!NO_CONTEXT_RECEIVER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>()<!>
|
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NO_CONTEXT_RECEIVER!>test3<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
with(lazyLazyT) {
|
with(lazyLazyT) {
|
||||||
with(lazy1) {
|
with(lazy1) {
|
||||||
<!NO_CONTEXT_RECEIVER!>test1()<!>
|
<!NO_CONTEXT_RECEIVER!>test1<!>()
|
||||||
test2()
|
test2()
|
||||||
test3()
|
test3()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
with(lazy1) {
|
with(lazy1) {
|
||||||
with(lazyLazyT) {
|
with(lazyLazyT) {
|
||||||
<!NO_CONTEXT_RECEIVER!>test1()<!>
|
<!NO_CONTEXT_RECEIVER!>test1<!>()
|
||||||
test2()
|
test2()
|
||||||
test3()
|
test3()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -8,5 +8,5 @@ context(T)
|
|||||||
fun <T> T.f(t: B<T>) {}
|
fun <T> T.f(t: B<T>) {}
|
||||||
|
|
||||||
fun Int.main(a: A, b: B<String>) {
|
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
|
// !LANGUAGE: +ContextReceivers
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
@@ -13,6 +14,6 @@ fun main() {
|
|||||||
A<Int>().f()
|
A<Int>().f()
|
||||||
}
|
}
|
||||||
with(listOf("1", "2", "3")) {
|
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
|
// !LANGUAGE: +ContextReceivers
|
||||||
|
|
||||||
open class A
|
open class A
|
||||||
@@ -10,11 +11,11 @@ fun B.f() {}
|
|||||||
fun main() {
|
fun main() {
|
||||||
val b = B()
|
val b = B()
|
||||||
|
|
||||||
b.<!NO_CONTEXT_RECEIVER!>f()<!>
|
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||||
with(A()) {
|
with(A()) {
|
||||||
b.f()
|
b.f()
|
||||||
}
|
}
|
||||||
with(C()) {
|
with(C()) {
|
||||||
b.f()
|
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
|
// !LANGUAGE: +ContextReceivers
|
||||||
|
|
||||||
class A
|
class A
|
||||||
@@ -10,11 +11,11 @@ fun B.f() {}
|
|||||||
fun main() {
|
fun main() {
|
||||||
val b = B()
|
val b = B()
|
||||||
|
|
||||||
b.<!NO_CONTEXT_RECEIVER!>f()<!>
|
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||||
with(A()) {
|
with(A()) {
|
||||||
b.f()
|
b.f()
|
||||||
}
|
}
|
||||||
with(C()) {
|
with(C()) {
|
||||||
b.<!NO_CONTEXT_RECEIVER!>f()<!>
|
b.<!NO_CONTEXT_RECEIVER!>f<!>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user