mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
IDEA-91679 (same, for push up)
This commit is contained in:
@@ -51,6 +51,7 @@ import java.util.*;
|
||||
|
||||
public class PushDownProcessor extends BaseRefactoringProcessor {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.memberPushDown.PushDownProcessor");
|
||||
|
||||
private final MemberInfo[] myMemberInfos;
|
||||
private PsiClass myClass;
|
||||
private final DocCommentPolicy myJavaDocPolicy;
|
||||
@@ -362,15 +363,25 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
|
||||
final boolean wasInterface = myClass.isInterface();
|
||||
newMember = (PsiMethod)targetClass.add(method);
|
||||
if (wasInterface) {
|
||||
PsiUtil.setModifierProperty(newMember, PsiModifier.ABSTRACT, true);
|
||||
PsiUtil.setModifierProperty(newMember, PsiModifier.PUBLIC, true);
|
||||
} else if (memberInfo.isToAbstract()) {
|
||||
if (!targetClass.isInterface()) {
|
||||
PsiUtil.setModifierProperty(newMember, PsiModifier.PUBLIC, true);
|
||||
final PsiJavaToken extMethodMarker = PsiUtil.findExtensionMethodMarker((PsiMethod)newMember);
|
||||
if (extMethodMarker == null) {
|
||||
PsiUtil.setModifierProperty(newMember, PsiModifier.ABSTRACT, true);
|
||||
}
|
||||
else {
|
||||
extMethodMarker.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (memberInfo.isToAbstract()) {
|
||||
if (newMember.hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
PsiUtil.setModifierProperty(newMember, PsiModifier.PROTECTED, true);
|
||||
}
|
||||
myJavaDocPolicy.processNewJavaDoc(((PsiMethod)newMember).getDocComment());
|
||||
}
|
||||
} else { //abstract method: remove @Override
|
||||
}
|
||||
else { //abstract method: remove @Override
|
||||
final PsiAnnotation annotation = AnnotationUtil.findAnnotation(methodBySignature, "java.lang.Override");
|
||||
if (annotation != null) {
|
||||
annotation.delete();
|
||||
@@ -378,10 +389,12 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
|
||||
final PsiDocComment oldDocComment = method.getDocComment();
|
||||
if (oldDocComment != null) {
|
||||
final PsiDocComment docComment = methodBySignature.getDocComment();
|
||||
if (myJavaDocPolicy.getJavaDocPolicy() == DocCommentPolicy.COPY || myJavaDocPolicy.getJavaDocPolicy() == DocCommentPolicy.MOVE) {
|
||||
final int policy = myJavaDocPolicy.getJavaDocPolicy();
|
||||
if (policy == DocCommentPolicy.COPY || policy == DocCommentPolicy.MOVE) {
|
||||
if (docComment != null) {
|
||||
docComment.replace(oldDocComment);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
methodBySignature.getParent().addBefore(oldDocComment, methodBySignature);
|
||||
}
|
||||
}
|
||||
@@ -427,7 +440,5 @@ public class PushDownProcessor extends BaseRefactoringProcessor {
|
||||
((JavaRefactoringListenerManagerImpl)listenerManager).fireMemberMoved(myClass, newMember);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
interface Base {
|
||||
void foo<caret>() default {
|
||||
System.out.println("Hi there.");
|
||||
}
|
||||
}
|
||||
|
||||
class C implements Base {
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
interface Base {
|
||||
}
|
||||
|
||||
class C implements Base {
|
||||
public void foo() {
|
||||
System.out.println("Hi there.");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
interface Base {
|
||||
void foo<caret>() default {
|
||||
System.out.println("Hi there.");
|
||||
}
|
||||
}
|
||||
|
||||
interface I2 extends Base {
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
interface Base {
|
||||
}
|
||||
|
||||
interface I2 extends Base {
|
||||
void foo() default {
|
||||
System.out.println("Hi there.");
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,8 @@ public class PushDownTest extends LightRefactoringTestCase {
|
||||
public void testSameClassInterface() { doTestImplements(); }
|
||||
public void testPreserveTypeArgs() { doTestImplements(); }
|
||||
public void testSubstTypeArgs() { doTestImplements(); }
|
||||
public void testExtensionMethodToInterface() { doTest(); }
|
||||
public void testExtensionMethodToClass() { doTest(); }
|
||||
|
||||
private void doTest() {
|
||||
doTest(false);
|
||||
|
||||
Reference in New Issue
Block a user