[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 compareSymbolPointers(ktModule, classOrObjectSymbolPointer, other.classOrObjectSymbolPointer)
return compareSymbolPointers(classOrObjectSymbolPointer, other.classOrObjectSymbolPointer)
}
override fun hashCode(): Int = classOrObjectDeclaration.hashCode()
@@ -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()
@@ -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()
@@ -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()
@@ -150,7 +150,7 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol> private
}
return containingClass == other.containingClass &&
compareSymbolPointers(ktModule, functionSymbolPointer, other.functionSymbolPointer)
compareSymbolPointers(functionSymbolPointer, other.functionSymbolPointer)
}
override fun hashCode(): Int = kotlinOrigin.hashCode()
@@ -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()
@@ -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()
@@ -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
}
@@ -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
@@ -252,12 +252,11 @@ internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyzeFo
restoreSymbol() != null
}
internal fun <T : KtSymbol> compareSymbolPointers(ktModule: KtModule, left: KtSymbolPointer<T>, right: KtSymbolPointer<T>): Boolean {
return left === right || analyzeForLightClasses(ktModule) {
val leftSymbol = left.restoreSymbol()
leftSymbol != null && leftSymbol == right.restoreSymbol()
}
}
@Suppress("NOTHING_TO_INLINE")
internal inline fun <T : KtSymbol> compareSymbolPointers(
left: KtSymbolPointer<T>,
right: KtSymbolPointer<T>,
): Boolean = left.pointsToTheSameSymbolAs(right)
internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol(
ktModule: KtModule,