[AA] KtSymbol: add context receiver to 'createPointer'

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-25 15:23:13 +01:00
committed by Space Team
parent 73372e557e
commit e27ffada26
87 changed files with 452 additions and 217 deletions
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols package org.jetbrains.kotlin.analysis.api.descriptors.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10AnnotatedSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10AnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
@@ -30,8 +31,9 @@ internal class KtFe10FileSymbol(
override val origin: KtSymbolOrigin override val origin: KtSymbolOrigin
get() = withValidityAssertion { if (file.isCompiled) KtSymbolOrigin.LIBRARY else KtSymbolOrigin.SOURCE } get() = withValidityAssertion { if (file.isCompiled) KtSymbolOrigin.LIBRARY else KtSymbolOrigin.SOURCE }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtFileSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtFileSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols
import com.intellij.psi.JavaPsiFacade import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.util.PsiUtilCore import com.intellij.psi.util.PsiUtilCore
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10PackageSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10PackageSymbolPointer
@@ -30,8 +31,9 @@ internal class KtFe10PackageSymbol(
JavaPsiFacade.getInstance(project).findPackage(fqName.asString()) JavaPsiFacade.getInstance(project).findPackage(fqName.asString())
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtPackageSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPackageSymbol> = withValidityAssertion {
return KtFe10PackageSymbolPointer(fqName) KtFe10PackageSymbolPointer(fqName)
} }
override val origin: KtSymbolOrigin override val origin: KtSymbolOrigin
@@ -5,11 +5,12 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousFunctionSymbol
@@ -44,8 +45,9 @@ internal class KtFe10DescAnonymousFunctionSymbol(
override val contextReceivers: List<KtContextReceiver> override val contextReceivers: List<KtContextReceiver>
get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) } get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtAnonymousFunctionSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtAnonymousFunctionSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol
@@ -25,8 +26,9 @@ internal class KtFe10DescAnonymousObjectSymbol(
override val superTypes: List<KtType> override val superTypes: List<KtType>
get() = withValidityAssertion { descriptor.typeConstructor.supertypes.map { it.toKtType(analysisContext) } } get() = withValidityAssertion { descriptor.typeConstructor.supertypes.map { it.toKtType(analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtAnonymousObjectSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtAnonymousObjectSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
@@ -48,10 +49,10 @@ internal class KtFe10DescConstructorSymbol(
} }
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> = withValidityAssertion {
val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource<KtConstructorSymbol>(this) KtPsiBasedSymbolPointer.createForSymbolFromSource<KtConstructorSymbol>(this)?.let {
if (pointerByPsi != null) { return it
return pointerByPsi
} }
val callableId = descriptor.callableIdIfNotLocal val callableId = descriptor.callableIdIfNotLocal
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
@@ -72,10 +73,9 @@ class KtFe10DescDefaultPropertyGetterSymbol(
override val annotationsList: KtAnnotationsList override val annotationsList: KtAnnotationsList
get() = withValidityAssertion { KtEmptyAnnotationsList(token) } get() = withValidityAssertion { KtEmptyAnnotationsList(token) }
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> { context(KtAnalysisSession)
withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
return KtFe10NeverRestoringSymbolPointer() KtFe10NeverRestoringSymbolPointer()
}
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
@@ -79,10 +80,9 @@ internal class KtFe10DescDefaultPropertySetterSymbol(
override val annotationsList: KtAnnotationsList override val annotationsList: KtAnnotationsList
get() = withValidityAssertion { KtEmptyAnnotationsList(token) } get() = withValidityAssertion { KtEmptyAnnotationsList(token) }
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> { context(KtAnalysisSession)
withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
return KtFe10NeverRestoringSymbolPointer() KtFe10NeverRestoringSymbolPointer()
}
} }
class DefaultKtValueParameterSymbol( class DefaultKtValueParameterSymbol(
@@ -122,10 +122,9 @@ internal class KtFe10DescDefaultPropertySetterSymbol(
override val annotationsList: KtAnnotationsList override val annotationsList: KtAnnotationsList
get() = withValidityAssertion { KtEmptyAnnotationsList(token) } get() = withValidityAssertion { KtEmptyAnnotationsList(token) }
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> { context(KtAnalysisSession)
withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
return KtFe10NeverRestoringSymbolPointer() KtFe10NeverRestoringSymbolPointer()
}
} }
} }
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol
@@ -13,11 +14,11 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.bas
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10DescEnumEntrySymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10DescEnumEntrySymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -49,10 +50,10 @@ internal class KtFe10DescEnumEntrySymbol(
override val name: Name override val name: Name
get() = withValidityAssertion { descriptor.name } get() = withValidityAssertion { descriptor.name }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> = withValidityAssertion {
val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource<KtEnumEntrySymbol>(this) KtPsiBasedSymbolPointer.createForSymbolFromSource<KtEnumEntrySymbol>(this)?.let {
if (pointerByPsi != null) { return it
return pointerByPsi
} }
val enumClassId = enumDescriptor.classId val enumClassId = enumDescriptor.classId
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -88,10 +89,10 @@ internal class KtFe10DescFunctionSymbol private constructor(
override val typeParameters: List<KtTypeParameterSymbol> override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { descriptor.typeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } } get() = withValidityAssertion { descriptor.typeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion {
val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource<KtFunctionSymbol>(this) KtPsiBasedSymbolPointer.createForSymbolFromSource<KtFunctionSymbol>(this)?.let {
if (pointerByPsi != null) { return it
return pointerByPsi
} }
val callableId = descriptor.callableIdIfNotLocal val callableId = descriptor.callableIdIfNotLocal
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol
@@ -41,8 +42,9 @@ internal class KtFe10DescJavaFieldSymbol(
override val returnType: KtType override val returnType: KtType
get() = withValidityAssertion { descriptor.returnType.toKtType(analysisContext) } get() = withValidityAssertion { descriptor.returnType.toKtType(analysisContext) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtJavaFieldSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtJavaFieldSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
@@ -107,8 +108,9 @@ internal class KtFe10DescKotlinPropertySymbol(
override val isDelegatedProperty: Boolean override val isDelegatedProperty: Boolean
get() = withValidityAssertion { descriptor.isDelegated } get() = withValidityAssertion { descriptor.isDelegated }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtKotlinPropertySymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtKotlinPropertySymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,22 +1,23 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtLocalVariableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtLocalVariableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -36,8 +37,9 @@ internal class KtFe10DescLocalVariableSymbol(
override val symbolKind: KtSymbolKind override val symbolKind: KtSymbolKind
get() = withValidityAssertion { KtSymbolKind.LOCAL } get() = withValidityAssertion { KtSymbolKind.LOCAL }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtLocalVariableSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtLocalVariableSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,11 +1,12 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -83,10 +84,10 @@ internal class KtFe10DescNamedClassOrObjectSymbol(
override val typeParameters: List<KtTypeParameterSymbol> override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { descriptor.declaredTypeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } } get() = withValidityAssertion { descriptor.declaredTypeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> = withValidityAssertion {
val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource<KtNamedClassOrObjectSymbol>(this) KtPsiBasedSymbolPointer.createForSymbolFromSource<KtNamedClassOrObjectSymbol>(this)?.let {
if (pointerByPsi != null) { return it
return pointerByPsi
} }
val classId = descriptor.classId val classId = descriptor.classId
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
@@ -53,8 +54,9 @@ internal class KtFe10DescPropertyGetterSymbol(
override val receiverParameter: KtReceiverParameterSymbol? override val receiverParameter: KtReceiverParameterSymbol?
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.toKtReceiverParameterSymbol(analysisContext) } get() = withValidityAssertion { descriptor.extensionReceiverParameter?.toKtReceiverParameterSymbol(analysisContext) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertyGetterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertyGetterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
@@ -55,10 +56,9 @@ internal class KtFe10DescPropertySetterSymbol(
override val receiverParameter: KtReceiverParameterSymbol? override val receiverParameter: KtReceiverParameterSymbol?
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.toKtReceiverParameterSymbol(analysisContext) } get() = withValidityAssertion { descriptor.extensionReceiverParameter?.toKtReceiverParameterSymbol(analysisContext) }
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> { context(KtAnalysisSession)
withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertySetterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertySetterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
}
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -61,10 +62,10 @@ internal class KtFe10DescSamConstructorSymbol(
get() = withValidityAssertion { descriptor.typeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } } get() = withValidityAssertion { descriptor.typeParameters.map { KtFe10DescTypeParameterSymbol(it, analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSamConstructorSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtSamConstructorSymbol> = withValidityAssertion {
val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource<KtSamConstructorSymbol>(this) KtPsiBasedSymbolPointer.createForSymbolFromSource<KtSamConstructorSymbol>(this)?.let {
if (pointerByPsi != null) { return it
return pointerByPsi
} }
val classId = descriptor.baseDescriptorForSynthetic.classId val classId = descriptor.baseDescriptorForSynthetic.classId
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10AnnotatedSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10AnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
@@ -44,6 +45,7 @@ internal class KtFe10DescSyntheticFieldSymbol(
override val returnType: KtType override val returnType: KtType
get() = withValidityAssertion { descriptor.propertyDescriptor.type.toKtType(analysisContext) } get() = withValidityAssertion { descriptor.propertyDescriptor.type.toKtType(analysisContext) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol> = withValidityAssertion {
val accessorPsi = descriptor.containingDeclaration.toSourceElement.getPsi() val accessorPsi = descriptor.containingDeclaration.toSourceElement.getPsi()
if (accessorPsi is KtPropertyAccessor) { if (accessorPsi is KtPropertyAccessor) {
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -90,8 +91,9 @@ internal class KtFe10DescSyntheticJavaPropertySymbol(
override val typeParameters: List<KtTypeParameterSymbol> override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } } get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtSyntheticJavaPropertySymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtSyntheticJavaPropertySymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -89,8 +90,9 @@ internal class KtFe10DescSyntheticJavaPropertySymbolForOverride(
override val typeParameters: List<KtTypeParameterSymbol> override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } } get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtSyntheticJavaPropertySymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtSyntheticJavaPropertySymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,26 +1,23 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.classId
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -48,8 +45,9 @@ internal class KtFe10DescTypeAliasSymbol(
override val classIdIfNonLocal: ClassId? override val classIdIfNonLocal: ClassId?
get() = withValidityAssertion { descriptor.classId } get() = withValidityAssertion { descriptor.classId }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeAliasSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeAliasSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
@@ -37,8 +38,9 @@ internal class KtFe10DescTypeParameterSymbol(
override val isReified: Boolean override val isReified: Boolean
get() = withValidityAssertion { descriptor.isReified } get() = withValidityAssertion { descriptor.isReified }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeParameterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeParameterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
@@ -67,8 +68,9 @@ internal class KtFe10DescValueParameterSymbol(
return (descriptor.varargElementType ?: descriptor.type).toKtType(analysisContext) return (descriptor.varargElementType ?: descriptor.type).toKtType(analysisContext)
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource<KtValueParameterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource<KtValueParameterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,15 +5,18 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtReceiverParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtReceiverParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
@@ -31,8 +34,9 @@ class KtFe10ReceiverParameterSymbol(
override val owningCallableSymbol: KtCallableSymbol override val owningCallableSymbol: KtCallableSymbol
get() = withValidityAssertion { _descriptor.containingDeclaration.toKtSymbol(analysisContext) as KtCallableSymbol } get() = withValidityAssertion { _descriptor.containingDeclaration.toKtSymbol(analysisContext) as KtCallableSymbol }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtReceiverParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtReceiverParameterSymbol> = withValidityAssertion {
TODO("Not yet implemented") KtPsiBasedSymbolPointer.createForSymbolFromSource<KtReceiverParameterSymbol>(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createContextReceivers import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createContextReceivers
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtReceiverParameterSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtReceiverParameterSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
@@ -65,8 +65,9 @@ internal class KtFe10PsiAnonymousFunctionSymbol(
override val isExtension: Boolean override val isExtension: Boolean
get() = withValidityAssertion { psi.isExtensionDeclaration() } get() = withValidityAssertion { psi.isExtensionDeclaration() }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -13,11 +14,11 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.KtObjectDeclaration
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
@@ -36,8 +37,9 @@ internal class KtFe10PsiAnonymousObjectSymbol(
descriptor?.typeConstructor?.supertypes?.map { it.toKtType(analysisContext) } ?: emptyList() descriptor?.typeConstructor?.supertypes?.map { it.toKtType(analysisContext) } ?: emptyList()
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.base.KtFe10Symbol
@@ -37,8 +38,9 @@ class KtFe10PsiClassInitializerSymbol(
override val symbolKind: KtSymbolKind override val symbolKind: KtSymbolKind
get() = withValidityAssertion { KtSymbolKind.CLASS_MEMBER } get() = withValidityAssertion { KtSymbolKind.CLASS_MEMBER }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtClassInitializerSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtClassInitializerSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override val typeParameters: List<KtTypeParameterSymbol> get() = withValidityAssertion { emptyList() } override val typeParameters: List<KtTypeParameterSymbol> get() = withValidityAssertion { emptyList() }
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -16,13 +17,13 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe1
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.createErrorType import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.createErrorType
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
@@ -63,8 +64,9 @@ internal class KtFe10PsiConstructorSymbol(
override val typeParameters: List<KtTypeParameterSymbol> override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { psi.typeParameters.map { KtFe10PsiTypeParameterSymbol(it, analysisContext) } } get() = withValidityAssertion { psi.typeParameters.map { KtFe10PsiTypeParameterSymbol(it, analysisContext) } }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
@@ -97,6 +98,7 @@ internal class KtFe10PsiDefaultPropertyGetterSymbol(
descriptor?.let { KtFe10AnnotationsList.create(it.annotations, token) } ?: KtEmptyAnnotationsList(token) descriptor?.let { KtFe10AnnotationsList.create(it.annotations, token) } ?: KtEmptyAnnotationsList(token)
} }
context(KtAnalysisSession)
@OptIn(KtAnalysisApiInternals::class) @OptIn(KtAnalysisApiInternals::class)
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySymbol>(propertyPsi)?.let { KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySymbol>(propertyPsi)?.let {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
@@ -105,6 +106,7 @@ internal class KtFe10PsiDefaultPropertySetterSymbol(
descriptor?.let { KtFe10AnnotationsList.create(it.annotations, token) } ?: KtEmptyAnnotationsList(token) descriptor?.let { KtFe10AnnotationsList.create(it.annotations, token) } ?: KtEmptyAnnotationsList(token)
} }
context(KtAnalysisSession)
@OptIn(KtAnalysisApiInternals::class) @OptIn(KtAnalysisApiInternals::class)
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySymbol>(propertyPsi)?.let { KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySymbol>(propertyPsi)?.let {
@@ -153,6 +155,7 @@ internal class KtFe10PsiDefaultPropertySetterSymbol(
descriptor?.let { KtFe10AnnotationsList.create(it.annotations, token) } ?: KtEmptyAnnotationsList(token) descriptor?.let { KtFe10AnnotationsList.create(it.annotations, token) } ?: KtEmptyAnnotationsList(token)
} }
context(KtAnalysisSession)
@OptIn(KtAnalysisApiInternals::class) @OptIn(KtAnalysisApiInternals::class)
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySymbol>(propertyPsi)?.let { KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySymbol>(propertyPsi)?.let {
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
@@ -69,6 +70,7 @@ internal class KtFe10PsiDefaultSetterParameterSymbol(
override val annotationsList: KtAnnotationsList override val annotationsList: KtAnnotationsList
get() = withValidityAssertion { KtEmptyAnnotationsList(token) } get() = withValidityAssertion { KtEmptyAnnotationsList(token) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySetterSymbol>(accessorPsi)?.let { symbolPointer -> KtPsiBasedSymbolPointer.createForSymbolFromPsi<KtPropertySetterSymbol>(accessorPsi)?.let { symbolPointer ->
symbolPointerDelegator(symbolPointer) { it.parameter } symbolPointerDelegator(symbolPointer) { it.parameter }
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -60,8 +61,9 @@ internal class KtFe10PsiEnumEntrySymbol(
override val name: Name override val name: Name
get() = withValidityAssertion { psi.nameAsSafeName } get() = withValidityAssertion { psi.nameAsSafeName }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
@@ -5,12 +5,13 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
@@ -110,8 +111,9 @@ internal class KtFe10PsiFunctionSymbol(
override val visibility: Visibility override val visibility: Visibility
get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public } get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,13 +5,14 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
@@ -133,8 +134,9 @@ internal class KtFe10PsiKotlinPropertySymbol(
override val visibility: Visibility override val visibility: Visibility
get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public } get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -72,8 +73,9 @@ internal class KtFe10PsiLiteralAnonymousFunctionSymbol(
override val isExtension: Boolean override val isExtension: Boolean
get() = withValidityAssertion { psi.isExtensionDeclaration() } get() = withValidityAssertion { psi.isExtensionDeclaration() }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -46,8 +47,9 @@ internal class KtFe10PsiLocalVariableSymbol(
override val symbolKind: KtSymbolKind override val symbolKind: KtSymbolKind
get() = withValidityAssertion { KtSymbolKind.LOCAL } get() = withValidityAssertion { KtSymbolKind.LOCAL }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -46,8 +47,9 @@ internal class KtFe10PsiLoopParameterLocalVariableSymbol(
override val symbolKind: KtSymbolKind override val symbolKind: KtSymbolKind
get() = withValidityAssertion { KtSymbolKind.LOCAL } get() = withValidityAssertion { KtSymbolKind.LOCAL }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
@@ -1,20 +1,17 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSupertypesWithAny
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktModality
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo import org.jetbrains.kotlin.analysis.api.descriptors.symbols.isEqualTo
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
@@ -23,6 +20,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktSym
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
import org.jetbrains.kotlin.analysis.api.impl.base.symbols.invalidEnumEntryAsClassKind import org.jetbrains.kotlin.analysis.api.impl.base.symbols.invalidEnumEntryAsClassKind
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
@@ -30,7 +28,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
@@ -118,8 +115,9 @@ internal class KtFe10PsiNamedClassOrObjectSymbol(
override val visibility: Visibility override val visibility: Visibility
get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public } get() = withValidityAssertion { psi.ktVisibility ?: descriptor?.ktVisibility ?: Visibilities.Public }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -80,8 +81,9 @@ internal class KtFe10PsiPropertyGetterSymbol(
descriptor?.extensionReceiverParameter?.toKtReceiverParameterSymbol(analysisContext) descriptor?.extensionReceiverParameter?.toKtReceiverParameterSymbol(analysisContext)
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -91,11 +92,11 @@ internal class KtFe10PsiPropertySetterSymbol(
} }
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
override fun hashCode(): Int = calculateHashCode() override fun hashCode(): Int = calculateHashCode()
} }
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
@@ -58,8 +59,9 @@ internal class KtFe10PsiTypeAliasSymbol(
override val symbolKind: KtSymbolKind override val symbolKind: KtSymbolKind
get() = withValidityAssertion { psi.ktSymbolKind } get() = withValidityAssertion { psi.ktSymbolKind }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
@@ -38,7 +39,9 @@ internal class KtFe10PsiTypeParameterSymbol(
get() = withValidityAssertion { psi.variance } get() = withValidityAssertion { psi.variance }
override val upperBounds: List<KtType> override val upperBounds: List<KtType>
get() = withValidityAssertion { descriptor?.upperBounds?.filterNot { it.isNullableAny() }?.map { it.toKtType(analysisContext) } ?: emptyList() } get() = withValidityAssertion {
descriptor?.upperBounds?.filterNot { it.isNullableAny() }?.map { it.toKtType(analysisContext) } ?: emptyList()
}
override val isReified: Boolean override val isReified: Boolean
get() = withValidityAssertion { psi.hasModifier(KtTokens.REIFIED_KEYWORD) } get() = withValidityAssertion { psi.hasModifier(KtTokens.REIFIED_KEYWORD) }
@@ -46,8 +49,9 @@ internal class KtFe10PsiTypeParameterSymbol(
override val name: Name override val name: Name
get() = withValidityAssertion { psi.nameAsSafeName } get() = withValidityAssertion { psi.nameAsSafeName }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode import org.jetbrains.kotlin.analysis.api.descriptors.symbols.calculateHashCode
@@ -55,7 +56,7 @@ internal class KtFe10PsiValueParameterSymbol(
get() = withValidityAssertion { psi.hasModifier(KtTokens.CROSSINLINE_KEYWORD) } get() = withValidityAssertion { psi.hasModifier(KtTokens.CROSSINLINE_KEYWORD) }
override val isNoinline: Boolean override val isNoinline: Boolean
get() = withValidityAssertion { psi.hasModifier(KtTokens.NOINLINE_KEYWORD) } get() = withValidityAssertion { psi.hasModifier(KtTokens.NOINLINE_KEYWORD) }
override val isImplicitLambdaParameter: Boolean override val isImplicitLambdaParameter: Boolean
get() = withValidityAssertion { false } get() = withValidityAssertion { false }
@@ -69,8 +70,9 @@ internal class KtFe10PsiValueParameterSymbol(
override val name: Name override val name: Name
get() = withValidityAssertion { psi.nameAsSafeName } get() = withValidityAssertion { psi.nameAsSafeName }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer() KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
} }
override fun equals(other: Any?): Boolean = isEqualTo(other) override fun equals(other: Any?): Boolean = isEqualTo(other)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
@@ -54,6 +55,7 @@ internal class KtFirAnonymousFunctionSymbol(
override val isExtension: Boolean get() = withValidityAssertion { firSymbol.isExtension } override val isExtension: Boolean get() = withValidityAssertion { firSymbol.isExtension }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource(this) KtPsiBasedSymbolPointer.createForSymbolFromSource(this)
?: throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(this::class) ?: throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(this::class)
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
@@ -37,6 +38,7 @@ internal class KtFirAnonymousObjectSymbol(
override val superTypes: List<KtType> by cached { firSymbol.superTypesList(builder) } override val superTypes: List<KtType> by cached { firSymbol.superTypesList(builder) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtAnonymousObjectSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtAnonymousObjectSymbol>(this)?.let { return it }
if (firSymbol.source?.kind == KtFakeSourceElementKind.EnumInitializer) { if (firSymbol.source?.kind == KtFakeSourceElementKind.EnumInitializer) {
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -39,6 +40,7 @@ internal class KtFirBackingFieldSymbol(
builder.variableLikeBuilder.buildPropertySymbol(firSymbol.propertySymbol) as KtKotlinPropertySymbol builder.variableLikeBuilder.buildPropertySymbol(firSymbol.propertySymbol) as KtKotlinPropertySymbol
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtBackingFieldSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtBackingFieldSymbol> = withValidityAssertion {
KtFirBackingFieldSymbolPointer(owningProperty.createPointer()) KtFirBackingFieldSymbolPointer(owningProperty.createPointer())
} }
@@ -1,11 +1,12 @@
/* /*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
@@ -28,6 +29,7 @@ internal class KtFirClassInitializerSymbol(
) : KtClassInitializerSymbol(), KtFirSymbol<FirAnonymousInitializerSymbol> { ) : KtClassInitializerSymbol(), KtFirSymbol<FirAnonymousInitializerSymbol> {
override val psi: PsiElement? by cached { firSymbol.findPsi() } override val psi: PsiElement? by cached { firSymbol.findPsi() }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtClassInitializerSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtClassInitializerSymbol>(this)?.let { return it }
TODO("Figure out how to create such a pointer. Should we give an index to class initializers?") TODO("Figure out how to create such a pointer. Should we give an index to class initializers?")
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
@@ -65,13 +66,18 @@ internal class KtFirConstructorSymbol(
override val typeParameters by cached { firSymbol.createKtTypeParameters(builder) } override val typeParameters by cached { firSymbol.createKtTypeParameters(builder) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtConstructorSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtConstructorSymbol>(this)?.let { return it }
if (symbolKind == KtSymbolKind.LOCAL) { if (symbolKind == KtSymbolKind.LOCAL) {
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException("constructor") throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException("constructor")
} }
KtFirConstructorSymbolPointer(requireOwnerPointer(), isPrimary, FirCallableSignature.createSignature(firSymbol)) KtFirConstructorSymbolPointer(
requireOwnerPointer(),
isPrimary,
FirCallableSignature.createSignature(firSymbol),
)
} }
override fun equals(other: Any?): Boolean = symbolEquals(other) override fun equals(other: Any?): Boolean = symbolEquals(other)
@@ -1,11 +1,12 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -44,6 +45,7 @@ internal class KtFirEnumEntrySymbol(
override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() } override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFirEnumEntrySymbolPointer(requireOwnerPointer(), firSymbol.name) KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFirEnumEntrySymbolPointer(requireOwnerPointer(), firSymbol.name)
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
@@ -25,12 +26,19 @@ internal class KtFirFileSymbol(
) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol<FirFileSymbol> { ) : KtFileSymbol(), KtSymbolWithDeclarations, KtFirSymbol<FirFileSymbol> {
override val psi: PsiElement? by cached { firSymbol.findPsi() } override val psi: PsiElement? by cached { firSymbol.findPsi() }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtFileSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtFileSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtFileSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtFileSymbol>(this)?.let { return it }
TODO("Creating pointers for files from library is not supported yet") TODO("Creating pointers for files from library is not supported yet")
} }
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) } override val annotationsList by cached {
KtFirAnnotationListForDeclaration.create(
firSymbol,
firResolveSession.useSiteFirSession,
token,
)
}
override fun equals(other: Any?): Boolean = symbolEquals(other) override fun equals(other: Any?): Boolean = symbolEquals(other)
override fun hashCode(): Int = symbolHashCode() override fun hashCode(): Int = symbolHashCode()
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -92,6 +93,7 @@ internal class KtFirFunctionSymbol(
override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal } override val modality: Modality get() = withValidityAssertion { firSymbol.modalityOrFinal }
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtFunctionSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtFunctionSymbol>(this)?.let { return it }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -52,6 +53,7 @@ internal class KtFirJavaFieldSymbol(
override val isStatic: Boolean get() = withValidityAssertion { firSymbol.isStatic } override val isStatic: Boolean get() = withValidityAssertion { firSymbol.isStatic }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> = withValidityAssertion {
KtFirJavaFieldSymbolPointer(requireOwnerPointer(), name) KtFirJavaFieldSymbolPointer(requireOwnerPointer(), name)
} }
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
@@ -124,6 +125,7 @@ internal class KtFirKotlinPropertySymbol(
override val hasGetter: Boolean get() = withValidityAssertion { firSymbol.getterSymbol != null } override val hasGetter: Boolean get() = withValidityAssertion { firSymbol.getterSymbol != null }
override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null } override val hasSetter: Boolean get() = withValidityAssertion { firSymbol.setterSymbol != null }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtVariableLikeSymbol>(this)?.let { psiPointer -> KtPsiBasedSymbolPointer.createForSymbolFromSource<KtVariableLikeSymbol>(this)?.let { psiPointer ->
return symbolPointerDelegator(psiPointer) { return symbolPointerDelegator(psiPointer) {
@@ -1,24 +1,25 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtLocalVariableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtLocalVariableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException import org.jetbrains.kotlin.analysis.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -47,6 +48,7 @@ internal class KtFirLocalVariableSymbol(
override val symbolKind: KtSymbolKind get() = withValidityAssertion { KtSymbolKind.LOCAL } override val symbolKind: KtSymbolKind get() = withValidityAssertion { KtSymbolKind.LOCAL }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtLocalVariableSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtLocalVariableSymbol>(this)?.let { return it }
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(name.asString()) throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(name.asString())
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -67,7 +68,13 @@ internal class KtFirNamedClassOrObjectSymbol(
} }
} }
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) } override val annotationsList by cached {
KtFirAnnotationListForDeclaration.create(
firSymbol,
firResolveSession.useSiteFirSession,
token,
)
}
override val isInner: Boolean get() = withValidityAssertion { firSymbol.isInner } override val isInner: Boolean get() = withValidityAssertion { firSymbol.isInner }
override val isData: Boolean get() = withValidityAssertion { firSymbol.isData } override val isData: Boolean get() = withValidityAssertion { firSymbol.isData }
@@ -102,6 +109,7 @@ internal class KtFirNamedClassOrObjectSymbol(
override val symbolKind: KtSymbolKind get() = withValidityAssertion { getSymbolKind(firResolveSession) } override val symbolKind: KtSymbolKind get() = withValidityAssertion { getSymbolKind(firResolveSession) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtNamedClassOrObjectSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtNamedClassOrObjectSymbol>(this)?.let { return it }
@@ -1,5 +1,5 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
@@ -11,15 +11,16 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.impl.file.PsiPackageImpl import com.intellij.psi.impl.file.PsiPackageImpl
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtPackageSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointer
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.providers.createPackageProvider import org.jetbrains.kotlin.analysis.providers.createPackageProvider
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -36,6 +37,7 @@ class KtFirPackageSymbol(
override val origin: KtSymbolOrigin override val origin: KtSymbolOrigin
get() = withValidityAssertion { KtSymbolOrigin.SOURCE } // TODO get() = withValidityAssertion { KtSymbolOrigin.SOURCE } // TODO
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtPackageSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPackageSymbol> = withValidityAssertion {
symbolPointer { session -> symbolPointer { session ->
check(session is KtFirAnalysisSession) check(session is KtFirAnalysisSession)
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
@@ -83,6 +84,7 @@ internal class KtFirPropertyGetterSymbol(
override val hasStableParameterNames: Boolean override val hasStableParameterNames: Boolean
get() = withValidityAssertion { true } get() = withValidityAssertion { true }
context(KtAnalysisSession)
@OptIn(KtAnalysisApiInternals::class) @OptIn(KtAnalysisApiInternals::class)
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertyGetterSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertyGetterSymbol>(this)?.let { return it }
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
@@ -100,6 +101,7 @@ internal class KtFirPropertySetterSymbol(
override val hasStableParameterNames: Boolean override val hasStableParameterNames: Boolean
get() = withValidityAssertion { true } get() = withValidityAssertion { true }
context(KtAnalysisSession)
@OptIn(KtAnalysisApiInternals::class) @OptIn(KtAnalysisApiInternals::class)
override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertySetterSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtPropertySetterSymbol>(this)?.let { return it }
@@ -6,13 +6,12 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForReceiverParameter import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForReceiverParameter
import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.findPsi
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirReceiverParameterSymbolPointer import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirReceiverParameterSymbolPointer
import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer
import org.jetbrains.kotlin.analysis.api.fir.utils.cached import org.jetbrains.kotlin.analysis.api.fir.utils.cached
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
@@ -45,6 +44,7 @@ internal class KtFirReceiverParameterSymbol(
override val origin: KtSymbolOrigin = withValidityAssertion { firSymbol.fir.ktSymbolOrigin() } override val origin: KtSymbolOrigin = withValidityAssertion { firSymbol.fir.ktSymbolOrigin() }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtReceiverParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtReceiverParameterSymbol> = withValidityAssertion {
KtFirReceiverParameterSymbolPointer(owningCallableSymbol.createPointer()) KtFirReceiverParameterSymbolPointer(owningCallableSymbol.createPointer())
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
@@ -67,6 +68,7 @@ internal class KtFirSamConstructorSymbol(
override val typeParameters: List<KtTypeParameterSymbol> override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { firSymbol.createKtTypeParameters(builder) } get() = withValidityAssertion { firSymbol.createKtTypeParameters(builder) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSamConstructorSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtSamConstructorSymbol> = withValidityAssertion {
val callableId = firSymbol.callableId val callableId = firSymbol.callableId
return KtFirSamConstructorSymbolPointer(ClassId(callableId.packageName, callableId.callableName)) return KtFirSamConstructorSymbolPointer(ClassId(callableId.packageName, callableId.callableName))
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -56,7 +57,13 @@ internal class KtFirSyntheticJavaPropertySymbol(
override val modality: Modality get() = withValidityAssertion { firSymbol.modality ?: firSymbol.invalidModalityError() } override val modality: Modality get() = withValidityAssertion { firSymbol.modality ?: firSymbol.invalidModalityError() }
override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility } override val visibility: Visibility get() = withValidityAssertion { firSymbol.visibility }
override val annotationsList by cached { KtFirAnnotationListForDeclaration.create(firSymbol, firResolveSession.useSiteFirSession, token) } override val annotationsList by cached {
KtFirAnnotationListForDeclaration.create(
firSymbol,
firResolveSession.useSiteFirSession,
token
)
}
override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() } override val callableIdIfNonLocal: CallableId? get() = withValidityAssertion { firSymbol.getCallableIdIfNonLocal() }
@@ -88,6 +95,7 @@ internal class KtFirSyntheticJavaPropertySymbol(
override val origin: KtSymbolOrigin get() = withValidityAssertion { KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY } override val origin: KtSymbolOrigin get() = withValidityAssertion { KtSymbolOrigin.JAVA_SYNTHETIC_PROPERTY }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> = withValidityAssertion {
KtFirJavaSyntheticPropertySymbolPointer(requireOwnerPointer(), name) KtFirJavaSyntheticPropertySymbolPointer(requireOwnerPointer(), name)
} }
@@ -1,11 +1,12 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -58,8 +59,10 @@ internal class KtFirTypeAliasSymbol(
override val symbolKind: KtSymbolKind get() = withValidityAssertion { getSymbolKind(firResolveSession) } override val symbolKind: KtSymbolKind get() = withValidityAssertion { getSymbolKind(firResolveSession) }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeAliasSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeAliasSymbol>(this)?.let { return it }
when (val symbolKind = symbolKind) { when (val symbolKind = symbolKind) {
KtSymbolKind.LOCAL -> KtSymbolKind.LOCAL ->
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString()) throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString())
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.analysis.api.fir.symbols package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -52,6 +52,7 @@ internal class KtFirTypeParameterSymbol(
override val variance: Variance get() = withValidityAssertion { firSymbol.variance } override val variance: Variance get() = withValidityAssertion { firSymbol.variance }
override val isReified: Boolean get() = withValidityAssertion { firSymbol.isReified } override val isReified: Boolean get() = withValidityAssertion { firSymbol.isReified }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeParameterSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtTypeParameterSymbol>(this)?.let { return it }
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration
@@ -82,6 +83,7 @@ internal class KtFirValueParameterSymbol(
ktPropertySymbol ktPropertySymbol
} }
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion { override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtValueParameterSymbol>(this)?.let { return it } KtPsiBasedSymbolPointer.createForSymbolFromSource<KtValueParameterSymbol>(this)?.let { return it }
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.analysis.api.analyze
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol
import org.jetbrains.kotlin.analysis.api.fir.utils.firSymbol import org.jetbrains.kotlin.analysis.api.fir.utils.firSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
@@ -60,17 +60,17 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiSingleFileTest() {
} }
} }
fun KtSymbol.safePointer(): PointerWrapper? { fun KtAnalysisSession.safePointer(ktSymbol: KtSymbol): PointerWrapper? {
val regularPointer = runCatching { val regularPointer = ktSymbol.runCatching {
KtPsiBasedSymbolPointer.withDisabledPsiBasedPointers(disable = false, action = ::createPointer) KtPsiBasedSymbolPointer.withDisabledPsiBasedPointers(disable = false) { ktSymbol.createPointer() }
}.let { }.let {
if (directiveToIgnoreSymbolRestore == null) it.getOrThrow() else it.getOrNull() if (directiveToIgnoreSymbolRestore == null) it.getOrThrow() else it.getOrNull()
} ?: return null } ?: return null
val nonPsiPointer = kotlin.runCatching { val nonPsiPointer = kotlin.runCatching {
if (this is KtFileSymbol) return@runCatching null if (ktSymbol is KtFileSymbol) return@runCatching null
KtPsiBasedSymbolPointer.withDisabledPsiBasedPointers(disable = true, action = ::createPointer) KtPsiBasedSymbolPointer.withDisabledPsiBasedPointers(disable = true) { ktSymbol.createPointer() }
} }
return PointerWrapper( return PointerWrapper(
@@ -96,7 +96,7 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiSingleFileTest() {
.distinctBy { it.first } .distinctBy { it.first }
.map { (symbol, shouldBeRendered) -> .map { (symbol, shouldBeRendered) ->
PointerWithRenderedSymbol( PointerWithRenderedSymbol(
pointer = symbol.safePointer(), pointer = safePointer(symbol),
rendered = renderSymbolForComparison(symbol), rendered = renderSymbolForComparison(symbol),
shouldBeRendered = shouldBeRendered, shouldBeRendered = shouldBeRendered,
) )
@@ -105,7 +105,7 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiSingleFileTest() {
val pointerWithPrettyRenderedSymbol = symbolForPrettyRendering.map { symbol -> val pointerWithPrettyRenderedSymbol = symbolForPrettyRendering.map { symbol ->
PointerWithRenderedSymbol( PointerWithRenderedSymbol(
symbol.safePointer(), safePointer(symbol),
when (symbol) { when (symbol) {
is KtDeclarationSymbol -> symbol.render(prettyRenderOptions) is KtDeclarationSymbol -> symbol.render(prettyRenderOptions)
is KtFileSymbol -> prettyPrint { is KtFileSymbol -> prettyPrint {
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiversOwner import org.jetbrains.kotlin.analysis.api.base.KtContextReceiversOwner
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtPossibleMemberSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtPossibleMemberSymbol
@@ -20,6 +21,7 @@ public sealed class KtCallableSymbol : KtSymbolWithKind, KtPossibleMemberSymbol,
public abstract val receiverParameter: KtReceiverParameterSymbol? public abstract val receiverParameter: KtReceiverParameterSymbol?
public abstract val isExtension: Boolean public abstract val isExtension: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtCallableSymbol> abstract override fun createPointer(): KtSymbolPointer<KtCallableSymbol>
} }
@@ -39,5 +41,6 @@ public abstract class KtReceiverParameterSymbol : KtAnnotatedSymbol {
*/ */
public abstract val owningCallableSymbol: KtCallableSymbol public abstract val owningCallableSymbol: KtCallableSymbol
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtReceiverParameterSymbol> abstract override fun createPointer(): KtSymbolPointer<KtReceiverParameterSymbol>
} }
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiversOwner import org.jetbrains.kotlin.analysis.api.base.KtContextReceiversOwner
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.markers.* import org.jetbrains.kotlin.analysis.api.symbols.markers.*
@@ -21,6 +22,7 @@ public val KtClassifierSymbol.nameOrAnonymous: Name
get() = name ?: SpecialNames.ANONYMOUS get() = name ?: SpecialNames.ANONYMOUS
public abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol { public abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbol {
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol> abstract override fun createPointer(): KtSymbolPointer<KtTypeParameterSymbol>
final override val typeParameters: List<KtTypeParameterSymbol> final override val typeParameters: List<KtTypeParameterSymbol>
@@ -34,6 +36,7 @@ public abstract class KtTypeParameterSymbol : KtClassifierSymbol(), KtNamedSymbo
public sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtSymbolWithKind, KtPossibleMemberSymbol { public sealed class KtClassLikeSymbol : KtClassifierSymbol(), KtSymbolWithKind, KtPossibleMemberSymbol {
public abstract val classIdIfNonLocal: ClassId? public abstract val classIdIfNonLocal: ClassId?
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtClassLikeSymbol> abstract override fun createPointer(): KtSymbolPointer<KtClassLikeSymbol>
} }
@@ -47,6 +50,7 @@ public abstract class KtTypeAliasSymbol : KtClassLikeSymbol(),
*/ */
public abstract val expandedType: KtType public abstract val expandedType: KtType
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol> abstract override fun createPointer(): KtSymbolPointer<KtTypeAliasSymbol>
} }
@@ -55,6 +59,7 @@ public sealed class KtClassOrObjectSymbol : KtClassLikeSymbol(), KtSymbolWithMem
public abstract val classKind: KtClassKind public abstract val classKind: KtClassKind
public abstract val superTypes: List<KtType> public abstract val superTypes: List<KtType>
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtClassOrObjectSymbol> abstract override fun createPointer(): KtSymbolPointer<KtClassOrObjectSymbol>
} }
@@ -67,6 +72,7 @@ public abstract class KtAnonymousObjectSymbol : KtClassOrObjectSymbol() {
final override val typeParameters: List<KtTypeParameterSymbol> final override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { emptyList() } get() = withValidityAssertion { emptyList() }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol> abstract override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol>
} }
@@ -85,6 +91,7 @@ public abstract class KtNamedClassOrObjectSymbol : KtClassOrObjectSymbol(),
public abstract val companionObject: KtNamedClassOrObjectSymbol? public abstract val companionObject: KtNamedClassOrObjectSymbol?
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol> abstract override fun createPointer(): KtSymbolPointer<KtNamedClassOrObjectSymbol>
} }
@@ -1,13 +1,15 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
public abstract class KtFileSymbol : KtAnnotatedSymbol { public abstract class KtFileSymbol : KtAnnotatedSymbol {
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtFileSymbol> abstract override fun createPointer(): KtSymbolPointer<KtFileSymbol>
} }
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.markers.* import org.jetbrains.kotlin.analysis.api.symbols.markers.*
@@ -22,6 +23,7 @@ public sealed class KtFunctionLikeSymbol : KtCallableSymbol(), KtSymbolWithKind
*/ */
public abstract val hasStableParameterNames: Boolean public abstract val hasStableParameterNames: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtFunctionLikeSymbol> abstract override fun createPointer(): KtSymbolPointer<KtFunctionLikeSymbol>
} }
@@ -32,12 +34,14 @@ public abstract class KtAnonymousFunctionSymbol : KtFunctionLikeSymbol() {
final override val typeParameters: List<KtTypeParameterSymbol> final override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { emptyList() } get() = withValidityAssertion { emptyList() }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> abstract override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol>
} }
public abstract class KtSamConstructorSymbol : KtFunctionLikeSymbol(), KtNamedSymbol { public abstract class KtSamConstructorSymbol : KtFunctionLikeSymbol(), KtNamedSymbol {
final override val symbolKind: KtSymbolKind get() = withValidityAssertion { KtSymbolKind.SAM_CONSTRUCTOR } final override val symbolKind: KtSymbolKind get() = withValidityAssertion { KtSymbolKind.SAM_CONSTRUCTOR }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtSamConstructorSymbol> abstract override fun createPointer(): KtSymbolPointer<KtSamConstructorSymbol>
} }
@@ -60,6 +64,7 @@ public abstract class KtFunctionSymbol : KtFunctionLikeSymbol(),
*/ */
public abstract val isBuiltinFunctionInvoke: Boolean public abstract val isBuiltinFunctionInvoke: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtFunctionSymbol> abstract override fun createPointer(): KtSymbolPointer<KtFunctionSymbol>
} }
@@ -76,5 +81,6 @@ public abstract class KtConstructorSymbol : KtFunctionLikeSymbol(),
final override val receiverParameter: KtReceiverParameterSymbol? get() = withValidityAssertion { null } final override val receiverParameter: KtReceiverParameterSymbol? get() = withValidityAssertion { null }
final override val contextReceivers: List<KtContextReceiver> get() = withValidityAssertion { emptyList() } final override val contextReceivers: List<KtContextReceiver> get() = withValidityAssertion { emptyList() }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtConstructorSymbol> abstract override fun createPointer(): KtSymbolPointer<KtConstructorSymbol>
} }
@@ -1,15 +1,17 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
public abstract class KtPackageSymbol : KtSymbol { public abstract class KtPackageSymbol : KtSymbol {
public abstract val fqName: FqName public abstract val fqName: FqName
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtPackageSymbol> abstract override fun createPointer(): KtSymbolPointer<KtPackageSymbol>
} }
@@ -1,10 +1,11 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.api.symbols.markers.* import org.jetbrains.kotlin.analysis.api.symbols.markers.*
@@ -30,15 +31,18 @@ public sealed class KtPropertyAccessorSymbol : KtFunctionLikeSymbol(),
final override val symbolKind: KtSymbolKind get() = withValidityAssertion { KtSymbolKind.ACCESSOR } final override val symbolKind: KtSymbolKind get() = withValidityAssertion { KtSymbolKind.ACCESSOR }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtPropertyAccessorSymbol> abstract override fun createPointer(): KtSymbolPointer<KtPropertyAccessorSymbol>
} }
public abstract class KtPropertyGetterSymbol : KtPropertyAccessorSymbol() { public abstract class KtPropertyGetterSymbol : KtPropertyAccessorSymbol() {
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> abstract override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol>
} }
public abstract class KtPropertySetterSymbol : KtPropertyAccessorSymbol() { public abstract class KtPropertySetterSymbol : KtPropertyAccessorSymbol() {
public abstract val parameter: KtValueParameterSymbol public abstract val parameter: KtValueParameterSymbol
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol> abstract override fun createPointer(): KtSymbolPointer<KtPropertySetterSymbol>
} }
@@ -1,11 +1,12 @@
/* /*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/ */
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
@@ -21,6 +22,7 @@ public interface KtSymbol : KtLifetimeOwner {
*/ */
public val psi: PsiElement? public val psi: PsiElement?
context(KtAnalysisSession)
public fun createPointer(): KtSymbolPointer<KtSymbol> public fun createPointer(): KtSymbolPointer<KtSymbol>
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.api.symbols package org.jetbrains.kotlin.analysis.api.symbols
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.KtInitializerValue import org.jetbrains.kotlin.analysis.api.KtInitializerValue
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtExpression
public sealed class KtVariableLikeSymbol : KtCallableSymbol(), KtNamedSymbol, KtSymbolWithKind, KtPossibleMemberSymbol { public sealed class KtVariableLikeSymbol : KtCallableSymbol(), KtNamedSymbol, KtSymbolWithKind, KtPossibleMemberSymbol {
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol> abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol>
} }
@@ -49,6 +51,7 @@ public abstract class KtBackingFieldSymbol : KtVariableLikeSymbol() {
final override val typeParameters: List<KtTypeParameterSymbol> final override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { emptyList() } get() = withValidityAssertion { emptyList() }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol> abstract override fun createPointer(): KtSymbolPointer<KtVariableLikeSymbol>
public companion object { public companion object {
@@ -69,12 +72,15 @@ public abstract class KtEnumEntrySymbol : KtVariableLikeSymbol(), KtSymbolWithMe
//todo reduntant, remove //todo reduntant, remove
public abstract val containingEnumClassIdIfNonLocal: ClassId? public abstract val containingEnumClassIdIfNonLocal: ClassId?
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol> abstract override fun createPointer(): KtSymbolPointer<KtEnumEntrySymbol>
} }
public sealed class KtVariableSymbol : KtVariableLikeSymbol() { public sealed class KtVariableSymbol : KtVariableLikeSymbol() {
public abstract val isVal: Boolean public abstract val isVal: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtVariableSymbol> abstract override fun createPointer(): KtSymbolPointer<KtVariableSymbol>
} }
@@ -93,6 +99,7 @@ public abstract class KtJavaFieldSymbol :
public abstract val isStatic: Boolean public abstract val isStatic: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol> abstract override fun createPointer(): KtSymbolPointer<KtJavaFieldSymbol>
} }
@@ -126,6 +133,7 @@ public sealed class KtPropertySymbol : KtVariableSymbol(),
*/ */
public abstract val initializer: KtInitializerValue? public abstract val initializer: KtInitializerValue?
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtPropertySymbol> abstract override fun createPointer(): KtSymbolPointer<KtPropertySymbol>
} }
@@ -134,6 +142,7 @@ public abstract class KtKotlinPropertySymbol : KtPropertySymbol() {
public abstract val isConst: Boolean public abstract val isConst: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol> abstract override fun createPointer(): KtSymbolPointer<KtKotlinPropertySymbol>
} }
@@ -150,6 +159,7 @@ public abstract class KtSyntheticJavaPropertySymbol : KtPropertySymbol() {
public abstract val javaGetterSymbol: KtFunctionSymbol public abstract val javaGetterSymbol: KtFunctionSymbol
public abstract val javaSetterSymbol: KtFunctionSymbol? public abstract val javaSetterSymbol: KtFunctionSymbol?
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol> abstract override fun createPointer(): KtSymbolPointer<KtSyntheticJavaPropertySymbol>
} }
@@ -162,6 +172,7 @@ public abstract class KtLocalVariableSymbol : KtVariableSymbol(), KtSymbolWithKi
final override val typeParameters: List<KtTypeParameterSymbol> final override val typeParameters: List<KtTypeParameterSymbol>
get() = withValidityAssertion { emptyList() } get() = withValidityAssertion { emptyList() }
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol> abstract override fun createPointer(): KtSymbolPointer<KtLocalVariableSymbol>
} }
@@ -200,6 +211,7 @@ public abstract class KtValueParameterSymbol : KtVariableLikeSymbol(), KtSymbolW
*/ */
public abstract val isImplicitLambdaParameter: Boolean public abstract val isImplicitLambdaParameter: Boolean
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> abstract override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol>
/** /**
@@ -132,7 +132,7 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
} }
} }
context(KtAnalysisSession) context(ktAnalysisSession@KtAnalysisSession)
private fun addMethodsFromDataClass(result: MutableList<KtLightMethod>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) { private fun addMethodsFromDataClass(result: MutableList<KtLightMethod>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) {
if (!classOrObjectSymbol.isData) return if (!classOrObjectSymbol.isData) return
@@ -141,6 +141,7 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
val lightMemberOrigin = LightMemberOriginForDeclaration(classOrObject, JvmDeclarationOriginKind.OTHER) val lightMemberOrigin = LightMemberOriginForDeclaration(classOrObject, JvmDeclarationOriginKind.OTHER)
result.add( result.add(
SymbolLightSimpleMethod( SymbolLightSimpleMethod(
ktAnalysisSession = this@ktAnalysisSession,
ktFunctionSymbol, lightMemberOrigin, this, METHOD_INDEX_BASE, false, ktFunctionSymbol, lightMemberOrigin, this, METHOD_INDEX_BASE, false,
suppressStatic = false suppressStatic = false
) )
@@ -185,13 +186,14 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
private val Name.isFromAny: Boolean private val Name.isFromAny: Boolean
get() = this == EQUALS || this == HASHCODE_NAME || this == TO_STRING get() = this == EQUALS || this == HASHCODE_NAME || this == TO_STRING
context(KtAnalysisSession) context(ktAnalysisSession@KtAnalysisSession)
private fun addDelegatesToInterfaceMethods(result: MutableList<KtLightMethod>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) { private fun addDelegatesToInterfaceMethods(result: MutableList<KtLightMethod>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) {
fun createDelegateMethod(ktFunctionSymbol: KtFunctionSymbol) { fun createDelegateMethod(ktFunctionSymbol: KtFunctionSymbol) {
val kotlinOrigin = ktFunctionSymbol.psiSafe<KtDeclaration>() ?: classOrObject val kotlinOrigin = ktFunctionSymbol.psiSafe<KtDeclaration>() ?: classOrObject
val lightMemberOrigin = LightMemberOriginForDeclaration(kotlinOrigin, JvmDeclarationOriginKind.DELEGATION) val lightMemberOrigin = LightMemberOriginForDeclaration(kotlinOrigin, JvmDeclarationOriginKind.DELEGATION)
result.add( result.add(
SymbolLightSimpleMethod( SymbolLightSimpleMethod(
ktAnalysisSession = this@ktAnalysisSession,
ktFunctionSymbol, ktFunctionSymbol,
lightMemberOrigin, lightMemberOrigin,
this, this,
@@ -161,6 +161,7 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC
} }
?.mapTo(result) { ?.mapTo(result) {
SymbolLightFieldForProperty( SymbolLightFieldForProperty(
ktAnalysisSession = this,
propertySymbol = it, propertySymbol = it,
fieldName = it.name.asString(), fieldName = it.name.asString(),
containingClass = this@SymbolLightClassForClassOrObject, containingClass = this@SymbolLightClassForClassOrObject,
@@ -71,7 +71,7 @@ private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? {
return (targetField as? SymbolLightFieldForEnumEntry)?.initializingClass as? KtLightClass return (targetField as? SymbolLightFieldForEnumEntry)?.initializingClass as? KtLightClass
} }
context(KtAnalysisSession) context(ktAnalysisSession@KtAnalysisSession)
internal fun SymbolLightClassForClassOrObject.createConstructors( internal fun SymbolLightClassForClassOrObject.createConstructors(
declarations: Sequence<KtConstructorSymbol>, declarations: Sequence<KtConstructorSymbol>,
result: MutableList<KtLightMethod>, result: MutableList<KtLightMethod>,
@@ -87,6 +87,7 @@ internal fun SymbolLightClassForClassOrObject.createConstructors(
result.add( result.add(
SymbolLightConstructor( SymbolLightConstructor(
ktAnalysisSession = this@ktAnalysisSession,
constructorSymbol = constructor, constructorSymbol = constructor,
lightMemberOrigin = null, lightMemberOrigin = null,
containingClass = this@createConstructors, containingClass = this@createConstructors,
@@ -96,6 +97,7 @@ internal fun SymbolLightClassForClassOrObject.createConstructors(
createJvmOverloadsIfNeeded(constructor, result) { methodIndex, argumentSkipMask -> createJvmOverloadsIfNeeded(constructor, result) { methodIndex, argumentSkipMask ->
SymbolLightConstructor( SymbolLightConstructor(
ktAnalysisSession = this@ktAnalysisSession,
constructorSymbol = constructor, constructorSymbol = constructor,
lightMemberOrigin = null, lightMemberOrigin = null,
containingClass = this@createConstructors, containingClass = this@createConstructors,
@@ -152,7 +154,7 @@ private fun SymbolLightClassForClassOrObject.noArgConstructor(
methodIndex, methodIndex,
) )
context(KtAnalysisSession) context(ktAnalysisSession@KtAnalysisSession)
internal fun SymbolLightClassBase.createMethods( internal fun SymbolLightClassBase.createMethods(
declarations: Sequence<KtCallableSymbol>, declarations: Sequence<KtCallableSymbol>,
result: MutableList<KtLightMethod>, result: MutableList<KtLightMethod>,
@@ -161,7 +163,7 @@ internal fun SymbolLightClassBase.createMethods(
) { ) {
val (ctorProperties, regularMembers) = declarations.partition { it is KtPropertySymbol && it.isFromPrimaryConstructor } val (ctorProperties, regularMembers) = declarations.partition { it is KtPropertySymbol && it.isFromPrimaryConstructor }
fun handleDeclaration(declaration: KtCallableSymbol) { fun KtAnalysisSession.handleDeclaration(declaration: KtCallableSymbol) {
when (declaration) { when (declaration) {
is KtFunctionSymbol -> { is KtFunctionSymbol -> {
// TODO: check if it has expect modifier // TODO: check if it has expect modifier
@@ -170,6 +172,7 @@ internal fun SymbolLightClassBase.createMethods(
result.add( result.add(
SymbolLightSimpleMethod( SymbolLightSimpleMethod(
ktAnalysisSession = this,
functionSymbol = declaration, functionSymbol = declaration,
lightMemberOrigin = null, lightMemberOrigin = null,
containingClass = this@createMethods, containingClass = this@createMethods,
@@ -181,6 +184,7 @@ internal fun SymbolLightClassBase.createMethods(
createJvmOverloadsIfNeeded(declaration, result) { methodIndex, argumentSkipMask -> createJvmOverloadsIfNeeded(declaration, result) { methodIndex, argumentSkipMask ->
SymbolLightSimpleMethod( SymbolLightSimpleMethod(
ktAnalysisSession = this,
functionSymbol = declaration, functionSymbol = declaration,
lightMemberOrigin = null, lightMemberOrigin = null,
containingClass = this@createMethods, containingClass = this@createMethods,
@@ -206,11 +210,11 @@ internal fun SymbolLightClassBase.createMethods(
// Regular members // Regular members
regularMembers.forEach { regularMembers.forEach {
handleDeclaration(it) this@ktAnalysisSession.handleDeclaration(it)
} }
// Then, properties from the primary constructor parameters // Then, properties from the primary constructor parameters
ctorProperties.forEach { ctorProperties.forEach {
handleDeclaration(it) this@ktAnalysisSession.handleDeclaration(it)
} }
} }
@@ -232,7 +236,7 @@ private inline fun <T : KtFunctionLikeSymbol> SymbolLightClassBase.createJvmOver
} }
} }
context(KtAnalysisSession) context(ktAnalysisSession@KtAnalysisSession)
internal fun SymbolLightClassBase.createPropertyAccessors( internal fun SymbolLightClassBase.createPropertyAccessors(
result: MutableList<KtLightMethod>, result: MutableList<KtLightMethod>,
declaration: KtPropertySymbol, declaration: KtPropertySymbol,
@@ -257,8 +261,7 @@ internal fun SymbolLightClassBase.createPropertyAccessors(
if (declaration.hasReifiedParameters) return false if (declaration.hasReifiedParameters) return false
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
if (declaration.isHiddenOrSynthetic(siteTarget)) return false if (declaration.isHiddenOrSynthetic(siteTarget)) return false
if (isHiddenOrSynthetic()) return false return !isHiddenOrSynthetic()
return true
} }
val originalElement = declaration.sourcePsiSafe<KtDeclaration>() val originalElement = declaration.sourcePsiSafe<KtDeclaration>()
@@ -267,54 +270,40 @@ internal fun SymbolLightClassBase.createPropertyAccessors(
it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_GETTER) it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_GETTER)
} }
if (getter != null) { fun createSymbolLightAccessorMethod(accessor: KtPropertyAccessorSymbol): SymbolLightAccessorMethod {
val lightMemberOrigin = originalElement?.let { val lightMemberOrigin = originalElement?.let {
LightMemberOriginForDeclaration( LightMemberOriginForDeclaration(
originalElement = it, originalElement = it,
originKind = JvmDeclarationOriginKind.OTHER, originKind = JvmDeclarationOriginKind.OTHER,
auxiliaryOriginalElement = getter.sourcePsiSafe<KtDeclaration>() auxiliaryOriginalElement = accessor.sourcePsiSafe<KtDeclaration>()
) )
} }
result.add( return SymbolLightAccessorMethod(
SymbolLightAccessorMethod( ktAnalysisSession = this@ktAnalysisSession,
propertyAccessorSymbol = getter, propertyAccessorSymbol = accessor,
containingPropertySymbol = declaration, containingPropertySymbol = declaration,
lightMemberOrigin = lightMemberOrigin, lightMemberOrigin = lightMemberOrigin,
containingClass = this@createPropertyAccessors, containingClass = this@createPropertyAccessors,
isTopLevel = isTopLevel, isTopLevel = isTopLevel,
suppressStatic = suppressStatic, suppressStatic = suppressStatic,
)
) )
} }
if (getter != null) {
result.add(createSymbolLightAccessorMethod(getter))
}
val setter = declaration.setter?.takeIf { val setter = declaration.setter?.takeIf {
!isAnnotationType && it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_SETTER) !isAnnotationType && it.needToCreateAccessor(AnnotationUseSiteTarget.PROPERTY_SETTER)
} }
if (isMutable && setter != null) { if (isMutable && setter != null) {
val lightMemberOrigin = originalElement?.let { result.add(createSymbolLightAccessorMethod(setter))
LightMemberOriginForDeclaration(
originalElement = it,
originKind = JvmDeclarationOriginKind.OTHER,
auxiliaryOriginalElement = setter.sourcePsiSafe<KtDeclaration>()
)
}
result.add(
SymbolLightAccessorMethod(
propertyAccessorSymbol = setter,
containingPropertySymbol = declaration,
lightMemberOrigin = lightMemberOrigin,
containingClass = this@createPropertyAccessors,
isTopLevel = isTopLevel,
suppressStatic = suppressStatic,
)
)
} }
} }
context(KtAnalysisSession) context(ktAnalysisSession@KtAnalysisSession)
internal fun SymbolLightClassBase.createField( internal fun SymbolLightClassBase.createField(
declaration: KtPropertySymbol, declaration: KtPropertySymbol,
nameGenerator: SymbolLightField.FieldNameGenerator, nameGenerator: SymbolLightField.FieldNameGenerator,
@@ -348,6 +337,7 @@ internal fun SymbolLightClassBase.createField(
result.add( result.add(
SymbolLightFieldForProperty( SymbolLightFieldForProperty(
ktAnalysisSession = this@ktAnalysisSession,
propertySymbol = declaration, propertySymbol = declaration,
fieldName = fieldName, fieldName = fieldName,
containingClass = this, containingClass = this,
@@ -31,17 +31,35 @@ import org.jetbrains.kotlin.name.JvmNames.VOLATILE_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtProperty
internal class SymbolLightFieldForProperty( internal class SymbolLightFieldForProperty private constructor(
propertySymbol: KtPropertySymbol, private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol>,
private val fieldName: String, private val fieldName: String,
containingClass: SymbolLightClassBase, containingClass: SymbolLightClassBase,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
isTopLevel: Boolean, isTopLevel: Boolean,
forceStatic: Boolean, forceStatic: Boolean,
takePropertyVisibility: Boolean, takePropertyVisibility: Boolean,
override val kotlinOrigin: KtCallableDeclaration?,
) : SymbolLightField(containingClass, lightMemberOrigin) { ) : SymbolLightField(containingClass, lightMemberOrigin) {
override val kotlinOrigin: KtCallableDeclaration? = propertySymbol.sourcePsiSafe<KtCallableDeclaration>() internal constructor(
private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = propertySymbol.createPointer() ktAnalysisSession: KtAnalysisSession,
propertySymbol: KtPropertySymbol,
fieldName: String,
containingClass: SymbolLightClassBase,
lightMemberOrigin: LightMemberOrigin?,
isTopLevel: Boolean,
forceStatic: Boolean,
takePropertyVisibility: Boolean,
) : this(
propertySymbolPointer = with(ktAnalysisSession) { propertySymbol.createPointer() },
fieldName = fieldName,
containingClass = containingClass,
lightMemberOrigin = lightMemberOrigin,
isTopLevel = isTopLevel,
forceStatic = forceStatic,
takePropertyVisibility = takePropertyVisibility,
kotlinOrigin = propertySymbol.sourcePsiSafe<KtCallableDeclaration>(),
)
private fun <T> withPropertySymbol(action: context (KtAnalysisSession) (KtPropertySymbol) -> T): T { private fun <T> withPropertySymbol(action: context (KtAnalysisSession) (KtPropertySymbol) -> T): T {
return propertySymbolPointer.withSymbol(ktModule, action) return propertySymbolPointer.withSymbol(ktModule, action)
@@ -39,31 +39,48 @@ import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtPropertyAccessor import org.jetbrains.kotlin.psi.KtPropertyAccessor
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
internal class SymbolLightAccessorMethod( internal class SymbolLightAccessorMethod private constructor(
propertyAccessorSymbol: KtPropertyAccessorSymbol,
containingPropertySymbol: KtPropertySymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase, containingClass: SymbolLightClassBase,
methodIndex: Int,
private val isGetter: Boolean,
private val propertyAccessorDeclaration: KtPropertyAccessor?,
private val propertyAccessorSymbolPointer: KtSymbolPointer<KtPropertyAccessorSymbol>,
private val containingPropertyDeclaration: KtCallableDeclaration?,
private val containingPropertySymbolPointer: KtSymbolPointer<KtPropertySymbol>,
private val isTopLevel: Boolean, private val isTopLevel: Boolean,
private val suppressStatic: Boolean = false, private val suppressStatic: Boolean,
) : SymbolLightMethodBase( ) : SymbolLightMethodBase(
lightMemberOrigin, lightMemberOrigin,
containingClass, containingClass,
if (propertyAccessorSymbol is KtPropertyGetterSymbol) METHOD_INDEX_FOR_GETTER else METHOD_INDEX_FOR_SETTER, methodIndex,
) { ) {
private val isGetter: Boolean = propertyAccessorSymbol is KtPropertyGetterSymbol internal constructor(
ktAnalysisSession: KtAnalysisSession,
private val propertyAccessorDeclaration: KtPropertyAccessor? = propertyAccessorSymbol.sourcePsiSafe() propertyAccessorSymbol: KtPropertyAccessorSymbol,
private val propertyAccessorSymbolPointer: KtSymbolPointer<KtPropertyAccessorSymbol> = propertyAccessorSymbol.createPointer() containingPropertySymbol: KtPropertySymbol,
lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase,
isTopLevel: Boolean,
suppressStatic: Boolean = false,
) : this(
lightMemberOrigin,
containingClass,
methodIndex = if (propertyAccessorSymbol is KtPropertyGetterSymbol) METHOD_INDEX_FOR_GETTER else METHOD_INDEX_FOR_SETTER,
isGetter = propertyAccessorSymbol is KtPropertyGetterSymbol,
propertyAccessorDeclaration = propertyAccessorSymbol.sourcePsiSafe(),
propertyAccessorSymbolPointer = with(ktAnalysisSession) { propertyAccessorSymbol.createPointer() },
containingPropertyDeclaration = containingPropertySymbol.sourcePsiSafe(),
containingPropertySymbolPointer = with(ktAnalysisSession) { containingPropertySymbol.createPointer() },
isTopLevel = isTopLevel,
suppressStatic = suppressStatic,
)
context(KtAnalysisSession) context(KtAnalysisSession)
private fun propertyAccessorSymbol(): KtPropertyAccessorSymbol { private fun propertyAccessorSymbol(): KtPropertyAccessorSymbol {
return propertyAccessorSymbolPointer.restoreSymbolOrThrowIfDisposed() return propertyAccessorSymbolPointer.restoreSymbolOrThrowIfDisposed()
} }
private val containingPropertyDeclaration: KtCallableDeclaration? = containingPropertySymbol.sourcePsiSafe()
private val containingPropertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = containingPropertySymbol.createPointer()
context(KtAnalysisSession) context(KtAnalysisSession)
private fun propertySymbol(): KtPropertySymbol { private fun propertySymbol(): KtPropertySymbol {
return containingPropertySymbolPointer.restoreSymbolOrThrowIfDisposed() return containingPropertySymbolPointer.restoreSymbolOrThrowIfDisposed()
@@ -226,7 +243,10 @@ internal class SymbolLightAccessorMethod(
if (propertyParameter != null) { if (propertyParameter != null) {
builder.addParameter( builder.addParameter(
SymbolLightSetterParameter( SymbolLightSetterParameter(
containingPropertySymbolPointer, propertyParameter, this@SymbolLightAccessorMethod ktAnalysisSession = this,
containingPropertySymbolPointer = containingPropertySymbolPointer,
parameterSymbol = propertyParameter,
containingMethod = this@SymbolLightAccessorMethod,
) )
) )
} }
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.light.classes.symbol.methods package org.jetbrains.kotlin.light.classes.symbol.methods
import com.intellij.psi.* import com.intellij.psi.*
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol
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
@@ -18,19 +19,20 @@ import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
import java.util.* import java.util.*
internal class SymbolLightConstructor( internal class SymbolLightConstructor(
ktAnalysisSession: KtAnalysisSession,
constructorSymbol: KtConstructorSymbol, constructorSymbol: KtConstructorSymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase, containingClass: SymbolLightClassBase,
methodIndex: Int, methodIndex: Int,
argumentsSkipMask: BitSet? = null, argumentsSkipMask: BitSet? = null,
) : SymbolLightMethod<KtConstructorSymbol>( ) : SymbolLightMethod<KtConstructorSymbol>(
ktAnalysisSession = ktAnalysisSession,
functionSymbol = constructorSymbol, functionSymbol = constructorSymbol,
lightMemberOrigin = lightMemberOrigin, lightMemberOrigin = lightMemberOrigin,
containingClass = containingClass, containingClass = containingClass,
methodIndex = methodIndex, methodIndex = methodIndex,
argumentsSkipMask = argumentsSkipMask argumentsSkipMask = argumentsSkipMask
) { ) {
private val _name: String? = containingClass.name private val _name: String? = containingClass.name
override fun getName(): String = _name ?: "" override fun getName(): String = _name ?: ""
@@ -28,21 +28,38 @@ import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
import java.util.* import java.util.*
internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>( internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol> private constructor(
functionSymbol: FType, protected val functionSymbolPointer: KtSymbolPointer<FType>,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase, containingClass: SymbolLightClassBase,
methodIndex: Int, methodIndex: Int,
private val argumentsSkipMask: BitSet? = null, private val argumentsSkipMask: BitSet?,
protected val functionDeclaration: KtCallableDeclaration?,
override val kotlinOrigin: KtDeclaration?,
) : SymbolLightMethodBase( ) : SymbolLightMethodBase(
lightMemberOrigin, lightMemberOrigin,
containingClass, containingClass,
methodIndex, methodIndex,
) { ) {
protected val functionDeclaration: KtCallableDeclaration? = functionSymbol.sourcePsiSafe() internal constructor(
ktAnalysisSession: KtAnalysisSession,
@Suppress("UNCHECKED_CAST") functionSymbol: FType,
protected val functionSymbolPointer: KtSymbolPointer<FType> = functionSymbol.createPointer() as KtSymbolPointer<FType> lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase,
methodIndex: Int,
argumentsSkipMask: BitSet? = null,
) : this(
functionSymbolPointer = with(ktAnalysisSession) {
@Suppress("UNCHECKED_CAST")
functionSymbol.createPointer() as KtSymbolPointer<FType>
},
lightMemberOrigin = lightMemberOrigin,
containingClass = containingClass,
methodIndex = methodIndex,
argumentsSkipMask = argumentsSkipMask,
functionDeclaration = functionSymbol.sourcePsiSafe(),
kotlinOrigin = functionSymbol.sourcePsiSafe() ?: lightMemberOrigin?.originalElement ?: functionSymbol.psiSafe<KtDeclaration>(),
)
protected fun <T> withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = functionSymbolPointer.withSymbol(ktModule, action) protected fun <T> withFunctionSymbol(action: KtAnalysisSession.(FType) -> T): T = functionSymbolPointer.withSymbol(ktModule, action)
@@ -65,6 +82,7 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
if (!needToSkip) { if (!needToSkip) {
builder.addParameter( builder.addParameter(
SymbolLightParameter( SymbolLightParameter(
ktAnalysisSession = this,
parameterSymbol = parameter, parameterSymbol = parameter,
containingMethod = this@SymbolLightMethod, containingMethod = this@SymbolLightMethod,
) )
@@ -101,9 +119,6 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
override fun getParameterList(): PsiParameterList = _parametersList override fun getParameterList(): PsiParameterList = _parametersList
override val kotlinOrigin: KtDeclaration? =
functionDeclaration ?: lightMemberOrigin?.originalElement ?: functionSymbol.psiSafe<KtDeclaration>()
override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: functionSymbolPointer.isValid(ktModule) override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: functionSymbolPointer.isValid(ktModule)
override fun isOverride(): Boolean = withFunctionSymbol { it.getDirectlyOverriddenSymbols().isNotEmpty() } override fun isOverride(): Boolean = withFunctionSymbol { it.getDirectlyOverriddenSymbols().isNotEmpty() }
@@ -27,14 +27,16 @@ import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import java.util.* import java.util.*
internal class SymbolLightSimpleMethod( internal class SymbolLightSimpleMethod(
ktAnalysisSession: KtAnalysisSession,
functionSymbol: KtFunctionSymbol, functionSymbol: KtFunctionSymbol,
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase, 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,
) : SymbolLightMethod<KtFunctionSymbol>( ) : SymbolLightMethod<KtFunctionSymbol>(
ktAnalysisSession = ktAnalysisSession,
functionSymbol = functionSymbol, functionSymbol = functionSymbol,
lightMemberOrigin = lightMemberOrigin, lightMemberOrigin = lightMemberOrigin,
containingClass = containingClass, containingClass = containingClass,
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiModifierList
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.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
@@ -18,9 +19,10 @@ import org.jetbrains.kotlin.light.classes.symbol.withSymbol
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
internal class SymbolLightParameter( internal class SymbolLightParameter(
ktAnalysisSession: KtAnalysisSession,
parameterSymbol: KtValueParameterSymbol, parameterSymbol: KtValueParameterSymbol,
containingMethod: SymbolLightMethodBase containingMethod: SymbolLightMethodBase
) : SymbolLightParameterCommon(parameterSymbol, containingMethod) { ) : SymbolLightParameterCommon(ktAnalysisSession, parameterSymbol, containingMethod) {
private val isConstructorParameterSymbol = containingMethod.isConstructor private val isConstructorParameterSymbol = containingMethod.isConstructor
private val _annotations: List<PsiAnnotation> by lazyPub { private val _annotations: List<PsiAnnotation> by lazyPub {
@@ -33,7 +35,7 @@ internal class SymbolLightParameter(
val nullability = if (parameterSymbol.isVararg) NullabilityType.NotNull else super.nullabilityType val nullability = if (parameterSymbol.isVararg) NullabilityType.NotNull else super.nullabilityType
parameterSymbol.computeAnnotations( parameterSymbol.computeAnnotations(
parent = this, parent = this@SymbolLightParameter,
nullability = nullability, nullability = nullability,
annotationUseSiteTarget = annotationSite, annotationUseSiteTarget = annotationSite,
includeAnnotationsWithoutSite = true includeAnnotationsWithoutSite = true
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.light.classes.symbol.parameters package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.* import com.intellij.psi.*
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.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.psiSafe import org.jetbrains.kotlin.analysis.api.symbols.psiSafe
@@ -18,11 +19,21 @@ import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtParameter
internal abstract class SymbolLightParameterCommon( internal abstract class SymbolLightParameterCommon(
parameterSymbol: KtValueParameterSymbol, protected val parameterSymbolPointer: KtSymbolPointer<KtValueParameterSymbol>,
private val containingMethod: SymbolLightMethodBase protected val parameterDeclaration: KtParameter?,
private val containingMethod: SymbolLightMethodBase,
override val kotlinOrigin: KtParameter?,
) : SymbolLightParameterBase(containingMethod) { ) : SymbolLightParameterBase(containingMethod) {
protected val parameterSymbolPointer: KtSymbolPointer<KtValueParameterSymbol> = parameterSymbol.createPointer() internal constructor(
protected val parameterDeclaration: KtParameter? = parameterSymbol.sourcePsiSafe() ktAnalysisSession: KtAnalysisSession,
parameterSymbol: KtValueParameterSymbol,
containingMethod: SymbolLightMethodBase,
) : this(
parameterSymbolPointer = with(ktAnalysisSession) { parameterSymbol.createPointer() },
parameterDeclaration = parameterSymbol.sourcePsiSafe(),
containingMethod = containingMethod,
kotlinOrigin = parameterSymbol.psiSafe(),
)
private val _name: String by lazy { private val _name: String by lazy {
parameterSymbolPointer.withSymbol(ktModule) { parameterSymbolPointer.withSymbol(ktModule) {
@@ -34,8 +45,6 @@ internal abstract class SymbolLightParameterCommon(
override fun hasModifierProperty(name: String): Boolean = modifierList.hasModifierProperty(name) override fun hasModifierProperty(name: String): Boolean = modifierList.hasModifierProperty(name)
override val kotlinOrigin: KtParameter? = parameterDeclaration ?: parameterSymbol.psiSafe()
abstract override fun getModifierList(): PsiModifierList abstract override fun getModifierList(): PsiModifierList
private val _identifier: PsiIdentifier by lazy { private val _identifier: PsiIdentifier by lazy {
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters
import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiAnnotation
import com.intellij.psi.PsiModifierList import com.intellij.psi.PsiModifierList
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
@@ -22,10 +23,11 @@ import org.jetbrains.kotlin.light.classes.symbol.withSymbol
import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.SpecialNames
internal class SymbolLightSetterParameter( internal class SymbolLightSetterParameter(
ktAnalysisSession: KtAnalysisSession,
private val containingPropertySymbolPointer: KtSymbolPointer<KtPropertySymbol>, private val containingPropertySymbolPointer: KtSymbolPointer<KtPropertySymbol>,
parameterSymbol: KtValueParameterSymbol, parameterSymbol: KtValueParameterSymbol,
containingMethod: SymbolLightMethodBase, containingMethod: SymbolLightMethodBase,
) : SymbolLightParameterCommon(parameterSymbol, containingMethod) { ) : SymbolLightParameterCommon(ktAnalysisSession, parameterSymbol, containingMethod) {
override fun getName(): String { override fun getName(): String {
if (isDefaultSetterParameter) return SpecialNames.IMPLICIT_SET_PARAMETER.asString() if (isDefaultSetterParameter) return SpecialNames.IMPLICIT_SET_PARAMETER.asString()
return super.getName() return super.getName()
@@ -42,10 +42,15 @@ internal class SymbolLightTypeParameter private constructor(
) : LightElement(parent.manager, KotlinLanguage.INSTANCE), PsiTypeParameter, ) : LightElement(parent.manager, KotlinLanguage.INSTANCE), PsiTypeParameter,
KtLightDeclaration<KtTypeParameter, PsiTypeParameter> { KtLightDeclaration<KtTypeParameter, PsiTypeParameter> {
constructor(parent: SymbolLightTypeParameterList, index: Int, typeParameterSymbol: KtTypeParameterSymbol) : this( constructor(
ktAnalysisSession: KtAnalysisSession,
parent: SymbolLightTypeParameterList,
index: Int,
typeParameterSymbol: KtTypeParameterSymbol,
) : this(
parent = parent, parent = parent,
index = index, index = index,
typeParameterSymbolPointer = typeParameterSymbol.createPointer(), typeParameterSymbolPointer = with(ktAnalysisSession) { typeParameterSymbol.createPointer() },
typeParameterDeclaration = typeParameterSymbol.sourcePsiSafe(), typeParameterDeclaration = typeParameterSymbol.sourcePsiSafe(),
kotlinOrigin = typeParameterSymbol.psiSafe(), kotlinOrigin = typeParameterSymbol.psiSafe(),
) )
@@ -43,7 +43,8 @@ internal class SymbolLightTypeParameterList(
symbolWithTypeParameterPointer.withSymbol(ktModule) { symbolWithTypeParameterPointer.withSymbol(ktModule) {
it.typeParameters.mapIndexed { index, parameter -> it.typeParameters.mapIndexed { index, parameter ->
SymbolLightTypeParameter( SymbolLightTypeParameter(
parent = this, ktAnalysisSession = this,
parent = this@SymbolLightTypeParameterList,
index = index, index = index,
typeParameterSymbol = parameter, typeParameterSymbol = parameter,
) )
@@ -311,5 +311,5 @@ internal fun <T : KtSymbol> compareSymbolPointers(ktModule: KtModule, left: KtSy
internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol( internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol(
ktModule: KtModule, ktModule: KtModule,
crossinline action: context(KtAnalysisSession) (T) -> R, crossinline action: KtAnalysisSession.(T) -> R,
): R = analyzeForLightClasses(ktModule) { action(this, restoreSymbolOrThrowIfDisposed()) } ): R = analyzeForLightClasses(ktModule) { action(this, restoreSymbolOrThrowIfDisposed()) }