mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
navigation to already declared variable: reuse data from highlighting to navigate also from/to parameters (IDEA-195051)
This commit is contained in:
@@ -157,7 +157,7 @@ public abstract class QuickFixFactory {
|
||||
public abstract IntentionAction createReuseVariableDeclarationFix(@NotNull PsiLocalVariable variable);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createNavigateToAlreadyDeclaredVariableFix(@NotNull PsiLocalVariable variable);
|
||||
public abstract IntentionAction createNavigateToAlreadyDeclaredVariableFix(@NotNull PsiVariable variable);
|
||||
|
||||
@NotNull
|
||||
public abstract IntentionAction createConvertToStringLiteralAction();
|
||||
|
||||
+1
-1
@@ -662,8 +662,8 @@ public class HighlightUtil extends HighlightUtilBase {
|
||||
HighlightInfo highlightInfo = builder.create();
|
||||
if (variable instanceof PsiLocalVariable) {
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createReuseVariableDeclarationFix((PsiLocalVariable)variable));
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createNavigateToAlreadyDeclaredVariableFix((PsiLocalVariable)variable));
|
||||
}
|
||||
QuickFixAction.registerQuickFixAction(highlightInfo, QUICK_FIX_FACTORY.createNavigateToAlreadyDeclaredVariableFix(oldVariable));
|
||||
return highlightInfo;
|
||||
}
|
||||
return null;
|
||||
|
||||
+1
-1
@@ -222,7 +222,7 @@ public class EmptyQuickFixFactory extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createNavigateToAlreadyDeclaredVariableFix(@NotNull PsiLocalVariable variable) {
|
||||
public IntentionAction createNavigateToAlreadyDeclaredVariableFix(@NotNull PsiVariable variable) {
|
||||
return QuickFixes.EMPTY_FIX;
|
||||
}
|
||||
|
||||
|
||||
+4
-10
@@ -20,15 +20,14 @@ import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiLocalVariable;
|
||||
import com.intellij.psi.PsiVariable;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class NavigateToAlreadyDeclaredVariableFix implements IntentionAction {
|
||||
private final PsiLocalVariable myVariable;
|
||||
private final PsiVariable myVariable;
|
||||
|
||||
public NavigateToAlreadyDeclaredVariableFix(@NotNull PsiLocalVariable variable) {
|
||||
public NavigateToAlreadyDeclaredVariableFix(@NotNull PsiVariable variable) {
|
||||
this.myVariable = variable;
|
||||
}
|
||||
|
||||
@@ -49,17 +48,12 @@ public class NavigateToAlreadyDeclaredVariableFix implements IntentionAction {
|
||||
if (!myVariable.isValid()) {
|
||||
return false;
|
||||
}
|
||||
final PsiVariable previousVariable = ReuseVariableDeclarationFix.findPreviousVariable(myVariable);
|
||||
return previousVariable != null &&
|
||||
myVariable.getManager().isInProject(myVariable);
|
||||
return myVariable.getManager().isInProject(myVariable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException {
|
||||
final PsiVariable refVariable = ReuseVariableDeclarationFix.findPreviousVariable(myVariable);
|
||||
if (refVariable == null) return;
|
||||
|
||||
refVariable.navigate(true);
|
||||
myVariable.navigate(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -268,7 +268,7 @@ public class QuickFixFactoryImpl extends QuickFixFactory {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public IntentionAction createNavigateToAlreadyDeclaredVariableFix(@NotNull PsiLocalVariable variable) {
|
||||
public IntentionAction createNavigateToAlreadyDeclaredVariableFix(@NotNull PsiVariable variable) {
|
||||
return new NavigateToAlreadyDeclaredVariableFix(variable);
|
||||
}
|
||||
|
||||
|
||||
+11
@@ -27,4 +27,15 @@ public class NavigateToAlreadyDeclaredVariableFixTest extends LightCodeInsightFi
|
||||
myFixture.launchAction(intention);
|
||||
assertEquals(14, myFixture.getCaretOffset());
|
||||
}
|
||||
|
||||
public void testNavigateFromParameter() {
|
||||
myFixture.configureByText("A.java", "class A {void f(String[] elements){\n" +
|
||||
" String element = \"hello\";\n" +
|
||||
"for (String el<caret>ement : elements){}" +
|
||||
"}}");
|
||||
IntentionAction intention = myFixture.findSingleIntention(QuickFixBundle.message("navigate.variable.declaration.text", "element"));
|
||||
assertNotNull(intention);
|
||||
myFixture.launchAction(intention);
|
||||
assertEquals(51, myFixture.getCaretOffset());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user