in psi/src/com/intellij/r/psi/psi/references/RReferenceBase.kt [35:89]
override fun isReferenceTo(element: PsiElement): Boolean {
if (element is PomTargetPsiElement &&
element.target is RStringLiteralPomTarget &&
psiElement is RStringLiteralExpression &&
RS4ContextProvider.getS4Context((element.target as RStringLiteralPomTarget).literal, RS4SetGenericFunctionNameContext::class) != null &&
RS4ContextProvider.getS4Context(psiElement, RS4SetMethodFunctionNameContext::class) != null
) {
return true
}
return when (val resolve = resolve()) {
is PomTargetPsiElement -> {
if (element !is RPsiElement) return false
if (resolve.isEquivalentTo(element)) return true
val target = resolve.target
if (target is RStringLiteralPomTarget && element is PomTargetPsiElement) {
val elementTarget = element.target
if (elementTarget is RStringLiteralPomTarget &&
RS4ContextProvider.getS4Context(elementTarget.literal, RS4SetGenericFunctionNameContext::class) != null) {
val context = RS4ContextProvider.getS4Context(target.literal, RS4SetMethodFunctionNameContext::class)
if (context != null && target.literal.name == elementTarget.literal.name) return true
}
}
return when {
target is RS4ComplexSlotPomTarget -> {
val defIdentifier =
if (target.slotDefinition is RNamedArgument) target.slotDefinition.nameIdentifier
else target.slotDefinition
element === defIdentifier
}
element.containingFile?.virtualFile != null &&
RSourceFileManager.isTemporary(element.containingFile.virtualFile) -> {
target is RSkeletonParameterPomTarget &&
element is RIdentifierExpression &&
element.parent is RParameter &&
element.name == target.name
}
RS4SourceManager.isS4ClassSourceElement(element) -> {
when (target) {
is RSkeletonS4SlotPomTarget -> {
return RPsiUtil.getNamedArgumentByNameIdentifier(element) != null
}
is RSkeletonS4ClassPomTarget -> {
val className = (element.containingFile.firstChild as RCallExpression).argumentList.expressionList.first()
return element == className
}
else -> false
}
}
else -> false
}
}
is PsiNameIdentifierOwner -> resolve === element || resolve.identifyingElement === element
else -> resolve === element
}
}