New J2K: Add converting type functions from kotlin one to j2k one
This commit is contained in:
committed by
Ilya Kirillov
parent
dbdd39c6ab
commit
29c536579f
@@ -28,11 +28,9 @@ 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.lexer.KtSingleValueToken
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||
|
||||
class JKFileImpl : JKFile, JKBranchElementBase() {
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitFile(this, data)
|
||||
@@ -163,13 +161,6 @@ class JKBinaryExpressionImpl(
|
||||
}
|
||||
}
|
||||
|
||||
infix fun JKType?.equalsIgnoreMutability(other: JKType?) =
|
||||
when {
|
||||
(this is JKClassTypeImpl && other is JKClassTypeImpl) ->
|
||||
this.classReference == other.classReference && this.parameters == other.parameters
|
||||
else -> TODO("No comparation for $this and $other")
|
||||
}
|
||||
|
||||
|
||||
|
||||
class JKPrefixExpressionImpl(expression: JKExpression, override var operator: JKOperator) : JKPrefixExpression, JKBranchElementBase() {
|
||||
@@ -291,7 +282,7 @@ class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase(
|
||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLiteralExpression(this, data)
|
||||
}
|
||||
|
||||
fun JKLiteralExpression.LiteralType.toJkType(symbolProvider: JKSymbolProvider): JKType {
|
||||
fun JKLiteralExpression.LiteralType.toJkType(symbolProvider: JKSymbolProvider): JKType {
|
||||
fun defaultTypeByName(name: String) =
|
||||
JKClassTypeImpl(
|
||||
symbolProvider.provideDirectSymbol(
|
||||
|
||||
@@ -33,6 +33,7 @@ interface JKUniverseSymbol<T: JKTreeElement> : JKSymbol {
|
||||
|
||||
interface JKClassSymbol : JKNamedSymbol
|
||||
|
||||
|
||||
interface JKMethodSymbol : JKNamedSymbol {
|
||||
override val fqName: String
|
||||
val receiverType: JKType?
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.j2k.ast.Mutability
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol
|
||||
|
||||
@@ -64,6 +64,7 @@ interface JKParametrizedType : JKType {
|
||||
|
||||
interface JKClassType : JKParametrizedType {
|
||||
val classReference: JKClassSymbol
|
||||
override val nullability: Nullability
|
||||
}
|
||||
|
||||
interface JKJavaPrimitiveType : JKType {
|
||||
|
||||
@@ -6,15 +6,26 @@
|
||||
package org.jetbrains.kotlin.j2k.tree
|
||||
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference
|
||||
import com.intellij.util.reverse
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
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.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtTypeElement
|
||||
import org.jetbrains.kotlin.psi.KtTypeReference
|
||||
import org.jetbrains.kotlin.psi.KtUserType
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.util.*
|
||||
|
||||
fun JKExpression.type(context: ConversionContext): JKType =
|
||||
when (this) {
|
||||
@@ -57,6 +68,9 @@ fun PsiType.toJK(symbolProvider: JKSymbolProvider, nullability: Nullability = Nu
|
||||
}
|
||||
}
|
||||
|
||||
fun JKType.isSubtypeOf(other: JKType, symbolProvider: JKSymbolProvider): Boolean =
|
||||
toKtType(symbolProvider).isSubtypeOf(other.toKtType(symbolProvider))
|
||||
|
||||
fun KtTypeElement.toJK(symbolProvider: JKSymbolProvider): JKType =
|
||||
when (this) {
|
||||
is KtUserType -> {
|
||||
@@ -69,4 +83,26 @@ fun KtTypeElement.toJK(symbolProvider: JKSymbolProvider): JKType =
|
||||
JKClassTypeImpl(symbol, typeParameters)
|
||||
}
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
}
|
||||
|
||||
fun JKType.toKtType(symbolProvider: JKSymbolProvider): KotlinType =
|
||||
when (this) {
|
||||
is JKClassType -> classReference!!.toKtType(symbolProvider)
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
|
||||
|
||||
fun JKClassSymbol.toKtType(symbolProvider: JKSymbolProvider): KotlinType {
|
||||
val classDescriptor = when (this) {
|
||||
is JKMultiverseKtClassSymbol -> {
|
||||
val bindingContext = target.analyze()
|
||||
bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, target] as ClassDescriptor
|
||||
}
|
||||
is JKMultiverseClassSymbol ->
|
||||
target.getJavaClassDescriptor()!!
|
||||
is JKUniverseClassSymbol ->
|
||||
(symbolProvider.symbolsByPsi.reverse()[target] as PsiClass).getJavaClassDescriptor()!!
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
return classDescriptor.defaultType
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user