From 7c5e9cd66964f8a64d6814e492c694f0fc9b830f Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Mon, 28 May 2018 20:03:23 +0300 Subject: [PATCH] New J2K: Add all primitive types --- .../kotlin/j2k/JavaToJKTreeBuilder.kt | 8 ++----- .../j2k/conversions/TypeMappingConversion.kt | 7 +++--- .../kotlin/j2k/tree/DebugTreePrinter.kt | 2 +- .../org/jetbrains/kotlin/j2k/tree/impl/j.kt | 22 +++++++++++++++---- .../org/jetbrains/kotlin/j2k/tree/markers.kt | 3 ++- 5 files changed, 26 insertions(+), 16 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 0a2c9a365ac..73d297cd4c2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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") } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt index 49277120446..653d507fb48 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/TypeMappingConversion.kt @@ -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 diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt index 17c76cee915..af22edf2da0 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/DebugTreePrinter.kt @@ -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("\"") diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt index e79f406ac6d..18fc122bc8c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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) : JKJavaN override fun accept(visitor: JKVisitor, 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 { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt index 5e4f64e357e..acd76fab492 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/markers.kt @@ -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 {