mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[grazie] IJPL-214423 IAE: [RenameTo.generateSuggestions]
Merge-request: IJ-MR-179707 Merged-by: Ilia Permiashkin <ilia.permiashkin@jetbrains.com> GitOrigin-RevId: 994b677a6ef205ec0696effcdb8624805f8ec0fa
This commit is contained in:
committed by
intellij-monorepo-bot
parent
df199373cf
commit
2be04f6162
@@ -11,6 +11,7 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.Segment;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -33,16 +34,18 @@ import java.util.List;
|
||||
public class RenameTo extends IntentionAndQuickFixAction implements Iconable, EventTrackingIntentionAction {
|
||||
|
||||
private final String typo;
|
||||
private final TextRange range;
|
||||
private final SmartPsiFileRange rangeRelativeToFile;
|
||||
private final SmartPsiElementPointer<PsiElement> pointer;
|
||||
private final SpellcheckerRateTracker tracker;
|
||||
private volatile List<String> suggestions;
|
||||
private SmartPsiElementPointer<PsiElement> namedPointer;
|
||||
|
||||
public RenameTo(String typo, TextRange range, PsiElement psi, SpellcheckerRateTracker tracker) {
|
||||
PsiFile file = psi.getContainingFile();
|
||||
this.rangeRelativeToFile = SmartPointerManager.getInstance(psi.getProject())
|
||||
.createSmartPsiFileRangePointer(file, range.shiftRight(psi.getTextRange().getStartOffset()));
|
||||
this.typo = typo;
|
||||
this.range = range;
|
||||
this.pointer = SmartPointerManager.getInstance(psi.getProject()).createSmartPsiElementPointer(psi, psi.getContainingFile());
|
||||
this.pointer = SmartPointerManager.getInstance(psi.getProject()).createSmartPsiElementPointer(psi, file);
|
||||
this.tracker = tracker;
|
||||
}
|
||||
|
||||
@@ -54,7 +57,7 @@ public class RenameTo extends IntentionAndQuickFixAction implements Iconable, Ev
|
||||
if (presentationName == null) return false;
|
||||
generateSuggestions(presentationName.getSecond(), element);
|
||||
this.namedPointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(presentationName.getFirst());
|
||||
if (suggestions.isEmpty()) return false;
|
||||
if (suggestions == null || suggestions.isEmpty()) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -133,7 +136,8 @@ public class RenameTo extends IntentionAndQuickFixAction implements Iconable, Ev
|
||||
|
||||
private void generateSuggestions(String name, PsiElement element) {
|
||||
if (suggestions == null) {
|
||||
TextRange range = this.range.shiftLeft(element.getText().indexOf(name));
|
||||
TextRange range = restoreRange(name);
|
||||
if (range == null) return;
|
||||
this.suggestions = SpellCheckerManager.getInstance(pointer.getProject()).getSuggestions(typo)
|
||||
.stream()
|
||||
.map(suggestion -> range.replace(name, suggestion))
|
||||
@@ -143,6 +147,17 @@ public class RenameTo extends IntentionAndQuickFixAction implements Iconable, Ev
|
||||
}
|
||||
}
|
||||
|
||||
private @Nullable TextRange restoreRange(String currentElementName) {
|
||||
PsiElement element = pointer.getElement();
|
||||
Segment rangeRelativeToFile = this.rangeRelativeToFile.getRange();
|
||||
if (element == null || rangeRelativeToFile == null) return null;
|
||||
|
||||
int offset = element.getText().indexOf(currentElementName);
|
||||
return TextRange.create(rangeRelativeToFile)
|
||||
.shiftLeft(element.getTextRange().getStartOffset())
|
||||
.shiftLeft(offset);
|
||||
}
|
||||
|
||||
private void runRenamer(PsiElement element, String suggestion) {
|
||||
new RenameProcessor(pointer.getProject(), element, suggestion, true, true).run();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user