[SLC] avoid symbol restoring during comparison

^KT-55191 Fixed
This commit is contained in:
Dmitrii Gridin
2022-12-19 14:08:48 +01:00
committed by Space Team
parent 13917887e0
commit 0a003be1f0
10 changed files with 14 additions and 15 deletions
@@ -164,7 +164,7 @@ abstract class SymbolLightClassForClassLike<SType : KtClassOrObjectSymbol> prote
return other.classOrObjectDeclaration == classOrObjectDeclaration return other.classOrObjectDeclaration == classOrObjectDeclaration
} }
return compareSymbolPointers(ktModule, classOrObjectSymbolPointer, other.classOrObjectSymbolPointer) return compareSymbolPointers(classOrObjectSymbolPointer, other.classOrObjectSymbolPointer)
} }
override fun hashCode(): Int = classOrObjectDeclaration.hashCode() override fun hashCode(): Int = classOrObjectDeclaration.hashCode()
@@ -100,7 +100,7 @@ internal class SymbolLightFieldForObject private constructor(
} }
return other.containingClass == containingClass && return other.containingClass == containingClass &&
compareSymbolPointers(ktModule, other.objectSymbolPointer, objectSymbolPointer) compareSymbolPointers(other.objectSymbolPointer, objectSymbolPointer)
} }
override fun hashCode(): Int = kotlinOrigin.hashCode() override fun hashCode(): Int = kotlinOrigin.hashCode()
@@ -193,7 +193,7 @@ internal class SymbolLightFieldForProperty private constructor(
} }
return containingClass == other.containingClass && return containingClass == other.containingClass &&
compareSymbolPointers(ktModule, propertySymbolPointer, other.propertySymbolPointer) compareSymbolPointers(propertySymbolPointer, other.propertySymbolPointer)
} }
override fun hashCode(): Int = kotlinOrigin?.hashCode() ?: fieldName.hashCode() override fun hashCode(): Int = kotlinOrigin?.hashCode() ?: fieldName.hashCode()
@@ -258,7 +258,7 @@ internal class SymbolLightAccessorMethod private constructor(
return containingPropertyDeclaration == other.containingPropertyDeclaration return containingPropertyDeclaration == other.containingPropertyDeclaration
} }
return compareSymbolPointers(ktModule, propertyAccessorSymbolPointer, other.propertyAccessorSymbolPointer) return compareSymbolPointers(propertyAccessorSymbolPointer, other.propertyAccessorSymbolPointer)
} }
override fun hashCode(): Int = propertyAccessorDeclaration?.hashCode() ?: containingPropertyDeclaration.hashCode() override fun hashCode(): Int = propertyAccessorDeclaration?.hashCode() ?: containingPropertyDeclaration.hashCode()
@@ -150,7 +150,7 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol> private
} }
return containingClass == other.containingClass && return containingClass == other.containingClass &&
compareSymbolPointers(ktModule, functionSymbolPointer, other.functionSymbolPointer) compareSymbolPointers(functionSymbolPointer, other.functionSymbolPointer)
} }
override fun hashCode(): Int = kotlinOrigin.hashCode() override fun hashCode(): Int = kotlinOrigin.hashCode()
@@ -96,7 +96,7 @@ internal abstract class SymbolLightParameterCommon(
return parameterDeclaration == other.parameterDeclaration return parameterDeclaration == other.parameterDeclaration
} }
return compareSymbolPointers(ktModule, parameterSymbolPointer, other.parameterSymbolPointer) return compareSymbolPointers(parameterSymbolPointer, other.parameterSymbolPointer)
} }
override fun hashCode(): Int = parameterDeclaration?.hashCode() ?: _name.hashCode() override fun hashCode(): Int = parameterDeclaration?.hashCode() ?: _name.hashCode()
@@ -94,7 +94,7 @@ internal class SymbolLightParameterForReceiver private constructor(
override fun equals(other: Any?): Boolean = this === other || override fun equals(other: Any?): Boolean = this === other ||
other is SymbolLightParameterForReceiver && other is SymbolLightParameterForReceiver &&
ktModule == other.ktModule && ktModule == other.ktModule &&
compareSymbolPointers(ktModule, receiverPointer, other.receiverPointer) compareSymbolPointers(receiverPointer, other.receiverPointer)
override fun hashCode(): Int = _name.hashCode() override fun hashCode(): Int = _name.hashCode()
@@ -181,7 +181,7 @@ internal class SymbolLightTypeParameter private constructor(
} }
return other.kotlinOrigin == kotlinOrigin && return other.kotlinOrigin == kotlinOrigin &&
compareSymbolPointers(ktModule, typeParameterSymbolPointer, other.typeParameterSymbolPointer) && compareSymbolPointers(typeParameterSymbolPointer, other.typeParameterSymbolPointer) &&
other.parent == parent other.parent == parent
} }
@@ -65,7 +65,7 @@ internal class SymbolLightTypeParameterList(
return other.ktDeclaration == ktDeclaration 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 override fun hashCode(): Int = ktDeclaration.hashCode() + 1
@@ -252,12 +252,11 @@ internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyzeFo
restoreSymbol() != null restoreSymbol() != null
} }
internal fun <T : KtSymbol> compareSymbolPointers(ktModule: KtModule, left: KtSymbolPointer<T>, right: KtSymbolPointer<T>): Boolean { @Suppress("NOTHING_TO_INLINE")
return left === right || analyzeForLightClasses(ktModule) { internal inline fun <T : KtSymbol> compareSymbolPointers(
val leftSymbol = left.restoreSymbol() left: KtSymbolPointer<T>,
leftSymbol != null && leftSymbol == right.restoreSymbol() right: KtSymbolPointer<T>,
} ): Boolean = left.pointsToTheSameSymbolAs(right)
}
internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol( internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol(
ktModule: KtModule, ktModule: KtModule,