[SLC] drop KtAnalysisSession from SymbolLightTypeParameterList
^KT-54051
This commit is contained in:
committed by
Space Team
parent
5217a97145
commit
af73bb9bf3
+14
-10
@@ -14,6 +14,8 @@ import com.intellij.psi.stubs.StubElement
|
|||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
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.symbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration
|
import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
@@ -28,6 +30,7 @@ import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
|
|||||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
|
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty
|
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
|
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightTypeParameterList
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.psi.KtClass
|
import org.jetbrains.kotlin.psi.KtClass
|
||||||
import org.jetbrains.kotlin.psi.KtClassBody
|
import org.jetbrains.kotlin.psi.KtClassBody
|
||||||
@@ -42,10 +45,11 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtClassOrObject, ktModule: KtModule) :
|
abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtClassOrObject, ktModule: KtModule) :
|
||||||
SymbolLightClassBase(ktModule, classOrObject.manager),
|
SymbolLightClassBase(ktModule, classOrObject.manager),
|
||||||
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
||||||
protected fun <T> withClassOrObjectSymbol(action: KtAnalysisSession.(KtClassOrObjectSymbol) -> T): T =
|
private val classOrObjectSymbolPointer: KtSymbolPointer<KtClassOrObjectSymbol> = classOrObject.symbolPointer()
|
||||||
analyzeForLightClasses(ktModule) {
|
|
||||||
action(requireNotNull(classOrObject.getClassOrObjectSymbol()))
|
protected fun <T> withClassOrObjectSymbol(action: KtAnalysisSession.(KtClassOrObjectSymbol) -> T): T {
|
||||||
}
|
return classOrObjectSymbolPointer.withSymbol(ktModule, action)
|
||||||
|
}
|
||||||
|
|
||||||
protected fun <T> withNamedClassOrObjectSymbol(action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T =
|
protected fun <T> withNamedClassOrObjectSymbol(action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T =
|
||||||
analyzeForLightClasses(ktModule) {
|
analyzeForLightClasses(ktModule) {
|
||||||
@@ -82,12 +86,12 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC
|
|||||||
|
|
||||||
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
||||||
hasTypeParameters().ifTrue {
|
hasTypeParameters().ifTrue {
|
||||||
withClassOrObjectSymbol {
|
SymbolLightTypeParameterList(
|
||||||
SymbolLightTypeParameterList(
|
owner = this,
|
||||||
owner = this@SymbolLightClassForClassOrObject,
|
symbolWithTypeParameterPointer = classOrObjectSymbolPointer,
|
||||||
symbolWithTypeParameterList = it,
|
ktModule = ktModule,
|
||||||
)
|
ktDeclaration = classOrObject,
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -89,12 +89,12 @@ internal class SymbolLightAccessorMethod(
|
|||||||
|
|
||||||
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
||||||
hasTypeParameters().ifTrue {
|
hasTypeParameters().ifTrue {
|
||||||
analyzeForLightClasses(ktModule) {
|
SymbolLightTypeParameterList(
|
||||||
SymbolLightTypeParameterList(
|
owner = this,
|
||||||
owner = this@SymbolLightAccessorMethod,
|
symbolWithTypeParameterPointer = containingPropertySymbolPointer,
|
||||||
symbolWithTypeParameterList = propertySymbol(),
|
ktModule = ktModule,
|
||||||
)
|
ktDeclaration = containingPropertyDeclaration,
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -51,12 +51,12 @@ internal class SymbolLightSimpleMethod(
|
|||||||
|
|
||||||
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
private val _typeParameterList: PsiTypeParameterList? by lazyPub {
|
||||||
hasTypeParameters().ifTrue {
|
hasTypeParameters().ifTrue {
|
||||||
withFunctionSymbol { functionSymbol ->
|
SymbolLightTypeParameterList(
|
||||||
SymbolLightTypeParameterList(
|
owner = this,
|
||||||
owner = this@SymbolLightSimpleMethod,
|
symbolWithTypeParameterPointer = functionSymbolPointer,
|
||||||
symbolWithTypeParameterList = functionSymbol,
|
ktModule = ktModule,
|
||||||
)
|
ktDeclaration = functionDeclaration,
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+35
-25
@@ -8,18 +8,22 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters
|
|||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.psi.scope.PsiScopeProcessor
|
import com.intellij.psi.scope.PsiScopeProcessor
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
|
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.compareSymbolPointers
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||||
|
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
|
||||||
internal class SymbolLightTypeParameterList(
|
internal class SymbolLightTypeParameterList(
|
||||||
internal val owner: PsiTypeParameterListOwner,
|
internal val owner: PsiTypeParameterListOwner,
|
||||||
private val symbolWithTypeParameterList: KtSymbolWithTypeParameters,
|
private val symbolWithTypeParameterPointer: KtSymbolPointer<KtSymbolWithTypeParameters>,
|
||||||
|
internal val ktModule: KtModule,
|
||||||
|
private val ktDeclaration: KtTypeParameterListOwner?,
|
||||||
) : LightElement(owner.manager, KotlinLanguage.INSTANCE), PsiTypeParameterList {
|
) : LightElement(owner.manager, KotlinLanguage.INSTANCE), PsiTypeParameterList {
|
||||||
|
|
||||||
override fun accept(visitor: PsiElementVisitor) {
|
override fun accept(visitor: PsiElementVisitor) {
|
||||||
if (visitor is JavaElementVisitor) {
|
if (visitor is JavaElementVisitor) {
|
||||||
visitor.visitTypeParameterList(this)
|
visitor.visitTypeParameterList(this)
|
||||||
@@ -33,39 +37,45 @@ internal class SymbolLightTypeParameterList(
|
|||||||
state: ResolveState,
|
state: ResolveState,
|
||||||
lastParent: PsiElement?,
|
lastParent: PsiElement?,
|
||||||
place: PsiElement
|
place: PsiElement
|
||||||
): Boolean {
|
): Boolean = typeParameters.all { processor.execute(it, state) }
|
||||||
return typeParameters.all { processor.execute(it, state) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private val _typeParameters: Array<PsiTypeParameter> by lazyPub {
|
private val _typeParameters: Array<PsiTypeParameter> by lazyPub {
|
||||||
symbolWithTypeParameterList.typeParameters.mapIndexed { index, parameter ->
|
symbolWithTypeParameterPointer.withSymbol(ktModule) {
|
||||||
SymbolLightTypeParameter(
|
it.typeParameters.mapIndexed { index, parameter ->
|
||||||
parent = this@SymbolLightTypeParameterList,
|
SymbolLightTypeParameter(
|
||||||
index = index,
|
parent = this,
|
||||||
typeParameterSymbol = parameter
|
index = index,
|
||||||
)
|
typeParameterSymbol = parameter,
|
||||||
}.toTypedArray()
|
)
|
||||||
|
}.toTypedArray()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameters
|
override fun getTypeParameters(): Array<PsiTypeParameter> = _typeParameters
|
||||||
|
|
||||||
override fun getTypeParameterIndex(typeParameter: PsiTypeParameter?): Int =
|
override fun getTypeParameterIndex(typeParameter: PsiTypeParameter?): Int = _typeParameters.indexOf(typeParameter)
|
||||||
_typeParameters.indexOf(typeParameter)
|
|
||||||
|
|
||||||
override fun toString(): String = "SymbolLightTypeParameterList"
|
override fun toString(): String = "SymbolLightTypeParameterList"
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean =
|
override fun equals(other: Any?): Boolean {
|
||||||
this === other ||
|
if (this === other) return true
|
||||||
(other is SymbolLightTypeParameterList && symbolWithTypeParameterList == other.symbolWithTypeParameterList)
|
if (other !is SymbolLightTypeParameterList || other.ktModule != ktModule) return false
|
||||||
|
if (ktDeclaration != null) {
|
||||||
|
return other.ktDeclaration == ktDeclaration
|
||||||
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int = symbolWithTypeParameterList.hashCode()
|
return other.ktDeclaration == null &&
|
||||||
|
compareSymbolPointers(ktModule, symbolWithTypeParameterPointer, other.symbolWithTypeParameterPointer) &&
|
||||||
|
other.owner == owner
|
||||||
|
}
|
||||||
|
|
||||||
override fun isEquivalentTo(another: PsiElement?): Boolean =
|
override fun hashCode(): Int = ktDeclaration.hashCode() + 1
|
||||||
basicIsEquivalentTo(this, another)
|
|
||||||
|
override fun isEquivalentTo(another: PsiElement?): Boolean = basicIsEquivalentTo(this, another)
|
||||||
|
|
||||||
override fun getParent(): PsiElement = owner
|
override fun getParent(): PsiElement = owner
|
||||||
override fun getContainingFile(): PsiFile = parent.containingFile
|
override fun getContainingFile(): PsiFile = parent.containingFile
|
||||||
override fun getText(): String? = ""
|
override fun getText(): String? = ktDeclaration?.typeParameterList?.text
|
||||||
override fun getTextOffset(): Int = 0
|
override fun getTextOffset(): Int = ktDeclaration?.typeParameterList?.textOffset ?: -1
|
||||||
override fun getStartOffsetInParent(): Int = 0
|
override fun getStartOffsetInParent(): Int = ktDeclaration?.typeParameterList?.startOffsetInParent ?: -1
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user