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
}