diff --git a/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java b/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java index d3d7296a63f9..5dd6205906c2 100644 --- a/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java +++ b/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java @@ -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(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index 85d1833cbddd..d73dd298cf21 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -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; diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java b/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java index 4c40161cf9ab..3aa9356efc67 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/intention/EmptyQuickFixFactory.java @@ -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; } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/NavigateToAlreadyDeclaredVariableFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/NavigateToAlreadyDeclaredVariableFix.java index 6af306e5f580..73761454f25a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/NavigateToAlreadyDeclaredVariableFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/NavigateToAlreadyDeclaredVariableFix.java @@ -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 diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java index b527c8381b30..484b8c141c0b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java @@ -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); } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/NavigateToAlreadyDeclaredVariableFixTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/NavigateToAlreadyDeclaredVariableFixTest.java index 5dd7f5f838ba..68de9afb04dd 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/NavigateToAlreadyDeclaredVariableFixTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/NavigateToAlreadyDeclaredVariableFixTest.java @@ -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 element : elements){}" + + "}}"); + IntentionAction intention = myFixture.findSingleIntention(QuickFixBundle.message("navigate.variable.declaration.text", "element")); + assertNotNull(intention); + myFixture.launchAction(intention); + assertEquals(51, myFixture.getCaretOffset()); + } }