New J2K: Add all primitive types

This commit is contained in:
Simon Ogorodnik
2018-05-28 20:03:23 +03:00
committed by Ilya Kirillov
parent 77b6eca76e
commit 7c5e9cd669
5 changed files with 26 additions and 16 deletions
@@ -199,12 +199,8 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
parameters.map { it.toJK() }
)
is PsiArrayType -> JKJavaArrayTypeImpl(componentType.toJK())
is PsiPrimitiveType -> when (presentableText) {
"int" -> JKJavaPrimitiveTypeImpl.INT
"byte" -> JKJavaPrimitiveTypeImpl.BYTE
"boolean" -> JKJavaPrimitiveTypeImpl.BOOLEAN
else -> throw Exception("Invalid PSI")
}
is PsiPrimitiveType -> JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE[presentableText]
?: error("Invalid primitive type $presentableText")
else -> throw Exception("Invalid PSI")
}
}
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.analysisContext
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
import org.jetbrains.kotlin.resolve.ImportPath
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversion() {
override fun onElementChanged(new: JKTreeElement, old: JKTreeElement) {
@@ -71,7 +70,7 @@ class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversi
return JKClassTypeImpl(context.symbolProvider.provideSymbol(newTarget) as JKClassSymbol, parameters, nullability)
}
fun mapClassType(type: JKClassType, typeElement: JKTypeElement): JKTypeElement {
private fun mapClassType(type: JKClassType, typeElement: JKTypeElement): JKTypeElement {
val fqNameStr = (type.classReference as? JKClassSymbol)?.fqName ?: return typeElement
val newFqName = JavaToKotlinClassMap.mapJavaToKotlin(FqName(fqNameStr)) ?: return typeElement
@@ -81,8 +80,8 @@ class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversi
} ?: typeElement
}
fun mapPrimitiveType(type: JKJavaPrimitiveType, typeElement: JKTypeElement): JKTypeElement {
val fqName = JvmPrimitiveType.get(type.name).primitiveType.typeFqName
private fun mapPrimitiveType(type: JKJavaPrimitiveType, typeElement: JKTypeElement): JKTypeElement {
val fqName = type.jvmPrimitiveType.primitiveType.typeFqName
return classTypeByFqName(context.backAnnotator(typeElement), ClassId.topLevel(fqName), emptyList())?.let { JKTypeElementImpl(it) }
?: typeElement
@@ -82,7 +82,7 @@ private class DebugTreePrinter : JKVisitorVoid {
printer.println((type.classReference as? JKClassSymbol)?.fqName ?: type.classReference?.let { it::class } ?: "Unbound")
}
if (type is JKJavaPrimitiveType) {
printer.println(type.name)
printer.println(type.jvmPrimitiveType.javaKeywordName)
}
}
printer.println("\"")
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.j2k.tree.impl
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
class JKJavaFieldImpl(
modifierList: JKModifierList,
@@ -111,12 +112,25 @@ class JKJavaNewArrayImpl(override var initializer: List<JKExpression>) : JKJavaN
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewArray(this, data)
}
sealed class JKJavaPrimitiveTypeImpl(override val name: String) : JKJavaPrimitiveType {
object BYTE : JKJavaPrimitiveTypeImpl("byte")
object BOOLEAN : JKJavaPrimitiveTypeImpl("boolean")
object INT : JKJavaPrimitiveTypeImpl("int")
sealed class JKJavaPrimitiveTypeImpl(override val jvmPrimitiveType: JvmPrimitiveType) : JKJavaPrimitiveType {
object BOOLEAN : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.BOOLEAN)
object CHAR : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.CHAR)
object BYTE : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.BYTE)
object SHORT : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.SHORT)
object INT : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.INT)
object FLOAT : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.FLOAT)
object LONG : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.LONG)
object DOUBLE : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.DOUBLE)
companion object {
val KEYWORD_TO_INSTANCE = listOf(
BOOLEAN, CHAR, BYTE, SHORT, INT, FLOAT, LONG, DOUBLE
).associate { it.jvmPrimitiveType.javaKeywordName to it } + ("void" to JKJavaVoidType)
}
}
object JKJavaVoidType : JKType
class JKJavaArrayTypeImpl(override val type: JKType) : JKJavaArrayType
class JKReturnStatementImpl(expression: JKExpression) : JKBranchElementBase(), JKReturnStatement {
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.j2k.tree
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
interface JKOperator
@@ -52,7 +53,7 @@ interface JKClassType : JKType {
}
interface JKJavaPrimitiveType : JKType {
val name: String
val jvmPrimitiveType: JvmPrimitiveType
}
interface JKJavaArrayType : JKType {