mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
[java] extract super: check conflicting abstract methods when super would be indeed used as target class (IDEA-207561)
GitOrigin-RevId: 8904c3532a12ad15d3758ba0c19d6c0ee8024384
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d19e2011be
commit
849d3eef74
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
|
||||
package com.intellij.refactoring.memberPullUp;
|
||||
|
||||
@@ -78,7 +78,7 @@ public final class PullUpConflictsUtil {
|
||||
}
|
||||
final MultiMap<PsiElement, String> conflicts = new MultiMap<>();
|
||||
final Set<PsiMethod> abstrMethods = new HashSet<>(abstractMethods);
|
||||
if (superClass != null) {
|
||||
if (superClass != null && movedMembers2Super) {
|
||||
for (PsiMethod method : subclass.getMethods()) {
|
||||
if (!movedMembers.contains(method) && !method.hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
if (method.findSuperMethods(superClass).length > 0) {
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
public abstract class Test extends X {
|
||||
abstract boolean y();
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
class TestSubclass extends Test {
|
||||
@Override
|
||||
boolean x() {
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
boolean y() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class X {
|
||||
abstract boolean x();
|
||||
}
|
||||
|
||||
class Y extends X {
|
||||
@Override
|
||||
boolean x() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
class Test extends X {
|
||||
@Override
|
||||
boolean x() {
|
||||
return false;
|
||||
}
|
||||
boolean y() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class X {
|
||||
abstract boolean x();
|
||||
}
|
||||
|
||||
class Y extends X {
|
||||
@Override
|
||||
boolean x() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -114,6 +114,11 @@ public class ExtractSuperClassTest extends LightMultiFileTestCase {
|
||||
new RefactoringTestUtil.MemberDescriptor("a", PsiField.class));
|
||||
}
|
||||
|
||||
public void testAbstractInSuper() {
|
||||
doTest("Test", "TestSubclass",
|
||||
new RefactoringTestUtil.MemberDescriptor("y", PsiMethod.class, true));
|
||||
}
|
||||
|
||||
public void testSameTypeParameterName() {
|
||||
doTest("Test", "TestSubclass", new RefactoringTestUtil.MemberDescriptor("A", PsiClass.class), new RefactoringTestUtil.MemberDescriptor("B", PsiClass.class));
|
||||
}
|
||||
@@ -216,14 +221,14 @@ public class ExtractSuperClassTest extends LightMultiFileTestCase {
|
||||
}
|
||||
final HashSet<String> expectedConflicts = new HashSet<>(Arrays.asList(conflicts));
|
||||
final HashSet<String> actualConflicts = new HashSet<>(conflictsMap.values());
|
||||
assertEquals(expectedConflicts.size(), actualConflicts.size());
|
||||
assertEquals(actualConflicts.toString(), expectedConflicts.size(), actualConflicts.size());
|
||||
for (String actualConflict : actualConflicts) {
|
||||
if (!expectedConflicts.contains(actualConflict)) {
|
||||
fail("Unexpected conflict: " + actualConflict);
|
||||
}
|
||||
}
|
||||
} else if (!conflictsMap.isEmpty()) {
|
||||
fail("Unexpected conflicts!!!");
|
||||
fail("Unexpected conflicts!!!" + conflictsMap.toString());
|
||||
}
|
||||
processor.run();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user