New J2K: Add calculating type for JKExpression
This commit is contained in:
committed by
Ilya Kirillov
parent
27526cf866
commit
5e4b39f10f
@@ -17,6 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.j2k.tree.impl
|
package org.jetbrains.kotlin.j2k.tree.impl
|
||||||
|
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.j2k.JKSymbolProvider
|
||||||
import org.jetbrains.kotlin.j2k.ast.Mutability
|
import org.jetbrains.kotlin.j2k.ast.Mutability
|
||||||
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.*
|
||||||
@@ -24,6 +26,7 @@ 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.BOOLEAN
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.NULL
|
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
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.psi.KtClass
|
import org.jetbrains.kotlin.psi.KtClass
|
||||||
|
|
||||||
class JKFileImpl : JKFile, JKBranchElementBase() {
|
class JKFileImpl : JKFile, JKBranchElementBase() {
|
||||||
@@ -233,6 +236,20 @@ class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase(
|
|||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLiteralExpression(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLiteralExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun JKLiteralExpression.LiteralType.toJkType(symbolProvider: JKSymbolProvider): JKType =
|
||||||
|
when (this) {
|
||||||
|
JKLiteralExpression.LiteralType.CHAR -> JKJavaPrimitiveTypeImpl.CHAR
|
||||||
|
JKLiteralExpression.LiteralType.BOOLEAN -> JKJavaPrimitiveTypeImpl.BOOLEAN
|
||||||
|
JKLiteralExpression.LiteralType.INT -> JKJavaPrimitiveTypeImpl.INT
|
||||||
|
JKLiteralExpression.LiteralType.LONG -> JKJavaPrimitiveTypeImpl.LONG
|
||||||
|
JKLiteralExpression.LiteralType.FLOAT -> JKJavaPrimitiveTypeImpl.FLOAT
|
||||||
|
JKLiteralExpression.LiteralType.DOUBLE -> JKJavaPrimitiveTypeImpl.DOUBLE
|
||||||
|
JKLiteralExpression.LiteralType.NULL ->
|
||||||
|
ClassId.topLevel(KotlinBuiltIns.FQ_NAMES.unit.toSafe()).toKtClassType(symbolProvider)
|
||||||
|
JKLiteralExpression.LiteralType.STRING ->
|
||||||
|
ClassId.topLevel(KotlinBuiltIns.FQ_NAMES.string.toSafe()).toKtClassType(symbolProvider)
|
||||||
|
}
|
||||||
|
|
||||||
class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) :
|
class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) :
|
||||||
JKLocalVariable, JKBranchElementBase() {
|
JKLocalVariable, JKBranchElementBase() {
|
||||||
override var modifierList by child(modifierList)
|
override var modifierList by child(modifierList)
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.j2k.tree
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiCatchSection
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.j2k.ConversionContext
|
||||||
|
import org.jetbrains.kotlin.j2k.JKSymbolProvider
|
||||||
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
|
import org.jetbrains.kotlin.j2k.conversions.resolveFqName
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKClassTypeImpl
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.toJkType
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
|
|
||||||
|
fun JKExpression.type(context: ConversionContext): JKType =
|
||||||
|
when (this) {
|
||||||
|
is JKLiteralExpression -> this.type.toJkType(context.symbolProvider)
|
||||||
|
else -> TODO(this.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ClassId.toKtClassType(
|
||||||
|
symbolProvider: JKSymbolProvider,
|
||||||
|
nullability: Nullability = Nullability.Default,
|
||||||
|
context: PsiElement = symbolProvider.symbolsByPsi.keys.first()
|
||||||
|
): JKType {
|
||||||
|
val typeSymbol = symbolProvider.provideDirectSymbol(resolveFqName(this, context)!!) as JKClassSymbol
|
||||||
|
return JKClassTypeImpl(typeSymbol, emptyList(), nullability)
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user