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