FIR: extend arrayOf call transformation to other variants
This commit is contained in:
committed by
Mikhail Glukhikh
parent
7ec8716d65
commit
4a511c7721
+16
-4
@@ -23,11 +23,8 @@ internal class FirArrayOfCallTransformer {
|
||||
get() {
|
||||
val function: FirCallableDeclaration<*> = getOriginalFunction() ?: return false
|
||||
return function is FirSimpleFunction &&
|
||||
// TODO: extend it to other variants, like emptyArray, intArrayOf, floatArrayOf, etc.
|
||||
function.name.asString() == "arrayOf" &&
|
||||
function.returnTypeRef.isArrayType &&
|
||||
function.valueParameters.size == 1 && function.valueParameters[0].isVararg &&
|
||||
arguments.size == 1 &&
|
||||
isArrayOf(function, arguments) &&
|
||||
function.receiverTypeRef == null
|
||||
}
|
||||
|
||||
@@ -51,4 +48,19 @@ internal class FirArrayOfCallTransformer {
|
||||
replaceTypeRef(typeRef)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val arrayOfNames = hashSetOf("kotlin/arrayOf") +
|
||||
hashSetOf(
|
||||
"boolean", "byte", "char", "double", "float", "int", "long", "short",
|
||||
"ubyte", "uint", "ulong", "ushort"
|
||||
).map { "kotlin/" + it + "ArrayOf" }
|
||||
|
||||
private fun isArrayOf(function: FirSimpleFunction, arguments: List<FirExpression>): Boolean =
|
||||
when (function.symbol.callableId.toString()) {
|
||||
"kotlin/emptyArray" -> function.valueParameters.isEmpty() && arguments.isEmpty()
|
||||
in arrayOfNames -> function.valueParameters.size == 1 && function.valueParameters[0].isVararg && arguments.size == 1
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user