From d4077a1622f76a5bca71c110768aa589a0af200a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 5 Dec 2018 13:55:46 +0300 Subject: [PATCH] New J2K: Add boxed types support to PrimitiveTypesInitializersConversion --- .../PrimitiveTypesInitializersConversion.kt | 9 ++++++--- j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt | 12 ++++++++++++ j2k/testData/fileOrElement/class/anonymousClass.java | 2 +- j2k/testData/fileOrElement/class/anonymousClass.kt | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimitiveTypesInitializersConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimitiveTypesInitializersConversion.kt index 7e065165ea1..3e5c0ad9d83 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimitiveTypesInitializersConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimitiveTypesInitializersConversion.kt @@ -13,10 +13,13 @@ import org.jetbrains.kotlin.j2k.tree.impl.* class PrimitiveTypesInitializersConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { - if (element !is JKJavaField) return recurse(element) + if (element !is JKVariable) return recurse(element) val literalInitializer = element.initializer as? JKJavaLiteralExpression ?: return recurse(element) - val literalType = literalInitializer.type.toPrimitiveType() ?: return recurse(element) - val fieldType = element.type.type as? JKJavaPrimitiveType ?: return recurse(element) + val literalType = literalInitializer.type.toPrimitiveType() + ?: return recurse(element) + val fieldType = element.type.type as? JKJavaPrimitiveType + ?: (element.type.type as? JKClassType)?.toPrimitiveType() + ?: return recurse(element) createPrimitiveTypeInitializer(literalInitializer.copyTreeAndDetach(), literalType, fieldType)?.also { element.initializer = it diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt index 72d0f1566ee..d687453e176 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/types.kt @@ -189,6 +189,18 @@ fun JKJavaPrimitiveType.toLiteralType(): JKLiteralExpression.LiteralType? = else -> null } +fun JKClassType.toPrimitiveType(): JKJavaPrimitiveType? = + when (classReference.fqName) { + "java.lang.Character" -> JKJavaPrimitiveTypeImpl.CHAR + "java.lang.Boolean" -> JKJavaPrimitiveTypeImpl.BOOLEAN + "java.lang.Integer" -> JKJavaPrimitiveTypeImpl.INT + "java.lang.Long" -> JKJavaPrimitiveTypeImpl.LONG + "java.lang.Float" -> JKJavaPrimitiveTypeImpl.FLOAT + "java.lang.Double" -> JKJavaPrimitiveTypeImpl.DOUBLE + "java.lang.Byte" -> JKJavaPrimitiveTypeImpl.BYTE + else -> null + } + fun JKJavaPrimitiveType.isNumberType() = this == JKJavaPrimitiveTypeImpl.INT || this == JKJavaPrimitiveTypeImpl.LONG || diff --git a/j2k/testData/fileOrElement/class/anonymousClass.java b/j2k/testData/fileOrElement/class/anonymousClass.java index 12eec758f10..51a3aacb598 100644 --- a/j2k/testData/fileOrElement/class/anonymousClass.java +++ b/j2k/testData/fileOrElement/class/anonymousClass.java @@ -6,7 +6,7 @@ public class Test { private Listener listener = new Listener() { @Override public void onChange(int visibility) { - val a = (visibility & 1) + int a = (visibility & 1) } } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/class/anonymousClass.kt b/j2k/testData/fileOrElement/class/anonymousClass.kt index 5070cdc215c..6b7b76286da 100644 --- a/j2k/testData/fileOrElement/class/anonymousClass.kt +++ b/j2k/testData/fileOrElement/class/anonymousClass.kt @@ -1,6 +1,6 @@ package test -import javaApi.* +import javaApi.Listener class Test { private val listener = Listener { visibility -> val a = visibility and 1 }