[FIR IDE] Extract Fe10AnalysisFacade from KtFe10AnalysisSession

This commit is contained in:
Yan Zhulanow
2021-10-19 16:26:58 +09:00
committed by teamcityserver
parent e06a75c197
commit e12c7d1292
29 changed files with 158 additions and 46 deletions
@@ -0,0 +1,70 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api.descriptors
import com.intellij.openapi.extensions.AreaInstance
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
import org.jetbrains.kotlin.resolve.extensions.AnalysisHandlerExtension
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
class CliFe10AnalysisFacade(project: Project) : Fe10AnalysisFacade {
private val handler by lazy { KtFe10AnalysisHandlerExtension.getInstance(project) }
override val resolveSession: ResolveSession
get() = handler.resolveSession ?: error("Resolution is not performed")
override val deprecationResolver: DeprecationResolver
get() = handler.deprecationResolver ?: error("Resolution is not performed")
override fun analyze(element: KtElement, mode: Fe10AnalysisFacade.AnalysisMode): BindingContext {
return resolveSession.bindingContext
}
override fun getOrigin(file: VirtualFile): KtSymbolOrigin {
return KtSymbolOrigin.LIBRARY
}
}
class KtFe10AnalysisHandlerExtension : AnalysisHandlerExtension {
internal companion object {
fun getInstance(area: AreaInstance): KtFe10AnalysisHandlerExtension {
return AnalysisHandlerExtension.extensionPointName.getExtensions(area).firstIsInstanceOrNull()
?: error(KtFe10AnalysisHandlerExtension::class.java.name + " should be registered")
}
}
var resolveSession: ResolveSession? = null
private set
var deprecationResolver: DeprecationResolver? = null
private set
override fun doAnalysis(
project: Project,
module: ModuleDescriptor,
projectContext: ProjectContext,
files: Collection<KtFile>,
bindingTrace: BindingTrace,
componentProvider: ComponentProvider
): AnalysisResult? {
resolveSession = componentProvider.get()
deprecationResolver = componentProvider.get()
return super.doAnalysis(project, module, projectContext, files, bindingTrace, componentProvider)
}
}
@@ -0,0 +1,28 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api.descriptors
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
interface Fe10AnalysisFacade {
val resolveSession: ResolveSession
val deprecationResolver: DeprecationResolver
fun analyze(element: KtElement, mode: AnalysisMode = AnalysisMode.FULL): BindingContext
fun getOrigin(file: VirtualFile): KtSymbolOrigin
enum class AnalysisMode {
FULL,
PARTIAL_WITH_DIAGNOSTICS,
PARTIAL
}
}
@@ -5,20 +5,20 @@
package org.jetbrains.kotlin.analysis.api.descriptors
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.components.ServiceManager
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.components.*
import org.jetbrains.kotlin.analysis.api.descriptors.components.*
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolProvider
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.psi.KtFile
@Suppress("LeakingThis")
abstract class KtFe10AnalysisSession(val contextElement: KtElement, token: ValidityToken) : KtAnalysisSession(token) {
open class KtFe10AnalysisSession(
private val contextElement: PsiElement, token: ValidityToken
) : KtAnalysisSession(token), Fe10AnalysisFacade by ServiceManager.getService(contextElement.project, Fe10AnalysisFacade::class.java) {
override val smartCastProviderImpl: KtSmartCastProvider = KtFe10SmartCastProvider(this)
override val diagnosticProviderImpl: KtDiagnosticProvider = KtFe10DiagnosticProvider(this)
override val scopeProviderImpl: KtScopeProvider = KtFe10ScopeProvider(this)
@@ -45,16 +45,7 @@ abstract class KtFe10AnalysisSession(val contextElement: KtElement, token: Valid
override val jvmTypeMapperImpl: KtJvmTypeMapper = KtFe10JvmTypeMapper(this)
override val symbolInfoProviderImpl: KtSymbolInfoProvider = KtFe10SymbolInfoProvider(this)
abstract val resolveSession: ResolveSession
abstract val deprecationResolver: DeprecationResolver
abstract fun analyze(element: KtElement, mode: AnalysisMode = AnalysisMode.FULL): BindingContext
abstract fun getOrigin(file: VirtualFile): KtSymbolOrigin
enum class AnalysisMode {
FULL,
PARTIAL_WITH_DIAGNOSTICS,
PARTIAL
override fun createContextDependentCopy(originalKtFile: KtFile, elementToReanalyze: KtElement): KtAnalysisSession {
return KtFe10AnalysisSession(elementToReanalyze, token)
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.components
import org.jetbrains.kotlin.analysis.api.calls.*
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescFunctionSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescPropertyGetterSymbol
@@ -41,7 +42,7 @@ internal class KtFe10CallResolver(override val analysisSession: KtFe10AnalysisSe
get() = analysisSession.token
override fun resolveAccessorCall(call: KtSimpleNameExpression): KtCall? {
val bindingContext = analysisSession.analyze(call, KtFe10AnalysisSession.AnalysisMode.PARTIAL_WITH_DIAGNOSTICS)
val bindingContext = analysisSession.analyze(call, AnalysisMode.PARTIAL_WITH_DIAGNOSTICS)
val resolvedCall = call.getResolvedCall(bindingContext) ?: return null
val resultingDescriptor = resolvedCall.resultingDescriptor
@@ -114,7 +115,7 @@ internal class KtFe10CallResolver(override val analysisSession: KtFe10AnalysisSe
* @param isUsualCall `true` if the call is a usual function call (`foo()` or `foo {}`).
*/
private fun resolveCall(call: KtElement, isUsualCall: Boolean): KtCall? {
val bindingContext = analysisSession.analyze(call, KtFe10AnalysisSession.AnalysisMode.PARTIAL_WITH_DIAGNOSTICS)
val bindingContext = analysisSession.analyze(call, AnalysisMode.PARTIAL_WITH_DIAGNOSTICS)
val resolvedCall = call.getResolvedCall(bindingContext) ?: return getUnresolvedCall(call)
val argumentMapping = createArgumentMapping(resolvedCall)
@@ -10,7 +10,7 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticCheckerFilter
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticProvider
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnosticWithPsi
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
import org.jetbrains.kotlin.analysis.api.components.KtExpressionInfoProvider
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.components.KtExpressionTypeProvider
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.types.KtType
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
import org.jetbrains.kotlin.analysis.api.components.KtBuiltinTypes
import org.jetbrains.kotlin.analysis.api.components.KtTypeProvider
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.classId
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSymbolDescriptor
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.isInterfaceLike
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.components.KtVisibilityChecker
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSymbolDescriptor
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.getResolutionScope
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.references
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Reference
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol
@@ -19,7 +20,7 @@ internal class KtFe10ArrayAccessReference(expression: KtArrayAccessExpression) :
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
require(this is KtFe10AnalysisSession)
val bindingContext = analyze(expression, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analyze(expression, AnalysisMode.PARTIAL)
val descriptor = expression.getResolvedCall(bindingContext)?.resultingDescriptor
return listOfNotNull(descriptor?.toKtCallableSymbol(this))
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.references
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Reference
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol
@@ -20,7 +21,7 @@ internal class KtFe10CollectionLiteralReference(
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
require(this is KtFe10AnalysisSession)
val bindingContext = analyze(expression, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analyze(expression, AnalysisMode.PARTIAL)
val descriptor = bindingContext[BindingContext.COLLECTION_LITERAL_CALL, expression]?.resultingDescriptor
return listOfNotNull(descriptor?.toKtCallableSymbol(this))
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.references
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Reference
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol
@@ -20,7 +21,7 @@ internal class KtFe10ConstructorDelegationReference(
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
require(this is KtFe10AnalysisSession)
val bindingContext = analyze(expression, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analyze(expression, AnalysisMode.PARTIAL)
val descriptor = expression.getResolvedCall(bindingContext)?.resultingDescriptor
return listOfNotNull(descriptor?.toKtCallableSymbol(this))
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.references
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Reference
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol
@@ -20,7 +21,7 @@ internal class KtFe10DestructuringDeclarationEntry(
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
check(this is KtFe10AnalysisSession)
val bindingContext = analyze(element, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analyze(element, AnalysisMode.PARTIAL)
val descriptor = bindingContext[BindingContext.COMPONENT_RESOLVED_CALL, element]?.resultingDescriptor
return listOfNotNull(descriptor?.toKtCallableSymbol(this))
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.references
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Reference
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtCallableSymbol
@@ -19,7 +20,7 @@ internal class KtFe10InvokeFunctionReference(expression: KtCallExpression) : KtI
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
require(this is KtFe10AnalysisSession)
val bindingContext = analyze(expression, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analyze(expression, AnalysisMode.PARTIAL)
val descriptor = expression.getResolvedCall(bindingContext)?.resultingDescriptor
return listOfNotNull(descriptor?.toKtCallableSymbol(this))
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.references
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10Reference
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtSymbol
@@ -22,7 +23,7 @@ internal class KtFe10SimpleNameReference(expression: KtSimpleNameExpression) : K
override fun KtAnalysisSession.resolveToSymbols(): Collection<KtSymbol> {
require(this is KtFe10AnalysisSession)
val bindingContext = analyze(expression, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analyze(expression, AnalysisMode.PARTIAL)
val descriptor = bindingContext[BindingContext.REFERENCE_TARGET, expression]
?: expression.getResolvedCall(bindingContext)?.resultingDescriptor
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElementResolveResult
import com.intellij.psi.ResolveResult
import com.intellij.psi.impl.source.resolve.ResolveCache
import org.jetbrains.kotlin.analysis.api.analyse
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.impl.base.util.runInPossiblyEdtThread
import org.jetbrains.kotlin.analysis.api.tokens.HackToForceAllowRunningAnalyzeOnEDT
@@ -28,7 +29,7 @@ object KtFe10PolyVariantResolver : ResolveCache.PolyVariantResolver<KtReference>
val expression = reference.expression
analyse(reference.expression) {
val session = this as KtFe10AnalysisSession
val bindingContext = session.analyze(expression, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = session.analyze(expression, AnalysisMode.PARTIAL)
val descriptor = when (expression) {
is KtReferenceExpression -> bindingContext[BindingContext.REFERENCE_TARGET, expression]
else -> expression.getResolvedCall(bindingContext)?.resultingDescriptor
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -27,7 +28,7 @@ internal class KtFe10PsiAnonymousFunctionSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtAnonymousFunctionSymbol(), KtFe10PsiSymbol<KtNamedFunction, FunctionDescriptor> {
override val descriptor: FunctionDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.FUNCTION, psi]
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -24,7 +25,7 @@ internal class KtFe10PsiAnonymousObjectSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtAnonymousObjectSymbol(), KtFe10PsiSymbol<KtObjectDeclaration, ClassDescriptor> {
override val descriptor: ClassDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.CLASS, psi]
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
@@ -36,7 +37,7 @@ internal class KtFe10PsiConstructorSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtConstructorSymbol(), KtFe10PsiSymbol<KtConstructor<*>, ConstructorDescriptor> {
override val descriptor: ConstructorDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.CONSTRUCTOR, psi]
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
@@ -29,7 +30,7 @@ internal class KtFe10PsiDefaultSetterParameterSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtValueParameterSymbol(), KtFe10Symbol {
private val descriptor: VariableDescriptor? by cached {
val bindingContext = analysisSession.analyze(accessorPsi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(accessorPsi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.PROPERTY_ACCESSOR, accessorPsi]?.valueParameters?.single()
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -30,7 +31,7 @@ internal class KtFe10PsiEnumEntrySymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtEnumEntrySymbol(), KtFe10PsiSymbol<KtEnumEntry, ClassDescriptor> {
override val descriptor: ClassDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.CLASS, psi]
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
@@ -39,7 +40,7 @@ internal class KtFe10PsiFunctionSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtFunctionSymbol(), KtFe10PsiSymbol<KtNamedFunction, FunctionDescriptor> {
override val descriptor: FunctionDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.FUNCTION, psi]
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtConstantValue
@@ -39,7 +40,7 @@ internal class KtFe10PsiKotlinPropertySymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtKotlinPropertySymbol(), KtFe10PsiSymbol<KtProperty, PropertyDescriptor> {
override val descriptor: PropertyDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.VARIABLE, psi] as? PropertyDescriptor
}
@@ -69,7 +70,7 @@ internal class KtFe10PsiKotlinPropertySymbol(
override val hasBackingField: Boolean
get() = withValidityAssertion {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.BACKING_FIELD_REQUIRED, descriptor] == true
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -27,7 +28,7 @@ internal class KtFe10PsiLocalVariableSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtLocalVariableSymbol(), KtFe10PsiSymbol<KtVariableDeclaration, VariableDescriptor> {
override val descriptor: VariableDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.VARIABLE, psi]
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSupertypesWithAny
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
@@ -41,7 +42,7 @@ internal class KtFe10PsiNamedClassOrObjectSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtNamedClassOrObjectSymbol(), KtFe10PsiSymbol<KtClassOrObject, ClassDescriptor> {
override val descriptor: ClassDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.CLASS, psi]
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
@@ -33,7 +34,7 @@ internal class KtFe10PsiPropertyGetterSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtPropertyGetterSymbol(), KtFe10PsiSymbol<KtPropertyAccessor, PropertyGetterDescriptor> {
override val descriptor: PropertyGetterDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.PROPERTY_ACCESSOR, psi] as? PropertyGetterDescriptor
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
@@ -34,7 +35,7 @@ internal class KtFe10PsiPropertySetterSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtPropertySetterSymbol(), KtFe10PsiSymbol<KtPropertyAccessor, PropertySetterDescriptor> {
override val descriptor: PropertySetterDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.PROPERTY_ACCESSOR, psi] as? PropertySetterDescriptor
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtTypeAndAnnotations
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -27,7 +28,7 @@ internal class KtFe10PsiValueParameterSymbol(
override val analysisSession: KtFe10AnalysisSession
) : KtValueParameterSymbol(), KtFe10PsiSymbol<KtParameter, VariableDescriptor> {
override val descriptor: VariableDescriptor? by cached {
val bindingContext = analysisSession.analyze(psi, KtFe10AnalysisSession.AnalysisMode.PARTIAL)
val bindingContext = analysisSession.analyze(psi, AnalysisMode.PARTIAL)
bindingContext[BindingContext.VALUE_PARAMETER, psi]
}
@@ -10,8 +10,10 @@ import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import org.jetbrains.kotlin.analysis.api.InvalidWayOfUsingAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.descriptors.CliFe10AnalysisFacade
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisHandlerExtension
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10CliAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.descriptors.references.base.KtFe10KotlinReferenceProviderContributor
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService
import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService
@@ -33,7 +35,8 @@ object KtFe10FrontendApiTestConfiguratorService : FrontendApiTestConfiguratorSer
@OptIn(InvalidWayOfUsingAnalysisSession::class)
override fun registerProjectServices(project: MockProject) {
project.registerService(KtAnalysisSessionProvider::class.java, KtFe10CliAnalysisSessionProvider(project))
project.registerService(KtAnalysisSessionProvider::class.java, KtFe10AnalysisSessionProvider())
project.registerService(Fe10AnalysisFacade::class.java, CliFe10AnalysisFacade(project))
AnalysisHandlerExtension.registerExtension(project, KtFe10AnalysisHandlerExtension())
}