New J2K: Implement unimplemented symbol functions
This commit is contained in:
committed by
Ilya Kirillov
parent
779dc5c1e2
commit
197fda30e2
@@ -5,29 +5,23 @@
|
||||
|
||||
package org.jetbrains.kotlin.nj2k.tree.impl
|
||||
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.PsiReference
|
||||
import com.intellij.psi.PsiVariable
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl
|
||||
import com.intellij.psi.util.parentOfType
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
|
||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMethodsKotlinAware
|
||||
import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMethodsNoWrapping
|
||||
import org.jetbrains.kotlin.nj2k.JKSymbolProvider
|
||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||
import org.jetbrains.kotlin.nj2k.JKSymbolProvider
|
||||
import org.jetbrains.kotlin.nj2k.conversions.parentOfType
|
||||
import org.jetbrains.kotlin.nj2k.conversions.resolveFqName
|
||||
import org.jetbrains.kotlin.nj2k.tree.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.containingClass
|
||||
|
||||
interface JKSymbol {
|
||||
val target: Any
|
||||
val declaredIn: JKSymbol?
|
||||
val fqName: String?
|
||||
val fqName: String
|
||||
}
|
||||
|
||||
interface JKUnresolvedSymbol : JKSymbol
|
||||
@@ -39,8 +33,23 @@ interface JKNamedSymbol : JKSymbol {
|
||||
val name: String
|
||||
}
|
||||
|
||||
interface JKUniverseSymbol<T : JKTreeElement> : JKSymbol {
|
||||
override var target: T
|
||||
abstract class JKUniverseSymbol<T : JKTreeElement> : JKNamedSymbol {
|
||||
abstract override var target: T
|
||||
protected abstract val symbolProvider: JKSymbolProvider
|
||||
|
||||
override val declaredIn: JKSymbol?
|
||||
get() = target.parentOfType<JKDeclaration>()?.let { symbolProvider.symbolsByJK[it] }
|
||||
override val fqName: String
|
||||
get() {
|
||||
val qualifier =
|
||||
declaredIn?.fqName
|
||||
?: target
|
||||
.parentOfType<JKFile>()
|
||||
?.packageDeclaration
|
||||
?.packageName
|
||||
?.value
|
||||
return qualifier?.takeIf { it.isNotBlank() }?.let { "$it." }.orEmpty() + name
|
||||
}
|
||||
}
|
||||
|
||||
interface JKClassSymbol : JKNamedSymbol
|
||||
@@ -66,35 +75,36 @@ interface JKFieldSymbol : JKNamedSymbol {
|
||||
val fieldType: JKType?
|
||||
}
|
||||
|
||||
class JKUniverseClassSymbol : JKClassSymbol, JKUniverseSymbol<JKClass> {
|
||||
class JKUniverseClassSymbol(override val symbolProvider: JKSymbolProvider) : JKClassSymbol, JKUniverseSymbol<JKClass>() {
|
||||
override lateinit var target: JKClass
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String
|
||||
get() = target.name.value // TODO("Fix this")
|
||||
override val name: String
|
||||
get() = target.name.value
|
||||
}
|
||||
|
||||
class JKMultiverseClassSymbol(override val target: PsiClass) : JKClassSymbol {
|
||||
class JKMultiverseClassSymbol(
|
||||
override val target: PsiClass,
|
||||
private val symbolProvider: JKSymbolProvider
|
||||
) : JKClassSymbol {
|
||||
override val declaredIn: JKSymbol?
|
||||
get() = target.parentOfType<PsiMember>()?.let { symbolProvider.provideDirectSymbol(it) }
|
||||
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String?
|
||||
get() = target.getKotlinFqName()?.asString() ?: target.qualifiedName
|
||||
override val fqName: String
|
||||
get() = target.getKotlinFqName()?.asString() ?: target.qualifiedName ?: name
|
||||
|
||||
override val name: String
|
||||
get() = target.name!!
|
||||
}
|
||||
|
||||
class JKMultiverseKtClassSymbol(override val target: KtClassOrObject) : JKClassSymbol {
|
||||
class JKMultiverseKtClassSymbol(
|
||||
override val target: KtClassOrObject,
|
||||
private val symbolProvider: JKSymbolProvider
|
||||
) : JKClassSymbol {
|
||||
override val name: String
|
||||
get() = target.name!!
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented")
|
||||
override val fqName: String?
|
||||
get() = target.fqName?.asString()
|
||||
|
||||
override val declaredIn: JKSymbol?
|
||||
get() = target.parentOfType<KtDeclaration>()?.let { symbolProvider.provideDirectSymbol(it) }
|
||||
override val fqName: String
|
||||
get() = target.fqName?.asString() ?: name
|
||||
}
|
||||
|
||||
fun JKClassSymbol.displayName() =
|
||||
@@ -113,7 +123,8 @@ fun PsiClass.nameWithOuterClasses() =
|
||||
.reversed()
|
||||
.joinToString(separator = ".") { it.name!! }
|
||||
|
||||
class JKUniverseMethodSymbol(private val symbolProvider: JKSymbolProvider) : JKMethodSymbol, JKUniverseSymbol<JKMethod> {
|
||||
|
||||
class JKUniverseMethodSymbol(override val symbolProvider: JKSymbolProvider) : JKMethodSymbol, JKUniverseSymbol<JKMethod>() {
|
||||
override val receiverType: JKType?
|
||||
get() = (target.parent as? JKClass)?.let {
|
||||
JKClassTypeImpl(symbolProvider.provideUniverseSymbol(it), emptyList()/*TODO*/)
|
||||
@@ -124,11 +135,8 @@ class JKUniverseMethodSymbol(private val symbolProvider: JKSymbolProvider) : JKM
|
||||
get() = target.returnType.type
|
||||
override val name: String
|
||||
get() = target.name.value
|
||||
|
||||
override lateinit var target: JKMethod
|
||||
override val declaredIn: JKSymbol?
|
||||
get() = target.parentOfType<JKClass>()?.let { symbolProvider.provideUniverseSymbol(it) }
|
||||
override val fqName: String
|
||||
get() = target.name.value // TODO("Fix this")
|
||||
}
|
||||
|
||||
class JKMultiverseMethodSymbol(override val target: PsiMethod, private val symbolProvider: JKSymbolProvider) : JKMethodSymbol {
|
||||
@@ -174,16 +182,12 @@ class JKMultiverseFunctionSymbol(override val target: KtNamedFunction, private v
|
||||
get() = target.fqName!!.asString()
|
||||
}
|
||||
|
||||
class JKUniverseFieldSymbol : JKFieldSymbol, JKUniverseSymbol<JKVariable> {
|
||||
class JKUniverseFieldSymbol(override val symbolProvider: JKSymbolProvider) : JKFieldSymbol, JKUniverseSymbol<JKVariable>() {
|
||||
override val fieldType: JKType
|
||||
get() = target.type.type
|
||||
override val name: String
|
||||
get() = target.name.value
|
||||
override lateinit var target: JKVariable
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String
|
||||
get() = target.name.value // TODO("Fix this")
|
||||
}
|
||||
|
||||
class JKMultiverseFieldSymbol(override val target: PsiVariable, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
@@ -208,6 +212,21 @@ class JKMultiversePropertySymbol(override val target: KtCallableDeclaration, pri
|
||||
get() = target.fqName!!.asString()
|
||||
}
|
||||
|
||||
class JKMultiverseKtEnumEntrySymbol(override val target: KtEnumEntry, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol {
|
||||
override val fieldType: JKType?
|
||||
get() = JKClassTypeImpl(
|
||||
symbolProvider.provideDirectSymbol(target.containingClass()!!) as JKClassSymbol,
|
||||
emptyList(),
|
||||
Nullability.NotNull
|
||||
)
|
||||
override val name: String
|
||||
get() = target.name!!
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String
|
||||
get() = target.fqName!!.asString()
|
||||
}
|
||||
|
||||
class JKUnresolvedField(override val target: String, private val symbolProvider: JKSymbolProvider) : JKFieldSymbol, JKUnresolvedSymbol {
|
||||
override val fieldType: JKType
|
||||
get() {
|
||||
@@ -238,25 +257,10 @@ class JKUnresolvedMethod(
|
||||
get() = target
|
||||
}
|
||||
|
||||
class JKExclExclMethod(
|
||||
operandType: JKType
|
||||
) : JKMethodSymbol {
|
||||
override val target: String = "!!"
|
||||
override val returnType: JKType = operandType.updateNullability(Nullability.NotNull)
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String = "!!"
|
||||
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.
|
||||
override val name: String = "!!"
|
||||
}
|
||||
|
||||
class JKUnresolvedClassSymbol(override val target: String) : JKClassSymbol, JKUnresolvedSymbol {
|
||||
override val declaredIn: JKSymbol
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
override val fqName: String?
|
||||
override val fqName: String
|
||||
get() = target
|
||||
|
||||
override val name: String
|
||||
|
||||
Reference in New Issue
Block a user