Create From Usage: Fix type substitution for no-receiver calls

This commit is contained in:
Alexey Sedunov
2014-10-24 13:47:28 +04:00
parent abbbd198fd
commit cede5ac58b
5 changed files with 7 additions and 5 deletions
@@ -223,9 +223,9 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
val placement = placement
when {
placement is CallablePlacement.NoReceiver -> {
receiverClassDescriptor = null
isExtension = false
containingElement = placement.containingElement
receiverClassDescriptor = (containingElement as? JetClassOrObject)?.let { currentFileContext[BindingContext.CLASS, it] }
}
placement is CallablePlacement.WithReceiver -> {
receiverClassDescriptor =
@@ -293,6 +293,8 @@ class CallableBuilder(val config: CallableBuilderConfiguration) {
receiverType: JetType?,
result: MutableMap<JetType, JetType>
) {
if (placement is CallablePlacement.NoReceiver) return
val classTypeParameters = receiverType?.getArguments() ?: Collections.emptyList()
val ownerTypeArguments = (placement as? CallablePlacement.WithReceiver)?.receiverTypeCandidate?.theType?.getArguments()
?: Collections.emptyList()
@@ -5,7 +5,7 @@ import kotlin.properties.ReadOnlyProperty
class A<T>(val t: T) {
val x: A<Int> by foo(t, "")
fun <T> foo(t: T, s: String): ReadOnlyProperty<A<T>, A<Int>> {
fun foo(t: T, s: String): ReadOnlyProperty<A<T>, A<Int>> {
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
@@ -5,7 +5,7 @@ import kotlin.properties.ReadWriteProperty
class A<T>(val t: T) {
var x: A<Int> by foo(t, "")
fun <T> foo(t: T, s: String): ReadWriteProperty<A<T>, A<Int>> {
fun foo(t: T, s: String): ReadWriteProperty<A<T>, A<Int>> {
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
@@ -5,7 +5,7 @@
import kotlin.properties.ReadOnlyProperty
class A<T> {
val <T> foo: ReadOnlyProperty<A<T>, A<Int>>
val foo: ReadOnlyProperty<A<T>, A<Int>>
val x: A<Int> by foo
}
@@ -5,7 +5,7 @@
import kotlin.properties.ReadWriteProperty
class A<T> {
val <T> foo: ReadWriteProperty<A<T>, A<Int>>
val foo: ReadWriteProperty<A<T>, A<Int>>
var x: A<Int> by foo
}