summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java')
-rw-r--r--java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java16
1 files changed, 12 insertions, 4 deletions
diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java
index 39913cdf2a60..ab86ee853b3b 100644
--- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java
+++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java
@@ -219,7 +219,10 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
}
}
PsiMethod methodCopy = (PsiMethod)method.copy();
- if (method.findSuperMethods(myTargetSuperClass).length == 0) {
+ Language language = myTargetSuperClass.getLanguage();
+ final PsiMethod superClassMethod = myTargetSuperClass.findMethodBySignature(methodCopy, false);
+ if (superClassMethod != null && superClassMethod.findDeepestSuperMethods().length == 0 ||
+ method.findSuperMethods(myTargetSuperClass).length == 0) {
deleteOverrideAnnotationIfFound(methodCopy);
}
boolean isOriginalMethodAbstract = method.hasModifierProperty(PsiModifier.ABSTRACT) || method.hasModifierProperty(PsiModifier.DEFAULT);
@@ -238,7 +241,14 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
myJavaDocPolicy.processCopiedJavaDoc(methodCopy.getDocComment(), method.getDocComment(), isOriginalMethodAbstract);
- final PsiMember movedElement = anchor != null ? (PsiMember)myTargetSuperClass.addBefore(methodCopy, anchor) : (PsiMember)myTargetSuperClass.add(methodCopy);
+ final PsiMember movedElement;
+ if (superClassMethod != null && superClassMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
+ movedElement = (PsiMember)superClassMethod.replace(convertMethodToLanguage(methodCopy, language));
+ }
+ else {
+ movedElement =
+ anchor != null ? (PsiMember)myTargetSuperClass.addBefore(methodCopy, anchor) : (PsiMember)myTargetSuperClass.add(methodCopy);
+ }
CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(method.getProject());
if (styleSettings.INSERT_OVERRIDE_ANNOTATION) {
if (PsiUtil.isLanguageLevel5OrHigher(mySourceClass) && !myIsTargetInterface || PsiUtil.isLanguageLevel6OrHigher(mySourceClass)) {
@@ -265,8 +275,6 @@ public class JavaPullUpHelper implements PullUpHelper<MemberInfo> {
RefactoringUtil.replaceMovedMemberTypeParameters(methodCopy, PsiUtil.typeParametersIterable(mySourceClass), substitutor, elementFactory);
fixReferencesToStatic(methodCopy);
- Language language = myTargetSuperClass.getLanguage();
- final PsiMethod superClassMethod = myTargetSuperClass.findMethodBySignature(methodCopy, false);
if (superClassMethod != null && superClassMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
superClassMethod.replace(convertMethodToLanguage(methodCopy, language));
}