diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 73d297cd4c2..f64e866f58f 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -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) { 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 92313001ea6..f8d8169d5a2 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/j.kt @@ -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 accept(visitor: JKVisitor, data: D): R = visitor.visitJavaLiteralExpression(this, data) + + init { + require(type in setOf(STRING, CHAR, INT, LONG, FLOAT, DOUBLE)) + } } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index ebbc9e9d0a5..fd1b8c256b1 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -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() \ No newline at end of file +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 +} diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 87c145986ba..14561390aed 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -136,7 +136,7 @@ interface JKLiteralExpression : JKExpression { val type: LiteralType enum class LiteralType { - STRING, BOOLEAN, NULL + STRING, CHAR, BOOLEAN, NULL, INT, LONG, FLOAT, DOUBLE } }