New J2K: Add boxed types support to PrimitiveTypesInitializersConversion

This commit is contained in:
Ilya Kirillov
2018-12-05 13:55:46 +03:00
committed by Ilya Kirillov
parent f14aa2292f
commit d4077a1622
4 changed files with 20 additions and 5 deletions
@@ -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
@@ -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 ||
+1 -1
View File
@@ -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)
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
package test
import javaApi.*
import javaApi.Listener
class Test {
private val listener = Listener { visibility -> val a = visibility and 1 }