override fun getS4ContextWithoutCaching()

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
    }
  }