[Analysis API] rework containing declaration provider
now it should work for non-source declarations
This commit is contained in:
+4
-20
@@ -11,22 +11,19 @@ import com.intellij.psi.search.ProjectScope
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtSymbolContainingDeclarationProvider
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getDescriptor
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtBackingFieldSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithKind
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||
import org.jetbrains.kotlin.cfg.getElementParentDeclaration
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
@@ -43,27 +40,14 @@ internal class KtFe10SymbolContainingDeclarationProvider(
|
||||
override val token: KtLifetimeToken
|
||||
get() = analysisSession.token
|
||||
|
||||
override fun getContainingDeclaration(symbol: KtSymbol): KtSymbolWithKind? {
|
||||
override fun getContainingDeclaration(symbol: KtSymbol): KtDeclarationSymbol? {
|
||||
if (symbol is KtSymbolWithKind && symbol.symbolKind == KtSymbolKind.TOP_LEVEL) {
|
||||
return null
|
||||
}
|
||||
|
||||
return when (symbol) {
|
||||
is KtPackageSymbol -> null
|
||||
is KtBackingFieldSymbol -> symbol.owningProperty
|
||||
is KtFe10DescSymbol<*> -> symbol.descriptor.containingDeclaration?.toKtSymbol(analysisContext) as? KtSymbolWithKind
|
||||
is KtFe10PsiSymbol<*, *> -> {
|
||||
val parentDeclaration = symbol.psi.getElementParentDeclaration()
|
||||
if (parentDeclaration != null) {
|
||||
return with(analysisSession) {
|
||||
parentDeclaration.getSymbol() as? KtSymbolWithKind
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
else -> null
|
||||
else -> symbol.getDescriptor()?.containingDeclaration?.toKtSymbol(analysisContext) as? KtDeclarationSymbol
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user