override fun getSuggestedNames()

in src/org/jetbrains/r/refactoring/rename/RNameSuggestionProvider.kt [19:50]


  override fun getSuggestedNames(element: PsiElement, nameSuggestionContext: PsiElement?, result: MutableSet<String>): SuggestedNameInfo? {
    if (!(element is RPsiElement || element.containingFile is RFile)) return null
    val elementForRefactoring =
      if (element is PsiNameIdentifierOwner) element.identifyingElement ?: return null
      else element
    val refs = ReferencesSearch.search(elementForRefactoring, LocalSearchScope(RRefactoringUtil.getRScope(element)))
    val shownNames = mutableSetOf<String>()

    val scopes = mutableSetOf(RRefactoringUtil.getRScope(element))
    for (ref in refs.asIterable()) {
      if (ref !is RReferenceBase<*>) continue
      scopes += RRefactoringUtil.getRScope(ref.element)
    }

    scopes.forEach { shownNames += RRefactoringUtil.collectUsedNames(it) }
    shownNames.remove((elementForRefactoring as PsiNamedElement).name)

    result += when {
      element is RParameter -> RNameSuggestion.getVariableSuggestedNames(element.name, shownNames)
      element is RAssignmentStatement && !element.isFunctionDeclaration ->
        RNameSuggestion.getVariableSuggestedNames((element.nameIdentifier as? RIdentifierExpression)?.name, shownNames)
      element is RAssignmentStatement && element.isFunctionDeclaration ->
        RNameSuggestion.getFunctionSuggestedNames((element.nameIdentifier as? RIdentifierExpression)?.name, shownNames)
      element is RIdentifierExpression && element.parent is RForStatement ->
        RNameSuggestion.getTargetForLoopSuggestedNames(element.name, shownNames)
      element is RIdentifierExpression ->
        RNameSuggestion.getVariableSuggestedNames(element.name, shownNames)
      else -> return null
    }

    return null
  }