[SLC] introduce some utils for symbol pointers
^KT-54051
This commit is contained in:
committed by
Space Team
parent
935f770819
commit
a11435b896
+2
-6
@@ -160,14 +160,10 @@ internal class SymbolLightFieldForProperty(
|
|||||||
fieldName == other.fieldName &&
|
fieldName == other.fieldName &&
|
||||||
containingClass == other.containingClass &&
|
containingClass == other.containingClass &&
|
||||||
ktModule == other.ktModule &&
|
ktModule == other.ktModule &&
|
||||||
analyzeForLightClasses(ktModule) {
|
compareSymbolPointers(ktModule, propertySymbolPointer, other.propertySymbolPointer)
|
||||||
propertySymbolPointer.restoreSymbol() == other.propertySymbolPointer.restoreSymbol()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int = kotlinOrigin?.hashCode() ?: fieldName.hashCode()
|
override fun hashCode(): Int = kotlinOrigin?.hashCode() ?: fieldName.hashCode()
|
||||||
|
|
||||||
override fun isValid(): Boolean = super.isValid() && kotlinOrigin?.isValid ?: analyzeForLightClasses(ktModule) {
|
override fun isValid(): Boolean = super.isValid() && kotlinOrigin?.isValid ?: propertySymbolPointer.isValid(ktModule)
|
||||||
propertySymbolPointer.restoreSymbol() != null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-5
@@ -214,9 +214,7 @@ internal class SymbolLightAccessorMethod(
|
|||||||
return isGetter == other.isGetter &&
|
return isGetter == other.isGetter &&
|
||||||
other.propertyAccessorDeclaration == null &&
|
other.propertyAccessorDeclaration == null &&
|
||||||
ktModule == other.ktModule &&
|
ktModule == other.ktModule &&
|
||||||
analyzeForLightClasses(ktModule) {
|
compareSymbolPointers(ktModule, propertyAccessorSymbolPointer, other.propertyAccessorSymbolPointer)
|
||||||
propertyAccessorSymbolPointer.restoreSymbol() == other.propertyAccessorSymbolPointer.restoreSymbol()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hashCode(): Int = propertyAccessorDeclaration.hashCode()
|
override fun hashCode(): Int = propertyAccessorDeclaration.hashCode()
|
||||||
@@ -249,8 +247,8 @@ internal class SymbolLightAccessorMethod(
|
|||||||
|
|
||||||
override fun getParameterList(): PsiParameterList = _parametersList
|
override fun getParameterList(): PsiParameterList = _parametersList
|
||||||
|
|
||||||
override fun isValid(): Boolean = super.isValid() &&
|
override fun isValid(): Boolean =
|
||||||
propertyAccessorDeclaration?.isValid ?: analyzeForLightClasses(ktModule) { propertyAccessorSymbolPointer.restoreSymbol() != null }
|
super.isValid() && propertyAccessorDeclaration?.isValid ?: propertyAccessorSymbolPointer.isValid(ktModule)
|
||||||
|
|
||||||
override fun isOverride(): Boolean = analyzeForLightClasses(ktModule) { propertyAccessorSymbol().isOverride }
|
override fun isOverride(): Boolean = analyzeForLightClasses(ktModule) { propertyAccessorSymbol().isOverride }
|
||||||
|
|
||||||
|
|||||||
+4
-6
@@ -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.annotations.hasDeprecatedAnnotation
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
|
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.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.SymbolLightParameter
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
|
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightSuspendContinuationParameter
|
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightSuspendContinuationParameter
|
||||||
@@ -106,9 +108,7 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
|
|||||||
override val kotlinOrigin: KtDeclaration? =
|
override val kotlinOrigin: KtDeclaration? =
|
||||||
functionDeclaration ?: lightMemberOrigin?.originalElement ?: functionSymbol.psiSafe<KtDeclaration>()
|
functionDeclaration ?: lightMemberOrigin?.originalElement ?: functionSymbol.psiSafe<KtDeclaration>()
|
||||||
|
|
||||||
override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: analyzeForLightClasses(ktModule) {
|
override fun isValid(): Boolean = super.isValid() && functionDeclaration?.isValid ?: functionSymbolPointer.isValid(ktModule)
|
||||||
functionSymbolPointer.restoreSymbol() != null
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun isOverride(): Boolean = withFunctionSymbol { it.getDirectlyOverriddenSymbols().isNotEmpty() }
|
override fun isOverride(): Boolean = withFunctionSymbol { it.getDirectlyOverriddenSymbols().isNotEmpty() }
|
||||||
|
|
||||||
@@ -123,9 +123,7 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol>(
|
|||||||
return other.functionDeclaration == null &&
|
return other.functionDeclaration == null &&
|
||||||
fieldsEquals(other) &&
|
fieldsEquals(other) &&
|
||||||
containingClass == other.containingClass &&
|
containingClass == other.containingClass &&
|
||||||
analyzeForLightClasses(ktModule) {
|
compareSymbolPointers(ktModule, functionSymbolPointer, other.functionSymbolPointer)
|
||||||
functionSymbolPointer.restoreSymbol() == other.functionSymbolPointer.restoreSymbol()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun fieldsEquals(other: SymbolLightMethod<*>): Boolean {
|
private fun fieldsEquals(other: SymbolLightMethod<*>): Boolean {
|
||||||
|
|||||||
+2
-3
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
|
|||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightAnnotationForAnnotationCall
|
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.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.methods.SymbolLightMethodBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
|
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 ||
|
override fun equals(other: Any?): Boolean = this === other ||
|
||||||
other is SymbolLightParameterForReceiver &&
|
other is SymbolLightParameterForReceiver &&
|
||||||
ktModule == other.ktModule &&
|
ktModule == other.ktModule &&
|
||||||
analyze(ktModule) {
|
compareSymbolPointers(ktModule, callableSymbolWithReceiverPointer, other.callableSymbolWithReceiverPointer)
|
||||||
callableSymbolWithReceiverPointer.restoreSymbol() == other.callableSymbolWithReceiverPointer.restoreSymbol()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hashCode(): Int = _name.hashCode()
|
override fun hashCode(): Int = _name.hashCode()
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
|||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.codegen.coroutines.SUSPEND_FUNCTION_COMPLETION_PARAMETER_NAME
|
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.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.methods.SymbolLightMethodBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
|
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 hashCode(): Int = name.hashCode() * 31 + containingMethod.hashCode()
|
||||||
|
|
||||||
override fun isValid(): Boolean = super.isValid() && analyze(ktModule) {
|
override fun isValid(): Boolean = super.isValid() && functionSymbolPointer.isValid(ktModule)
|
||||||
functionSymbolPointer.restoreSymbol() != null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -299,3 +299,13 @@ internal fun hasTypeParameters(
|
|||||||
): Boolean = declaration?.typeParameters?.isNotEmpty() ?: analyze(ktModule) {
|
): Boolean = declaration?.typeParameters?.isNotEmpty() ?: analyze(ktModule) {
|
||||||
declarationPointer.restoreSymbolOrThrowIfDisposed().typeParameters.isNotEmpty()
|
declarationPointer.restoreSymbolOrThrowIfDisposed().typeParameters.isNotEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun KtSymbolPointer<*>.isValid(ktModule: KtModule): Boolean = analyze(ktModule) {
|
||||||
|
restoreSymbol() != null
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun <T : KtSymbol> compareSymbolPointers(ktModule: KtModule, left: KtSymbolPointer<T>, right: KtSymbolPointer<T>): Boolean {
|
||||||
|
return left === right || analyze(ktModule) {
|
||||||
|
left.restoreSymbol() == right.restoreSymbol()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user