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() }
|
parameters.map { it.toJK() }
|
||||||
)
|
)
|
||||||
is PsiArrayType -> JKJavaArrayTypeImpl(componentType.toJK())
|
is PsiArrayType -> JKJavaArrayTypeImpl(componentType.toJK())
|
||||||
is PsiPrimitiveType -> when (presentableText) {
|
is PsiPrimitiveType -> JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE[presentableText]
|
||||||
"int" -> JKJavaPrimitiveTypeImpl.INT
|
?: error("Invalid primitive type $presentableText")
|
||||||
"byte" -> JKJavaPrimitiveTypeImpl.BYTE
|
|
||||||
"boolean" -> JKJavaPrimitiveTypeImpl.BOOLEAN
|
|
||||||
else -> throw Exception("Invalid PSI")
|
|
||||||
}
|
|
||||||
else -> throw Exception("Invalid PSI")
|
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.analysisContext
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getChildOfType
|
||||||
import org.jetbrains.kotlin.resolve.ImportPath
|
import org.jetbrains.kotlin.resolve.ImportPath
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
|
||||||
|
|
||||||
class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversion() {
|
class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversion() {
|
||||||
override fun onElementChanged(new: JKTreeElement, old: JKTreeElement) {
|
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)
|
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 fqNameStr = (type.classReference as? JKClassSymbol)?.fqName ?: return typeElement
|
||||||
|
|
||||||
val newFqName = JavaToKotlinClassMap.mapJavaToKotlin(FqName(fqNameStr)) ?: return typeElement
|
val newFqName = JavaToKotlinClassMap.mapJavaToKotlin(FqName(fqNameStr)) ?: return typeElement
|
||||||
@@ -81,8 +80,8 @@ class TypeMappingConversion(val context: ConversionContext) : MatchBasedConversi
|
|||||||
} ?: typeElement
|
} ?: typeElement
|
||||||
}
|
}
|
||||||
|
|
||||||
fun mapPrimitiveType(type: JKJavaPrimitiveType, typeElement: JKTypeElement): JKTypeElement {
|
private fun mapPrimitiveType(type: JKJavaPrimitiveType, typeElement: JKTypeElement): JKTypeElement {
|
||||||
val fqName = JvmPrimitiveType.get(type.name).primitiveType.typeFqName
|
val fqName = type.jvmPrimitiveType.primitiveType.typeFqName
|
||||||
|
|
||||||
return classTypeByFqName(context.backAnnotator(typeElement), ClassId.topLevel(fqName), emptyList())?.let { JKTypeElementImpl(it) }
|
return classTypeByFqName(context.backAnnotator(typeElement), ClassId.topLevel(fqName), emptyList())?.let { JKTypeElementImpl(it) }
|
||||||
?: typeElement
|
?: typeElement
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ private class DebugTreePrinter : JKVisitorVoid {
|
|||||||
printer.println((type.classReference as? JKClassSymbol)?.fqName ?: type.classReference?.let { it::class } ?: "Unbound")
|
printer.println((type.classReference as? JKClassSymbol)?.fqName ?: type.classReference?.let { it::class } ?: "Unbound")
|
||||||
}
|
}
|
||||||
if (type is JKJavaPrimitiveType) {
|
if (type is JKJavaPrimitiveType) {
|
||||||
printer.println(type.name)
|
printer.println(type.jvmPrimitiveType.javaKeywordName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printer.println("\"")
|
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.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||||
|
|
||||||
class JKJavaFieldImpl(
|
class JKJavaFieldImpl(
|
||||||
modifierList: JKModifierList,
|
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)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaNewArray(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class JKJavaPrimitiveTypeImpl(override val name: String) : JKJavaPrimitiveType {
|
sealed class JKJavaPrimitiveTypeImpl(override val jvmPrimitiveType: JvmPrimitiveType) : JKJavaPrimitiveType {
|
||||||
object BYTE : JKJavaPrimitiveTypeImpl("byte")
|
object BOOLEAN : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.BOOLEAN)
|
||||||
object BOOLEAN : JKJavaPrimitiveTypeImpl("boolean")
|
object CHAR : JKJavaPrimitiveTypeImpl(JvmPrimitiveType.CHAR)
|
||||||
object INT : JKJavaPrimitiveTypeImpl("int")
|
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 JKJavaArrayTypeImpl(override val type: JKType) : JKJavaArrayType
|
||||||
|
|
||||||
class JKReturnStatementImpl(expression: JKExpression) : JKBranchElementBase(), JKReturnStatement {
|
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.ast.Nullability
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol
|
import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||||
|
|
||||||
interface JKOperator
|
interface JKOperator
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ interface JKClassType : JKType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaPrimitiveType : JKType {
|
interface JKJavaPrimitiveType : JKType {
|
||||||
val name: String
|
val jvmPrimitiveType: JvmPrimitiveType
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKJavaArrayType : JKType {
|
interface JKJavaArrayType : JKType {
|
||||||
|
|||||||
Reference in New Issue
Block a user