push down: apply javadoc settings when keep abstract (IDEA-155596)

This commit is contained in:
Anna.Kozlova
2016-05-04 20:18:45 +02:00
parent efa0c5c53b
commit 1a70d8bcbd
6 changed files with 66 additions and 17 deletions
@@ -217,27 +217,30 @@ public class JavaPushDownDelegate extends PushDownDelegate<MemberInfo, PsiMember
PsiMethod methodBySignature = MethodSignatureUtil.findMethodBySuperSignature(targetClass, method.getSignature(substitutor), false);
if (methodBySignature == null) {
newMember = (PsiMethod)targetClass.add(method);
if (sourceClass.isInterface()) {
final PsiMethod oldMethod = (PsiMethod)memberInfo.getMember();
if (!targetClass.isInterface()) {
PsiUtil.setModifierProperty(newMember, PsiModifier.PUBLIC, true);
if (oldMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
RefactoringUtil.makeMethodAbstract(targetClass, (PsiMethod)newMember);
final PsiMethod oldMethod = (PsiMethod)memberInfo.getMember();
if (sourceClass.isInterface() && !targetClass.isInterface()) {
PsiUtil.setModifierProperty(newMember, PsiModifier.PUBLIC, true);
if (oldMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
RefactoringUtil.makeMethodAbstract(targetClass, (PsiMethod)newMember);
}
else {
PsiUtil.setModifierProperty(newMember, PsiModifier.DEFAULT, false);
}
}
if (memberInfo.isToAbstract()) {
if (sourceClass.isInterface()) {
if (oldMethod.hasModifierProperty(PsiModifier.DEFAULT)) {
PsiUtil.setModifierProperty(oldMethod, PsiModifier.DEFAULT, false);
RefactoringUtil.makeMethodAbstract(sourceClass, oldMethod);
}
else {
PsiUtil.setModifierProperty(newMember, PsiModifier.DEFAULT, false);
}
else {
if (newMember.hasModifierProperty(PsiModifier.PRIVATE)) {
PsiUtil.setModifierProperty(newMember, PsiModifier.PROTECTED, true);
}
}
if (memberInfo.isToAbstract() && oldMethod.hasModifierProperty(PsiModifier.DEFAULT)) {
PsiUtil.setModifierProperty(oldMethod, PsiModifier.DEFAULT, false);
RefactoringUtil.makeMethodAbstract(sourceClass, oldMethod);
}
}
else if (memberInfo.isToAbstract()) {
if (newMember.hasModifierProperty(PsiModifier.PRIVATE)) {
PsiUtil.setModifierProperty(newMember, PsiModifier.PROTECTED, true);
}
pushDownData.getCommentPolicy().processNewJavaDoc(((PsiMethod)newMember).getDocComment());
}
if (memberInfo.isToAbstract()) {
@@ -0,0 +1,8 @@
abstract class Test {
/**
* foo's javadoc
*/
abstract void foo();
}
abstract class B extends Test {}
@@ -0,0 +1,11 @@
abstract class Test {
/**
* foo's javadoc
*/
abstract void foo();
}
abstract class B extends Test {
@Override
abstract void foo();
}
@@ -0,0 +1,8 @@
interface Test {
/**
* foo's javadoc
*/
void foo();
}
interface B extends Test {}
@@ -0,0 +1,11 @@
interface Test {
/**
* foo's javadoc
*/
void foo();
}
interface B extends Test {
@Override
void foo();
}
@@ -87,6 +87,14 @@ public class PushDownTest extends LightRefactoringTestCase {
doTest(true);
}
public void testJavadocWhenKeepAsAbstractInterface() throws Exception {
doTestImplements(true);
}
public void testJavadocWhenKeepAsAbstractClass() throws Exception {
doTestImplements(true);
}
private void doTest() {
doTest(false);
}