1313 * See the License for the specific language governing permissions and
1414 * limitations under the License.
1515 */
16+ @file:Suppress(" DEPRECATION_ERROR" )
1617package org.openrewrite.kotlin
1718
1819import org.jetbrains.kotlin.descriptors.ClassKind
1920import org.jetbrains.kotlin.descriptors.DescriptorVisibility
2021import org.jetbrains.kotlin.descriptors.Modality
2122import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
2223import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
23- import org.jetbrains.kotlin.ir.backend.js.utils.valueArguments
2424import org.jetbrains.kotlin.ir.declarations.*
25+ import org.jetbrains.kotlin.ir.declarations.IrParameterKind
2526import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
2627import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
2728import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionWithLateBindingImpl
@@ -95,7 +96,7 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
9596 return type(baseType.type)
9697 }
9798
98- is IrConst < * > -> {
99+ is IrConst -> {
99100 return primitive(baseType)
100101 }
101102
@@ -353,9 +354,10 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
353354 }
354355
355356 private fun methodDeclarationType (function : IrFunction , signature : String ): JavaType .Method {
357+ val regularParams = function.parameters.filter { it.kind == IrParameterKind .Regular }
356358 val paramNames: MutableList <String >? =
357- if (function.valueParameters. isEmpty()) null else ArrayList (function.valueParameters .size)
358- for (param: IrValueParameter in function.valueParameters ) {
359+ if (regularParams. isEmpty()) null else ArrayList (regularParams .size)
360+ for (param: IrValueParameter in regularParams ) {
359361 paramNames!! .add(param.name.asString())
360362 }
361363 val method = JavaType .Method (
@@ -390,14 +392,15 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
390392 declaringType = declaringType.type
391393 }
392394 val returnType = type(function.returnType)
395+ val extReceiver = function.parameters.firstOrNull { it.kind == IrParameterKind .ExtensionReceiver }
393396 val paramTypes: MutableList <JavaType >? =
394- if (function.valueParameters. isNotEmpty() || function.extensionReceiverParameter != null )
395- ArrayList (function.valueParameters. size + (if (function.extensionReceiverParameter != null ) 1 else 0 ))
397+ if (regularParams. isNotEmpty() || extReceiver != null )
398+ ArrayList (regularParams. size + (if (extReceiver != null ) 1 else 0 ))
396399 else null
397- if (function.extensionReceiverParameter != null ) {
398- paramTypes!! .add(type(function.extensionReceiverParameter !! .type))
400+ if (extReceiver != null ) {
401+ paramTypes!! .add(type(extReceiver .type))
399402 }
400- for (param: IrValueParameter in function.valueParameters ) {
403+ for (param: IrValueParameter in regularParams ) {
401404 paramTypes!! .add(type(param.type))
402405 }
403406 method.unsafeSet(
@@ -425,9 +428,10 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
425428 }
426429
427430 fun methodInvocationType (type : IrCall , signature : String ): JavaType .Method {
428- val paramNames: MutableList <String > = ArrayList (type.valueArguments.size)
431+ val ownerRegularParams = type.symbol.owner.parameters.filter { it.kind == IrParameterKind .Regular }
432+ val paramNames: MutableList <String > = ArrayList (ownerRegularParams.size)
429433
430- for (v in type.symbol.owner.valueParameters ) {
434+ for (v in ownerRegularParams ) {
431435 paramNames.add(v.name.asString())
432436 }
433437 val method = JavaType .Method (
@@ -449,15 +453,16 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
449453 declaringType = declaringType.type
450454 }
451455 val returnType = type(type.symbol.owner.returnType)
456+ val ownerParams = type.symbol.owner.parameters
457+ val extReceiverParam = ownerParams.firstOrNull { it.kind == IrParameterKind .ExtensionReceiver }
458+ val nonDispatchParams = ownerParams.filter { it.kind != IrParameterKind .DispatchReceiver }
452459 val paramTypes: MutableList <JavaType >? =
453- if (type.valueArguments.isNotEmpty() || type.extensionReceiver != null ) ArrayList (type.valueArguments.size + (if (type.extensionReceiver != null ) 1 else 0 ))
454- else null
455- if (type.extensionReceiver != null ) {
456- paramTypes!! .add(type(type.extensionReceiver!! .type))
457- }
458- for (param: IrExpression ? in type.valueArguments) {
459- if (param != null ) {
460- paramTypes!! .add(type(param.type))
460+ if (nonDispatchParams.isNotEmpty()) ArrayList (nonDispatchParams.size) else null
461+ for ((index, param) in ownerParams.withIndex()) {
462+ if (param.kind == IrParameterKind .DispatchReceiver ) continue
463+ val arg = type.arguments.getOrNull(index)
464+ if (arg != null ) {
465+ paramTypes!! .add(type(arg.type))
461466 }
462467 }
463468 method.unsafeSet(
@@ -469,9 +474,10 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
469474 }
470475
471476 fun methodInvocationType (type : IrConstructorCall , signature : String ): JavaType .Method {
472- val paramNames: MutableList <String > = ArrayList (type.valueArguments.size)
477+ val ownerRegularParams = type.symbol.owner.parameters.filter { it.kind == IrParameterKind .Regular }
478+ val paramNames: MutableList <String > = ArrayList (ownerRegularParams.size)
473479
474- for (v in type.symbol.owner.valueParameters ) {
480+ for (v in ownerRegularParams ) {
475481 paramNames.add(v.name.asString())
476482 }
477483 val method = JavaType .Method (
@@ -493,15 +499,15 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
493499 declaringType = declaringType.type
494500 }
495501 val returnType = declaringType
502+ val ownerParams = type.symbol.owner.parameters
503+ val nonDispatchParams = ownerParams.filter { it.kind != IrParameterKind .DispatchReceiver }
496504 val paramTypes: MutableList <JavaType >? =
497- if (type.valueArguments.isNotEmpty() || type.extensionReceiver != null ) ArrayList (type.valueArguments.size + (if (type.extensionReceiver != null ) 1 else 0 ))
498- else null
499- if (type.extensionReceiver != null ) {
500- paramTypes!! .add(type(type.extensionReceiver!! .type))
501- }
502- for (param: IrExpression ? in type.valueArguments) {
503- if (param != null ) {
504- paramTypes!! .add(type(param.type))
505+ if (nonDispatchParams.isNotEmpty()) ArrayList (nonDispatchParams.size) else null
506+ for ((index, param) in ownerParams.withIndex()) {
507+ if (param.kind == IrParameterKind .DispatchReceiver ) continue
508+ val arg = type.arguments.getOrNull(index)
509+ if (arg != null ) {
510+ paramTypes!! .add(type(arg.type))
505511 }
506512 }
507513 method.unsafeSet(
@@ -536,18 +542,20 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
536542
537543 fun primitive (type : Any? ): JavaType .Primitive {
538544 return when (type) {
539- is IrConst <* > -> {
540- when (type.kind) {
541- IrConstKind .Int -> JavaType .Primitive .Int
542- IrConstKind .Boolean -> JavaType .Primitive .Boolean
543- IrConstKind .Byte -> JavaType .Primitive .Byte
544- IrConstKind .Char -> JavaType .Primitive .Char
545- IrConstKind .Double -> JavaType .Primitive .Double
546- IrConstKind .Float -> JavaType .Primitive .Float
547- IrConstKind .Long -> JavaType .Primitive .Long
548- IrConstKind .Null -> JavaType .Primitive .Null
549- IrConstKind .Short -> JavaType .Primitive .Short
550- IrConstKind .String -> JavaType .Primitive .String
545+ is IrConst -> {
546+ val irType = type.type
547+ when {
548+ irType.isInt() -> JavaType .Primitive .Int
549+ irType.isBoolean() -> JavaType .Primitive .Boolean
550+ irType.isByte() -> JavaType .Primitive .Byte
551+ irType.isChar() -> JavaType .Primitive .Char
552+ irType.isDouble() -> JavaType .Primitive .Double
553+ irType.isFloat() -> JavaType .Primitive .Float
554+ irType.isLong() -> JavaType .Primitive .Long
555+ irType.isShort() -> JavaType .Primitive .Short
556+ irType.isString() -> JavaType .Primitive .String
557+ type.value == null -> JavaType .Primitive .Null
558+ else -> JavaType .Primitive .None
551559 }
552560 }
553561 else -> {
@@ -723,7 +731,8 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
723731 private fun isSourceRetention (annotation : IrConstructorCall ): Boolean {
724732 val sig = signatureBuilder.classSignature(annotation.type)
725733 if (sig == " kotlin.annotation.Retention" || sig == " java.lang.annotation" ) {
726- for (args in annotation.valueArguments) {
734+ for (arg in annotation.arguments) {
735+ val args = arg
727736 if (args is IrDeclarationReference && args.symbol.owner is IrDeclarationWithName ) {
728737 return (args.symbol.owner as IrDeclarationWithName ).name.asString() == " SOURCE"
729738 }
0 commit comments