New J2K: Add missing literals and cleanup literal handling in tree builder
This commit is contained in:
committed by
Ilya Kirillov
parent
b7fd8e32cb
commit
fd69efa4c2
@@ -23,6 +23,7 @@ import com.intellij.psi.impl.source.tree.java.PsiLiteralExpressionImpl
|
||||
import com.intellij.psi.impl.source.tree.java.PsiNewExpressionImpl
|
||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||
import org.jetbrains.kotlin.j2k.tree.*
|
||||
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.*
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
|
||||
|
||||
@@ -87,17 +88,20 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
}
|
||||
|
||||
fun PsiLiteralExpression.toJK(): JKLiteralExpression {
|
||||
if (this !is PsiLiteralExpressionImpl) {
|
||||
throw RuntimeException("Not supported")
|
||||
require(this is PsiLiteralExpressionImpl)
|
||||
|
||||
return when (this.literalElementType) {
|
||||
JavaTokenType.NULL_KEYWORD -> JKNullLiteral()
|
||||
JavaTokenType.TRUE_KEYWORD -> JKBooleanLiteral(true)
|
||||
JavaTokenType.FALSE_KEYWORD -> JKBooleanLiteral(false)
|
||||
JavaTokenType.STRING_LITERAL -> JKJavaLiteralExpressionImpl(innerText!!, STRING)
|
||||
JavaTokenType.CHARACTER_LITERAL -> JKJavaLiteralExpressionImpl(innerText!!, CHAR)
|
||||
JavaTokenType.INTEGER_LITERAL -> JKJavaLiteralExpressionImpl(text, INT)
|
||||
JavaTokenType.LONG_LITERAL -> JKJavaLiteralExpressionImpl(text, LONG)
|
||||
JavaTokenType.FLOAT_LITERAL -> JKJavaLiteralExpressionImpl(text, FLOAT)
|
||||
JavaTokenType.DOUBLE_LITERAL -> JKJavaLiteralExpressionImpl(text, DOUBLE)
|
||||
else -> error("Unknown literal element type: ${this.literalElementType}")
|
||||
}
|
||||
return JKJavaLiteralExpressionImpl(
|
||||
innerText!!, when (this.literalElementType) {
|
||||
JavaTokenType.STRING_LITERAL -> JKLiteralExpression.LiteralType.STRING
|
||||
JavaTokenType.TRUE_KEYWORD, JavaTokenType.FALSE_KEYWORD -> JKLiteralExpression.LiteralType.BOOLEAN
|
||||
JavaTokenType.NULL_KEYWORD -> JKLiteralExpression.LiteralType.NULL
|
||||
else -> throw RuntimeException("Not supported")
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun PsiJavaToken.toJK(): JKOperator = when (tokenType) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.j2k.tree.impl
|
||||
|
||||
import org.jetbrains.kotlin.j2k.tree.*
|
||||
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.*
|
||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||
|
||||
@@ -58,6 +59,10 @@ class JKJavaLiteralExpressionImpl(
|
||||
override val type: JKLiteralExpression.LiteralType
|
||||
) : JKJavaLiteralExpression, JKElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLiteralExpression(this, data)
|
||||
|
||||
init {
|
||||
require(type in setOf(STRING, CHAR, INT, LONG, FLOAT, DOUBLE))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -18,6 +18,9 @@ package org.jetbrains.kotlin.j2k.tree.impl
|
||||
|
||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||
import org.jetbrains.kotlin.j2k.tree.*
|
||||
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType
|
||||
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.BOOLEAN
|
||||
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.NULL
|
||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||
|
||||
class JKClassImpl(
|
||||
@@ -135,4 +138,16 @@ class JKClassTypeImpl(
|
||||
override val nullability: Nullability = Nullability.Default
|
||||
) : JKClassType
|
||||
|
||||
class JKNullLiteral : JKExpression, JKElementBase()
|
||||
class JKNullLiteral : JKLiteralExpression, JKElementBase() {
|
||||
override val literal: String
|
||||
get() = "null"
|
||||
override val type: LiteralType
|
||||
get() = NULL
|
||||
}
|
||||
|
||||
class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase() {
|
||||
override val literal: String
|
||||
get() = value.toString()
|
||||
override val type: LiteralType
|
||||
get() = BOOLEAN
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ interface JKLiteralExpression : JKExpression {
|
||||
val type: LiteralType
|
||||
|
||||
enum class LiteralType {
|
||||
STRING, BOOLEAN, NULL
|
||||
STRING, CHAR, BOOLEAN, NULL, INT, LONG, FLOAT, DOUBLE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user