navigation to already declared variable: reuse data from highlighting to navigate also from/to parameters (IDEA-195051)

This commit is contained in:
Anna.Kozlova
2018-07-04 17:36:05 +02:00
parent 0c75042743
commit 4c0fb3b7f4
6 changed files with 19 additions and 14 deletions
@@ -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();
@@ -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;
@@ -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;
}
@@ -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
@@ -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);
}
@@ -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());
}
}