[Symbol LC] add parents for the local classes
This commit is contained in:
+4
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousObjectSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousObjectSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.*
|
import org.jetbrains.kotlin.light.classes.symbol.classes.*
|
||||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
@@ -89,6 +90,9 @@ internal class FirLightAnonymousClassForSymbol(
|
|||||||
|
|
||||||
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
|
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
|
||||||
|
|
||||||
|
override fun getParent(): PsiElement? =
|
||||||
|
kotlinOrigin?.let(::getParentForLocalDeclaration)
|
||||||
|
|
||||||
override fun getScope(): PsiElement? = parent
|
override fun getScope(): PsiElement? = parent
|
||||||
override fun getInterfaces(): Array<PsiClass> = PsiClassImplUtil.getInterfaces(this)
|
override fun getInterfaces(): Array<PsiClass> = PsiClassImplUtil.getInterfaces(this)
|
||||||
override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
|
override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
|
||||||
|
|||||||
+9
-1
@@ -15,7 +15,9 @@ import org.jetbrains.annotations.NonNls
|
|||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithKind
|
||||||
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
|
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
|
||||||
|
import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
@@ -31,6 +33,7 @@ import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
|
|||||||
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
|
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.ifFalse
|
import org.jetbrains.kotlin.utils.addToStdlib.ifFalse
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
context(KtAnalysisSession)
|
||||||
internal abstract class FirLightClassForClassOrObjectSymbol(
|
internal abstract class FirLightClassForClassOrObjectSymbol(
|
||||||
@@ -204,7 +207,12 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getParent(): PsiElement? = containingClass ?: containingFile
|
override fun getParent(): PsiElement? {
|
||||||
|
if (classOrObjectSymbol.safeAs<KtSymbolWithKind>()?.symbolKind == KtSymbolKind.LOCAL) {
|
||||||
|
return kotlinOrigin?.let(::getParentForLocalDeclaration)
|
||||||
|
}
|
||||||
|
return containingClass ?: containingFile
|
||||||
|
}
|
||||||
|
|
||||||
override fun getScope(): PsiElement? = parent
|
override fun getScope(): PsiElement? = parent
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ open class KtUltraLightClassForLocalDeclaration(
|
|||||||
override fun getParent() = _parent
|
override fun getParent() = _parent
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getParentForLocalDeclaration(classOrObject: KtClassOrObject): PsiElement? {
|
fun getParentForLocalDeclaration(classOrObject: KtClassOrObject): PsiElement? {
|
||||||
fun getParentByPsiMethod(method: PsiMethod?, name: String?, forceMethodWrapping: Boolean): PsiElement? {
|
fun getParentByPsiMethod(method: PsiMethod?, name: String?, forceMethodWrapping: Boolean): PsiElement? {
|
||||||
if (method == null || name == null) return null
|
if (method == null || name == null) return null
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user