in psi/src/com/intellij/r/psi/classes/s4/context/methods/RS4SetGenericProvider.kt [35:72]
override fun getS4ContextWithoutCaching(element: RPsiElement): RS4SetGenericContext? {
val parentCall = PsiTreeUtil.getParentOfType(element, RCallExpression::class.java) ?: return null
return if (parentCall.isFunctionFromLibrarySoft("setGeneric", "methods")) {
val parentArgumentInfo = RArgumentInfo.getArgumentInfo(parentCall) ?: return null
when (element) {
parentArgumentInfo.getArgumentPassedToParameter("name") -> {
RS4SetGenericFunctionNameContext(element, parentCall)
}
parentArgumentInfo.getArgumentPassedToParameter("signature") -> {
RS4SetGenericParameterNamesContext(element, parentCall)
}
parentArgumentInfo.getArgumentPassedToParameter("valueClass") -> {
RS4SetGenericValueClassesContext(element, parentCall)
}
else -> null
}
}
else {
val grandParentCall = PsiTreeUtil.getParentOfType(parentCall, RCallExpression::class.java) ?: return null
if (grandParentCall.isFunctionFromLibrarySoft("setGeneric", "methods")) {
val grandParentArgumentInfo = RArgumentInfo.getArgumentInfo(grandParentCall) ?: return null
return when {
PsiTreeUtil.isAncestor(grandParentArgumentInfo.getArgumentPassedToParameter("signature"), element, false) -> {
val parent = element.parent
if (parent is RNamedArgument && parent.nameIdentifier == element) null
else RS4SetGenericParameterNamesContext(element, grandParentCall)
}
PsiTreeUtil.isAncestor(grandParentArgumentInfo.getArgumentPassedToParameter("valueClass"), element, false) -> {
val parent = element.parent
if (parent is RNamedArgument && parent.nameIdentifier == element) null
else RS4SetGenericValueClassesContext(element, grandParentCall)
}
else -> null
}
}
else null
}
}