diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index 1bd751efb85..f8d29470b95 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -54,6 +54,7 @@ object ConversionsRunner { +InstanceOfConversion() +ForConversion(context) +ForInConversion() + +ArrayOperationsConversion(context) +TypeMappingConversion(context) //Kotlin --> Kotlin conversions diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayOperationsConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayOperationsConversion.kt new file mode 100644 index 00000000000..d7b2b54fb17 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ArrayOperationsConversion.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.j2k.conversions + +import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.tree.* +import org.jetbrains.kotlin.j2k.tree.impl.JKExpressionStatementImpl +import org.jetbrains.kotlin.j2k.tree.impl.JKFieldAccessExpressionImpl +import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol +import org.jetbrains.kotlin.j2k.tree.impl.JKKtThrowExpressionImpl + + +class ArrayOperationsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element !is JKQualifiedExpression) return recurse(element) + val selector = element.selector as? JKFieldAccessExpression ?: return recurse(element) + if (element.receiver.type(context) !is JKJavaArrayType) return recurse(element) + if (selector.identifier.name == "length") { + val sizeCall = + JKFieldAccessExpressionImpl( + context.symbolProvider.provideByFqName("kotlin/Array.size") + ) + element.selector = sizeCall + } + return recurse(element) + } +} \ No newline at end of file