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.PsiNewExpressionImpl
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||||
import org.jetbrains.kotlin.j2k.tree.*
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||||
|
|
||||||
|
|
||||||
@@ -87,17 +88,20 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun PsiLiteralExpression.toJK(): JKLiteralExpression {
|
fun PsiLiteralExpression.toJK(): JKLiteralExpression {
|
||||||
if (this !is PsiLiteralExpressionImpl) {
|
require(this is PsiLiteralExpressionImpl)
|
||||||
throw RuntimeException("Not supported")
|
|
||||||
|
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) {
|
fun PsiJavaToken.toJK(): JKOperator = when (tokenType) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.j2k.tree.impl
|
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.JKLiteralExpression.LiteralType.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
|
||||||
|
|
||||||
@@ -58,6 +59,10 @@ class JKJavaLiteralExpressionImpl(
|
|||||||
override val type: JKLiteralExpression.LiteralType
|
override val type: JKLiteralExpression.LiteralType
|
||||||
) : JKJavaLiteralExpression, JKElementBase() {
|
) : JKJavaLiteralExpression, JKElementBase() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaLiteralExpression(this, data)
|
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.ast.Nullability
|
||||||
import org.jetbrains.kotlin.j2k.tree.*
|
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
|
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
|
||||||
|
|
||||||
class JKClassImpl(
|
class JKClassImpl(
|
||||||
@@ -135,4 +138,16 @@ class JKClassTypeImpl(
|
|||||||
override val nullability: Nullability = Nullability.Default
|
override val nullability: Nullability = Nullability.Default
|
||||||
) : JKClassType
|
) : 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
|
val type: LiteralType
|
||||||
|
|
||||||
enum class LiteralType {
|
enum class LiteralType {
|
||||||
STRING, BOOLEAN, NULL
|
STRING, CHAR, BOOLEAN, NULL, INT, LONG, FLOAT, DOUBLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user