Raw FIR: use lambda parameter type if available
This commit is contained in:
committed by
Mikhail Glukhikh
parent
fa0b933bc8
commit
2e660ef62a
+1
-2
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
|
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.stubs.elements.KtConstantExpressionElementType
|
import org.jetbrains.kotlin.psi.stubs.elements.KtConstantExpressionElementType
|
||||||
@@ -155,7 +154,7 @@ class ExpressionsConverter(
|
|||||||
val multiParameter = buildValueParameter {
|
val multiParameter = buildValueParameter {
|
||||||
session = baseSession
|
session = baseSession
|
||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Source
|
||||||
returnTypeRef = buildImplicitTypeRef()
|
returnTypeRef = valueParameter.firValueParameter.returnTypeRef
|
||||||
this.name = name
|
this.name = name
|
||||||
symbol = FirVariableSymbol(name)
|
symbol = FirVariableSymbol(name)
|
||||||
defaultValue = null
|
defaultValue = null
|
||||||
|
|||||||
@@ -1106,7 +1106,7 @@ class RawFirBuilder(
|
|||||||
source = valueParameter.toFirSourceElement()
|
source = valueParameter.toFirSourceElement()
|
||||||
session = baseSession
|
session = baseSession
|
||||||
origin = FirDeclarationOrigin.Source
|
origin = FirDeclarationOrigin.Source
|
||||||
returnTypeRef = buildImplicitTypeRef {
|
returnTypeRef = valueParameter.typeReference?.convertSafe() ?: buildImplicitTypeRef {
|
||||||
source = multiDeclaration.toFirSourceElement(FirFakeSourceElementKind.ImplicitTypeRef)
|
source = multiDeclaration.toFirSourceElement(FirFakeSourceElementKind.ImplicitTypeRef)
|
||||||
}
|
}
|
||||||
this.name = name
|
this.name = name
|
||||||
@@ -1124,7 +1124,7 @@ class RawFirBuilder(
|
|||||||
) { toFirOrImplicitType() }
|
) { toFirOrImplicitType() }
|
||||||
multiParameter
|
multiParameter
|
||||||
} else {
|
} else {
|
||||||
val typeRef = buildImplicitTypeRef {
|
val typeRef = valueParameter.typeReference?.convertSafe() ?: buildImplicitTypeRef {
|
||||||
source = implicitTypeRefSource
|
source = implicitTypeRefSource
|
||||||
}
|
}
|
||||||
valueParameter.toFirValueParameter(typeRef)
|
valueParameter.toFirValueParameter(typeRef)
|
||||||
|
|||||||
Vendored
+3
-3
@@ -9,9 +9,9 @@ fun <X, Y> foo(y: Y, x: (X, Y) -> Unit) {}
|
|||||||
|
|
||||||
fun bar(aInstance: A, bInstance: B) {
|
fun bar(aInstance: A, bInstance: B) {
|
||||||
foo("") {
|
foo("") {
|
||||||
<!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a, b): A<!>, c ->
|
(a, b): A, c ->
|
||||||
a <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
a checkType { _<Int>() }
|
||||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
b checkType { _<String>() }
|
||||||
c checkType { _<String>() }
|
c checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ fun bar(aList: List<A>) {
|
|||||||
b checkType { _<String>() }
|
b checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
aList.foo { (a, b): B ->
|
aList.<!INAPPLICABLE_CANDIDATE!>foo<!> { (a, b): B ->
|
||||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+7
-7
@@ -4,23 +4,23 @@
|
|||||||
data class A(val x: Int, val y: String)
|
data class A(val x: Int, val y: String)
|
||||||
|
|
||||||
fun bar() {
|
fun bar() {
|
||||||
val x = { <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a, b): A<!> ->
|
val x = { (a, b): A ->
|
||||||
a <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
a checkType { _<Int>() }
|
||||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
b checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
x checkType { _<(A) -> Unit>() }
|
x checkType { _<(A) -> Unit>() }
|
||||||
|
|
||||||
val y = { <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a: Int, b): A<!> ->
|
val y = { (a: Int, b): A ->
|
||||||
a checkType { _<Int>() }
|
a checkType { _<Int>() }
|
||||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
b checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
y checkType { _<(A) -> Unit>() }
|
y checkType { _<(A) -> Unit>() }
|
||||||
|
|
||||||
val y2 = { <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a: Number, b): A<!> ->
|
val y2 = { (a: Number, b): A ->
|
||||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
b checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
y2 checkType { _<(A) -> Unit>() }
|
y2 checkType { _<(A) -> Unit>() }
|
||||||
|
|||||||
+3
-3
@@ -47,8 +47,8 @@ fun bar() {
|
|||||||
b checkType { _<String>() }
|
b checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
foo { (a, b): B ->
|
<!INAPPLICABLE_CANDIDATE!>foo<!> { (a, b): B ->
|
||||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Double>() }
|
a checkType { _<Double>() }
|
||||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Short>() }
|
b checkType { _<Short>() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+2
-2
@@ -56,8 +56,8 @@ fun bar() {
|
|||||||
b checkType { _<String>() }
|
b checkType { _<String>() }
|
||||||
}
|
}
|
||||||
|
|
||||||
foo { (_, b): B ->
|
<!INAPPLICABLE_CANDIDATE!>foo<!> { (_, b): B ->
|
||||||
<!UNRESOLVED_REFERENCE!>_<!>.<!UNRESOLVED_REFERENCE!>hashCode<!>()
|
<!UNRESOLVED_REFERENCE!>_<!>.<!UNRESOLVED_REFERENCE!>hashCode<!>()
|
||||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Short>() }
|
b checkType { _<Short>() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user