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.types.FirTypeProjection
|
||||
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.name.Name
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.KtConstantExpressionElementType
|
||||
@@ -155,7 +154,7 @@ class ExpressionsConverter(
|
||||
val multiParameter = buildValueParameter {
|
||||
session = baseSession
|
||||
origin = FirDeclarationOrigin.Source
|
||||
returnTypeRef = buildImplicitTypeRef()
|
||||
returnTypeRef = valueParameter.firValueParameter.returnTypeRef
|
||||
this.name = name
|
||||
symbol = FirVariableSymbol(name)
|
||||
defaultValue = null
|
||||
|
||||
@@ -1106,7 +1106,7 @@ class RawFirBuilder(
|
||||
source = valueParameter.toFirSourceElement()
|
||||
session = baseSession
|
||||
origin = FirDeclarationOrigin.Source
|
||||
returnTypeRef = buildImplicitTypeRef {
|
||||
returnTypeRef = valueParameter.typeReference?.convertSafe() ?: buildImplicitTypeRef {
|
||||
source = multiDeclaration.toFirSourceElement(FirFakeSourceElementKind.ImplicitTypeRef)
|
||||
}
|
||||
this.name = name
|
||||
@@ -1124,7 +1124,7 @@ class RawFirBuilder(
|
||||
) { toFirOrImplicitType() }
|
||||
multiParameter
|
||||
} else {
|
||||
val typeRef = buildImplicitTypeRef {
|
||||
val typeRef = valueParameter.typeReference?.convertSafe() ?: buildImplicitTypeRef {
|
||||
source = implicitTypeRefSource
|
||||
}
|
||||
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) {
|
||||
foo("") {
|
||||
<!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a, b): A<!>, c ->
|
||||
a <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
(a, b): A, c ->
|
||||
a checkType { _<Int>() }
|
||||
b checkType { _<String>() }
|
||||
c checkType { _<String>() }
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ fun bar(aList: List<A>) {
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
aList.foo { (a, b): B ->
|
||||
aList.<!INAPPLICABLE_CANDIDATE!>foo<!> { (a, b): B ->
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
}
|
||||
|
||||
Vendored
+7
-7
@@ -4,23 +4,23 @@
|
||||
data class A(val x: Int, val y: String)
|
||||
|
||||
fun bar() {
|
||||
val x = { <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>(a, b): A<!> ->
|
||||
a <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
|
||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
val x = { (a, b): A ->
|
||||
a checkType { _<Int>() }
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
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>() }
|
||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
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>() }
|
||||
b <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!INAPPLICABLE_CANDIDATE!>_<!><String>() }
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
y2 checkType { _<(A) -> Unit>() }
|
||||
|
||||
+3
-3
@@ -47,8 +47,8 @@ fun bar() {
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
foo { (a, b): B ->
|
||||
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Double>() }
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Short>() }
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!> { (a, b): B ->
|
||||
a checkType { _<Double>() }
|
||||
b checkType { _<Short>() }
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -56,8 +56,8 @@ fun bar() {
|
||||
b checkType { _<String>() }
|
||||
}
|
||||
|
||||
foo { (_, b): B ->
|
||||
<!INAPPLICABLE_CANDIDATE!>foo<!> { (_, b): B ->
|
||||
<!UNRESOLVED_REFERENCE!>_<!>.<!UNRESOLVED_REFERENCE!>hashCode<!>()
|
||||
b checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Short>() }
|
||||
b checkType { _<Short>() }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user