Analysis API: fix file symbol restore
This commit is contained in:
+13
-2
@@ -10,17 +10,27 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtObjectLiteralExpression
|
import org.jetbrains.kotlin.psi.KtObjectLiteralExpression
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
|
import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
|
||||||
|
|
||||||
public class KtPsiBasedSymbolPointer<S : KtSymbol>(private val psiPointer: SmartPsiElementPointer<out KtDeclaration>) :
|
public class KtPsiBasedSymbolPointer<S : KtSymbol>(private val psiPointer: SmartPsiElementPointer<out KtElement>) :
|
||||||
KtSymbolPointer<S>() {
|
KtSymbolPointer<S>() {
|
||||||
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
@Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol")
|
||||||
override fun restoreSymbol(analysisSession: KtAnalysisSession): S? {
|
override fun restoreSymbol(analysisSession: KtAnalysisSession): S? {
|
||||||
val psi = psiPointer.element ?: return null
|
val psi = psiPointer.element ?: return null
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
return with(analysisSession) { psi.getSymbol() } as S?
|
return with(analysisSession) {
|
||||||
|
when (psi) {
|
||||||
|
is KtDeclaration -> psi.getSymbol()
|
||||||
|
is KtFile -> psi.getFileSymbol()
|
||||||
|
else -> {
|
||||||
|
error("Unexpected declaration to restore: ${psi::class}, text:\n ${psi.text}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as S?
|
||||||
}
|
}
|
||||||
|
|
||||||
public companion object {
|
public companion object {
|
||||||
@@ -35,6 +45,7 @@ public class KtPsiBasedSymbolPointer<S : KtSymbol>(private val psiPointer: Smart
|
|||||||
|
|
||||||
val psi = when (val psi = symbol.psi) {
|
val psi = when (val psi = symbol.psi) {
|
||||||
is KtDeclaration -> psi
|
is KtDeclaration -> psi
|
||||||
|
is KtFile -> psi
|
||||||
is KtObjectLiteralExpression -> psi.objectDeclaration
|
is KtObjectLiteralExpression -> psi.objectDeclaration
|
||||||
else -> null
|
else -> null
|
||||||
} ?: return null
|
} ?: return null
|
||||||
|
|||||||
Reference in New Issue
Block a user