diff --git a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt index 35c9b25949aa..39057b4cfb44 100644 --- a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt +++ b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/ArrayInitializerConversion.kt @@ -62,10 +62,7 @@ class ArrayInitializerConversion(context: NewJ2kConverterContext) : RecursiveApp symbolProvider.provideClassSymbol("kotlin.Array"), JKArgumentList( dimensions[0], - JKLambdaExpression( - JKExpressionStatement(buildArrayInitializer(dimensions.subList(1, dimensions.size), type)), - emptyList() - ) + JKLambdaExpression(JKExpressionStatement(buildArrayInitializer(dimensions.subList(1, dimensions.size), type))) ), JKTypeArgumentList(arrayType) ) diff --git a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt index 3f2530925115..270cc2df64bb 100644 --- a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt +++ b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/BuiltinMembersConversion.kt @@ -256,37 +256,23 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr ) private val primitiveConversions: List = listOf( - Method("java.lang.Boolean.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Byte.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Short.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Integer.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Long.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Float.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Double.valueOf") convertTo valueOfReplacement() - withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Boolean.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Byte.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Short.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Integer.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Long.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Float.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Double.valueOf") convertTo valueOfReplacement() withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Boolean.parseBoolean") convertTo ExtensionMethod("kotlin.text.toBoolean") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Byte.parseByte") convertTo ExtensionMethod("kotlin.text.toByte") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Short.parseShort") convertTo ExtensionMethod("kotlin.text.toShort") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Integer.parseInt") convertTo ExtensionMethod("kotlin.text.toInt") - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.Boolean.parseBoolean") convertTo ExtensionMethod("kotlin.text.toBoolean") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Byte.parseByte") convertTo ExtensionMethod("kotlin.text.toByte") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Short.parseShort") convertTo ExtensionMethod("kotlin.text.toShort") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Integer.parseInt") convertTo ExtensionMethod("kotlin.text.toInt") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter { it.size <= 2 }, - Method("java.lang.Long.parseLong") convertTo ExtensionMethod("kotlin.text.toLong") - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.Long.parseLong") convertTo ExtensionMethod("kotlin.text.toLong") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter { it.size <= 2 }, - Method("java.lang.Float.parseFloat") convertTo ExtensionMethod("kotlin.text.toFloat") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Double.parseDouble") convertTo ExtensionMethod("kotlin.text.toDouble") - withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Float.parseFloat") convertTo ExtensionMethod("kotlin.text.toFloat") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.lang.Double.parseDouble") convertTo ExtensionMethod("kotlin.text.toDouble") withReplaceType REPLACE_WITH_QUALIFIER, Method("java.lang.Number.byteValue") convertTo Method("kotlin.Number.toByte"), Method("java.lang.Number.doubleValue") convertTo Method("kotlin.Number.toDouble"), @@ -295,51 +281,30 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr Method("java.lang.Number.longValue") convertTo Method("kotlin.Number.toLong"), Method("java.lang.Number.shortValue") convertTo Method("kotlin.Number.toShort"), - Field("java.lang.Byte.MIN_VALUE") convertTo Field("kotlin.Byte.Companion.MIN_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Byte.MAX_VALUE") convertTo Field("kotlin.Byte.Companion.MAX_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Short.MIN_VALUE") convertTo Field("kotlin.Short.Companion.MIN_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Short.MAX_VALUE") convertTo Field("kotlin.Short.Companion.MAX_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Integer.MIN_VALUE") convertTo Field("kotlin.Int.Companion.MIN_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Integer.MAX_VALUE") convertTo Field("kotlin.Int.Companion.MAX_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Long.MIN_VALUE") convertTo Field("kotlin.Long.Companion.MIN_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Long.MAX_VALUE") convertTo Field("kotlin.Long.Companion.MAX_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Float.MIN_VALUE") convertTo Field("kotlin.Float.Companion.MIN_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Float.MAX_VALUE") convertTo Field("kotlin.Float.Companion.MAX_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Float.POSITIVE_INFINITY") convertTo Field("kotlin.Float.Companion.POSITIVE_INFINITY") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Float.NEGATIVE_INFINITY") convertTo Field("kotlin.Float.Companion.NEGATIVE_INFINITY") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Float.NaN") convertTo Field("kotlin.Float.Companion.NaN") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Double.MIN_VALUE") convertTo Field("kotlin.Double.Companion.MIN_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Double.MAX_VALUE") convertTo Field("kotlin.Double.Companion.MAX_VALUE") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Double.POSITIVE_INFINITY") convertTo Field("kotlin.Double.Companion.POSITIVE_INFINITY") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Double.NEGATIVE_INFINITY") convertTo Field("kotlin.Double.Companion.NEGATIVE_INFINITY") - withReplaceType REPLACE_WITH_QUALIFIER, - Field("java.lang.Double.NaN") convertTo Field("kotlin.Double.Companion.NaN") - withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Byte.MIN_VALUE") convertTo Field("kotlin.Byte.Companion.MIN_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Byte.MAX_VALUE") convertTo Field("kotlin.Byte.Companion.MAX_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Short.MIN_VALUE") convertTo Field("kotlin.Short.Companion.MIN_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Short.MAX_VALUE") convertTo Field("kotlin.Short.Companion.MAX_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Integer.MIN_VALUE") convertTo Field("kotlin.Int.Companion.MIN_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Integer.MAX_VALUE") convertTo Field("kotlin.Int.Companion.MAX_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Long.MIN_VALUE") convertTo Field("kotlin.Long.Companion.MIN_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Long.MAX_VALUE") convertTo Field("kotlin.Long.Companion.MAX_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Float.MIN_VALUE") convertTo Field("kotlin.Float.Companion.MIN_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Float.MAX_VALUE") convertTo Field("kotlin.Float.Companion.MAX_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Float.POSITIVE_INFINITY") convertTo Field("kotlin.Float.Companion.POSITIVE_INFINITY") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Float.NEGATIVE_INFINITY") convertTo Field("kotlin.Float.Companion.NEGATIVE_INFINITY") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Float.NaN") convertTo Field("kotlin.Float.Companion.NaN") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Double.MIN_VALUE") convertTo Field("kotlin.Double.Companion.MIN_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Double.MAX_VALUE") convertTo Field("kotlin.Double.Companion.MAX_VALUE") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Double.POSITIVE_INFINITY") convertTo Field("kotlin.Double.Companion.POSITIVE_INFINITY") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Double.NEGATIVE_INFINITY") convertTo Field("kotlin.Double.Companion.NEGATIVE_INFINITY") withReplaceType REPLACE_WITH_QUALIFIER, + Field("java.lang.Double.NaN") convertTo Field("kotlin.Double.Companion.NaN") withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Character.toUpperCase") convertTo ExtensionMethod("kotlin.text.uppercaseChar") - sinceKotlin ApiVersion.KOTLIN_1_5 + Method("java.lang.Character.toUpperCase") convertTo ExtensionMethod("kotlin.text.uppercaseChar") sinceKotlin ApiVersion.KOTLIN_1_5 withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Character.toLowerCase") convertTo ExtensionMethod("kotlin.text.lowercaseChar") - sinceKotlin ApiVersion.KOTLIN_1_5 + Method("java.lang.Character.toLowerCase") convertTo ExtensionMethod("kotlin.text.lowercaseChar") sinceKotlin ApiVersion.KOTLIN_1_5 withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.lang.Character.toTitleCase") convertTo ExtensionMethod("kotlin.text.titlecaseChar") - sinceKotlin ApiVersion.KOTLIN_1_5 + Method("java.lang.Character.toTitleCase") convertTo ExtensionMethod("kotlin.text.titlecaseChar") sinceKotlin ApiVersion.KOTLIN_1_5 withReplaceType REPLACE_WITH_QUALIFIER, Method("java.lang.Character.digit") convertTo CustomExpression { expression -> @@ -367,17 +332,11 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr private val objectConversions: List = listOf( Method("java.lang.Object.getClass") convertTo Field("kotlin.jvm.javaClass"), - Method("java.lang.Object.notify") - convertTo castReceiverToJavaLangObject() - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.Object.notify") convertTo castReceiverToJavaLangObject() withReplaceType REPLACE_WITH_QUALIFIER withFilter ::filterReceiverCastToJavaLangObject, - Method("java.lang.Object.notifyAll") - convertTo castReceiverToJavaLangObject() - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.Object.notifyAll") convertTo castReceiverToJavaLangObject() withReplaceType REPLACE_WITH_QUALIFIER withFilter ::filterReceiverCastToJavaLangObject, - Method("java.lang.Object.wait") - convertTo castReceiverToJavaLangObject() - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.Object.wait") convertTo castReceiverToJavaLangObject() withReplaceType REPLACE_WITH_QUALIFIER withFilter ::filterReceiverCastToJavaLangObject, ) @@ -388,12 +347,8 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr Method("java.util.Map.values") convertTo Field("kotlin.collections.Map.values"), Method("java.util.Collection.size") convertTo Field("kotlin.collections.Collection.size"), Method("java.util.Collection.remove") convertTo Method("kotlin.collections.MutableCollection.remove"), - Method("java.util.Collection.toArray") - convertTo Method("kotlin.collections.toTypedArray") - withByArgumentsFilter { it.isEmpty() }, - Method("java.util.Collection.toArray") - convertTo Method("kotlin.collections.toTypedArray") - withByArgumentsFilter { + Method("java.util.Collection.toArray") convertTo Method("kotlin.collections.toTypedArray") withByArgumentsFilter { it.isEmpty() }, + Method("java.util.Collection.toArray") convertTo Method("kotlin.collections.toTypedArray") withByArgumentsFilter { it.singleOrNull()?.let { parameter -> parameter.safeAs()?.identifier?.fqName == "kotlin.arrayOfNulls" } == true @@ -403,29 +358,13 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr Method("java.util.Map.Entry.getKey") convertTo Field("kotlin.collections.Map.Entry.key"), Method("java.util.Map.Entry.getValue") convertTo Field("kotlin.collections.Map.Entry.value"), - Method("java.util.Set.of") - convertTo Method("kotlin.collections.setOf") - withByArgumentsFilter ::setOfFilter - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.util.List.of") - convertTo Method("kotlin.collections.listOf") - withByArgumentsFilter ::listOfFilter - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.util.Collections.singletonList") - convertTo Method("kotlin.collections.listOf") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.util.Collections.singleton") - convertTo Method("kotlin.collections.setOf") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.util.Collections.emptyList") - convertTo Method("kotlin.collections.emptyList") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.util.Collections.emptySet") - convertTo Method("kotlin.collections.emptySet") - withReplaceType REPLACE_WITH_QUALIFIER, - Method("java.util.Collections.emptyMap") - convertTo Method("kotlin.collections.emptyMap") - withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.util.Set.of") convertTo Method("kotlin.collections.setOf") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter ::setOfFilter, + Method("java.util.List.of") convertTo Method("kotlin.collections.listOf") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter ::listOfFilter, + Method("java.util.Collections.singletonList") convertTo Method("kotlin.collections.listOf") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.util.Collections.singleton") convertTo Method("kotlin.collections.setOf") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.util.Collections.emptyList") convertTo Method("kotlin.collections.emptyList") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.util.Collections.emptySet") convertTo Method("kotlin.collections.emptySet") withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.util.Collections.emptyMap") convertTo Method("kotlin.collections.emptyMap") withReplaceType REPLACE_WITH_QUALIFIER, ) private val enumConversions: List = listOf( @@ -467,14 +406,10 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr JKArgumentList(call) }, Method("java.lang.String.getBytes") convertTo Method("kotlin.text.toByteArray"), - Method("java.lang.String.valueOf") - convertTo ExtensionMethod("kotlin.Any.toString") - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.String.valueOf") convertTo ExtensionMethod("kotlin.Any.toString") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter { it.isNotEmpty() && it.first().calculateType(typeFactory)?.isArrayType() == false }, - Method("java.lang.String.getChars") - convertTo Method("kotlin.text.toCharArray") - withByArgumentsFilter { it.size == 4 } + Method("java.lang.String.getChars") convertTo Method("kotlin.text.toCharArray") withByArgumentsFilter { it.size == 4 } withArgumentsProvider { argumentList -> val srcBeginArgument = argumentList.arguments[0]::value.detached() val srcEndArgument = argumentList.arguments[1]::value.detached() @@ -482,28 +417,13 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr val dstBeginArgument = argumentList.arguments[3]::value.detached() JKArgumentList(dstArgument, dstBeginArgument, srcBeginArgument, srcEndArgument) }, - - Method("java.lang.String.valueOf") - convertTo Method("kotlin.String") - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.String.valueOf") convertTo Method("kotlin.String") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter { it.isNotEmpty() && it.first().calculateType(typeFactory)?.isArrayType() == true }, - - Method("java.lang.String.copyValueOf") - convertTo Method("kotlin.String") - withReplaceType REPLACE_WITH_QUALIFIER + Method("java.lang.String.copyValueOf") convertTo Method("kotlin.String") withReplaceType REPLACE_WITH_QUALIFIER withByArgumentsFilter { it.isNotEmpty() && it.first().calculateType(typeFactory)?.isArrayType() == true }, - - Method("java.lang.String.replaceAll") - convertTo Method("kotlin.text.replace") - withArgumentsProvider ::convertFirstArgumentToRegex, - - Method("java.lang.String.replaceFirst") - convertTo Method("kotlin.text.replaceFirst") - withArgumentsProvider ::convertFirstArgumentToRegex, - - Method("java.lang.String.equalsIgnoreCase") - convertTo Method("kotlin.text.equals") - withArgumentsProvider { arguments -> + Method("java.lang.String.replaceAll") convertTo Method("kotlin.text.replace") withArgumentsProvider ::convertFirstArgumentToRegex, + Method("java.lang.String.replaceFirst") convertTo Method("kotlin.text.replaceFirst") withArgumentsProvider ::convertFirstArgumentToRegex, + Method("java.lang.String.equalsIgnoreCase") convertTo Method("kotlin.text.equals") withArgumentsProvider { arguments -> JKArgumentList( arguments::arguments.detached() + JKNamedArgument( JKLiteralExpression("true", JKLiteralExpression.LiteralType.BOOLEAN), @@ -512,16 +432,11 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr ) }, - Method("java.lang.String.toUpperCase") convertTo Method("kotlin.text.uppercase") - sinceKotlin ApiVersion.KOTLIN_1_5 - withArgumentsProvider (::stringConversionArgumentsProvider), - Method("java.lang.String.toLowerCase") convertTo Method("kotlin.text.lowercase") - sinceKotlin ApiVersion.KOTLIN_1_5 - withArgumentsProvider (::stringConversionArgumentsProvider), - - Method("java.lang.String.compareToIgnoreCase") - convertTo Method("kotlin.text.compareTo") - withArgumentsProvider { arguments -> + Method("java.lang.String.toUpperCase") convertTo Method("kotlin.text.uppercase") sinceKotlin ApiVersion.KOTLIN_1_5 + withArgumentsProvider ::stringConversionArgumentsProvider, + Method("java.lang.String.toLowerCase") convertTo Method("kotlin.text.lowercase") sinceKotlin ApiVersion.KOTLIN_1_5 + withArgumentsProvider ::stringConversionArgumentsProvider, + Method("java.lang.String.compareToIgnoreCase") convertTo Method("kotlin.text.compareTo") withArgumentsProvider { arguments -> JKArgumentList( arguments::arguments.detached() + JKNamedArgument( JKLiteralExpression("true", JKLiteralExpression.LiteralType.BOOLEAN), @@ -529,13 +444,8 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr ) ) }, - Method("java.lang.String.matches") - convertTo Method("kotlin.text.matches") - withArgumentsProvider ::convertFirstArgumentToRegex, - - Method("java.lang.String.regionMatches") - convertTo Method("kotlin.text.regionMatches") - withByArgumentsFilter { it.size == 5 } + Method("java.lang.String.matches") convertTo Method("kotlin.text.matches") withArgumentsProvider ::convertFirstArgumentToRegex, + Method("java.lang.String.regionMatches") convertTo Method("kotlin.text.regionMatches") withByArgumentsFilter { it.size == 5 } withArgumentsProvider { arguments -> val detachedArguments = arguments::arguments.detached() JKArgumentList( @@ -565,19 +475,14 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr // Otherwise, `JKSymbolProvider` might choose a `split` overload with different parameters // and `ImplicitCastsConversion` downstream will try to insert a nonsensical cast // of the `limit` argument to Boolean. - Method("java.lang.String.split") - convertTo Method("kotlin.text.split", listOf("kotlin.text.Regex", "kotlin.Int")) - andAfter { expression -> - val arguments = - expression.cast() - .selector.cast() - .arguments - - val patternArgument = - arguments.arguments.first()::value.detached().callOn( - symbolProvider.provideMethodSymbol("kotlin.text.toRegex") - ) - + Method("java.lang.String.split") convertTo Method( + "kotlin.text.split", + listOf("kotlin.text.Regex", "kotlin.Int") + ) andAfter { expression -> + val arguments = expression.cast().selector.cast().arguments + val patternArgument = arguments.arguments.first()::value.detached().callOn( + symbolProvider.provideMethodSymbol("kotlin.text.toRegex") + ) val limit: Int? = if (arguments.arguments.size == 2) { arguments.arguments.last().value.asLiteralTextWithPrefix()?.toIntOrNull() } else { @@ -612,44 +517,32 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr return@andAfter if (limit == 0) { // zero or absent limit: discard trailing empty strings to match Java behavior - expression - .callOn( - symbolProvider.provideMethodSymbol("kotlin.collections.dropLastWhile"), - listOf( - JKLambdaExpression( - JKKtItExpression(typeFactory.types.string).callOn( - symbolProvider.provideMethodSymbol("kotlin.text.isEmpty") - ).asStatement(), - emptyList() - ) + expression.callOn( + symbolProvider.provideMethodSymbol("kotlin.collections.dropLastWhile"), + listOf( + JKLambdaExpression( + JKKtItExpression(typeFactory.types.string).callOn( + symbolProvider.provideMethodSymbol("kotlin.text.isEmpty") + ).asStatement() ) ) + ) } else { expression }.castToTypedArray() }, - Method("java.lang.String.trim") - convertTo Method("kotlin.text.trim") - withArgumentsProvider { + Method("java.lang.String.trim") convertTo Method("kotlin.text.trim") withArgumentsProvider { JKArgumentList( JKLambdaExpression( JKExpressionStatement( JKBinaryExpression( - JKFieldAccessExpression( - JKUnresolvedField( //TODO replace with `it` parameter - "it", - typeFactory - ) - ), + //TODO replace with `it` parameter + JKFieldAccessExpression(JKUnresolvedField("it", typeFactory)), JKLiteralExpression("' '", JKLiteralExpression.LiteralType.CHAR), - JKKtOperatorImpl( - JKOperatorToken.LTEQ, - typeFactory.types.boolean - ) + JKKtOperatorImpl(JKOperatorToken.LTEQ, typeFactory.types.boolean) ) - ), - emptyList() + ) ) ) }, @@ -716,61 +609,29 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr ) private val arrayConversions: List = listOf( - Method("java.util.Arrays.copyOf") - convertTo ExtensionMethod("kotlin.collections.copyOf") - withByArgumentsFilter { it.size == 2 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.copyOfRange") - convertTo ExtensionMethod("kotlin.collections.copyOfRange") - withByArgumentsFilter { it.size == 3 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.equals") - convertTo ExtensionMethod("kotlin.collections.contentEquals") - withByArgumentsFilter { it.size == 2 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.deepEquals") - convertTo ExtensionMethod("kotlin.collections.contentDeepEquals") - withByArgumentsFilter { it.size == 2 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.hashCode") - convertTo ExtensionMethod("kotlin.collections.contentHashCode") - withByArgumentsFilter { it.size == 1 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.deepHashCode") - convertTo ExtensionMethod("kotlin.collections.contentDeepHashCode") - withByArgumentsFilter { it.size == 1 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.toString") - convertTo ExtensionMethod("kotlin.collections.contentToString") - withByArgumentsFilter { it.size == 1 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.deepToString") - convertTo ExtensionMethod("kotlin.collections.contentDeepToString") - withByArgumentsFilter { it.size == 1 } - withReplaceType REPLACE_WITH_QUALIFIER, - - Method("java.util.Arrays.asList") - convertTo Method("kotlin.collections.mutableListOf") - withByArgumentsFilter ::asListFilter - withReplaceType REPLACE_WITH_QUALIFIER, + Method("java.util.Arrays.copyOf") convertTo ExtensionMethod("kotlin.collections.copyOf") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 2 }, + Method("java.util.Arrays.copyOfRange") convertTo ExtensionMethod("kotlin.collections.copyOfRange") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 3 }, + Method("java.util.Arrays.equals") convertTo ExtensionMethod("kotlin.collections.contentEquals") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 2 }, + Method("java.util.Arrays.deepEquals") convertTo ExtensionMethod("kotlin.collections.contentDeepEquals") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 2 }, + Method("java.util.Arrays.hashCode") convertTo ExtensionMethod("kotlin.collections.contentHashCode") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 1 }, + Method("java.util.Arrays.deepHashCode") convertTo ExtensionMethod("kotlin.collections.contentDeepHashCode") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 1 }, + Method("java.util.Arrays.toString") convertTo ExtensionMethod("kotlin.collections.contentToString") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 1 }, + Method("java.util.Arrays.deepToString") convertTo ExtensionMethod("kotlin.collections.contentDeepToString") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter { it.size == 1 }, + Method("java.util.Arrays.asList") convertTo Method("kotlin.collections.mutableListOf") withReplaceType REPLACE_WITH_QUALIFIER + withByArgumentsFilter ::asListFilter, ) private val printlnConversions: List = listOf( - Method("java.io.PrintStream.println") - convertTo Method("kotlin.io.println") - withReplaceType REPLACE_WITH_QUALIFIER - withFilter ::isSystemOutCall, - Method("java.io.PrintStream.print") - convertTo Method("kotlin.io.print") - withReplaceType REPLACE_WITH_QUALIFIER - withFilter ::isSystemOutCall + Method("java.io.PrintStream.println") convertTo Method("kotlin.io.println") withReplaceType REPLACE_WITH_QUALIFIER withFilter ::isSystemOutCall, + Method("java.io.PrintStream.print") convertTo Method("kotlin.io.print") withReplaceType REPLACE_WITH_QUALIFIER withFilter ::isSystemOutCall ) private val mathConversions: List = listOf( @@ -876,11 +737,7 @@ private class ConversionsHolder(private val symbolProvider: JKSymbolProvider, pr private fun JKExpression.callOn(symbol: JKMethodSymbol, arguments: List = emptyList()) = JKQualifiedExpression( this.parenthesizeIfCompoundExpression(), - JKCallExpressionImpl( - symbol, - JKArgumentList(arguments), - JKTypeArgumentList() - ) + JKCallExpressionImpl(symbol, JKArgumentList(arguments), JKTypeArgumentList()) ) private fun isSystemOutCall(expression: JKExpression): Boolean = diff --git a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/JavaStatementConversion.kt b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/JavaStatementConversion.kt index 0399e1fe43d0..0c5e8fbefe6e 100644 --- a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/JavaStatementConversion.kt +++ b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/JavaStatementConversion.kt @@ -28,13 +28,13 @@ class JavaStatementConversion(context: NewJ2kConverterContext) : RecursiveApplic private fun convertAssert(element: JKJavaAssertStatement): JKExpressionStatement { val messageExpression = if (element.description is JKStubExpression) null - else JKLambdaExpression(JKExpressionStatement(element::description.detached()), parameters = emptyList()) + else JKLambdaExpression(JKExpressionStatement(element::description.detached())) return JKExpressionStatement(kotlinAssert(element::condition.detached(), messageExpression, typeFactory)) } private fun convertSynchronized(element: JKJavaSynchronizedStatement): JKExpressionStatement { element.invalidate() - val lambdaBody = JKLambdaExpression(JKBlockStatement(element.body), parameters = emptyList()) + val lambdaBody = JKLambdaExpression(JKBlockStatement(element.body)) return JKExpressionStatement( JKCallExpressionImpl( symbolProvider.provideMethodSymbol("kotlin.synchronized"), diff --git a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/expressions.kt b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/expressions.kt index faf9099bdcf3..dd032dcf148b 100644 --- a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/expressions.kt +++ b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/expressions.kt @@ -104,16 +104,8 @@ fun useExpression( ): JKExpression { val useSymbol = symbolProvider.provideMethodSymbol("kotlin.io.use") val lambdaParameter = if (variableIdentifier != null) JKParameter(JKTypeElement(JKNoType), variableIdentifier) else null - - val lambda = JKLambdaExpression( - body, - listOfNotNull(lambdaParameter) - ) - val methodCall = - JKCallExpressionImpl( - useSymbol, - listOf(lambda).toArgumentList() - ) + val lambda = JKLambdaExpression(body, listOfNotNull(lambdaParameter)) + val methodCall = JKCallExpressionImpl(useSymbol, listOf(lambda).toArgumentList()) return JKQualifiedExpression(receiver, methodCall) } @@ -239,14 +231,8 @@ fun JKClass.getOrCreateCompanionObject(): JKClass = .also { classBody.declarations += it } fun runExpression(body: JKStatement, symbolProvider: JKSymbolProvider): JKExpression { - val lambda = JKLambdaExpression( - body, - emptyList() - ) - return JKCallExpressionImpl( - symbolProvider.provideMethodSymbol("kotlin.run"), - JKArgumentList(lambda) - ) + val lambda = JKLambdaExpression(body) + return JKCallExpressionImpl(symbolProvider.provideMethodSymbol("kotlin.run"), JKArgumentList(lambda)) } fun assignmentStatement(target: JKVariable, expression: JKExpression, symbolProvider: JKSymbolProvider): JKKtAssignmentStatement = diff --git a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/tree/expressions.kt b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/tree/expressions.kt index 6e1171bc5a70..1856df40ce9b 100644 --- a/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/tree/expressions.kt +++ b/plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/tree/expressions.kt @@ -155,7 +155,7 @@ class JKIfElseExpression( class JKLambdaExpression( statement: JKStatement, - parameters: List, + parameters: List = emptyList(), functionalType: JKTypeElement = JKTypeElement(JKNoType), returnType: JKTypeElement = JKTypeElement(JKContextType), override val expressionType: JKType? = null,