[slc] rename fir to symbol

^KT-50241
This commit is contained in:
Dmitry Gridin
2022-08-08 19:57:04 +02:00
committed by Space
parent 97ecf43b77
commit c0d6a64a8a
55 changed files with 400 additions and 399 deletions
@@ -51,7 +51,7 @@ import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor
import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor
import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker
import org.jetbrains.kotlin.light.classes.symbol.KotlinAsJavaFirSupport import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport
import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService
@@ -157,7 +157,7 @@ public class StandaloneAnalysisAPISessionBuilder(
registerService(SymbolLightClassFacadeCache::class.java, SymbolLightClassFacadeCache(this)) registerService(SymbolLightClassFacadeCache::class.java, SymbolLightClassFacadeCache(this))
registerService(ClsJavaStubByVirtualFileCache::class.java, ClsJavaStubByVirtualFileCache()) registerService(ClsJavaStubByVirtualFileCache::class.java, ClsJavaStubByVirtualFileCache())
registerService(KotlinAsJavaSupport::class.java, KotlinAsJavaFirSupport(this)) registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(this))
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl())
} }
@@ -11,9 +11,9 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementFinder import com.intellij.psi.PsiElementFinder
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.decompiled.light.classes.ClsJavaStubByVirtualFileCache import org.jetbrains.kotlin.analysis.decompiled.light.classes.ClsJavaStubByVirtualFileCache
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor
import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor
import org.jetbrains.kotlin.light.classes.symbol.KotlinAsJavaFirSupport import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport
import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService
@@ -69,7 +69,7 @@ public fun configureApplicationEnvironment(app: MockApplication) {
* *
* In particular, this will register: * In particular, this will register:
* * [KtAnalysisSessionProvider] * * [KtAnalysisSessionProvider]
* * [KotlinAsJavaFirSupport] * * [SymbolKotlinAsJavaSupport]
* * [SymbolLightClassFacadeCache] for FIR light class support * * [SymbolLightClassFacadeCache] for FIR light class support
* * [ClsJavaStubByVirtualFileCache] * * [ClsJavaStubByVirtualFileCache]
* * [KotlinModificationTrackerFactory] * * [KotlinModificationTrackerFactory]
@@ -179,7 +179,7 @@ private fun reRegisterJavaElementFinder(project: Project) {
picoContainer.unregisterComponent(KotlinAsJavaSupport::class.qualifiedName) picoContainer.unregisterComponent(KotlinAsJavaSupport::class.qualifiedName)
picoContainer.registerComponentInstance( picoContainer.registerComponentInstance(
KotlinAsJavaSupport::class.qualifiedName, KotlinAsJavaSupport::class.qualifiedName,
KotlinAsJavaFirSupport(project) SymbolKotlinAsJavaSupport(project)
) )
} }
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -10,13 +10,14 @@ import com.intellij.mock.MockProject
import com.intellij.psi.PsiElementFinder import com.intellij.psi.PsiElementFinder
import com.intellij.psi.impl.PsiElementFinderImpl import com.intellij.psi.impl.PsiElementFinderImpl
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.PackagePartProviderFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.* import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirLibrarySessionFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.services.KtCompilerPluginsProviderForTests import org.jetbrains.kotlin.analysis.low.level.api.fir.services.KtCompilerPluginsProviderForTests
import org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLFirSealedClassInheritorsProcessorFactoryForTests import org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLFirSealedClassInheritorsProcessorFactoryForTests
import org.jetbrains.kotlin.analysis.low.level.api.fir.services.PackagePartProviderTestImpl import org.jetbrains.kotlin.analysis.low.level.api.fir.services.PackagePartProviderTestImpl
@@ -29,7 +30,7 @@ import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor
import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor
import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker
import org.jetbrains.kotlin.light.classes.symbol.KotlinAsJavaFirSupport import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport
import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache
import org.jetbrains.kotlin.test.TestInfrastructureInternals import org.jetbrains.kotlin.test.TestInfrastructureInternals
import org.jetbrains.kotlin.test.impl.testConfiguration import org.jetbrains.kotlin.test.impl.testConfiguration
@@ -52,7 +53,7 @@ object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices)) registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices))
registerService(SymbolLightClassFacadeCache::class.java) registerService(SymbolLightClassFacadeCache::class.java)
registerService(KotlinAsJavaSupport::class.java, KotlinAsJavaFirSupport(project)) registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(project))
registerService(KtCompilerPluginsProvider::class.java, KtCompilerPluginsProviderForTests(project)) registerService(KtCompilerPluginsProvider::class.java, KtCompilerPluginsProviderForTests(project))
registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl())
} }
@@ -12,12 +12,12 @@ import com.intellij.psi.scope.PsiScopeProcessor
import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateFirLightClass import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateSymbolLightClass
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
class FirFakeFileImpl(private val classOrObject: KtClassOrObject, ktClass: KtLightClass) : FakeFileForLightClass( class SymbolFakeFile(private val classOrObject: KtClassOrObject, ktClass: KtLightClass) : FakeFileForLightClass(
classOrObject.containingKtFile, classOrObject.containingKtFile,
{ if (classOrObject.isTopLevel()) ktClass else getOrCreateFirLightClass(getOutermostClassOrObject(classOrObject))!! }, { if (classOrObject.isTopLevel()) ktClass else getOrCreateSymbolLightClass(getOutermostClassOrObject(classOrObject))!! },
) { ) {
override fun findReferenceAt(offset: Int) = ktFile.findReferenceAt(offset) override fun findReferenceAt(offset: Int) = ktFile.findReferenceAt(offset)
@@ -19,9 +19,9 @@ import org.jetbrains.kotlin.asJava.classes.KtFakeLightClass
import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache import org.jetbrains.kotlin.light.classes.symbol.caches.SymbolLightClassFacadeCache
import org.jetbrains.kotlin.light.classes.symbol.classes.KtFirBasedFakeLightClass import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolBasedFakeLightClass
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateFirLightClass import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateSymbolLightClass
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.parentOrNull import org.jetbrains.kotlin.name.parentOrNull
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtScript import org.jetbrains.kotlin.psi.KtScript
class KotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupport() { class SymbolKotlinAsJavaSupport(private val project: Project) : KotlinAsJavaSupport() {
override fun findClassOrObjectDeclarationsInPackage( override fun findClassOrObjectDeclarationsInPackage(
packageFqName: FqName, packageFqName: FqName,
searchScope: GlobalSearchScope searchScope: GlobalSearchScope
@@ -82,7 +82,7 @@ class KotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupport
override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? { override fun getLightClass(classOrObject: KtClassOrObject): KtLightClass? {
return when (classOrObject.getKtModule(project)) { return when (classOrObject.getKtModule(project)) {
is KtSourceModule -> getOrCreateFirLightClass(classOrObject) is KtSourceModule -> getOrCreateSymbolLightClass(classOrObject)
is KtLibraryModule -> DecompiledLightClassesFactory.getLightClassForDecompiledClassOrObject(classOrObject, project) is KtLibraryModule -> DecompiledLightClassesFactory.getLightClassForDecompiledClassOrObject(classOrObject, project)
else -> null else -> null
} }
@@ -101,7 +101,7 @@ class KotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupport
error("Should not be called") error("Should not be called")
override fun getKotlinInternalClasses(fqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> = override fun getKotlinInternalClasses(fqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> =
emptyList() //TODO Implement if necessary for fir emptyList() //TODO Implement if necessary for symbol
override fun getFacadeClassesInPackage(packageFqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> = override fun getFacadeClassesInPackage(packageFqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> =
project.createDeclarationProvider(scope) project.createDeclarationProvider(scope)
@@ -124,7 +124,7 @@ class KotlinAsJavaFirSupport(private val project: Project) : KotlinAsJavaSupport
} }
override fun getFakeLightClass(classOrObject: KtClassOrObject): KtFakeLightClass = override fun getFakeLightClass(classOrObject: KtClassOrObject): KtFakeLightClass =
KtFirBasedFakeLightClass(classOrObject) SymbolBasedFakeLightClass(classOrObject)
override fun createFacadeForSyntheticFile(facadeClassFqName: FqName, file: KtFile): PsiClass = override fun createFacadeForSyntheticFile(facadeClassFqName: FqName, file: KtFile): PsiClass =
TODO("Not implemented") TODO("Not implemented")
@@ -15,13 +15,13 @@ import org.jetbrains.kotlin.psi.KtPropertyAccessor
import org.jetbrains.kotlin.psi.KtSecondaryConstructor import org.jetbrains.kotlin.psi.KtSecondaryConstructor
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
internal class FirLightIdentifier( internal class SymbolLightIdentifier(
lightOwner: PsiElement, lightOwner: PsiElement,
private val firSymbol: KtSymbol? private val ktSymbol: KtSymbol?
) : KtLightIdentifierBase(lightOwner, (firSymbol as? KtNamedSymbol)?.name?.identifierOrNullIfSpecial) { ) : KtLightIdentifierBase(lightOwner, (ktSymbol as? KtNamedSymbol)?.name?.identifierOrNullIfSpecial) {
override val origin: PsiElement? override val origin: PsiElement?
get() = when (val ktDeclaration = firSymbol?.psi) { get() = when (val ktDeclaration = ktSymbol?.psi) {
is KtSecondaryConstructor -> ktDeclaration.getConstructorKeyword() is KtSecondaryConstructor -> ktDeclaration.getConstructorKeyword()
is KtPrimaryConstructor -> ktDeclaration.getConstructorKeyword() is KtPrimaryConstructor -> ktDeclaration.getConstructorKeyword()
?: ktDeclaration.valueParameterList ?: ktDeclaration.valueParameterList
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.KtLightMember
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
internal abstract class FirLightMemberImpl<T : PsiMember>( internal abstract class SymbolLightMemberBase<T : PsiMember>(
override val lightMemberOrigin: LightMemberOrigin?, override val lightMemberOrigin: LightMemberOrigin?,
private val containingClass: KtLightClass, private val containingClass: KtLightClass,
) : KtLightElementBase(containingClass), PsiMember, KtLightMember<T> { ) : KtLightElementBase(containingClass), PsiMember, KtLightMember<T> {
@@ -14,14 +14,14 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.light.classes.symbol.toAnnotationMemberValue import org.jetbrains.kotlin.light.classes.symbol.toAnnotationMemberValue
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
internal class FirAnnotationParameterList( internal class SymbolAnnotationParameterList(
parent: FirLightAbstractAnnotation, parent: SymbolLightAbstractAnnotation,
private val arguments: List<KtNamedAnnotationValue>, private val arguments: List<KtNamedAnnotationValue>,
) : KtLightElementBase(parent), PsiAnnotationParameterList { ) : KtLightElementBase(parent), PsiAnnotationParameterList {
private val _attributes: Array<PsiNameValuePair> by lazyPub { private val _attributes: Array<PsiNameValuePair> by lazyPub {
arguments.map { arguments.map {
FirNameValuePairForAnnotationArgument(it, this) SymbolNameValuePairForAnnotationArgument(it, this)
}.toTypedArray() }.toTypedArray()
} }
@@ -32,7 +32,7 @@ internal class FirAnnotationParameterList(
//TODO: EQ GHC EQIV //TODO: EQ GHC EQIV
} }
private class FirNameValuePairForAnnotationArgument( private class SymbolNameValuePairForAnnotationArgument(
private val constantValue: KtNamedAnnotationValue, private val constantValue: KtNamedAnnotationValue,
parent: PsiElement parent: PsiElement
) : KtLightElementBase(parent), PsiNameValuePair { ) : KtLightElementBase(parent), PsiNameValuePair {
@@ -9,10 +9,10 @@ import com.intellij.psi.*
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
internal class FirPsiArrayInitializerMemberValue( internal class SymbolPsiArrayInitializerMemberValue(
override val kotlinOrigin: KtElement?, override val kotlinOrigin: KtElement?,
private val lightParent: PsiElement, private val lightParent: PsiElement,
private val arguments: (FirPsiArrayInitializerMemberValue) -> List<PsiAnnotationMemberValue> private val arguments: (SymbolPsiArrayInitializerMemberValue) -> List<PsiAnnotationMemberValue>
) : KtLightElementBase(lightParent), PsiArrayInitializerMemberValue { ) : KtLightElementBase(lightParent), PsiArrayInitializerMemberValue {
override fun getInitializers(): Array<PsiAnnotationMemberValue> = arguments(this).toTypedArray() override fun getInitializers(): Array<PsiAnnotationMemberValue> = arguments(this).toTypedArray()
@@ -23,7 +23,7 @@ internal class FirPsiArrayInitializerMemberValue(
override fun getText(): String = "{" + initializers.joinToString { it.text } + "}" override fun getText(): String = "{" + initializers.joinToString { it.text } + "}"
} }
internal abstract class FirPsiAnnotationMemberValue( internal abstract class SymbolPsiAnnotationMemberValue(
override val kotlinOrigin: KtElement?, override val kotlinOrigin: KtElement?,
private val lightParent: PsiElement, private val lightParent: PsiElement,
) : KtLightElementBase(lightParent), PsiAnnotationMemberValue { ) : KtLightElementBase(lightParent), PsiAnnotationMemberValue {
@@ -32,20 +32,20 @@ internal abstract class FirPsiAnnotationMemberValue(
override fun isPhysical(): Boolean = false override fun isPhysical(): Boolean = false
} }
internal class FirPsiExpression( internal class SymbolPsiExpression(
override val kotlinOrigin: KtElement?, override val kotlinOrigin: KtElement?,
lightParent: PsiElement, lightParent: PsiElement,
private val psiExpression: PsiExpression, private val psiExpression: PsiExpression,
) : FirPsiAnnotationMemberValue(kotlinOrigin, lightParent), PsiExpression { ) : SymbolPsiAnnotationMemberValue(kotlinOrigin, lightParent), PsiExpression {
override fun getType(): PsiType? = psiExpression.type override fun getType(): PsiType? = psiExpression.type
override fun getText(): String = psiExpression.text override fun getText(): String = psiExpression.text
} }
internal class FirPsiLiteral( internal class SymbolPsiLiteral(
override val kotlinOrigin: KtElement?, override val kotlinOrigin: KtElement?,
lightParent: PsiElement, lightParent: PsiElement,
private val psiLiteral: PsiLiteral, private val psiLiteral: PsiLiteral,
) : FirPsiAnnotationMemberValue(kotlinOrigin, lightParent), PsiLiteral { ) : SymbolPsiAnnotationMemberValue(kotlinOrigin, lightParent), PsiLiteral {
override fun getValue(): Any? = psiLiteral.value override fun getValue(): Any? = psiLiteral.value
override fun getText(): String = psiLiteral.text override fun getText(): String = psiLiteral.text
} }
@@ -10,11 +10,11 @@ import org.jetbrains.kotlin.asJava.classes.cannotModify
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.light.classes.symbol.codeReferences.FirLightPsiJavaCodeReferenceElementWithNoReference import org.jetbrains.kotlin.light.classes.symbol.codeReferences.SymbolLightPsiJavaCodeReferenceElementWithNoReference
import org.jetbrains.kotlin.light.classes.symbol.codeReferences.FirLightPsiJavaCodeReferenceElementWithReference import org.jetbrains.kotlin.light.classes.symbol.codeReferences.SymbolLightPsiJavaCodeReferenceElementWithReference
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
internal abstract class FirLightAbstractAnnotation(parent: PsiElement) : internal abstract class SymbolLightAbstractAnnotation(parent: PsiElement) :
KtLightElementBase(parent), PsiAnnotation, KtLightElement<KtCallElement, PsiAnnotation> { KtLightElementBase(parent), PsiAnnotation, KtLightElement<KtCallElement, PsiAnnotation> {
override fun getOwner() = parent as? PsiAnnotationOwner override fun getOwner() = parent as? PsiAnnotationOwner
@@ -30,18 +30,18 @@ internal abstract class FirLightAbstractAnnotation(parent: PsiElement) :
val reference = (kotlinOrigin as? KtAnnotationEntry)?.typeReference?.reference val reference = (kotlinOrigin as? KtAnnotationEntry)?.typeReference?.reference
?: (kotlinOrigin?.calleeExpression?.nameReference)?.references?.firstOrNull() ?: (kotlinOrigin?.calleeExpression?.nameReference)?.references?.firstOrNull()
if (reference != null) FirLightPsiJavaCodeReferenceElementWithReference(ktElement, reference) if (reference != null) SymbolLightPsiJavaCodeReferenceElementWithReference(ktElement, reference)
else FirLightPsiJavaCodeReferenceElementWithNoReference(ktElement) else SymbolLightPsiJavaCodeReferenceElementWithNoReference(ktElement)
} }
override fun getNameReferenceElement(): PsiJavaCodeReferenceElement = _nameReferenceElement override fun getNameReferenceElement(): PsiJavaCodeReferenceElement = _nameReferenceElement
private class FirAnnotationParameterList(parent: PsiAnnotation) : KtLightElementBase(parent), PsiAnnotationParameterList { private class SymbolAnnotationParameterList(parent: PsiAnnotation) : KtLightElementBase(parent), PsiAnnotationParameterList {
override val kotlinOrigin: KtElement? = null override val kotlinOrigin: KtElement? = null
override fun getAttributes(): Array<PsiNameValuePair> = emptyArray() //TODO() override fun getAttributes(): Array<PsiNameValuePair> = emptyArray() //TODO()
} }
private val annotationParameterList: PsiAnnotationParameterList = FirAnnotationParameterList(this) private val annotationParameterList: PsiAnnotationParameterList = SymbolAnnotationParameterList(this)
override fun getParameterList(): PsiAnnotationParameterList = annotationParameterList override fun getParameterList(): PsiAnnotationParameterList = annotationParameterList
@@ -15,10 +15,10 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtCallElement
internal class FirLightAnnotationForAnnotationCall( internal class SymbolLightAnnotationForAnnotationCall(
private val annotationCall: KtAnnotationApplication, private val annotationCall: KtAnnotationApplication,
parent: PsiElement, parent: PsiElement,
) : FirLightAbstractAnnotation(parent) { ) : SymbolLightAbstractAnnotation(parent) {
override fun findAttributeValue(attributeName: String?): PsiAnnotationMemberValue? = override fun findAttributeValue(attributeName: String?): PsiAnnotationMemberValue? =
PsiImplUtil.findAttributeValue(this, attributeName) PsiImplUtil.findAttributeValue(this, attributeName)
@@ -27,7 +27,7 @@ internal class FirLightAnnotationForAnnotationCall(
PsiImplUtil.findDeclaredAttributeValue(this, attributeName) PsiImplUtil.findDeclaredAttributeValue(this, attributeName)
private val _parameterList: PsiAnnotationParameterList by lazyPub { private val _parameterList: PsiAnnotationParameterList by lazyPub {
FirAnnotationParameterList(this@FirLightAnnotationForAnnotationCall, annotationCall.arguments) SymbolAnnotationParameterList(this@SymbolLightAnnotationForAnnotationCall, annotationCall.arguments)
} }
override fun getParameterList(): PsiAnnotationParameterList = _parameterList override fun getParameterList(): PsiAnnotationParameterList = _parameterList
@@ -40,7 +40,7 @@ internal class FirLightAnnotationForAnnotationCall(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightAnnotationForAnnotationCall && (other is SymbolLightAnnotationForAnnotationCall &&
kotlinOrigin == other.kotlinOrigin && kotlinOrigin == other.kotlinOrigin &&
annotationCall == other.annotationCall) annotationCall == other.annotationCall)
@@ -13,12 +13,12 @@ import org.jetbrains.kotlin.analysis.api.annotations.KtNamedAnnotationValue
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtCallElement
internal class FirLightSimpleAnnotation( internal class SymbolLightSimpleAnnotation(
private val fqName: String?, private val fqName: String?,
parent: PsiElement, parent: PsiElement,
private val arguments: List<KtNamedAnnotationValue> = listOf(), private val arguments: List<KtNamedAnnotationValue> = listOf(),
override val kotlinOrigin: KtCallElement? = null, override val kotlinOrigin: KtCallElement? = null,
) : FirLightAbstractAnnotation(parent) { ) : SymbolLightAbstractAnnotation(parent) {
override fun getQualifiedName(): String? = fqName override fun getQualifiedName(): String? = fqName
@@ -26,7 +26,7 @@ internal class FirLightSimpleAnnotation(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightSimpleAnnotation && fqName == other.fqName && parent == other.parent) (other is SymbolLightSimpleAnnotation && fqName == other.fqName && parent == other.parent)
override fun hashCode(): Int = fqName.hashCode() override fun hashCode(): Int = fqName.hashCode()
@@ -37,7 +37,7 @@ internal class FirLightSimpleAnnotation(
PsiImplUtil.findDeclaredAttributeValue(this, attributeName) PsiImplUtil.findDeclaredAttributeValue(this, attributeName)
private val _parameterList: PsiAnnotationParameterList by lazyPub { private val _parameterList: PsiAnnotationParameterList by lazyPub {
FirAnnotationParameterList(this@FirLightSimpleAnnotation, arguments) SymbolAnnotationParameterList(this@SymbolLightSimpleAnnotation, arguments)
} }
override fun getParameterList(): PsiAnnotationParameterList = _parameterList override fun getParameterList(): PsiAnnotationParameterList = _parameterList
@@ -102,7 +102,7 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
NullabilityType.Nullable -> Nullable::class.java NullabilityType.Nullable -> Nullable::class.java
else -> null else -> null
}?.let { }?.let {
FirLightSimpleAnnotation(it.name, parent) SymbolLightSimpleAnnotation(it.name, parent)
} }
val parentIsAnnotation = (parent as? PsiClass)?.isAnnotationType == true val parentIsAnnotation = (parent as? PsiClass)?.isAnnotationType == true
@@ -127,7 +127,7 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
if ((includeAnnotationsWithoutSite && siteTarget == null) || if ((includeAnnotationsWithoutSite && siteTarget == null) ||
siteTarget == annotationUseSiteTarget siteTarget == annotationUseSiteTarget
) { ) {
result.add(FirLightAnnotationForAnnotationCall(annotation, parent)) result.add(SymbolLightAnnotationForAnnotationCall(annotation, parent))
} }
} }
@@ -145,7 +145,7 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
} }
private fun createRetentionRuntimeAnnotation(parent: PsiElement): PsiAnnotation = private fun createRetentionRuntimeAnnotation(parent: PsiElement): PsiAnnotation =
FirLightSimpleAnnotation( SymbolLightSimpleAnnotation(
JAVA_LANG_ANNOTATION_RETENTION, JAVA_LANG_ANNOTATION_RETENTION,
parent, parent,
listOf( listOf(
@@ -14,9 +14,9 @@ import org.jetbrains.kotlin.analysis.utils.caches.softCachedValue
import org.jetbrains.kotlin.analysis.utils.collections.ConcurrentMapBasedCache import org.jetbrains.kotlin.analysis.utils.collections.ConcurrentMapBasedCache
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassForFacade import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForFacade
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.decompiled.KtLightClassForDecompiledFacade import org.jetbrains.kotlin.light.classes.symbol.decompiled.SymbolLightClassForDecompiledFacade
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -38,11 +38,11 @@ class SymbolLightClassFacadeCache(private val project: Project) {
if (ktFilesWithoutScript.isEmpty()) return null if (ktFilesWithoutScript.isEmpty()) return null
val key = FacadeKey(facadeClassFqName, ktFilesWithoutScript.toSet()) val key = FacadeKey(facadeClassFqName, ktFilesWithoutScript.toSet())
return cache.getOrPut(key) { return cache.getOrPut(key) {
getOrCreateFirLightFacadeNoCache(ktFilesWithoutScript, facadeClassFqName) getOrCreateSymbolLightFacadeNoCache(ktFilesWithoutScript, facadeClassFqName)
} }
} }
private fun getOrCreateFirLightFacadeNoCache( private fun getOrCreateSymbolLightFacadeNoCache(
ktFiles: List<KtFile>, ktFiles: List<KtFile>,
facadeClassFqName: FqName, facadeClassFqName: FqName,
): KtLightClassForFacade? { ): KtLightClassForFacade? {
@@ -50,7 +50,7 @@ class SymbolLightClassFacadeCache(private val project: Project) {
return when { return when {
ktFiles.none { it.isCompiled } -> ktFiles.none { it.isCompiled } ->
analyzeForLightClasses(firstFile) { analyzeForLightClasses(firstFile) {
FirLightClassForFacade(firstFile.manager, facadeClassFqName, ktFiles) SymbolLightClassForFacade(firstFile.manager, facadeClassFqName, ktFiles)
} }
ktFiles.all { it.isCompiled } -> { ktFiles.all { it.isCompiled } -> {
@@ -63,7 +63,7 @@ class SymbolLightClassFacadeCache(private val project: Project) {
correspondingClassOrObject = classOrObject, correspondingClassOrObject = classOrObject,
project = project, project = project,
) ?: return null ) ?: return null
KtLightClassForDecompiledFacade(clsDelegate, clsDelegate.parent, file, classOrObject, ktFiles) SymbolLightClassForDecompiledFacade(clsDelegate, clsDelegate.parent, file, classOrObject, ktFiles)
} }
else -> else ->
@@ -14,13 +14,13 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
//TODO Make fake class symbol based //TODO Make fake class symbol based
class KtFirBasedFakeLightClass(kotlinOrigin: KtClassOrObject) : class SymbolBasedFakeLightClass(kotlinOrigin: KtClassOrObject) :
KtFakeLightClass(kotlinOrigin) { KtFakeLightClass(kotlinOrigin) {
override fun copy(): KtFakeLightClass = KtFirBasedFakeLightClass(kotlinOrigin) override fun copy(): KtFakeLightClass = SymbolBasedFakeLightClass(kotlinOrigin)
private val _containingClass: KtFakeLightClass? by lazy { private val _containingClass: KtFakeLightClass? by lazy {
kotlinOrigin.containingClassOrObject?.let { KtFirBasedFakeLightClass(it) } kotlinOrigin.containingClassOrObject?.let { SymbolBasedFakeLightClass(it) }
} }
override fun getContainingClass(): KtFakeLightClass? = _containingClass override fun getContainingClass(): KtFakeLightClass? = _containingClass
@@ -17,10 +17,10 @@ import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightAnnotationClassSymbol( internal class SymbolLightAnnotationClassSymbol(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightInterfaceOrAnnotationClassSymbol(classOrObjectSymbol, manager) { ) : SymbolLightInterfaceOrAnnotationClass(classOrObjectSymbol, manager) {
init { init {
require(classOrObjectSymbol.classKind == KtClassKind.ANNOTATION_CLASS) require(classOrObjectSymbol.classKind == KtClassKind.ANNOTATION_CLASS)
@@ -51,12 +51,12 @@ internal class FirLightAnnotationClassSymbol(
override fun getExtendsList(): PsiReferenceList? = null override fun getExtendsList(): PsiReferenceList? = null
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
other is FirLightAnnotationClassSymbol && classOrObjectSymbol == other.classOrObjectSymbol other is SymbolLightAnnotationClassSymbol && classOrObjectSymbol == other.classOrObjectSymbol
override fun hashCode(): Int = classOrObjectSymbol.hashCode() override fun hashCode(): Int = classOrObjectSymbol.hashCode()
override fun isValid(): Boolean = super.isValid() && classOrObjectSymbol.isValid() override fun isValid(): Boolean = super.isValid() && classOrObjectSymbol.isValid()
override fun copy(): FirLightClassForClassOrObjectSymbol = FirLightAnnotationClassSymbol(classOrObjectSymbol, manager) override fun copy(): SymbolLightClassForClassOrObject = SymbolLightAnnotationClassSymbol(classOrObjectSymbol, manager)
} }
@@ -20,19 +20,19 @@ 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.KtLightIdentifier 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.light.classes.symbol.FirFakeFileImpl import org.jetbrains.kotlin.light.classes.symbol.SymbolFakeFile
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
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
import org.jetbrains.kotlin.psi.debugText.getDebugText import org.jetbrains.kotlin.psi.debugText.getDebugText
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightAnonymousClassForSymbol( internal class SymbolLightAnonymousClassForSymbol(
private val anonymousObjectSymbol: KtAnonymousObjectSymbol, private val anonymousObjectSymbol: KtAnonymousObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightClassBase(manager), ) : SymbolLightClassBase(manager),
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>>, PsiAnonymousClass { StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>>, PsiAnonymousClass {
private val _baseClassType: PsiClassType by lazyPub { private val _baseClassType: PsiClassType by lazyPub {
@@ -68,7 +68,7 @@ internal class FirLightAnonymousClassForSymbol(
private val _ownFields: List<KtLightField> by lazyPub { private val _ownFields: List<KtLightField> by lazyPub {
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
val nameGenerator = FirLightField.FieldNameGenerator() val nameGenerator = SymbolLightField.FieldNameGenerator()
anonymousObjectSymbol.getDeclaredMemberScope().getCallableSymbols() anonymousObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
.filterIsInstance<KtPropertySymbol>() .filterIsInstance<KtPropertySymbol>()
@@ -86,7 +86,7 @@ internal class FirLightAnonymousClassForSymbol(
result result
} }
private val _ownInnerClasses: List<FirLightClassBase> by lazyPub { private val _ownInnerClasses: List<SymbolLightClassBase> by lazyPub {
anonymousObjectSymbol.createInnerClasses(manager, this, kotlinOrigin) anonymousObjectSymbol.createInnerClasses(manager, this, kotlinOrigin)
} }
@@ -132,19 +132,19 @@ internal class FirLightAnonymousClassForSymbol(
//TODO Make containing file not null for symbol without psi //TODO Make containing file not null for symbol without psi
private val _containingFile: PsiFile? by lazyPub { private val _containingFile: PsiFile? by lazyPub {
val kotlinOrigin = kotlinOrigin ?: return@lazyPub null val kotlinOrigin = kotlinOrigin ?: return@lazyPub null
FirFakeFileImpl(kotlinOrigin, this) SymbolFakeFile(kotlinOrigin, this)
} }
override fun getContainingFile(): PsiFile? = _containingFile override fun getContainingFile(): PsiFile? = _containingFile
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightAnonymousClassForSymbol && anonymousObjectSymbol == other.anonymousObjectSymbol) (other is SymbolLightAnonymousClassForSymbol && anonymousObjectSymbol == other.anonymousObjectSymbol)
override fun hashCode(): Int = anonymousObjectSymbol.hashCode() override fun hashCode(): Int = anonymousObjectSymbol.hashCode()
override fun copy() = override fun copy() =
FirLightAnonymousClassForSymbol(anonymousObjectSymbol, manager) SymbolLightAnonymousClassForSymbol(anonymousObjectSymbol, manager)
override fun isValid(): Boolean = super.isValid() && anonymousObjectSymbol.isValid() override fun isValid(): Boolean = super.isValid() && anonymousObjectSymbol.isValid()
@@ -23,11 +23,11 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.light.classes.symbol.* import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForObjectSymbol import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightSimpleMethodForSymbol import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
@@ -39,10 +39,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions.TO_STRING
import org.jetbrains.kotlin.utils.addToStdlib.applyIf import org.jetbrains.kotlin.utils.addToStdlib.applyIf
context(KtAnalysisSession) context(KtAnalysisSession)
internal open class FirLightClassForSymbol( internal open class SymbolLightClass(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightClassForClassOrObjectSymbol(classOrObjectSymbol, manager) { ) : SymbolLightClassForClassOrObject(classOrObjectSymbol, manager) {
init { init {
require(classOrObjectSymbol.classKind != KtClassKind.INTERFACE && classOrObjectSymbol.classKind != KtClassKind.ANNOTATION_CLASS) require(classOrObjectSymbol.classKind != KtClassKind.INTERFACE && classOrObjectSymbol.classKind != KtClassKind.ANNOTATION_CLASS)
@@ -59,12 +59,12 @@ internal open class FirLightClassForSymbol(
} }
val annotations = classOrObjectSymbol.computeAnnotations( val annotations = classOrObjectSymbol.computeAnnotations(
parent = this@FirLightClassForSymbol, parent = this@SymbolLightClass,
nullability = NullabilityType.Unknown, nullability = NullabilityType.Unknown,
annotationUseSiteTarget = null, annotationUseSiteTarget = null,
) )
FirLightClassModifierList(this@FirLightClassForSymbol, modifiers, annotations) SymbolLightClassModifierList(this@SymbolLightClass, modifiers, annotations)
} }
override fun getModifierList(): PsiModifierList? = _modifierList override fun getModifierList(): PsiModifierList? = _modifierList
@@ -120,7 +120,7 @@ internal open class FirLightClassForSymbol(
// Similar to `copy`, synthetic members from `Any` should refer to `data` class as origin, not the function in `Any`. // Similar to `copy`, synthetic members from `Any` should refer to `data` class as origin, not the function in `Any`.
val lightMemberOrigin = LightMemberOriginForDeclaration(this.kotlinOrigin!!, JvmDeclarationOriginKind.OTHER) val lightMemberOrigin = LightMemberOriginForDeclaration(this.kotlinOrigin!!, JvmDeclarationOriginKind.OTHER)
result.add( result.add(
FirLightSimpleMethodForSymbol( SymbolLightSimpleMethod(
ktFunctionSymbol, lightMemberOrigin, this, METHOD_INDEX_BASE, false, ktFunctionSymbol, lightMemberOrigin, this, METHOD_INDEX_BASE, false,
suppressStatic = false suppressStatic = false
) )
@@ -170,7 +170,7 @@ internal open class FirLightClassForSymbol(
val kotlinOrigin = ktFunctionSymbol.psi as? KtDeclaration ?: kotlinOrigin!! val kotlinOrigin = ktFunctionSymbol.psi as? KtDeclaration ?: kotlinOrigin!!
val lightMemberOrigin = LightMemberOriginForDeclaration(kotlinOrigin, JvmDeclarationOriginKind.DELEGATION) val lightMemberOrigin = LightMemberOriginForDeclaration(kotlinOrigin, JvmDeclarationOriginKind.DELEGATION)
result.add( result.add(
FirLightSimpleMethodForSymbol( SymbolLightSimpleMethod(
ktFunctionSymbol, ktFunctionSymbol,
lightMemberOrigin, lightMemberOrigin,
this, this,
@@ -220,7 +220,7 @@ internal open class FirLightClassForSymbol(
} }
val propertyGroups = propertySymbols.groupBy { it.isFromPrimaryConstructor } val propertyGroups = propertySymbols.groupBy { it.isFromPrimaryConstructor }
val nameGenerator = FirLightField.FieldNameGenerator() val nameGenerator = SymbolLightField.FieldNameGenerator()
fun addPropertyBackingField(propertySymbol: KtPropertySymbol) { fun addPropertyBackingField(propertySymbol: KtPropertySymbol) {
val isJvmField = propertySymbol.hasJvmFieldAnnotation() val isJvmField = propertySymbol.hasJvmFieldAnnotation()
@@ -248,9 +248,9 @@ internal open class FirLightClassForSymbol(
private fun addInstanceFieldIfNeeded(result: MutableList<KtLightField>) { private fun addInstanceFieldIfNeeded(result: MutableList<KtLightField>) {
if (classOrObjectSymbol.isNamedObject && !classOrObjectSymbol.isLocal) { if (classOrObjectSymbol.isNamedObject && !classOrObjectSymbol.isLocal) {
result.add( result.add(
FirLightFieldForObjectSymbol( SymbolLightFieldForObject(
objectSymbol = classOrObjectSymbol, objectSymbol = classOrObjectSymbol,
containingClass = this@FirLightClassForSymbol, containingClass = this@SymbolLightClass,
name = JvmAbi.INSTANCE_FIELD, name = JvmAbi.INSTANCE_FIELD,
lightMemberOrigin = null lightMemberOrigin = null
) )
@@ -262,7 +262,7 @@ internal open class FirLightClassForSymbol(
if (isEnum) { if (isEnum) {
classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols() classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
.filterIsInstance<KtEnumEntrySymbol>() .filterIsInstance<KtEnumEntrySymbol>()
.mapTo(result) { FirLightFieldForEnumEntry(it, this@FirLightClassForSymbol, null) } .mapTo(result) { SymbolLightFieldForEnumEntry(it, this@SymbolLightClass, null) }
} }
} }
@@ -278,7 +278,7 @@ internal open class FirLightClassForSymbol(
override fun hashCode(): Int = classOrObjectSymbol.hashCode() override fun hashCode(): Int = classOrObjectSymbol.hashCode()
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || (other is FirLightClassForSymbol && classOrObjectSymbol == other.classOrObjectSymbol) this === other || (other is SymbolLightClass && classOrObjectSymbol == other.classOrObjectSymbol)
override fun isInterface(): Boolean = false override fun isInterface(): Boolean = false
@@ -287,8 +287,8 @@ internal open class FirLightClassForSymbol(
override fun isEnum(): Boolean = override fun isEnum(): Boolean =
classOrObjectSymbol.classKind == KtClassKind.ENUM_CLASS classOrObjectSymbol.classKind == KtClassKind.ENUM_CLASS
override fun copy(): FirLightClassForSymbol = override fun copy(): SymbolLightClass =
FirLightClassForSymbol(classOrObjectSymbol, manager) SymbolLightClass(classOrObjectSymbol, manager)
override fun isValid(): Boolean = super.isValid() && classOrObjectSymbol.isValid() override fun isValid(): Boolean = super.isValid() && classOrObjectSymbol.isValid()
} }
@@ -27,10 +27,10 @@ import org.jetbrains.kotlin.idea.KotlinLanguage
import javax.swing.Icon import javax.swing.Icon
context(KtAnalysisSession) context(KtAnalysisSession)
abstract class FirLightClassBase protected constructor( abstract class SymbolLightClassBase protected constructor(
manager: PsiManager manager: PsiManager
) : LightElement(manager, KotlinLanguage.INSTANCE), PsiClass, KtExtensibleLightClass { ) : LightElement(manager, KotlinLanguage.INSTANCE), PsiClass, KtExtensibleLightClass {
private class FirLightClassesLazyCreator(private val project: Project) : KotlinClassInnerStuffCache.LazyCreator() { private class SymbolLightClassesLazyCreator(private val project: Project) : KotlinClassInnerStuffCache.LazyCreator() {
@OptIn(KtAllowAnalysisOnEdt::class) @OptIn(KtAllowAnalysisOnEdt::class)
override fun <T : Any> get(initializer: () -> T, dependencies: List<Any>): Lazy<T> = object : Lazy<T> { override fun <T : Any> get(initializer: () -> T, dependencies: List<Any>): Lazy<T> = object : Lazy<T> {
private val cachedValue = PsiCachedValueImpl(PsiManager.getInstance(project)) { private val cachedValue = PsiCachedValueImpl(PsiManager.getInstance(project)) {
@@ -50,9 +50,9 @@ abstract class FirLightClassBase protected constructor(
} }
private val myInnersCache = KotlinClassInnerStuffCache( private val myInnersCache = KotlinClassInnerStuffCache(
myClass = this@FirLightClassBase, myClass = this@SymbolLightClassBase,
dependencies = listOf(manager.project.createProjectWideOutOfBlockModificationTracker()), dependencies = listOf(manager.project.createProjectWideOutOfBlockModificationTracker()),
lazyCreator = FirLightClassesLazyCreator(project) lazyCreator = SymbolLightClassesLazyCreator(project)
) )
override fun getFields(): Array<PsiField> = myInnersCache.fields override fun getFields(): Array<PsiField> = myInnersCache.fields
@@ -169,7 +169,7 @@ abstract class FirLightClassBase protected constructor(
override fun getInitializers(): Array<PsiClassInitializer> = PsiClassInitializer.EMPTY_ARRAY override fun getInitializers(): Array<PsiClassInitializer> = PsiClassInitializer.EMPTY_ARRAY
override fun getElementIcon(flags: Int): Icon? = override fun getElementIcon(flags: Int): Icon? =
throw UnsupportedOperationException("This should be done by KotlinFirIconProvider") throw UnsupportedOperationException("This should be done by KotlinIconProvider")
override fun getVisibleSignatures(): MutableCollection<HierarchicalMethodSignature> = PsiSuperMethodImplUtil.getVisibleSignatures(this) override fun getVisibleSignatures(): MutableCollection<HierarchicalMethodSignature> = PsiSuperMethodImplUtil.getVisibleSignatures(this)
@@ -21,12 +21,16 @@ 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
import org.jetbrains.kotlin.light.classes.symbol.* import org.jetbrains.kotlin.light.classes.symbol.SymbolFakeFile
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.allowLightClassesOnEdt
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForObjectSymbol import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForPropertySymbol import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
import org.jetbrains.kotlin.psi.KtClassBody import org.jetbrains.kotlin.psi.KtClassBody
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -38,10 +42,10 @@ import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
context(KtAnalysisSession) context(KtAnalysisSession)
internal abstract class FirLightClassForClassOrObjectSymbol( internal abstract class SymbolLightClassForClassOrObject(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightClassBase(manager), ) : SymbolLightClassBase(manager),
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> { StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
protected val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL protected val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL
@@ -60,7 +64,7 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
abstract override fun getOwnMethods(): List<PsiMethod> abstract override fun getOwnMethods(): List<PsiMethod>
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, classOrObjectSymbol) SymbolLightIdentifier(this, classOrObjectSymbol)
} }
override fun getNameIdentifier(): PsiIdentifier? = _identifier override fun getNameIdentifier(): PsiIdentifier? = _identifier
@@ -70,7 +74,7 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
private val _typeParameterList: PsiTypeParameterList? by lazyPub { private val _typeParameterList: PsiTypeParameterList? by lazyPub {
hasTypeParameters().ifTrue { hasTypeParameters().ifTrue {
FirLightTypeParameterListForSymbol( SymbolLightTypeParameterList(
owner = this, owner = this,
symbolWithTypeParameterList = classOrObjectSymbol, symbolWithTypeParameterList = classOrObjectSymbol,
) )
@@ -84,7 +88,7 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
override fun getTypeParameters(): Array<PsiTypeParameter> = override fun getTypeParameters(): Array<PsiTypeParameter> =
_typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
private val _ownInnerClasses: List<FirLightClassBase> by lazyPub { private val _ownInnerClasses: List<SymbolLightClassBase> by lazyPub {
classOrObjectSymbol.createInnerClasses(manager, this, kotlinOrigin) classOrObjectSymbol.createInnerClasses(manager, this, kotlinOrigin)
} }
@@ -118,9 +122,9 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
protected fun addCompanionObjectFieldIfNeeded(result: MutableList<KtLightField>) { protected fun addCompanionObjectFieldIfNeeded(result: MutableList<KtLightField>) {
classOrObjectSymbol.companionObject?.run { classOrObjectSymbol.companionObject?.run {
result.add( result.add(
FirLightFieldForObjectSymbol( SymbolLightFieldForObject(
objectSymbol = this, objectSymbol = this,
containingClass = this@FirLightClassForClassOrObjectSymbol, containingClass = this@SymbolLightClassForClassOrObject,
name = name.asString(), name = name.asString(),
lightMemberOrigin = null lightMemberOrigin = null
) )
@@ -136,10 +140,10 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
filter { it.hasJvmFieldAnnotation() || it.isConst } filter { it.hasJvmFieldAnnotation() || it.isConst }
} }
.mapTo(result) { .mapTo(result) {
FirLightFieldForPropertySymbol( SymbolLightFieldForProperty(
propertySymbol = it, propertySymbol = it,
fieldName = it.name.asString(), fieldName = it.name.asString(),
containingClass = this@FirLightClassForClassOrObjectSymbol, containingClass = this@SymbolLightClassForClassOrObject,
lightMemberOrigin = null, lightMemberOrigin = null,
isTopLevel = false, isTopLevel = false,
forceStatic = true, forceStatic = true,
@@ -156,9 +160,9 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
val kotlinOrigin = kotlinOrigin ?: return@lazyPub null val kotlinOrigin = kotlinOrigin ?: return@lazyPub null
val containingClass = isTopLevel.ifFalse { getOrCreateFirLightClass(getOutermostClassOrObject(kotlinOrigin)) } ?: this val containingClass = isTopLevel.ifFalse { getOrCreateSymbolLightClass(getOutermostClassOrObject(kotlinOrigin)) } ?: this
FirFakeFileImpl(kotlinOrigin, containingClass) SymbolFakeFile(kotlinOrigin, containingClass)
} }
override fun getContainingFile(): PsiFile? = _containingFile override fun getContainingFile(): PsiFile? = _containingFile
@@ -205,7 +209,7 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
override fun getContainingClass(): PsiClass? { override fun getContainingClass(): PsiClass? {
val containingBody = kotlinOrigin?.parent as? KtClassBody val containingBody = kotlinOrigin?.parent as? KtClassBody
val containingClass = containingBody?.parent as? KtClassOrObject val containingClass = containingBody?.parent as? KtClassOrObject
containingClass?.let { return getOrCreateFirLightClass(it) } containingClass?.let { return getOrCreateSymbolLightClass(it) }
return null return null
} }
@@ -221,5 +225,5 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean =
baseClass?.let { InheritanceImplUtil.isInheritorDeep(this, it, classToByPass) } ?: false baseClass?.let { InheritanceImplUtil.isInheritorDeep(this, it, classToByPass) } ?: false
abstract override fun copy(): FirLightClassForClassOrObjectSymbol abstract override fun copy(): SymbolLightClassForClassOrObject
} }
@@ -14,26 +14,26 @@ import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.light.classes.symbol.codeReferences.FirLightPsiJavaCodeReferenceElementWithNoReference import org.jetbrains.kotlin.light.classes.symbol.codeReferences.SymbolLightPsiJavaCodeReferenceElementWithNoReference
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
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
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightClassForEnumEntry( internal class SymbolLightClassForEnumEntry(
private val enumEntrySymbol: KtEnumEntrySymbol, private val enumEntrySymbol: KtEnumEntrySymbol,
private val enumConstant: FirLightFieldForEnumEntry, private val enumConstant: SymbolLightFieldForEnumEntry,
private val enumClass: FirLightClassForSymbol, private val enumClass: SymbolLightClass,
manager: PsiManager manager: PsiManager
) : FirLightClassBase(manager), PsiEnumConstantInitializer { ) : SymbolLightClassBase(manager), PsiEnumConstantInitializer {
override fun getName(): String? = enumEntrySymbol.name.asString() override fun getName(): String? = enumEntrySymbol.name.asString()
override fun getBaseClassType(): PsiClassType = enumConstant.type as PsiClassType //???TODO override fun getBaseClassType(): PsiClassType = enumConstant.type as PsiClassType //???TODO
override fun getBaseClassReference(): PsiJavaCodeReferenceElement = override fun getBaseClassReference(): PsiJavaCodeReferenceElement =
FirLightPsiJavaCodeReferenceElementWithNoReference(enumConstant) //???TODO SymbolLightPsiJavaCodeReferenceElementWithNoReference(enumConstant) //???TODO
override fun getArgumentList(): PsiExpressionList? = null override fun getArgumentList(): PsiExpressionList? = null
@@ -42,21 +42,21 @@ internal class FirLightClassForEnumEntry(
override fun isInQualifiedNew(): Boolean = false override fun isInQualifiedNew(): Boolean = false
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
other is FirLightClassForEnumEntry && other is SymbolLightClassForEnumEntry &&
this.enumEntrySymbol == other.enumEntrySymbol this.enumEntrySymbol == other.enumEntrySymbol
override fun hashCode(): Int = override fun hashCode(): Int =
enumEntrySymbol.hashCode() enumEntrySymbol.hashCode()
override fun copy(): PsiElement = override fun copy(): PsiElement =
FirLightClassForEnumEntry(enumEntrySymbol, enumConstant, enumClass, manager) SymbolLightClassForEnumEntry(enumEntrySymbol, enumConstant, enumClass, manager)
override fun toString(): String = "FirLightClassForEnumEntry for $name" override fun toString(): String = "SymbolLightClassForEnumEntry:$name"
override fun getNameIdentifier(): PsiIdentifier? = null //TODO override fun getNameIdentifier(): PsiIdentifier? = null //TODO
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
FirLightClassModifierList( SymbolLightClassModifierList(
containingDeclaration = this, containingDeclaration = this,
modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.STATIC, PsiModifier.FINAL), modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.STATIC, PsiModifier.FINAL),
annotations = emptyList() annotations = emptyList()
@@ -86,7 +86,7 @@ internal class FirLightClassForEnumEntry(
private val _extendsList: PsiReferenceList? by lazyPub { private val _extendsList: PsiReferenceList? by lazyPub {
val mappedType = val mappedType =
enumEntrySymbol.returnType.asPsiType(this@FirLightClassForEnumEntry, KtTypeMappingMode.SUPER_TYPE) as? PsiClassType enumEntrySymbol.returnType.asPsiType(this@SymbolLightClassForEnumEntry, KtTypeMappingMode.SUPER_TYPE) as? PsiClassType
?: return@lazyPub null ?: return@lazyPub null
@@ -30,8 +30,8 @@ import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasInlineOnlyAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasInlineOnlyAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmMultifileClassAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmMultifileClassAnnotation
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -39,11 +39,11 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
context(KtAnalysisSession) context(KtAnalysisSession)
class FirLightClassForFacade( class SymbolLightClassForFacade(
manager: PsiManager, manager: PsiManager,
override val facadeClassFqName: FqName, override val facadeClassFqName: FqName,
override val files: Collection<KtFile> override val files: Collection<KtFile>
) : FirLightClassBase(manager), KtLightClassForFacade { ) : SymbolLightClassBase(manager), KtLightClassForFacade {
init { init {
require(files.isNotEmpty()) require(files.isNotEmpty())
@@ -71,14 +71,14 @@ class FirLightClassForFacade(
val annotations = fileSymbols.flatMap { val annotations = fileSymbols.flatMap {
it.computeAnnotations( it.computeAnnotations(
this@FirLightClassForFacade, this@SymbolLightClassForFacade,
NullabilityType.Unknown, NullabilityType.Unknown,
AnnotationUseSiteTarget.FILE, AnnotationUseSiteTarget.FILE,
includeAnnotationsWithoutSite = false includeAnnotationsWithoutSite = false
) )
} }
FirLightClassModifierList(this@FirLightClassForFacade, modifiers, annotations) SymbolLightClassModifierList(this@SymbolLightClassForFacade, modifiers, annotations)
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
@@ -111,7 +111,7 @@ class FirLightClassForFacade(
private fun loadFieldsFromFile( private fun loadFieldsFromFile(
fileScope: KtScope, fileScope: KtScope,
nameGenerator: FirLightField.FieldNameGenerator, nameGenerator: SymbolLightField.FieldNameGenerator,
result: MutableList<KtLightField> result: MutableList<KtLightField>
) { ) {
for (propertySymbol in fileScope.getCallableSymbols()) { for (propertySymbol in fileScope.getCallableSymbols()) {
@@ -147,7 +147,7 @@ class FirLightClassForFacade(
private val _ownFields: List<KtLightField> by lazyPub { private val _ownFields: List<KtLightField> by lazyPub {
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
val nameGenerator = FirLightField.FieldNameGenerator() val nameGenerator = SymbolLightField.FieldNameGenerator()
for (fileSymbol in fileSymbols) { for (fileSymbol in fileSymbols) {
loadFieldsFromFile(fileSymbol.getFileScope(), nameGenerator, result) loadFieldsFromFile(fileSymbol.getFileScope(), nameGenerator, result)
} }
@@ -158,8 +158,8 @@ class FirLightClassForFacade(
override fun getOwnMethods() = _ownMethods override fun getOwnMethods() = _ownMethods
override fun copy(): FirLightClassForFacade = override fun copy(): SymbolLightClassForFacade =
FirLightClassForFacade(manager, facadeClassFqName, files) SymbolLightClassForFacade(manager, facadeClassFqName, files)
private val packageFqName: FqName = private val packageFqName: FqName =
facadeClassFqName.parent() facadeClassFqName.parent()
@@ -230,7 +230,7 @@ class FirLightClassForFacade(
override fun getNavigationElement() = firstFileInFacade override fun getNavigationElement() = firstFileInFacade
override fun isEquivalentTo(another: PsiElement?): Boolean = override fun isEquivalentTo(another: PsiElement?): Boolean =
equals(another) || another is FirLightClassForFacade && another.qualifiedName == qualifiedName equals(another) || another is SymbolLightClassForFacade && another.qualifiedName == qualifiedName
override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean { override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean {
return baseClass.qualifiedName == CommonClassNames.JAVA_LANG_OBJECT return baseClass.qualifiedName == CommonClassNames.JAVA_LANG_OBJECT
@@ -247,7 +247,7 @@ class FirLightClassForFacade(
arrayOf(PsiType.getJavaLangObject(manager, resolveScope)) arrayOf(PsiType.getJavaLangObject(manager, resolveScope))
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (other !is FirLightClassForFacade) return false if (other !is SymbolLightClassForFacade) return false
if (this === other) return true if (this === other) return true
if (this.hashCode() != other.hashCode()) return false if (this.hashCode() != other.hashCode()) return false
@@ -260,7 +260,7 @@ class FirLightClassForFacade(
override fun hashCode() = facadeClassFqName.hashCode() override fun hashCode() = facadeClassFqName.hashCode()
override fun toString() = "${FirLightClassForFacade::class.java.simpleName}:$facadeClassFqName" override fun toString() = "${SymbolLightClassForFacade::class.java.simpleName}:$facadeClassFqName"
override val originKind: LightClassOriginKind override val originKind: LightClassOriginKind
get() = LightClassOriginKind.SOURCE get() = LightClassOriginKind.SOURCE
@@ -10,29 +10,29 @@ import com.intellij.util.IncorrectOperationException
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightClassForInterfaceDefaultImpls( internal class SymbolLightClassForInterfaceDefaultImpls(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
private val containingClass: FirLightClassBase, private val containingClass: SymbolLightClassBase,
manager: PsiManager manager: PsiManager
) : FirLightInterfaceClassSymbol(classOrObjectSymbol, manager) { ) : SymbolLightInterfaceClass(classOrObjectSymbol, manager) {
override fun getQualifiedName(): String? = containingClass.qualifiedName?.let { it + ".${JvmAbi.DEFAULT_IMPLS_CLASS_NAME}" } override fun getQualifiedName(): String? = containingClass.qualifiedName?.let { it + ".${JvmAbi.DEFAULT_IMPLS_CLASS_NAME}" }
override fun getName() = JvmAbi.DEFAULT_IMPLS_CLASS_NAME override fun getName() = JvmAbi.DEFAULT_IMPLS_CLASS_NAME
override fun getParent() = containingClass override fun getParent() = containingClass
override fun copy() = override fun copy() =
FirLightClassForInterfaceDefaultImpls(classOrObjectSymbol, containingClass, manager) SymbolLightClassForInterfaceDefaultImpls(classOrObjectSymbol, containingClass, manager)
override fun getTypeParameterList(): PsiTypeParameterList? = null override fun getTypeParameterList(): PsiTypeParameterList? = null
override fun getTypeParameters(): Array<PsiTypeParameter> = emptyArray() override fun getTypeParameters(): Array<PsiTypeParameter> = emptyArray()
private val _modifierList: PsiModifierList? by lazyPub { private val _modifierList: PsiModifierList? by lazyPub {
val modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.STATIC, PsiModifier.FINAL) val modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.STATIC, PsiModifier.FINAL)
FirLightClassModifierList(this@FirLightClassForInterfaceDefaultImpls, modifiers, emptyList()) SymbolLightClassModifierList(this@SymbolLightClassForInterfaceDefaultImpls, modifiers, emptyList())
} }
override fun getModifierList(): PsiModifierList? = _modifierList override fun getModifierList(): PsiModifierList? = _modifierList
@@ -17,10 +17,10 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightInlineClass( internal class SymbolLightInlineClass(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightClassForSymbol(classOrObjectSymbol, manager) { ) : SymbolLightClass(classOrObjectSymbol, manager) {
init { init {
require(classOrObjectSymbol.isInline) require(classOrObjectSymbol.isInline)
@@ -61,6 +61,5 @@ internal class FirLightInlineClass(
override fun getOwnFields(): List<KtLightField> = emptyList() override fun getOwnFields(): List<KtLightField> = emptyList()
override fun copy(): FirLightInlineClass = override fun copy(): SymbolLightInlineClass = SymbolLightInlineClass(classOrObjectSymbol, manager)
FirLightInlineClass(classOrObjectSymbol, manager)
} }
@@ -19,10 +19,10 @@ import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightMethod
context(KtAnalysisSession) context(KtAnalysisSession)
internal open class FirLightInterfaceClassSymbol( internal open class SymbolLightInterfaceClass(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightInterfaceOrAnnotationClassSymbol(classOrObjectSymbol, manager) { ) : SymbolLightInterfaceOrAnnotationClass(classOrObjectSymbol, manager) {
init { init {
require(classOrObjectSymbol.classKind == KtClassKind.INTERFACE) require(classOrObjectSymbol.classKind == KtClassKind.INTERFACE)
@@ -52,14 +52,13 @@ internal open class FirLightInterfaceClassSymbol(
override fun getOwnMethods(): List<PsiMethod> = _ownMethods override fun getOwnMethods(): List<PsiMethod> = _ownMethods
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
other === this || (other is FirLightInterfaceClassSymbol && classOrObjectSymbol == other.classOrObjectSymbol) other === this || (other is SymbolLightInterfaceClass && classOrObjectSymbol == other.classOrObjectSymbol)
override fun hashCode(): Int = classOrObjectSymbol.hashCode() override fun hashCode(): Int = classOrObjectSymbol.hashCode()
override fun isAnnotationType(): Boolean = false override fun isAnnotationType(): Boolean = false
override fun copy(): FirLightClassForClassOrObjectSymbol = override fun copy(): SymbolLightClassForClassOrObject = SymbolLightInterfaceClass(classOrObjectSymbol, manager)
FirLightInterfaceClassSymbol(classOrObjectSymbol, manager)
private val _extendsList: PsiReferenceList by lazyPub { private val _extendsList: PsiReferenceList by lazyPub {
createInheritanceList(forExtendsList = true, classOrObjectSymbol.superTypes) createInheritanceList(forExtendsList = true, classOrObjectSymbol.superTypes)
@@ -16,14 +16,14 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForClass import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForClass
context(KtAnalysisSession) context(KtAnalysisSession)
internal abstract class FirLightInterfaceOrAnnotationClassSymbol( internal abstract class SymbolLightInterfaceOrAnnotationClass(
private val classOrObjectSymbol: KtNamedClassOrObjectSymbol, private val classOrObjectSymbol: KtNamedClassOrObjectSymbol,
manager: PsiManager manager: PsiManager
) : FirLightClassForClassOrObjectSymbol(classOrObjectSymbol, manager) { ) : SymbolLightClassForClassOrObject(classOrObjectSymbol, manager) {
init { init {
require( require(
@@ -41,12 +41,12 @@ internal abstract class FirLightInterfaceOrAnnotationClassSymbol(
} }
val annotations = classOrObjectSymbol.computeAnnotations( val annotations = classOrObjectSymbol.computeAnnotations(
parent = this@FirLightInterfaceOrAnnotationClassSymbol, parent = this@SymbolLightInterfaceOrAnnotationClass,
nullability = NullabilityType.Unknown, nullability = NullabilityType.Unknown,
annotationUseSiteTarget = null, annotationUseSiteTarget = null,
) )
FirLightClassModifierList(this@FirLightInterfaceOrAnnotationClassSymbol, modifiers, annotations) SymbolLightClassModifierList(this@SymbolLightInterfaceOrAnnotationClass, modifiers, annotations)
} }
override fun getModifierList(): PsiModifierList? = _modifierList override fun getModifierList(): PsiModifierList? = _modifierList
@@ -34,13 +34,13 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.light.classes.symbol.* import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.* import org.jetbrains.kotlin.light.classes.symbol.annotations.*
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightField import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.fields.FirLightFieldForPropertySymbol import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightAccessorMethodForSymbol import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAccessorMethod
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightConstructorForSymbol import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightConstructor
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightNoArgConstructor import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightNoArgConstructor
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightSimpleMethodForSymbol import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightSimpleMethod
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
@@ -48,17 +48,17 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClass
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
import java.util.* import java.util.*
internal fun getOrCreateFirLightClass(classOrObject: KtClassOrObject): KtLightClass? = internal fun getOrCreateSymbolLightClass(classOrObject: KtClassOrObject): KtLightClass? =
CachedValuesManager.getCachedValue(classOrObject) { CachedValuesManager.getCachedValue(classOrObject) {
CachedValueProvider.Result CachedValueProvider.Result
.create( .create(
createFirLightClassNoCache(classOrObject), createSymbolLightClassNoCache(classOrObject),
classOrObject.project.createProjectWideOutOfBlockModificationTracker() classOrObject.project.createProjectWideOutOfBlockModificationTracker()
) )
} }
@OptIn(KtAllowAnalysisOnEdt::class) @OptIn(KtAllowAnalysisOnEdt::class)
internal fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLightClass? = allowAnalysisOnEdt { internal fun createSymbolLightClassNoCache(classOrObject: KtClassOrObject): KtLightClass? = allowAnalysisOnEdt {
val containingFile = classOrObject.containingFile val containingFile = classOrObject.containingFile
if (containingFile is KtCodeFragment) { if (containingFile is KtCodeFragment) {
@@ -86,7 +86,7 @@ internal fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLight
classOrObject.hasModifier(INLINE_KEYWORD) -> { classOrObject.hasModifier(INLINE_KEYWORD) -> {
analyzeForLightClasses(classOrObject) { analyzeForLightClasses(classOrObject) {
classOrObject.getNamedClassOrObjectSymbol()?.let { FirLightInlineClass(it, classOrObject.manager) } classOrObject.getNamedClassOrObjectSymbol()?.let { SymbolLightInlineClass(it, classOrObject.manager) }
} }
} }
@@ -100,12 +100,12 @@ internal fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLight
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun KtClassOrObjectSymbol.createLightClassNoCache(manager: PsiManager): FirLightClassBase = when (this) { internal fun KtClassOrObjectSymbol.createLightClassNoCache(manager: PsiManager): SymbolLightClassBase = when (this) {
is KtAnonymousObjectSymbol -> FirLightAnonymousClassForSymbol(this, manager) is KtAnonymousObjectSymbol -> SymbolLightAnonymousClassForSymbol(this, manager)
is KtNamedClassOrObjectSymbol -> when (classKind) { is KtNamedClassOrObjectSymbol -> when (classKind) {
KtClassKind.INTERFACE -> FirLightInterfaceClassSymbol(this, manager) KtClassKind.INTERFACE -> SymbolLightInterfaceClass(this, manager)
KtClassKind.ANNOTATION_CLASS -> FirLightAnnotationClassSymbol(this, manager) KtClassKind.ANNOTATION_CLASS -> SymbolLightAnnotationClassSymbol(this, manager)
else -> FirLightClassForSymbol(this, manager) else -> SymbolLightClass(this, manager)
} }
} }
@@ -113,20 +113,20 @@ context(KtAnalysisSession)
private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? { private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? {
if (ktEnumEntry.body == null) return null if (ktEnumEntry.body == null) return null
val firClass = ktEnumEntry val symbolLightClass = ktEnumEntry
.containingClass() .containingClass()
?.let { getOrCreateFirLightClass(it) } as? FirLightClassForSymbol ?.let { getOrCreateSymbolLightClass(it) } as? SymbolLightClass
?: return null ?: return null
val targetField = firClass.ownFields val targetField = symbolLightClass.ownFields
.firstOrNull { it is FirLightFieldForEnumEntry && it.kotlinOrigin == ktEnumEntry } .firstOrNull { it is SymbolLightFieldForEnumEntry && it.kotlinOrigin == ktEnumEntry }
?: return null ?: return null
return (targetField as? FirLightFieldForEnumEntry)?.initializingClass as? KtLightClass return (targetField as? SymbolLightFieldForEnumEntry)?.initializingClass as? KtLightClass
} }
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun FirLightClassBase.createConstructors( internal fun SymbolLightClassBase.createConstructors(
declarations: Sequence<KtConstructorSymbol>, declarations: Sequence<KtConstructorSymbol>,
result: MutableList<KtLightMethod> result: MutableList<KtLightMethod>
) { ) {
@@ -138,7 +138,7 @@ internal fun FirLightClassBase.createConstructors(
for (constructor in constructors) { for (constructor in constructors) {
if (constructor.isHiddenOrSynthetic()) continue if (constructor.isHiddenOrSynthetic()) continue
result.add( result.add(
FirLightConstructorForSymbol( SymbolLightConstructor(
constructorSymbol = constructor, constructorSymbol = constructor,
lightMemberOrigin = null, lightMemberOrigin = null,
containingClass = this@createConstructors, containingClass = this@createConstructors,
@@ -155,7 +155,7 @@ internal fun FirLightClassBase.createConstructors(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
private fun FirLightClassBase.shouldGenerateNoArgOverload( private fun SymbolLightClassBase.shouldGenerateNoArgOverload(
primaryConstructor: KtConstructorSymbol, primaryConstructor: KtConstructorSymbol,
constructors: Iterable<KtConstructorSymbol>, constructors: Iterable<KtConstructorSymbol>,
): Boolean { ): Boolean {
@@ -170,7 +170,7 @@ private fun FirLightClassBase.shouldGenerateNoArgOverload(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
private fun FirLightClassBase.defaultConstructor(): KtLightMethod { private fun SymbolLightClassBase.defaultConstructor(): KtLightMethod {
val classOrObject = kotlinOrigin val classOrObject = kotlinOrigin
val visibility = when { val visibility = when {
classOrObject is KtObjectDeclaration || classOrObject?.hasModifier(SEALED_KEYWORD) == true || isEnum -> PsiModifier.PRIVATE classOrObject is KtObjectDeclaration || classOrObject?.hasModifier(SEALED_KEYWORD) == true || isEnum -> PsiModifier.PRIVATE
@@ -181,11 +181,11 @@ private fun FirLightClassBase.defaultConstructor(): KtLightMethod {
} }
context(KtAnalysisSession) context(KtAnalysisSession)
private fun FirLightClassBase.noArgConstructor( private fun SymbolLightClassBase.noArgConstructor(
visibility: String, visibility: String,
methodIndex: Int, methodIndex: Int,
): KtLightMethod { ): KtLightMethod {
return FirLightNoArgConstructor( return SymbolLightNoArgConstructor(
LightMemberOriginForDeclaration( LightMemberOriginForDeclaration(
originalElement = kotlinOrigin!!, originalElement = kotlinOrigin!!,
originKind = JvmDeclarationOriginKind.OTHER, originKind = JvmDeclarationOriginKind.OTHER,
@@ -198,7 +198,7 @@ private fun FirLightClassBase.noArgConstructor(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun FirLightClassBase.createMethods( internal fun SymbolLightClassBase.createMethods(
declarations: Sequence<KtCallableSymbol>, declarations: Sequence<KtCallableSymbol>,
result: MutableList<KtLightMethod>, result: MutableList<KtLightMethod>,
isTopLevel: Boolean = false, isTopLevel: Boolean = false,
@@ -216,7 +216,7 @@ internal fun FirLightClassBase.createMethods(
var methodIndex = METHOD_INDEX_BASE var methodIndex = METHOD_INDEX_BASE
result.add( result.add(
FirLightSimpleMethodForSymbol( SymbolLightSimpleMethod(
functionSymbol = declaration, functionSymbol = declaration,
lightMemberOrigin = null, lightMemberOrigin = null,
containingClass = this@createMethods, containingClass = this@createMethods,
@@ -236,7 +236,7 @@ internal fun FirLightClassBase.createMethods(
skipMask.set(i) skipMask.set(i)
result.add( result.add(
FirLightSimpleMethodForSymbol( SymbolLightSimpleMethod(
declaration, null, this@createMethods, methodIndex++, isTopLevel, skipMask.copy() declaration, null, this@createMethods, methodIndex++, isTopLevel, skipMask.copy()
) )
) )
@@ -267,7 +267,7 @@ internal fun FirLightClassBase.createMethods(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun FirLightClassBase.createPropertyAccessors( internal fun SymbolLightClassBase.createPropertyAccessors(
result: MutableList<KtLightMethod>, result: MutableList<KtLightMethod>,
declaration: KtPropertySymbol, declaration: KtPropertySymbol,
isTopLevel: Boolean, isTopLevel: Boolean,
@@ -309,7 +309,7 @@ internal fun FirLightClassBase.createPropertyAccessors(
} }
result.add( result.add(
FirLightAccessorMethodForSymbol( SymbolLightAccessorMethod(
propertyAccessorSymbol = getter, propertyAccessorSymbol = getter,
containingPropertySymbol = declaration, containingPropertySymbol = declaration,
lightMemberOrigin = lightMemberOrigin, lightMemberOrigin = lightMemberOrigin,
@@ -333,7 +333,7 @@ internal fun FirLightClassBase.createPropertyAccessors(
) )
} }
result.add( result.add(
FirLightAccessorMethodForSymbol( SymbolLightAccessorMethod(
propertyAccessorSymbol = setter, propertyAccessorSymbol = setter,
containingPropertySymbol = declaration, containingPropertySymbol = declaration,
lightMemberOrigin = lightMemberOrigin, lightMemberOrigin = lightMemberOrigin,
@@ -346,9 +346,9 @@ internal fun FirLightClassBase.createPropertyAccessors(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun FirLightClassBase.createField( internal fun SymbolLightClassBase.createField(
declaration: KtPropertySymbol, declaration: KtPropertySymbol,
nameGenerator: FirLightField.FieldNameGenerator, nameGenerator: SymbolLightField.FieldNameGenerator,
isTopLevel: Boolean, isTopLevel: Boolean,
forceStatic: Boolean, forceStatic: Boolean,
takePropertyVisibility: Boolean, takePropertyVisibility: Boolean,
@@ -377,7 +377,7 @@ internal fun FirLightClassBase.createField(
) )
result.add( result.add(
FirLightFieldForPropertySymbol( SymbolLightFieldForProperty(
propertySymbol = declaration, propertySymbol = declaration,
fieldName = fieldName, fieldName = fieldName,
containingClass = this, containingClass = this,
@@ -390,7 +390,7 @@ internal fun FirLightClassBase.createField(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun FirLightClassBase.createInheritanceList(forExtendsList: Boolean, superTypes: List<KtType>): PsiReferenceList { internal fun SymbolLightClassBase.createInheritanceList(forExtendsList: Boolean, superTypes: List<KtType>): PsiReferenceList {
val role = if (forExtendsList) PsiReferenceList.Role.EXTENDS_LIST else PsiReferenceList.Role.IMPLEMENTS_LIST val role = if (forExtendsList) PsiReferenceList.Role.EXTENDS_LIST else PsiReferenceList.Role.IMPLEMENTS_LIST
@@ -434,10 +434,10 @@ internal fun FirLightClassBase.createInheritanceList(forExtendsList: Boolean, su
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun KtSymbolWithMembers.createInnerClasses( internal fun KtSymbolWithMembers.createInnerClasses(
manager: PsiManager, manager: PsiManager,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
classOrObject: KtClassOrObject? classOrObject: KtClassOrObject?
): List<FirLightClassBase> { ): List<SymbolLightClassBase> {
val result = ArrayList<FirLightClassBase>() val result = ArrayList<SymbolLightClassBase>()
// workaround for ClassInnerStuffCache not supporting classes with null names, see KT-13927 // workaround for ClassInnerStuffCache not supporting classes with null names, see KT-13927
// inner classes with null names can't be searched for and can't be used from java anyway // inner classes with null names can't be searched for and can't be used from java anyway
@@ -456,7 +456,7 @@ internal fun KtSymbolWithMembers.createInnerClasses(
classOrObject?.hasInterfaceDefaultImpls == true && classOrObject?.hasInterfaceDefaultImpls == true &&
jvmDefaultMode != JvmDefaultMode.ALL_INCOMPATIBLE jvmDefaultMode != JvmDefaultMode.ALL_INCOMPATIBLE
) { ) {
result.add(FirLightClassForInterfaceDefaultImpls(this, containingClass, manager)) result.add(SymbolLightClassForInterfaceDefaultImpls(this, containingClass, manager))
} }
return result return result
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.light.classes.symbol.codeReferences
import com.intellij.psi.* import com.intellij.psi.*
import com.intellij.psi.scope.PsiScopeProcessor import com.intellij.psi.scope.PsiScopeProcessor
internal abstract class FirLightPsiJavaCodeReferenceElementBase(private val ktElement: PsiElement) : internal abstract class SymbolLightPsiJavaCodeReferenceElementBase(private val ktElement: PsiElement) :
PsiElement by ktElement, PsiElement by ktElement,
PsiJavaCodeReferenceElement { PsiJavaCodeReferenceElement {
@@ -10,8 +10,8 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference import com.intellij.psi.PsiReference
import com.intellij.util.IncorrectOperationException import com.intellij.util.IncorrectOperationException
internal class FirLightPsiJavaCodeReferenceElementWithNoReference(private val ktElement: PsiElement) : internal class SymbolLightPsiJavaCodeReferenceElementWithNoReference(private val ktElement: PsiElement) :
FirLightPsiJavaCodeReferenceElementBase(ktElement), SymbolLightPsiJavaCodeReferenceElementBase(ktElement),
PsiReference { PsiReference {
override fun getElement(): PsiElement = ktElement override fun getElement(): PsiElement = ktElement
@@ -26,7 +26,7 @@ internal class FirLightPsiJavaCodeReferenceElementWithNoReference(private val kt
@Throws(IncorrectOperationException::class) @Throws(IncorrectOperationException::class)
override fun bindToElement(element: PsiElement): PsiElement = override fun bindToElement(element: PsiElement): PsiElement =
throw IncorrectOperationException("can't rename FirLightPsiJavaCodeReferenceElementWithNoReference") throw IncorrectOperationException("can't rename SymbolLightPsiJavaCodeReferenceElementWithNoReference")
override fun isReferenceTo(element: PsiElement): Boolean = false override fun isReferenceTo(element: PsiElement): Boolean = false
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.light.classes.symbol.codeReferences
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference import com.intellij.psi.PsiReference
internal class FirLightPsiJavaCodeReferenceElementWithReference(private val ktElement: PsiElement, reference: PsiReference) : internal class SymbolLightPsiJavaCodeReferenceElementWithReference(private val ktElement: PsiElement, reference: PsiReference) :
FirLightPsiJavaCodeReferenceElementBase(ktElement), SymbolLightPsiJavaCodeReferenceElementBase(ktElement),
PsiReference by reference { PsiReference by reference {
override fun getElement(): PsiElement = ktElement override fun getElement(): PsiElement = ktElement
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
internal class KtLightClassForDecompiledFacade( internal class SymbolLightClassForDecompiledFacade(
clsDelegate: PsiClass, clsDelegate: PsiClass,
clsParent: PsiElement, clsParent: PsiElement,
file: KtClsFile, file: KtClsFile,
@@ -17,15 +17,15 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.cannotModify
import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.light.classes.symbol.FirLightMemberImpl import org.jetbrains.kotlin.light.classes.symbol.SymbolLightMemberBase
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration
import javax.swing.Icon import javax.swing.Icon
internal abstract class FirLightField protected constructor( internal abstract class SymbolLightField protected constructor(
private val containingClass: KtLightClass, private val containingClass: KtLightClass,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
) : FirLightMemberImpl<PsiField>(lightMemberOrigin, containingClass), KtLightField { ) : SymbolLightMemberBase<PsiField>(lightMemberOrigin, containingClass), KtLightField {
override fun setInitializer(initializer: PsiExpression?) = cannotModify() override fun setInitializer(initializer: PsiExpression?) = cannotModify()
override fun isEquivalentTo(another: PsiElement?): Boolean = override fun isEquivalentTo(another: PsiElement?): Boolean =
@@ -12,24 +12,24 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.cannotModify
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.FirLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClass
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassForSymbol import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.psi.KtEnumEntry import org.jetbrains.kotlin.psi.KtEnumEntry
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightFieldForEnumEntry( internal class SymbolLightFieldForEnumEntry(
private val enumEntrySymbol: KtEnumEntrySymbol, private val enumEntrySymbol: KtEnumEntrySymbol,
containingClass: FirLightClassForSymbol, containingClass: SymbolLightClass,
override val lightMemberOrigin: LightMemberOrigin? override val lightMemberOrigin: LightMemberOrigin?
) : FirLightField(containingClass, lightMemberOrigin), PsiEnumConstant { ) : SymbolLightField(containingClass, lightMemberOrigin), PsiEnumConstant {
private val _modifierList by lazyPub { private val _modifierList by lazyPub {
FirLightMemberModifierList( SymbolLightMemberModifierList(
containingDeclaration = this@FirLightFieldForEnumEntry, containingDeclaration = this@SymbolLightFieldForEnumEntry,
modifiers = setOf(PsiModifier.STATIC, PsiModifier.FINAL, PsiModifier.PUBLIC), modifiers = setOf(PsiModifier.STATIC, PsiModifier.FINAL, PsiModifier.PUBLIC),
annotations = emptyList() annotations = emptyList()
) )
@@ -46,9 +46,9 @@ internal class FirLightFieldForEnumEntry(
private val _initializingClass: PsiEnumConstantInitializer? by lazyPub { private val _initializingClass: PsiEnumConstantInitializer? by lazyPub {
hasBody.ifTrue { hasBody.ifTrue {
FirLightClassForEnumEntry( SymbolLightClassForEnumEntry(
enumEntrySymbol = enumEntrySymbol, enumEntrySymbol = enumEntrySymbol,
enumConstant = this@FirLightFieldForEnumEntry, enumConstant = this@SymbolLightFieldForEnumEntry,
enumClass = containingClass, enumClass = containingClass,
manager = manager manager = manager
) )
@@ -71,7 +71,7 @@ internal class FirLightFieldForEnumEntry(
override fun getName(): String = enumEntrySymbol.name.asString() override fun getName(): String = enumEntrySymbol.name.asString()
private val _type: PsiType by lazyPub { private val _type: PsiType by lazyPub {
enumEntrySymbol.returnType.asPsiType(this@FirLightFieldForEnumEntry) ?: nonExistentType() enumEntrySymbol.returnType.asPsiType(this@SymbolLightFieldForEnumEntry) ?: nonExistentType()
} }
override fun getType(): PsiType = _type override fun getType(): PsiType = _type
@@ -80,7 +80,7 @@ internal class FirLightFieldForEnumEntry(
override fun hashCode(): Int = enumEntrySymbol.hashCode() override fun hashCode(): Int = enumEntrySymbol.hashCode()
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, enumEntrySymbol) SymbolLightIdentifier(this, enumEntrySymbol)
} }
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
@@ -88,7 +88,5 @@ internal class FirLightFieldForEnumEntry(
override fun isValid(): Boolean = super.isValid() && enumEntrySymbol.isValid() override fun isValid(): Boolean = super.isValid() && enumEntrySymbol.isValid()
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean = other is SymbolLightFieldForEnumEntry && enumEntrySymbol == other.enumEntrySymbol
other is FirLightFieldForEnumEntry &&
enumEntrySymbol == other.enumEntrySymbol
} }
@@ -13,21 +13,21 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.FirLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirLightSimpleAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightFieldForObjectSymbol( internal class SymbolLightFieldForObject(
private val objectSymbol: KtNamedClassOrObjectSymbol, private val objectSymbol: KtNamedClassOrObjectSymbol,
containingClass: KtLightClass, containingClass: KtLightClass,
private val name: String, private val name: String,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
) : FirLightField(containingClass, lightMemberOrigin) { ) : SymbolLightField(containingClass, lightMemberOrigin) {
override val kotlinOrigin: KtDeclaration? = objectSymbol.psi as? KtDeclaration override val kotlinOrigin: KtDeclaration? = objectSymbol.psi as? KtDeclaration
@@ -35,8 +35,8 @@ internal class FirLightFieldForObjectSymbol(
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
val modifiers = setOf(objectSymbol.toPsiVisibilityForMember(isTopLevel = false), PsiModifier.STATIC, PsiModifier.FINAL) val modifiers = setOf(objectSymbol.toPsiVisibilityForMember(isTopLevel = false), PsiModifier.STATIC, PsiModifier.FINAL)
val notNullAnnotation = FirLightSimpleAnnotation(NotNull::class.java.name, this) val notNullAnnotation = SymbolLightSimpleAnnotation(NotNull::class.java.name, this)
FirLightMemberModifierList(this, modifiers, listOf(notNullAnnotation)) SymbolLightMemberModifierList(this, modifiers, listOf(notNullAnnotation))
} }
private val _isDeprecated: Boolean by lazyPub { private val _isDeprecated: Boolean by lazyPub {
@@ -48,12 +48,12 @@ internal class FirLightFieldForObjectSymbol(
override fun getModifierList(): PsiModifierList? = _modifierList override fun getModifierList(): PsiModifierList? = _modifierList
private val _type: PsiType by lazyPub { private val _type: PsiType by lazyPub {
objectSymbol.buildSelfClassType().asPsiType(this@FirLightFieldForObjectSymbol) objectSymbol.buildSelfClassType().asPsiType(this@SymbolLightFieldForObject)
?: nonExistentType() ?: nonExistentType()
} }
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, objectSymbol) SymbolLightIdentifier(this, objectSymbol)
} }
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
@@ -65,7 +65,7 @@ internal class FirLightFieldForObjectSymbol(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightFieldForObjectSymbol && (other is SymbolLightFieldForObject &&
kotlinOrigin == other.kotlinOrigin && kotlinOrigin == other.kotlinOrigin &&
objectSymbol == other.objectSymbol) objectSymbol == other.objectSymbol)
@@ -20,23 +20,23 @@ import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.name.JvmNames.TRANSIENT_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.name.JvmNames.TRANSIENT_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.name.JvmNames.VOLATILE_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.name.JvmNames.VOLATILE_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtProperty
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightFieldForPropertySymbol( internal class SymbolLightFieldForProperty(
private val propertySymbol: KtPropertySymbol, private val propertySymbol: KtPropertySymbol,
private val fieldName: String, private val fieldName: String,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
isTopLevel: Boolean, isTopLevel: Boolean,
forceStatic: Boolean, forceStatic: Boolean,
takePropertyVisibility: Boolean takePropertyVisibility: Boolean
) : FirLightField(containingClass, lightMemberOrigin) { ) : SymbolLightField(containingClass, lightMemberOrigin) {
override val kotlinOrigin: KtDeclaration? = propertySymbol.psi as? KtDeclaration override val kotlinOrigin: KtDeclaration? = propertySymbol.psi as? KtDeclaration
@@ -45,11 +45,11 @@ internal class FirLightFieldForPropertySymbol(
when { when {
isDelegated -> isDelegated ->
(kotlinOrigin as? KtProperty)?.delegateExpression?.let { (kotlinOrigin as? KtProperty)?.delegateExpression?.let {
it.getKtType()?.asPsiType(this@FirLightFieldForPropertySymbol, KtTypeMappingMode.RETURN_TYPE) it.getKtType()?.asPsiType(this@SymbolLightFieldForProperty, KtTypeMappingMode.RETURN_TYPE)
} }
else -> { else -> {
propertySymbol.returnType.asPsiType(this@FirLightFieldForPropertySymbol, KtTypeMappingMode.RETURN_TYPE) propertySymbol.returnType.asPsiType(this@SymbolLightFieldForProperty, KtTypeMappingMode.RETURN_TYPE)
} }
} ?: nonExistentType() } ?: nonExistentType()
} }
@@ -61,7 +61,7 @@ internal class FirLightFieldForPropertySymbol(
override fun isDeprecated(): Boolean = _isDeprecated override fun isDeprecated(): Boolean = _isDeprecated
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, propertySymbol) SymbolLightIdentifier(this, propertySymbol)
} }
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
@@ -110,7 +110,7 @@ internal class FirLightFieldForPropertySymbol(
annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD, annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD,
) )
FirLightMemberModifierList(this, modifiers, annotations) SymbolLightMemberModifierList(this, modifiers, annotations)
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
@@ -127,7 +127,7 @@ internal class FirLightFieldForPropertySymbol(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightFieldForPropertySymbol && (other is SymbolLightFieldForProperty &&
kotlinOrigin == other.kotlinOrigin && kotlinOrigin == other.kotlinOrigin &&
propertySymbol == other.propertySymbol) propertySymbol == other.propertySymbol)
@@ -20,10 +20,10 @@ import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightSetterParameterForSymbol import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightSetterParameter
import org.jetbrains.kotlin.load.java.JvmAbi.getterName import org.jetbrains.kotlin.load.java.JvmAbi.getterName
import org.jetbrains.kotlin.load.java.JvmAbi.setterName import org.jetbrains.kotlin.load.java.JvmAbi.setterName
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
@@ -31,14 +31,14 @@ import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightAccessorMethodForSymbol( internal class SymbolLightAccessorMethod(
private val propertyAccessorSymbol: KtPropertyAccessorSymbol, private val propertyAccessorSymbol: KtPropertyAccessorSymbol,
private val containingPropertySymbol: KtPropertySymbol, private val containingPropertySymbol: KtPropertySymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
private val isTopLevel: Boolean, private val isTopLevel: Boolean,
private val suppressStatic: Boolean = false, private val suppressStatic: Boolean = false,
) : FirLightMethod( ) : SymbolLightMethodBase(
lightMemberOrigin, lightMemberOrigin,
containingClass, containingClass,
if (propertyAccessorSymbol is KtPropertyGetterSymbol) METHOD_INDEX_FOR_GETTER else METHOD_INDEX_FOR_SETTER if (propertyAccessorSymbol is KtPropertyGetterSymbol) METHOD_INDEX_FOR_GETTER else METHOD_INDEX_FOR_SETTER
@@ -73,7 +73,7 @@ internal class FirLightAccessorMethodForSymbol(
if (propertyAccessorSymbol is KtPropertyGetterSymbol) AnnotationUseSiteTarget.PROPERTY_GETTER if (propertyAccessorSymbol is KtPropertyGetterSymbol) AnnotationUseSiteTarget.PROPERTY_GETTER
else AnnotationUseSiteTarget.PROPERTY_SETTER else AnnotationUseSiteTarget.PROPERTY_SETTER
//TODO Fix it when KtFirConstructorValueParameterSymbol be ready //TODO Fix it when SymbolConstructorValueParameter be ready
private val isParameter: Boolean get() = containingPropertySymbol.psi.let { it == null || it is KtParameter } private val isParameter: Boolean get() = containingPropertySymbol.psi.let { it == null || it is KtParameter }
private fun computeAnnotations(isPrivate: Boolean): List<PsiAnnotation> { private fun computeAnnotations(isPrivate: Boolean): List<PsiAnnotation> {
@@ -135,7 +135,7 @@ internal class FirLightAccessorMethodForSymbol(
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
val modifiers = computeModifiers() val modifiers = computeModifiers()
val annotations = computeAnnotations(modifiers.contains(PsiModifier.PRIVATE)) val annotations = computeAnnotations(modifiers.contains(PsiModifier.PRIVATE))
FirLightMemberModifierList(this, modifiers, annotations) SymbolLightMemberModifierList(this, modifiers, annotations)
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
@@ -149,7 +149,7 @@ internal class FirLightAccessorMethodForSymbol(
override fun isDeprecated(): Boolean = _isDeprecated override fun isDeprecated(): Boolean = _isDeprecated
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, containingPropertySymbol) SymbolLightIdentifier(this, containingPropertySymbol)
} }
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
@@ -157,7 +157,7 @@ internal class FirLightAccessorMethodForSymbol(
private val _returnedType: PsiType by lazyPub { private val _returnedType: PsiType by lazyPub {
if (!isGetter) return@lazyPub PsiType.VOID if (!isGetter) return@lazyPub PsiType.VOID
containingPropertySymbol.returnType.asPsiType( containingPropertySymbol.returnType.asPsiType(
this@FirLightAccessorMethodForSymbol, this@SymbolLightAccessorMethod,
KtTypeMappingMode.RETURN_TYPE, KtTypeMappingMode.RETURN_TYPE,
containingClass.isAnnotationType containingClass.isAnnotationType
) ?: nonExistentType() ) ?: nonExistentType()
@@ -167,7 +167,7 @@ internal class FirLightAccessorMethodForSymbol(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightAccessorMethodForSymbol && (other is SymbolLightAccessorMethod &&
isGetter == other.isGetter && isGetter == other.isGetter &&
kotlinOrigin == other.kotlinOrigin && kotlinOrigin == other.kotlinOrigin &&
propertyAccessorSymbol == other.propertyAccessorSymbol) propertyAccessorSymbol == other.propertyAccessorSymbol)
@@ -176,12 +176,12 @@ internal class FirLightAccessorMethodForSymbol(
private val _parametersList by lazyPub { private val _parametersList by lazyPub {
FirLightParameterList(this, containingPropertySymbol) { builder -> SymbolLightParameterList(this, containingPropertySymbol) { builder ->
val propertyParameter = (propertyAccessorSymbol as? KtPropertySetterSymbol)?.parameter val propertyParameter = (propertyAccessorSymbol as? KtPropertySetterSymbol)?.parameter
if (propertyParameter != null) { if (propertyParameter != null) {
builder.addParameter( builder.addParameter(
FirLightSetterParameterForSymbol( SymbolLightSetterParameter(
containingPropertySymbol, propertyParameter, this@FirLightAccessorMethodForSymbol containingPropertySymbol, propertyParameter, this@SymbolLightAccessorMethod
) )
) )
} }
@@ -14,18 +14,18 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassForEnumEntry import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightConstructorForSymbol( internal class SymbolLightConstructor(
private val constructorSymbol: KtConstructorSymbol, private val constructorSymbol: KtConstructorSymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
methodIndex: Int, methodIndex: Int,
) : FirLightMethodForSymbol(constructorSymbol, lightMemberOrigin, containingClass, methodIndex) { ) : SymbolLightMethod(constructorSymbol, lightMemberOrigin, containingClass, methodIndex) {
private val _name: String? = containingClass.name private val _name: String? = containingClass.name
@@ -56,14 +56,14 @@ internal class FirLightConstructorForSymbol(
// On the other hand, FE 1.0 doesn't add anything; then ULC adds default ctor w/ package local visibility. // On the other hand, FE 1.0 doesn't add anything; then ULC adds default ctor w/ package local visibility.
// Technically, an enum entry should not be instantiated anywhere else, and thus FIR's modeling makes sense. // Technically, an enum entry should not be instantiated anywhere else, and thus FIR's modeling makes sense.
// But, to be backward compatible, we manually force the visibility of enum entry ctor to be package private. // But, to be backward compatible, we manually force the visibility of enum entry ctor to be package private.
if (containingClass is FirLightClassForEnumEntry) if (containingClass is SymbolLightClassForEnumEntry)
setOf(PsiModifier.PACKAGE_LOCAL) setOf(PsiModifier.PACKAGE_LOCAL)
else else
setOf(constructorSymbol.toPsiVisibilityForMember(isTopLevel = false)) setOf(constructorSymbol.toPsiVisibilityForMember(isTopLevel = false))
} }
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
FirLightMemberModifierList(this, _modifiers, _annotations) SymbolLightMemberModifierList(this, _modifiers, _annotations)
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
@@ -72,7 +72,7 @@ internal class FirLightConstructorForSymbol(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightConstructorForSymbol && (other is SymbolLightConstructor &&
kotlinOrigin == other.kotlinOrigin && kotlinOrigin == other.kotlinOrigin &&
constructorSymbol == other.constructorSymbol) constructorSymbol == other.constructorSymbol)
@@ -13,22 +13,22 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.FirLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterForSymbol import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameter
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightSuspendContinuationParameter import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightSuspendContinuationParameter
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
import java.util.* import java.util.*
context(KtAnalysisSession) context(KtAnalysisSession)
internal abstract class FirLightMethodForSymbol( internal abstract class SymbolLightMethod(
private val functionSymbol: KtFunctionLikeSymbol, private val functionSymbol: KtFunctionLikeSymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
methodIndex: Int, methodIndex: Int,
argumentsSkipMask: BitSet? = null argumentsSkipMask: BitSet? = null
) : FirLightMethod( ) : SymbolLightMethodBase(
lightMemberOrigin, lightMemberOrigin,
containingClass, containingClass,
methodIndex methodIndex
@@ -38,23 +38,23 @@ internal abstract class FirLightMethodForSymbol(
override fun isVarArgs(): Boolean = _isVarArgs override fun isVarArgs(): Boolean = _isVarArgs
private val _parametersList by lazyPub { private val _parametersList by lazyPub {
FirLightParameterList(this, functionSymbol) { builder -> SymbolLightParameterList(this, functionSymbol) { builder ->
functionSymbol.valueParameters.mapIndexed { index, parameter -> functionSymbol.valueParameters.mapIndexed { index, parameter ->
val needToSkip = argumentsSkipMask?.get(index) == true val needToSkip = argumentsSkipMask?.get(index) == true
if (!needToSkip) { if (!needToSkip) {
builder.addParameter( builder.addParameter(
FirLightParameterForSymbol( SymbolLightParameter(
parameterSymbol = parameter, parameterSymbol = parameter,
containingMethod = this@FirLightMethodForSymbol containingMethod = this@SymbolLightMethod
) )
) )
} }
} }
if ((functionSymbol as? KtFunctionSymbol)?.isSuspend == true) { if ((functionSymbol as? KtFunctionSymbol)?.isSuspend == true) {
builder.addParameter( builder.addParameter(
FirLightSuspendContinuationParameter( SymbolLightSuspendContinuationParameter(
functionSymbol = functionSymbol, functionSymbol = functionSymbol,
containingMethod = this@FirLightMethodForSymbol containingMethod = this@SymbolLightMethod
) )
) )
} }
@@ -62,7 +62,7 @@ internal abstract class FirLightMethodForSymbol(
} }
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, functionSymbol) SymbolLightIdentifier(this, functionSymbol)
} }
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
@@ -25,19 +25,19 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.asJava.mangleInternalName import org.jetbrains.kotlin.asJava.mangleInternalName
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.light.classes.symbol.FirLightMemberImpl import org.jetbrains.kotlin.light.classes.symbol.SymbolLightMemberBase
import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasPublishedApiAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.hasPublishedApiAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.tryGetEffectiveVisibility import org.jetbrains.kotlin.light.classes.symbol.tryGetEffectiveVisibility
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
context(KtAnalysisSession) context(KtAnalysisSession)
internal abstract class FirLightMethod( internal abstract class SymbolLightMethodBase(
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: KtLightClass, containingClass: KtLightClass,
private val methodIndex: Int private val methodIndex: Int
) : FirLightMemberImpl<PsiMethod>(lightMemberOrigin, containingClass), KtLightMethod { ) : SymbolLightMemberBase<PsiMethod>(lightMemberOrigin, containingClass), KtLightMethod {
override fun getBody(): PsiCodeBlock? = null override fun getBody(): PsiCodeBlock? = null
@@ -92,7 +92,7 @@ internal abstract class FirLightMethod(
protected fun <T> T.computeJvmMethodName( protected fun <T> T.computeJvmMethodName(
defaultName: String, defaultName: String,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
annotationUseSiteTarget: AnnotationUseSiteTarget? = null annotationUseSiteTarget: AnnotationUseSiteTarget? = null
): String where T : KtAnnotatedSymbol, T : KtSymbolWithVisibility, T : KtCallableSymbol { ): String where T : KtAnnotatedSymbol, T : KtSymbolWithVisibility, T : KtCallableSymbol {
getJvmNameFromAnnotation(annotationUseSiteTarget)?.let { return it } getJvmNameFromAnnotation(annotationUseSiteTarget)?.let { return it }
@@ -9,18 +9,18 @@ import com.intellij.psi.*
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.FirLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightNoArgConstructor( internal class SymbolLightNoArgConstructor(
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
visibility: String, visibility: String,
methodIndex: Int, methodIndex: Int,
) : FirLightMethod(lightMemberOrigin, containingClass, methodIndex) { ) : SymbolLightMethodBase(lightMemberOrigin, containingClass, methodIndex) {
private val _name: String? = containingClass.name private val _name: String? = containingClass.name
override fun getName(): String = _name ?: "" override fun getName(): String = _name ?: ""
@@ -32,7 +32,7 @@ internal class FirLightNoArgConstructor(
override fun getTypeParameters(): Array<PsiTypeParameter> = PsiTypeParameter.EMPTY_ARRAY override fun getTypeParameters(): Array<PsiTypeParameter> = PsiTypeParameter.EMPTY_ARRAY
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, firSymbol = null) SymbolLightIdentifier(this, ktSymbol = null)
} }
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
@@ -44,13 +44,13 @@ internal class FirLightNoArgConstructor(
} }
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
FirLightMemberModifierList(this, _modifiers, emptyList()) SymbolLightMemberModifierList(this, _modifiers, emptyList())
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
private val _parameterList: PsiParameterList by lazyPub { private val _parameterList: PsiParameterList by lazyPub {
FirLightParameterList(this, callableSymbol = null) {} SymbolLightParameterList(this, callableSymbol = null) {}
} }
override fun getParameterList(): PsiParameterList = _parameterList override fun getParameterList(): PsiParameterList = _parameterList
@@ -59,7 +59,7 @@ internal class FirLightNoArgConstructor(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightNoArgConstructor && (other is SymbolLightNoArgConstructor &&
kotlinOrigin == other.kotlinOrigin && kotlinOrigin == other.kotlinOrigin &&
containingClass == other.containingClass) containingClass == other.containingClass)
@@ -15,23 +15,24 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.light.classes.symbol.* import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.* import org.jetbrains.kotlin.light.classes.symbol.annotations.*
import org.jetbrains.kotlin.light.classes.symbol.classes.FirLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
import org.jetbrains.kotlin.name.JvmNames.STRICTFP_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.name.JvmNames.STRICTFP_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.name.JvmNames.SYNCHRONIZED_ANNOTATION_CLASS_ID import org.jetbrains.kotlin.name.JvmNames.SYNCHRONIZED_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import java.util.* import java.util.*
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightSimpleMethodForSymbol( internal class SymbolLightSimpleMethod(
private val functionSymbol: KtFunctionSymbol, private val functionSymbol: KtFunctionSymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: FirLightClassBase, containingClass: SymbolLightClassBase,
methodIndex: Int, methodIndex: Int,
private val isTopLevel: Boolean, private val isTopLevel: Boolean,
argumentsSkipMask: BitSet? = null, argumentsSkipMask: BitSet? = null,
private val suppressStatic: Boolean = false private val suppressStatic: Boolean = false
) : FirLightMethodForSymbol( ) : SymbolLightMethod(
functionSymbol = functionSymbol, functionSymbol = functionSymbol,
lightMemberOrigin = lightMemberOrigin, lightMemberOrigin = lightMemberOrigin,
containingClass = containingClass, containingClass = containingClass,
@@ -47,7 +48,7 @@ internal class FirLightSimpleMethodForSymbol(
private val _typeParameterList: PsiTypeParameterList? by lazyPub { private val _typeParameterList: PsiTypeParameterList? by lazyPub {
hasTypeParameters().ifTrue { hasTypeParameters().ifTrue {
FirLightTypeParameterListForSymbol( SymbolLightTypeParameterList(
owner = this, owner = this,
symbolWithTypeParameterList = functionSymbol, symbolWithTypeParameterList = functionSymbol,
) )
@@ -131,7 +132,7 @@ internal class FirLightSimpleMethodForSymbol(
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
val modifiers = computeModifiers() val modifiers = computeModifiers()
val annotations = computeAnnotations(modifiers.contains(PsiModifier.PRIVATE)) val annotations = computeAnnotations(modifiers.contains(PsiModifier.PRIVATE))
FirLightMemberModifierList(this, modifiers, annotations) SymbolLightMemberModifierList(this, modifiers, annotations)
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
@@ -155,7 +156,7 @@ internal class FirLightSimpleMethodForSymbol(
functionSymbol.returnType functionSymbol.returnType
} }
ktType.asPsiType( ktType.asPsiType(
this@FirLightSimpleMethodForSymbol, this@SymbolLightSimpleMethod,
KtTypeMappingMode.RETURN_TYPE, KtTypeMappingMode.RETURN_TYPE,
containingClass.isAnnotationType containingClass.isAnnotationType
) ?: nonExistentType() ) ?: nonExistentType()
@@ -164,7 +165,7 @@ internal class FirLightSimpleMethodForSymbol(
override fun getReturnType(): PsiType = _returnedType override fun getReturnType(): PsiType = _returnedType
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || (other is FirLightSimpleMethodForSymbol && functionSymbol == other.functionSymbol) this === other || (other is SymbolLightSimpleMethod && functionSymbol == other.functionSymbol)
override fun hashCode(): Int = functionSymbol.hashCode() override fun hashCode(): Int = functionSymbol.hashCode()
@@ -13,11 +13,11 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.invalidAccess
import org.jetbrains.kotlin.psi.KtModifierListOwner import org.jetbrains.kotlin.psi.KtModifierListOwner
internal class FirLightClassModifierList<T : KtLightElement<KtModifierListOwner, PsiModifierListOwner>>( internal class SymbolLightClassModifierList<T : KtLightElement<KtModifierListOwner, PsiModifierListOwner>>(
containingDeclaration: T, containingDeclaration: T,
private val modifiers: Set<String>, private val modifiers: Set<String>,
private val annotations: List<PsiAnnotation> private val annotations: List<PsiAnnotation>
) : FirLightModifierList<T>(containingDeclaration) { ) : SymbolLightModifierList<T>(containingDeclaration) {
init { init {
annotations.forEach { annotations.forEach {
(it as? KtLightElementBase)?.parent = this (it as? KtLightElementBase)?.parent = this
@@ -11,14 +11,14 @@ import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.KtLightMember
import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.invalidAccess
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.psi.psiUtil.hasBody import org.jetbrains.kotlin.psi.psiUtil.hasBody
internal class FirLightMemberModifierList<T : KtLightMember<*>>( internal class SymbolLightMemberModifierList<T : KtLightMember<*>>(
containingDeclaration: T, containingDeclaration: T,
private val modifiers: Set<String>, private val modifiers: Set<String>,
private val annotations: List<PsiAnnotation> private val annotations: List<PsiAnnotation>
) : FirLightModifierList<T>(containingDeclaration) { ) : SymbolLightModifierList<T>(containingDeclaration) {
init { init {
annotations.forEach { annotations.forEach {
(it as? KtLightElementBase)?.parent = this (it as? KtLightElementBase)?.parent = this
@@ -38,7 +38,7 @@ internal class FirLightMemberModifierList<T : KtLightMember<*>>(
} }
private fun isImplementationInInterface(): Boolean { private fun isImplementationInInterface(): Boolean {
return owner.containingClass.isInterface && owner is FirLightMethod && owner.kotlinOrigin?.hasBody() == true return owner.containingClass.isInterface && owner is SymbolLightMethodBase && owner.kotlinOrigin?.hasBody() == true
} }
override fun hasExplicitModifier(name: String): Boolean { override fun hasExplicitModifier(name: String): Boolean {
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.psi.KtModifierList import org.jetbrains.kotlin.psi.KtModifierList
import org.jetbrains.kotlin.psi.KtModifierListOwner import org.jetbrains.kotlin.psi.KtModifierListOwner
internal abstract class FirLightModifierList<out T : KtLightElement<KtModifierListOwner, PsiModifierListOwner>>( internal abstract class SymbolLightModifierList<out T : KtLightElement<KtModifierListOwner, PsiModifierListOwner>>(
protected val owner: T protected val owner: T
) : KtLightElementBase(owner), PsiModifierList, KtLightElement<KtModifierList, PsiModifierListOwner> { ) : KtLightElementBase(owner), PsiModifierList, KtLightElement<KtModifierList, PsiModifierListOwner> {
@@ -37,7 +37,7 @@ internal abstract class FirLightModifierList<out T : KtLightElement<KtModifierLi
override fun findAnnotation(qualifiedName: String): PsiAnnotation? = null //TODO() override fun findAnnotation(qualifiedName: String): PsiAnnotation? = null //TODO()
override fun isEquivalentTo(another: PsiElement?) = override fun isEquivalentTo(another: PsiElement?) =
another is FirLightModifierList<*> && owner == another.owner another is SymbolLightModifierList<*> && owner == another.owner
override fun isWritable() = false override fun isWritable() = false
@@ -14,15 +14,15 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightParameterForSymbol( internal class SymbolLightParameter(
private val parameterSymbol: KtValueParameterSymbol, private val parameterSymbol: KtValueParameterSymbol,
containingMethod: FirLightMethod containingMethod: SymbolLightMethodBase
) : FirLightParameterBaseForSymbol(parameterSymbol, containingMethod) { ) : SymbolLightParameterCommon(parameterSymbol, containingMethod) {
private val isConstructorParameterSymbol = containingMethod.isConstructor private val isConstructorParameterSymbol = containingMethod.isConstructor
@@ -44,14 +44,14 @@ internal class FirLightParameterForSymbol(
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
FirLightClassModifierList(this, emptySet(), _annotations) SymbolLightClassModifierList(this, emptySet(), _annotations)
} }
override fun isVarArgs() = parameterSymbol.isVararg override fun isVarArgs() = parameterSymbol.isVararg
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightParameterForSymbol && parameterSymbol == other.parameterSymbol) (other is SymbolLightParameter && parameterSymbol == other.parameterSymbol)
override fun hashCode(): Int = kotlinOrigin.hashCode() override fun hashCode(): Int = kotlinOrigin.hashCode()
@@ -13,10 +13,10 @@ import com.intellij.util.IncorrectOperationException
import org.jetbrains.kotlin.asJava.elements.* import org.jetbrains.kotlin.asJava.elements.*
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.invalidAccess
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtParameter
internal abstract class FirLightParameter(containingDeclaration: FirLightMethod) : PsiVariable, NavigationItem, internal abstract class SymbolLightParameterBase(containingDeclaration: SymbolLightMethodBase) : PsiVariable, NavigationItem,
KtLightElement<KtParameter, PsiParameter>, KtLightParameter, KtLightElementBase(containingDeclaration) { KtLightElement<KtParameter, PsiParameter>, KtLightParameter, KtLightElementBase(containingDeclaration) {
override val givenAnnotations: List<KtLightAbstractAnnotation> override val givenAnnotations: List<KtLightAbstractAnnotation>
@@ -49,7 +49,7 @@ internal abstract class FirLightParameter(containingDeclaration: FirLightMethod)
} }
} }
override fun toString(): String = "Fir Light Parameter $name" override fun toString(): String = "${this::class.simpleName}:$name"
override fun isEquivalentTo(another: PsiElement?): Boolean = override fun isEquivalentTo(another: PsiElement?): Boolean =
basicIsEquivalentTo(this, another as? PsiParameter) basicIsEquivalentTo(this, another as? PsiParameter)
@@ -10,18 +10,18 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.FirLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.getTypeNullability import org.jetbrains.kotlin.light.classes.symbol.getTypeNullability
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtParameter
context(KtAnalysisSession) context(KtAnalysisSession)
internal abstract class FirLightParameterBaseForSymbol( internal abstract class SymbolLightParameterCommon(
private val parameterSymbol: KtValueParameterSymbol, private val parameterSymbol: KtValueParameterSymbol,
private val containingMethod: FirLightMethod private val containingMethod: SymbolLightMethodBase
) : FirLightParameter(containingMethod) { ) : SymbolLightParameterBase(containingMethod) {
private val _name: String = parameterSymbol.name.asString() private val _name: String = parameterSymbol.name.asString()
override fun getName(): String = _name override fun getName(): String = _name
@@ -33,7 +33,7 @@ internal abstract class FirLightParameterBaseForSymbol(
abstract override fun getModifierList(): PsiModifierList abstract override fun getModifierList(): PsiModifierList
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, parameterSymbol) SymbolLightIdentifier(this, parameterSymbol)
} }
protected val nullabilityType: NullabilityType protected val nullabilityType: NullabilityType
@@ -56,7 +56,7 @@ internal abstract class FirLightParameterBaseForSymbol(
// TODO: methods with declaration site wildcards? // TODO: methods with declaration site wildcards?
else -> KtTypeMappingMode.VALUE_PARAMETER else -> KtTypeMappingMode.VALUE_PARAMETER
} }
ktType.asPsiType(this@FirLightParameterBaseForSymbol, typeMappingMode) ktType.asPsiType(this@SymbolLightParameterCommon, typeMappingMode)
} ?: nonExistentType() } ?: nonExistentType()
if (parameterSymbol.isVararg) { if (parameterSymbol.isVararg) {
PsiEllipsisType(convertedType, convertedType.annotationProvider) PsiEllipsisType(convertedType, convertedType.annotationProvider)
@@ -18,32 +18,32 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirLightAnnotationForAnnotationCall import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightAnnotationForAnnotationCall
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtParameter
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightParameterForReceiver private constructor( internal class SymbolLightParameterForReceiver private constructor(
private val receiverType: KtType, private val receiverType: KtType,
private val context: KtSymbol, private val context: KtSymbol,
methodName: String, methodName: String,
method: FirLightMethod method: SymbolLightMethodBase
) : FirLightParameter(method) { ) : SymbolLightParameterBase(method) {
companion object { companion object {
context (KtAnalysisSession) context (KtAnalysisSession)
fun tryGet( fun tryGet(
callableSymbol: KtCallableSymbol, callableSymbol: KtCallableSymbol,
method: FirLightMethod method: SymbolLightMethodBase
): FirLightParameterForReceiver? { ): SymbolLightParameterForReceiver? {
if (callableSymbol !is KtNamedSymbol) return null if (callableSymbol !is KtNamedSymbol) return null
if (!callableSymbol.isExtension) return null if (!callableSymbol.isExtension) return null
val extensionTypeAndAnnotations = callableSymbol.receiverType ?: return null val extensionTypeAndAnnotations = callableSymbol.receiverType ?: return null
return FirLightParameterForReceiver( return SymbolLightParameterForReceiver(
receiverType = extensionTypeAndAnnotations, receiverType = extensionTypeAndAnnotations,
context = callableSymbol, context = callableSymbol,
methodName = callableSymbol.name.asString(), methodName = callableSymbol.name.asString(),
@@ -67,24 +67,24 @@ internal class FirLightParameterForReceiver private constructor(
private val _annotations: List<PsiAnnotation> by lazyPub { private val _annotations: List<PsiAnnotation> by lazyPub {
receiverType.annotations.map { receiverType.annotations.map {
FirLightAnnotationForAnnotationCall(it, this) SymbolLightAnnotationForAnnotationCall(it, this)
} }
} }
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
FirLightClassModifierList(this, emptySet(), _annotations) SymbolLightClassModifierList(this, emptySet(), _annotations)
} }
private val _type: PsiType by lazyPub { private val _type: PsiType by lazyPub {
receiverType.asPsiType(this@FirLightParameterForReceiver) ?: nonExistentType() receiverType.asPsiType(this@SymbolLightParameterForReceiver) ?: nonExistentType()
} }
override fun getType(): PsiType = _type override fun getType(): PsiType = _type
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightParameterForReceiver && (other is SymbolLightParameterForReceiver &&
receiverType == other.receiverType) receiverType == other.receiverType)
override fun hashCode(): Int = kotlinOrigin.hashCode() override fun hashCode(): Int = kotlinOrigin.hashCode()
@@ -13,17 +13,17 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightElement
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtParameterList import org.jetbrains.kotlin.psi.KtParameterList
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightParameterList( internal class SymbolLightParameterList(
private val parent: FirLightMethod, private val parent: SymbolLightMethodBase,
private val callableSymbol: KtCallableSymbol?, private val callableSymbol: KtCallableSymbol?,
parameterPopulator: (LightParameterListBuilder) -> Unit, parameterPopulator: (LightParameterListBuilder) -> Unit,
) : KtLightElement<KtParameterList, PsiParameterList>, ) : KtLightElement<KtParameterList, PsiParameterList>,
// With this, a parent chain is properly built: from FirLightParameter through FirLightParameterList to FirLightMethod // With this, a parent chain is properly built: from SymbolLightParameter through SymbolLightParameterList to SymbolLightMethod
KtLightElementBase(parent), KtLightElementBase(parent),
// NB: we can't use delegation here, which will conflict getTextRange from KtLightElementBase // NB: we can't use delegation here, which will conflict getTextRange from KtLightElementBase
PsiParameterList { PsiParameterList {
@@ -35,7 +35,7 @@ internal class FirLightParameterList(
val builder = LightParameterListBuilder(manager, language) val builder = LightParameterListBuilder(manager, language)
callableSymbol?.let { callableSymbol?.let {
FirLightParameterForReceiver.tryGet(it, parent)?.let { receiver -> SymbolLightParameterForReceiver.tryGet(it, parent)?.let { receiver ->
builder.addParameter(receiver) builder.addParameter(receiver)
} }
} }
@@ -15,15 +15,15 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightSetterParameterForSymbol( internal class SymbolLightSetterParameter(
private val containingPropertySymbol: KtPropertySymbol, private val containingPropertySymbol: KtPropertySymbol,
private val parameterSymbol: KtValueParameterSymbol, private val parameterSymbol: KtValueParameterSymbol,
containingMethod: FirLightMethod containingMethod: SymbolLightMethodBase
) : FirLightParameterBaseForSymbol(parameterSymbol, containingMethod) { ) : SymbolLightParameterCommon(parameterSymbol, containingMethod) {
private val _annotations: List<PsiAnnotation> by lazyPub { private val _annotations: List<PsiAnnotation> by lazyPub {
val annotationsFromSetter = parameterSymbol.computeAnnotations( val annotationsFromSetter = parameterSymbol.computeAnnotations(
@@ -44,14 +44,14 @@ internal class FirLightSetterParameterForSymbol(
override fun getModifierList(): PsiModifierList = _modifierList override fun getModifierList(): PsiModifierList = _modifierList
private val _modifierList: PsiModifierList by lazyPub { private val _modifierList: PsiModifierList by lazyPub {
FirLightClassModifierList(this, emptySet(), _annotations) SymbolLightClassModifierList(this, emptySet(), _annotations)
} }
override fun isVarArgs() = false override fun isVarArgs() = false
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightSetterParameterForSymbol && parameterSymbol == other.parameterSymbol) (other is SymbolLightSetterParameter && parameterSymbol == other.parameterSymbol)
override fun hashCode(): Int = kotlinOrigin.hashCode() override fun hashCode(): Int = kotlinOrigin.hashCode()
@@ -16,25 +16,25 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
import org.jetbrains.kotlin.light.classes.symbol.FirLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirLightSimpleAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
import org.jetbrains.kotlin.light.classes.symbol.methods.FirLightMethod import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtParameter
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightSuspendContinuationParameter( internal class SymbolLightSuspendContinuationParameter(
private val functionSymbol: KtFunctionSymbol, private val functionSymbol: KtFunctionSymbol,
private val containingMethod: FirLightMethod, private val containingMethod: SymbolLightMethodBase,
) : FirLightParameter(containingMethod) { ) : SymbolLightParameterBase(containingMethod) {
override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME override fun getName(): String = SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
override fun getNameIdentifier(): PsiIdentifier = _identifier override fun getNameIdentifier(): PsiIdentifier = _identifier
private val _identifier: PsiIdentifier by lazyPub { private val _identifier: PsiIdentifier by lazyPub {
FirLightIdentifier(this, functionSymbol) SymbolLightIdentifier(this, functionSymbol)
} }
override fun getType(): PsiType = _type override fun getType(): PsiType = _type
@@ -53,9 +53,9 @@ internal class FirLightSuspendContinuationParameter(
val annotations = val annotations =
if (functionSymbol.visibility.isPrivateOrPrivateToThis()) emptyList() else if (functionSymbol.visibility.isPrivateOrPrivateToThis()) emptyList() else
listOf( listOf(
FirLightSimpleAnnotation(NotNull::class.java.name, this@FirLightSuspendContinuationParameter) SymbolLightSimpleAnnotation(NotNull::class.java.name, this@SymbolLightSuspendContinuationParameter)
) )
FirLightClassModifierList(this, emptySet(), annotations) SymbolLightClassModifierList(this, emptySet(), annotations)
} }
override fun hasModifierProperty(p0: String): Boolean = false override fun hasModifierProperty(p0: String): Boolean = false
@@ -64,7 +64,7 @@ internal class FirLightSuspendContinuationParameter(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightSuspendContinuationParameter && functionSymbol == other.functionSymbol) (other is SymbolLightSuspendContinuationParameter && functionSymbol == other.functionSymbol)
override fun hashCode(): Int = functionSymbol.hashCode() * 31 + containingMethod.hashCode() override fun hashCode(): Int = functionSymbol.hashCode() * 31 + containingMethod.hashCode()
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.light.classes.symbol.FirLightTypeParameterListForSymbol
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.invalidAccess
import org.jetbrains.kotlin.light.classes.symbol.mapSuperType import org.jetbrains.kotlin.light.classes.symbol.mapSuperType
@@ -33,8 +32,8 @@ import org.jetbrains.kotlin.psi.KtTypeParameter
import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightTypeParameter( internal class SymbolLightTypeParameter(
private val parent: FirLightTypeParameterListForSymbol, private val parent: SymbolLightTypeParameterList,
private val index: Int, private val index: Int,
private val typeParameterSymbol: KtTypeParameterSymbol private val typeParameterSymbol: KtTypeParameterSymbol
) : LightElement(parent.manager, KotlinLanguage.INSTANCE), PsiTypeParameter, ) : LightElement(parent.manager, KotlinLanguage.INSTANCE), PsiTypeParameter,
@@ -45,7 +44,7 @@ internal class FirLightTypeParameter(
override val kotlinOrigin: KtTypeParameter? = typeParameterSymbol.psi as? KtTypeParameter override val kotlinOrigin: KtTypeParameter? = typeParameterSymbol.psi as? KtTypeParameter
override fun copy(): PsiElement = override fun copy(): PsiElement =
FirLightTypeParameter(parent, index, typeParameterSymbol) SymbolLightTypeParameter(parent, index, typeParameterSymbol)
override fun accept(visitor: PsiElementVisitor) { override fun accept(visitor: PsiElementVisitor) {
if (visitor is JavaElementVisitor) { if (visitor is JavaElementVisitor) {
@@ -72,7 +71,7 @@ internal class FirLightTypeParameter(
} }
} }
.mapNotNull { .mapNotNull {
mapSuperType(it, this@FirLightTypeParameter, kotlinCollectionAsIs = true) mapSuperType(it, this@SymbolLightTypeParameter, kotlinCollectionAsIs = true)
} }
.forEach { listBuilder.addReference(it) } .forEach { listBuilder.addReference(it) }
@@ -142,7 +141,7 @@ internal class FirLightTypeParameter(
override fun getIndex(): Int = index override fun getIndex(): Int = index
override fun getApplicableAnnotations(): Array<PsiAnnotation> = PsiAnnotation.EMPTY_ARRAY //TODO override fun getApplicableAnnotations(): Array<PsiAnnotation> = PsiAnnotation.EMPTY_ARRAY //TODO
override fun toString(): String = "FirLightTypeParameter:$name" override fun toString(): String = "SymbolLightTypeParameter:$name"
override fun getNavigationElement(): PsiElement = override fun getNavigationElement(): PsiElement =
kotlinOrigin ?: parent.navigationElement kotlinOrigin ?: parent.navigationElement
@@ -154,7 +153,7 @@ internal class FirLightTypeParameter(
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightTypeParameter && index == other.index && typeParameterSymbol == other.typeParameterSymbol) (other is SymbolLightTypeParameter && index == other.index && typeParameterSymbol == other.typeParameterSymbol)
override fun hashCode(): Int = typeParameterSymbol.hashCode() + index override fun hashCode(): Int = typeParameterSymbol.hashCode() + index
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * 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.light.classes.symbol package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.* import com.intellij.psi.*
import com.intellij.psi.impl.light.LightElement import com.intellij.psi.impl.light.LightElement
@@ -12,10 +12,10 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.light.classes.symbol.parameters.FirLightTypeParameter import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
context(KtAnalysisSession) context(KtAnalysisSession)
internal class FirLightTypeParameterListForSymbol( internal class SymbolLightTypeParameterList(
internal val owner: PsiTypeParameterListOwner, internal val owner: PsiTypeParameterListOwner,
private val symbolWithTypeParameterList: KtSymbolWithTypeParameters, private val symbolWithTypeParameterList: KtSymbolWithTypeParameters,
) : LightElement(owner.manager, KotlinLanguage.INSTANCE), PsiTypeParameterList { ) : LightElement(owner.manager, KotlinLanguage.INSTANCE), PsiTypeParameterList {
@@ -39,8 +39,8 @@ internal class FirLightTypeParameterListForSymbol(
private val _typeParameters: Array<PsiTypeParameter> by lazyPub { private val _typeParameters: Array<PsiTypeParameter> by lazyPub {
symbolWithTypeParameterList.typeParameters.mapIndexed { index, parameter -> symbolWithTypeParameterList.typeParameters.mapIndexed { index, parameter ->
FirLightTypeParameter( SymbolLightTypeParameter(
parent = this@FirLightTypeParameterListForSymbol, parent = this@SymbolLightTypeParameterList,
index = index, index = index,
typeParameterSymbol = parameter typeParameterSymbol = parameter
) )
@@ -52,11 +52,11 @@ internal class FirLightTypeParameterListForSymbol(
override fun getTypeParameterIndex(typeParameter: PsiTypeParameter?): Int = override fun getTypeParameterIndex(typeParameter: PsiTypeParameter?): Int =
_typeParameters.indexOf(typeParameter) _typeParameters.indexOf(typeParameter)
override fun toString(): String = "FirLightTypeParameterList" override fun toString(): String = "SymbolLightTypeParameterList"
override fun equals(other: Any?): Boolean = override fun equals(other: Any?): Boolean =
this === other || this === other ||
(other is FirLightTypeParameterListForSymbol && symbolWithTypeParameterList == other.symbolWithTypeParameterList) (other is SymbolLightTypeParameterList && symbolWithTypeParameterList == other.symbolWithTypeParameterList)
override fun hashCode(): Int = symbolWithTypeParameterList.hashCode() override fun hashCode(): Int = symbolWithTypeParameterList.hashCode()
@@ -25,16 +25,16 @@ import org.jetbrains.kotlin.asJava.elements.psiType
import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirLightSimpleAnnotation import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirPsiArrayInitializerMemberValue import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolPsiArrayInitializerMemberValue
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirPsiExpression import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolPsiExpression
import org.jetbrains.kotlin.light.classes.symbol.annotations.FirPsiLiteral import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolPsiLiteral
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
import java.util.* import java.util.*
internal fun <L : Any> L.invalidAccess(): Nothing = internal fun <L : Any> L.invalidAccess(): Nothing =
error("Cls delegate shouldn't be accessed for fir light classes! Qualified name: ${javaClass.name}") error("Cls delegate shouldn't be accessed for symbol light classes! Qualified name: ${javaClass.name}")
internal fun KtAnalysisSession.mapSuperType( internal fun KtAnalysisSession.mapSuperType(
@@ -200,12 +200,12 @@ private fun escapeString(str: String): String = buildString {
internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiAnnotationMemberValue? { internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiAnnotationMemberValue? {
return when (this) { return when (this) {
is KtArrayAnnotationValue -> is KtArrayAnnotationValue ->
FirPsiArrayInitializerMemberValue(sourcePsi, parent) { arrayLiteralParent -> SymbolPsiArrayInitializerMemberValue(sourcePsi, parent) { arrayLiteralParent ->
values.mapNotNull { element -> element.toAnnotationMemberValue(arrayLiteralParent) } values.mapNotNull { element -> element.toAnnotationMemberValue(arrayLiteralParent) }
} }
is KtAnnotationApplicationValue -> is KtAnnotationApplicationValue ->
FirLightSimpleAnnotation( SymbolLightSimpleAnnotation(
annotationValue.classId?.relativeClassName?.asString(), annotationValue.classId?.relativeClassName?.asString(),
parent, parent,
annotationValue.arguments, annotationValue.arguments,
@@ -215,8 +215,8 @@ internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiA
is KtConstantAnnotationValue -> { is KtConstantAnnotationValue -> {
this.constantValue.createPsiLiteral(parent)?.let { this.constantValue.createPsiLiteral(parent)?.let {
when (it) { when (it) {
is PsiLiteral -> FirPsiLiteral(sourcePsi, parent, it) is PsiLiteral -> SymbolPsiLiteral(sourcePsi, parent, it)
else -> FirPsiExpression(sourcePsi, parent, it) else -> SymbolPsiExpression(sourcePsi, parent, it)
} }
} }
} }
@@ -224,7 +224,7 @@ internal fun KtAnnotationValue.toAnnotationMemberValue(parent: PsiElement): PsiA
is KtEnumEntryAnnotationValue -> { is KtEnumEntryAnnotationValue -> {
val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null
val psiExpression = PsiElementFactory.getInstance(parent.project).createExpressionFromText(fqName, parent) val psiExpression = PsiElementFactory.getInstance(parent.project).createExpressionFromText(fqName, parent)
FirPsiExpression(sourcePsi, parent, psiExpression) SymbolPsiExpression(sourcePsi, parent, psiExpression)
} }
KtUnsupportedAnnotationValue -> null KtUnsupportedAnnotationValue -> null
@@ -10,8 +10,8 @@ import com.intellij.psi.*
import junit.framework.TestCase import junit.framework.TestCase
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
import org.jetbrains.kotlin.asJava.LightClassTestCommon import org.jetbrains.kotlin.asJava.LightClassTestCommon
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.FirLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
@@ -106,11 +106,11 @@ abstract class AbstractSymbolLightClassesAnnotationOwnerTest(
when (lastDeclaration) { when (lastDeclaration) {
is PsiClass, is PsiClass,
is PsiParameter -> is PsiParameter ->
TestCase.assertTrue(owner is FirLightClassModifierList<*>) TestCase.assertTrue(owner is SymbolLightClassModifierList<*>)
is PsiField, is PsiField,
is PsiMethod -> is PsiMethod ->
TestCase.assertTrue(owner is FirLightMemberModifierList<*>) TestCase.assertTrue(owner is SymbolLightMemberModifierList<*>)
else -> else ->
throw IllegalStateException("Unexpected annotation owner kind: ${lastDeclaration::class.java}") throw IllegalStateException("Unexpected annotation owner kind: ${lastDeclaration::class.java}")