diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt index aae6f0ae1ba..48b599269ed 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt @@ -160,14 +160,10 @@ internal class SymbolLightFieldForProperty( fieldName == other.fieldName && containingClass == other.containingClass && ktModule == other.ktModule && - analyzeForLightClasses(ktModule) { - propertySymbolPointer.restoreSymbol() == other.propertySymbolPointer.restoreSymbol() - } + compareSymbolPointers(ktModule, propertySymbolPointer, other.propertySymbolPointer) } override fun hashCode(): Int = kotlinOrigin?.hashCode() ?: fieldName.hashCode() - override fun isValid(): Boolean = super.isValid() && kotlinOrigin?.isValid ?: analyzeForLightClasses(ktModule) { - propertySymbolPointer.restoreSymbol() != null - } + override fun isValid(): Boolean = super.isValid() && kotlinOrigin?.isValid ?: propertySymbolPointer.isValid(ktModule) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt index b03ff880080..8d8c6ca4d8f 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt @@ -214,9 +214,7 @@ internal class SymbolLightAccessorMethod( return isGetter == other.isGetter && other.propertyAccessorDeclaration == null && ktModule == other.ktModule && - analyzeForLightClasses(ktModule) { - propertyAccessorSymbolPointer.restoreSymbol() == other.propertyAccessorSymbolPointer.restoreSymbol() - } + compareSymbolPointers(ktModule, propertyAccessorSymbolPointer, other.propertyAccessorSymbolPointer) } override fun hashCode(): Int = propertyAccessorDeclaration.hashCode() @@ -249,8 +247,8 @@ internal class SymbolLightAccessorMethod( override fun getParameterList(): PsiParameterList = _parametersList - override fun isValid(): Boolean = super.isValid() && - propertyAccessorDeclaration?.isValid ?: analyzeForLightClasses(ktModule) { propertyAccessorSymbolPointer.restoreSymbol() != null } + override fun isValid(): Boolean = + super.isValid() && propertyAccessorDeclaration?.isValid ?: propertyAccessorSymbolPointer.isValid(ktModule) override fun isOverride(): Boolean = analyzeForLightClasses(ktModule) { propertyAccessorSymbol().isOverride } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt index 54e057acbf8..73e09913c56 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightMethod.kt @@ -19,6 +19,8 @@ import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses +import org.jetbrains.kotlin.light.classes.symbol.compareSymbolPointers +import org.jetbrains.kotlin.light.classes.symbol.isValid import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameter import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightSuspendContinuationParameter @@ -106,9 +108,7 @@ internal abstract class SymbolLightMethod( override val kotlinOrigin: KtDeclaration? = functionDeclaration ?: lightMemberOrigin?.originalElement ?: functionSymbol.psiSafe() - override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: analyzeForLightClasses(ktModule) { - functionSymbolPointer.restoreSymbol() != null - } + override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: functionSymbolPointer.isValid(ktModule) override fun isOverride(): Boolean = withFunctionSymbol { it.getDirectlyOverriddenSymbols().isNotEmpty() } @@ -123,9 +123,7 @@ internal abstract class SymbolLightMethod( return other.functionDeclaration == null && fieldsEquals(other) && containingClass == other.containingClass && - analyzeForLightClasses(ktModule) { - functionSymbolPointer.restoreSymbol() == other.functionSymbolPointer.restoreSymbol() - } + compareSymbolPointers(ktModule, functionSymbolPointer, other.functionSymbolPointer) } private fun fieldsEquals(other: SymbolLightMethod<*>): Boolean { diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt index 43c3c7fdb7e..ff195287815 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightAnnotationForAnnotationCall import org.jetbrains.kotlin.light.classes.symbol.annotations.computeNullabilityAnnotation +import org.jetbrains.kotlin.light.classes.symbol.compareSymbolPointers import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.nonExistentType @@ -105,9 +106,7 @@ internal class SymbolLightParameterForReceiver private constructor( override fun equals(other: Any?): Boolean = this === other || other is SymbolLightParameterForReceiver && ktModule == other.ktModule && - analyze(ktModule) { - callableSymbolWithReceiverPointer.restoreSymbol() == other.callableSymbolWithReceiverPointer.restoreSymbol() - } + compareSymbolPointers(ktModule, callableSymbolWithReceiverPointer, other.callableSymbolWithReceiverPointer) override fun hashCode(): Int = _name.hashCode() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt index d0d0f79a148..2cdb6c23fbf 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation +import org.jetbrains.kotlin.light.classes.symbol.isValid import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.nonExistentType @@ -74,7 +75,5 @@ internal class SymbolLightSuspendContinuationParameter( override fun hashCode(): Int = name.hashCode() * 31 + containingMethod.hashCode() - override fun isValid(): Boolean = super.isValid() && analyze(ktModule) { - functionSymbolPointer.restoreSymbol() != null - } + override fun isValid(): Boolean = super.isValid() && functionSymbolPointer.isValid(ktModule) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index 6c04c6e6cf6..52cf112c362 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -299,3 +299,13 @@ internal fun hasTypeParameters( ): Boolean = declaration?.typeParameters?.isNotEmpty() ?: analyze(ktModule) { declarationPointer.restoreSymbolOrThrowIfDisposed().typeParameters.isNotEmpty() } + +internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyze(ktModule) { + restoreSymbol() != null +} + +internal fun compareSymbolPointers(ktModule: KtModule, left: KtSymbolPointer, right: KtSymbolPointer): Boolean { + return left === right || analyze(ktModule) { + left.restoreSymbol() == right.restoreSymbol() + } +}