New J2K: Add type calculating for more kinds of JKExpressions
This commit is contained in:
committed by
Ilya Kirillov
parent
71b3fe33a3
commit
dbdd39c6ab
@@ -35,9 +35,9 @@ class JKSymbolProvider {
|
||||
is PsiClass -> JKMultiverseClassSymbol(psi)
|
||||
is KtClassOrObject -> JKMultiverseKtClassSymbol(psi)
|
||||
is PsiMethod -> JKMultiverseMethodSymbol(psi, this)
|
||||
is PsiField -> JKMultiverseFieldSymbol(psi)
|
||||
is PsiField -> JKMultiverseFieldSymbol(psi, this)
|
||||
is KtNamedFunction -> JKMultiverseFunctionSymbol(psi, this)
|
||||
is KtProperty -> JKMultiversePropertySymbol(psi)
|
||||
is KtProperty -> JKMultiversePropertySymbol(psi, this)
|
||||
else -> TODO(psi::class.toString())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,6 +120,7 @@ fun JKJavaOperatorToken.toKtToken(): JKKtOperatorToken =
|
||||
JavaTokenType.PERC -> JKKtSingleValueOperatorToken(KtTokens.PERC)
|
||||
|
||||
JavaTokenType.EQ -> JKKtSingleValueOperatorToken(KtTokens.EQ)
|
||||
JavaTokenType.NE -> JKKtSingleValueOperatorToken(KtTokens.EXCLEQ)
|
||||
JavaTokenType.PLUSEQ -> JKKtSingleValueOperatorToken(KtTokens.PLUSEQ)
|
||||
JavaTokenType.MINUSEQ -> JKKtSingleValueOperatorToken(KtTokens.MINUSEQ)
|
||||
|
||||
@@ -137,7 +138,7 @@ fun JKJavaOperatorToken.toKtToken(): JKKtOperatorToken =
|
||||
JavaTokenType.GTGTGTEQ -> JKKtWordOperatorToken("ushr")
|
||||
JavaTokenType.XOREQ -> JKKtWordOperatorToken("xor")
|
||||
|
||||
else -> TODO(this.token::class.java.toString())
|
||||
else -> TODO(this.token.toString())
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -35,13 +35,14 @@ interface JKClassSymbol : JKNamedSymbol
|
||||
|
||||
interface JKMethodSymbol : JKNamedSymbol {
|
||||
override val fqName: String
|
||||
val recivierType: JKType?
|
||||
val receiverType: JKType?
|
||||
val parameterTypes: List<JKType>
|
||||
val returnType: JKType
|
||||
}
|
||||
|
||||
interface JKFieldSymbol : JKNamedSymbol {
|
||||
override val fqName: String
|
||||
val filedType: JKType
|
||||
}
|
||||
|
||||
class JKUniverseClassSymbol : JKClassSymbol, JKUniverseSymbol<JKClass> {
|
||||
@@ -76,7 +77,7 @@ class JKMultiverseKtClassSymbol(override val target: KtClassOrObject) : JKClassS
|
||||
}
|
||||
|
||||
class JKUniverseMethodSymbol(private val symbolProvider: JKSymbolProvider) : JKMethodSymbol, JKUniverseSymbol<JKMethod> {
|
||||
override val recivierType: JKType?
|
||||
override val receiverType: JKType?
|
||||
get() = (target.parent as? JKClass)?.let {
|
||||
JKClassTypeImpl(symbolProvider.provideUniverseSymbol(it), emptyList()/*TODO*/)
|
||||
}
|
||||
@@ -94,7 +95,7 @@ class JKUniverseMethodSymbol(private val symbolProvider: JKSymbolProvider) : JKM
|
||||
}
|
||||
|
||||
class JKMultiverseMethodSymbol(override val target: PsiMethod, private val symbolProvider: JKSymbolProvider) : JKMethodSymbol {
|
||||
override val recivierType: JKType?
|
||||
override val receiverType: JKType?
|
||||
get() = target.containingClass?.let {
|
||||
JKClassTypeImpl(symbolProvider.provideDirectSymbol(it) as JKClassSymbol, emptyList()/*TODO*/)
|
||||
}
|
||||
@@ -111,7 +112,7 @@ class JKMultiverseMethodSymbol(override val target: PsiMethod, private val symbo
|
||||
}
|
||||
|
||||
class JKMultiverseFunctionSymbol(override val target: KtNamedFunction, private val symbolProvider: JKSymbolProvider) : JKMethodSymbol {
|
||||
override val recivierType: JKType?
|
||||
override val receiverType: JKType?
|
||||
get() = target.receiverTypeReference?.typeElement?.toJK(symbolProvider)
|
||||
override val parameterTypes: List<JKType>
|
||||
get() = target.valueParameters.map { it.typeReference!!.typeElement!!.toJK(symbolProvider) }
|
||||
@@ -126,6 +127,8 @@ class JKMultiverseFunctionSymbol(override val target: KtNamedFunction, private v
|
||||
}
|
||||
|
||||
class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKField> {
|
||||
override val filedType: JKType
|
||||
get() = target.type.type
|
||||
override val name: String
|
||||
get() = target.name.value
|
||||
override lateinit var target: JKField
|
||||
@@ -135,7 +138,9 @@ class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKField> {
|
||||
get() = target.name.value // TODO("Fix this")
|
||||
}
|
||||
|
||||
class JKMultiverseFieldSymbol(override val target: PsiField) : JKFieldSymbol {
|
||||
class JKMultiverseFieldSymbol(override val target: PsiField, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
override val filedType: JKType
|
||||
get() = target.type.toJK(symbolProvider)
|
||||
override val name: String
|
||||
get() = target.name
|
||||
override val declaredIn: JKSymbol
|
||||
@@ -144,7 +149,9 @@ class JKMultiverseFieldSymbol(override val target: PsiField) : JKFieldSymbol {
|
||||
get() = target.name // TODO("Fix this")
|
||||
}
|
||||
|
||||
class JKMultiversePropertySymbol(override val target: KtProperty) : JKFieldSymbol {
|
||||
class JKMultiversePropertySymbol(override val target: KtProperty, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
override val filedType: JKType
|
||||
get() = target.typeReference!!.typeElement!!.toJK(symbolProvider)
|
||||
override val name: String
|
||||
get() = target.name!!
|
||||
override val declaredIn: JKSymbol
|
||||
@@ -159,6 +166,8 @@ class JKUnresolvedField(override val target: String) : JKFieldSymbol {
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String = target
|
||||
override val filedType: JKType
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val name: String
|
||||
get() = target
|
||||
}
|
||||
@@ -169,7 +178,7 @@ class JKUnresolvedMethod(override val target: String) : JKMethodSymbol {
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String = target
|
||||
override val recivierType: JKType?
|
||||
override val receiverType: JKType?
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val parameterTypes: List<JKType>
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
|
||||
@@ -20,6 +20,9 @@ fun JKExpression.type(context: ConversionContext): JKType =
|
||||
when (this) {
|
||||
is JKLiteralExpression -> type.toJkType(context.symbolProvider)
|
||||
is JKBinaryExpression -> (operator as JKKtOperatorImpl).methodSymbol.returnType
|
||||
is JKMethodCallExpression -> identifier.returnType
|
||||
is JKFieldAccessExpressionImpl -> identifier.filedType
|
||||
is JKQualifiedExpressionImpl -> this.selector.type(context)
|
||||
else -> TODO(this::class.java.toString())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user