diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt index b78b01000c7..e6f16e09bae 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaMethodToKotlinFunctionConversion.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.j2k.conversions import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.throwAnnotation import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.JKKtFunctionImpl @@ -35,9 +36,11 @@ class JavaMethodToKotlinFunctionConversion(private val context: ConversionContex declaration.invalidate() JKKtFunctionImpl( - JKTypeElementImpl( - declaration.returnType.type.updateNullability(declaration.returnTypeNullability(context)) - ), + if (declaration.returnType.type.nullability != Nullability.NotNull) + JKTypeElementImpl( + declaration.returnType.type + .updateNullability(declaration.returnTypeNullability(context)) + ) else declaration.returnType, declaration.name, declaration.parameters, declaration.block, diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaStandartMethodsConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaStandartMethodsConversion.kt new file mode 100644 index 00000000000..ac1b7c934f8 --- /dev/null +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/JavaStandartMethodsConversion.kt @@ -0,0 +1,31 @@ +/* + * 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.ast.Nullability +import org.jetbrains.kotlin.j2k.tree.* +import org.jetbrains.kotlin.j2k.tree.impl.JKJavaMethodImpl +import org.jetbrains.kotlin.j2k.tree.impl.JKTypeElementImpl + +class JavaStandartMethodsConversion : RecursiveApplicableConversionBase() { + override fun applyToElement(element: JKTreeElement): JKTreeElement { + if (element !is JKJavaMethodImpl) return recurse(element) + if (fixToStringMethod(element)) { + return recurse(element) + } + return recurse(element) + } + + private fun fixToStringMethod(method: JKJavaMethodImpl): Boolean { + if (method.name.value != "toString") return false + if (method.parameters.isNotEmpty()) return false + val type = (method.returnType.type as? JKClassType) + ?.takeIf { it.classReference.name == "String" } + ?.updateNullability(Nullability.NotNull) ?: return false + method.returnType = JKTypeElementImpl(type) + return true + } +} \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 1577c62b10d..acbd5354580 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -88,7 +88,7 @@ interface JKMethod : JKDeclaration, JKVisibilityOwner, JKModalityOwner, JKExtraM JKAnnotationListOwner { val name: JKNameIdentifier var parameters: List - val returnType: JKTypeElement + var returnType: JKTypeElement var block: JKBlock }