From cfb011e3e1107799dedd22e8a9c23d79bc0dd39b Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 30 Sep 2016 09:31:25 +0200 Subject: [PATCH] check inheritance for classes in local scopes to check that metho overrides another method (IDEA-161863) --- .../search/JavaOverridingMethodsSearcher.java | 3 +- .../SameNamedMethodsInOneFile.java | 13 +++++++ .../SameNamedMethodsInOneFile_after.java | 13 +++++++ .../refactoring/RenameMembersInplaceTest.java | 39 +++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/renameInplace/SameNamedMethodsInOneFile.java create mode 100644 java/java-tests/testData/refactoring/renameInplace/SameNamedMethodsInOneFile_after.java diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java index 58dd6098f46f..256f0e89f210 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java @@ -98,7 +98,8 @@ public class JavaOverridingMethodsSearcher implements QueryExecutorething(); + } + + class Bar { + public void doSomething() { + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameInplace/SameNamedMethodsInOneFile_after.java b/java/java-tests/testData/refactoring/renameInplace/SameNamedMethodsInOneFile_after.java new file mode 100644 index 000000000000..57c0bbfb08ef --- /dev/null +++ b/java/java-tests/testData/refactoring/renameInplace/SameNamedMethodsInOneFile_after.java @@ -0,0 +1,13 @@ +class Foo{ + Bar bar; + + void doSomething() { + bar.newDoSomething(); + } + + class Bar { + public void newDoSomething() { + + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameMembersInplaceTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameMembersInplaceTest.java index 007b989fcf01..32b2c3843ae9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameMembersInplaceTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameMembersInplaceTest.java @@ -17,6 +17,15 @@ package com.intellij.refactoring; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.TargetElementUtil; +import com.intellij.codeInsight.template.TemplateManager; +import com.intellij.codeInsight.template.impl.TemplateManagerImpl; +import com.intellij.codeInsight.template.impl.TemplateState; +import com.intellij.ide.DataManager; +import com.intellij.injected.editor.EditorWindow; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.refactoring.rename.JavaNameSuggestionProvider; import com.intellij.refactoring.rename.inplace.MemberInplaceRenameHandler; @@ -88,6 +97,36 @@ public class RenameMembersInplaceTest extends LightCodeInsightTestCase { doTestInplaceRename("bar"); } + public void testSameNamedMethodsInOneFile() throws Exception { + configureByFile(BASE_PATH + "/" + getTestName(false) + ".java"); + + final PsiElement element = TargetElementUtil.findTargetElement(myEditor, TargetElementUtil.getInstance().getAllAccepted()); + assertNotNull(element); + + Editor editor = getEditor(); + Project project = editor.getProject(); + TemplateManagerImpl.setTemplateTesting(getProject(), getTestRootDisposable()); + new MemberInplaceRenameHandler().doRename(element, editor, DataManager.getInstance().getDataContext(editor.getComponent())); + TemplateState state = TemplateManagerImpl.getTemplateState(editor); + assert state != null; + assertEquals(2, state.getSegmentsCount()); + final TextRange range = state.getCurrentVariableRange(); + assert range != null; + final Editor finalEditor = editor; + new WriteCommandAction.Simple(project) { + @Override + protected void run() throws Throwable { + finalEditor.getDocument().replaceString(range.getStartOffset(), range.getEndOffset(), "newDoSomething"); + } + }.execute().throwException(); + + state = TemplateManagerImpl.getTemplateState(editor); + assert state != null; + state.gotoEnd(false); + + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } + public void testNameSuggestion() throws Exception { configureByFile(BASE_PATH + "/" + getTestName(false) + ".java");