IDEA-91679 (same, for push up)

This commit is contained in:
Roman Shevchenko
2012-09-18 19:33:32 +02:00
parent b4cf161740
commit 908de0d6a2
6 changed files with 53 additions and 8 deletions

View File

@@ -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);
}
}
}
}

View File

@@ -0,0 +1,8 @@
interface Base {
void foo<caret>() default {
System.out.println("Hi there.");
}
}
class C implements Base {
}

View File

@@ -0,0 +1,8 @@
interface Base {
}
class C implements Base {
public void foo() {
System.out.println("Hi there.");
}
}

View File

@@ -0,0 +1,8 @@
interface Base {
void foo<caret>() default {
System.out.println("Hi there.");
}
}
interface I2 extends Base {
}

View File

@@ -0,0 +1,8 @@
interface Base {
}
interface I2 extends Base {
void foo() default {
System.out.println("Hi there.");
}
}

View File

@@ -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);