push down: search for method in inheritor by super method signature (IDEA-86806)

This commit is contained in:
Anna Kozlova
2012-05-30 15:41:07 +04:00
parent 216f420f72
commit d836edf6c5
4 changed files with 32 additions and 1 deletions
@@ -30,6 +30,7 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.MethodSignatureUtil;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.TypeConversionUtil;
@@ -356,7 +357,8 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
}
else if (member instanceof PsiMethod) {
PsiMethod method = (PsiMethod)member;
final PsiMethod methodBySignature = targetClass.findMethodBySignature(method, false);
final PsiMethod methodBySignature =
MethodSignatureUtil.findMethodBySuperSignature(targetClass, method.getSignature(substitutor), false);
if (methodBySignature == null) {
final boolean wasInterface = myClass.isInterface();
newMember = (PsiMethod)targetClass.add(method);
@@ -0,0 +1,13 @@
abstract class BaseTask<T, S extends BaseTask<T, S>> {
public abstract S make<caret>Task(int depth, ParallelStream<T> coll);
}
class ForEachTask<T> extends BaseTask<T, ForEachTask<T>> {
public ForEachTask<T> makeTask(int depth, ParallelStream<T> coll) {
return new ForEachTask<T>();
}
}
class ParallelStream<T> {
}
@@ -0,0 +1,12 @@
abstract class BaseTask<T, S extends BaseTask<T, S>> {
}
class ForEachTask<T> extends BaseTask<T, ForEachTask<T>> {
public ForEachTask<T> makeTask(int depth, ParallelStream<T> coll) {
return new ForEachTask<T>();
}
}
class ParallelStream<T> {
}
@@ -115,6 +115,10 @@ public class PushDownTest extends LightRefactoringTestCase {
doTest();
}
public void testOverridingMethodWithSubst() throws Exception {
doTest();
}
public void testSameClassInterface() throws Exception {
final String filePath = "/refactoring/pushDown/" + getTestName(false) + ".java";
configureByFile(filePath);