[SLC] SymbolLightMemberBase: introduce ktModule

fix recursion inside computeJvmMethodName

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-16 11:16:28 +01:00
committed by Space Team
parent 0b8b4bfe82
commit 7297c0b941
11 changed files with 14 additions and 29 deletions
@@ -10,22 +10,24 @@ import com.intellij.psi.PsiIdentifier
import com.intellij.psi.PsiMember
import com.intellij.psi.PsiMethod
import com.intellij.psi.javadoc.PsiDocComment
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.elements.KtLightElementBase
import org.jetbrains.kotlin.asJava.elements.KtLightMember
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.psi.KtDeclaration
internal abstract class SymbolLightMemberBase<T : PsiMember>(
override val lightMemberOrigin: LightMemberOrigin?,
private val containingClass: KtLightClass,
private val containingClass: SymbolLightClassBase,
) : KtLightElementBase(containingClass), PsiMember, KtLightMember<T> {
protected val ktModule: KtModule get() = containingClass.ktModule
override fun hasModifierProperty(name: String): Boolean = modifierList?.hasModifierProperty(name) ?: false
override fun toString(): String = "${this::class.java.simpleName}:$name"
override fun getContainingClass() = containingClass
override fun getContainingClass(): SymbolLightClassBase = containingClass
abstract override fun getNameIdentifier(): PsiIdentifier?
@@ -293,7 +293,6 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
enumEntryName = name,
containingClass = this@SymbolLightClass,
lightMemberOrigin = null,
ktModule = ktModule,
)
}
}
@@ -163,7 +163,6 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC
isTopLevel = false,
forceStatic = true,
takePropertyVisibility = it.isConstOrJvmField,
ktModule = ktModule,
)
}
@@ -283,7 +283,6 @@ internal fun SymbolLightClassBase.createPropertyAccessors(
containingClass = this@createPropertyAccessors,
isTopLevel = isTopLevel,
suppressStatic = suppressStatic,
ktModule = ktModule,
)
)
}
@@ -309,7 +308,6 @@ internal fun SymbolLightClassBase.createPropertyAccessors(
containingClass = this@createPropertyAccessors,
isTopLevel = isTopLevel,
suppressStatic = suppressStatic,
ktModule = ktModule,
)
)
}
@@ -356,7 +354,6 @@ internal fun SymbolLightClassBase.createField(
isTopLevel = isTopLevel,
forceStatic = forceStatic,
takePropertyVisibility = takePropertyVisibility,
ktModule = ktModule,
)
)
}
@@ -13,7 +13,6 @@ import com.intellij.util.IncorrectOperationException
import com.intellij.util.PlatformIcons
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.cannotModify
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField
@@ -21,11 +20,12 @@ import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightMemberBase
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import javax.swing.Icon
internal abstract class SymbolLightField protected constructor(
private val containingClass: KtLightClass,
containingClass: SymbolLightClassBase,
lightMemberOrigin: LightMemberOrigin?,
) : SymbolLightMemberBase<PsiField>(lightMemberOrigin, containingClass), KtLightField {
override fun setInitializer(initializer: PsiExpression?) = cannotModify()
@@ -35,9 +35,6 @@ internal abstract class SymbolLightField protected constructor(
override fun getLanguage(): Language = KotlinLanguage.INSTANCE
override fun getParent() = containingClass
override fun getContainingClass() = containingClass
override fun getContainingFile(): PsiFile? = containingClass.containingFile
override fun hasInitializer(): Boolean = initializer !== null
private val _identifier: PsiIdentifier by lazyPub {
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.fields
import com.intellij.psi.*
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.cannotModify
import org.jetbrains.kotlin.asJava.classes.lazyPub
@@ -28,7 +27,6 @@ internal class SymbolLightFieldForEnumEntry(
private val enumEntryName: String,
containingClass: SymbolLightClass,
override val lightMemberOrigin: LightMemberOrigin?,
val ktModule: KtModule,
) : SymbolLightField(containingClass, lightMemberOrigin), PsiEnumConstant {
internal fun <T> withEnumEntrySymbol(action: KtAnalysisSession.(KtEnumEntrySymbol) -> T): T = analyzeForLightClasses(ktModule) {
action(enumEntry.getEnumEntrySymbol())
@@ -13,10 +13,10 @@ import org.jetbrains.annotations.NotNull
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
@@ -25,12 +25,12 @@ import org.jetbrains.kotlin.psi.KtObjectDeclaration
internal class SymbolLightFieldForObject(
private val objectDeclaration: KtObjectDeclaration,
containingClass: KtLightClass,
containingClass: SymbolLightClassForClassOrObject,
private val name: String,
lightMemberOrigin: LightMemberOrigin?,
) : SymbolLightField(containingClass, lightMemberOrigin) {
private fun <T> withObjectDeclarationSymbol(action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T =
analyzeForLightClasses(objectDeclaration) {
analyzeForLightClasses(ktModule) {
action(requireNotNull(objectDeclaration.getNamedClassOrObjectSymbol()))
}
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.symbols.sourcePsiSafe
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
@@ -41,7 +40,6 @@ internal class SymbolLightFieldForProperty(
isTopLevel: Boolean,
forceStatic: Boolean,
takePropertyVisibility: Boolean,
private val ktModule: KtModule,
) : SymbolLightField(containingClass, lightMemberOrigin) {
override val kotlinOrigin: KtCallableDeclaration? = propertySymbol.sourcePsiSafe<KtCallableDeclaration>()
private val propertySymbolPointer: KtSymbolPointer<KtPropertySymbol> = propertySymbol.createPointer()
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_FOR_GETTER
import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_FOR_SETTER
@@ -48,7 +47,6 @@ internal class SymbolLightAccessorMethod(
containingClass: SymbolLightClassBase,
private val isTopLevel: Boolean,
private val suppressStatic: Boolean = false,
private val ktModule: KtModule,
) : SymbolLightMethodBase(
lightMemberOrigin,
containingClass,
@@ -31,7 +31,7 @@ internal abstract class SymbolLightMethod(
) : SymbolLightMethodBase(
lightMemberOrigin,
containingClass,
methodIndex
methodIndex,
) {
private var _isVarArgs: Boolean = functionSymbol.valueParameters.any { it.isVararg }
@@ -15,10 +15,8 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.KotlinLightReferenceListBuilder
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
import org.jetbrains.kotlin.asJava.classes.cannotModify
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
@@ -34,10 +32,9 @@ import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
internal abstract class SymbolLightMethodBase(
lightMemberOrigin: LightMemberOrigin?,
containingClass: KtLightClass,
private val methodIndex: Int
containingClass: SymbolLightClassBase,
private val methodIndex: Int,
) : SymbolLightMemberBase<PsiMethod>(lightMemberOrigin, containingClass), KtLightMethod {
override fun getBody(): PsiCodeBlock? = null
override fun getReturnTypeElement(): PsiTypeElement? = null
@@ -105,7 +102,7 @@ internal abstract class SymbolLightMethodBase(
if (containingClass is KtLightClassForFacade) return defaultName
if (hasPublishedApiAnnotation(annotationUseSiteTarget)) return defaultName
val moduleName = (getKtModule(project) as? KtSourceModule)?.moduleName ?: return defaultName
val moduleName = (ktModule as? KtSourceModule)?.moduleName ?: return defaultName
return mangleInternalName(defaultName, moduleName)
}