New J2K: Add all primitive types
This commit is contained in:
committed by
Ilya Kirillov
parent
77b6eca76e
commit
7c5e9cd669
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user