From 0a003be1f049763fdef156ca755d33b781ea1160 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 19 Dec 2022 14:08:48 +0100 Subject: [PATCH] [SLC] avoid symbol restoring during comparison ^KT-55191 Fixed --- .../symbol/classes/SymbolLightClassForClassLike.kt | 2 +- .../symbol/fields/SymbolLightFieldForObject.kt | 2 +- .../symbol/fields/SymbolLightFieldForProperty.kt | 2 +- .../symbol/methods/SymbolLightAccessorMethod.kt | 2 +- .../light/classes/symbol/methods/SymbolLightMethod.kt | 2 +- .../symbol/parameters/SymbolLightParameterCommon.kt | 2 +- .../parameters/SymbolLightParameterForReceiver.kt | 2 +- .../symbol/parameters/SymbolLightTypeParameter.kt | 2 +- .../symbol/parameters/SymbolLightTypeParameterList.kt | 2 +- .../kotlin/light/classes/symbol/symbolLightUtils.kt | 11 +++++------ 10 files changed, 14 insertions(+), 15 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt index 16b131ea8df..90abf324f1b 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassLike.kt @@ -164,7 +164,7 @@ abstract class SymbolLightClassForClassLike prote return other.classOrObjectDeclaration == classOrObjectDeclaration } - return compareSymbolPointers(ktModule, classOrObjectSymbolPointer, other.classOrObjectSymbolPointer) + return compareSymbolPointers(classOrObjectSymbolPointer, other.classOrObjectSymbolPointer) } override fun hashCode(): Int = classOrObjectDeclaration.hashCode() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt index e0341176bff..33fb2f37a9e 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForObject.kt @@ -100,7 +100,7 @@ internal class SymbolLightFieldForObject private constructor( } return other.containingClass == containingClass && - compareSymbolPointers(ktModule, other.objectSymbolPointer, objectSymbolPointer) + compareSymbolPointers(other.objectSymbolPointer, objectSymbolPointer) } override fun hashCode(): Int = kotlinOrigin.hashCode() 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 3978b8ae9e7..bfeb2aa0e84 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 @@ -193,7 +193,7 @@ internal class SymbolLightFieldForProperty private constructor( } return containingClass == other.containingClass && - compareSymbolPointers(ktModule, propertySymbolPointer, other.propertySymbolPointer) + compareSymbolPointers(propertySymbolPointer, other.propertySymbolPointer) } override fun hashCode(): Int = kotlinOrigin?.hashCode() ?: fieldName.hashCode() 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 f00c475c8f9..76fdae7d189 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 @@ -258,7 +258,7 @@ internal class SymbolLightAccessorMethod private constructor( return containingPropertyDeclaration == other.containingPropertyDeclaration } - return compareSymbolPointers(ktModule, propertyAccessorSymbolPointer, other.propertyAccessorSymbolPointer) + return compareSymbolPointers(propertyAccessorSymbolPointer, other.propertyAccessorSymbolPointer) } override fun hashCode(): Int = propertyAccessorDeclaration?.hashCode() ?: containingPropertyDeclaration.hashCode() 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 1de7c0db5c1..11b2025f0f1 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 @@ -150,7 +150,7 @@ internal abstract class SymbolLightMethod private } return containingClass == other.containingClass && - compareSymbolPointers(ktModule, functionSymbolPointer, other.functionSymbolPointer) + compareSymbolPointers(functionSymbolPointer, other.functionSymbolPointer) } override fun hashCode(): Int = kotlinOrigin.hashCode() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt index a50e73ca2b9..a534ee248f1 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt @@ -96,7 +96,7 @@ internal abstract class SymbolLightParameterCommon( return parameterDeclaration == other.parameterDeclaration } - return compareSymbolPointers(ktModule, parameterSymbolPointer, other.parameterSymbolPointer) + return compareSymbolPointers(parameterSymbolPointer, other.parameterSymbolPointer) } override fun hashCode(): Int = parameterDeclaration?.hashCode() ?: _name.hashCode() 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 86284d59324..d34c3a643f7 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 @@ -94,7 +94,7 @@ internal class SymbolLightParameterForReceiver private constructor( override fun equals(other: Any?): Boolean = this === other || other is SymbolLightParameterForReceiver && ktModule == other.ktModule && - compareSymbolPointers(ktModule, receiverPointer, other.receiverPointer) + compareSymbolPointers(receiverPointer, other.receiverPointer) override fun hashCode(): Int = _name.hashCode() diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt index 255dd7feda3..26155b59dfb 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameter.kt @@ -181,7 +181,7 @@ internal class SymbolLightTypeParameter private constructor( } return other.kotlinOrigin == kotlinOrigin && - compareSymbolPointers(ktModule, typeParameterSymbolPointer, other.typeParameterSymbolPointer) && + compareSymbolPointers(typeParameterSymbolPointer, other.typeParameterSymbolPointer) && other.parent == parent } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameterList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameterList.kt index 44ead1fdba8..120ed0d494e 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameterList.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightTypeParameterList.kt @@ -65,7 +65,7 @@ internal class SymbolLightTypeParameterList( return other.ktDeclaration == ktDeclaration } - return other.owner == owner && compareSymbolPointers(ktModule, symbolWithTypeParameterPointer, other.symbolWithTypeParameterPointer) + return other.owner == owner && compareSymbolPointers(symbolWithTypeParameterPointer, other.symbolWithTypeParameterPointer) } override fun hashCode(): Int = ktDeclaration.hashCode() + 1 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 ef99e6f266c..7add334bba8 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 @@ -252,12 +252,11 @@ internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyzeFo restoreSymbol() != null } -internal fun compareSymbolPointers(ktModule: KtModule, left: KtSymbolPointer, right: KtSymbolPointer): Boolean { - return left === right || analyzeForLightClasses(ktModule) { - val leftSymbol = left.restoreSymbol() - leftSymbol != null && leftSymbol == right.restoreSymbol() - } -} +@Suppress("NOTHING_TO_INLINE") +internal inline fun compareSymbolPointers( + left: KtSymbolPointer, + right: KtSymbolPointer, +): Boolean = left.pointsToTheSameSymbolAs(right) internal inline fun KtSymbolPointer.withSymbol( ktModule: KtModule,