From cb836b32512f1f321b606f80a20a9c393638338a Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 12 Apr 2011 20:53:59 +0200 Subject: [PATCH] respect javadoc policy for inlined members on inline super class as well as push down with existing members (IDEA-67580) --- .../InlineSuperClassRefactoringDialog.java | 30 +++++++++++++++---- .../InlineSuperClassRefactoringProcessor.java | 6 ++-- .../memberPushDown/PushDownProcessor.java | 15 +++++++++- .../refactoring/InlineSuperClassTest.java | 5 ++-- .../refactoring/util/DocCommentPolicy.java | 4 +++ 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringDialog.java b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringDialog.java index 9422e6a540f6..16106709246c 100644 --- a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringDialog.java @@ -23,7 +23,10 @@ package com.intellij.refactoring.inlineSuperClass; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiClass; +import com.intellij.refactoring.JavaRefactoringSettings; +import com.intellij.refactoring.ui.DocCommentPanel; import com.intellij.refactoring.ui.RefactoringDialog; +import com.intellij.ui.IdeBorderFactory; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; @@ -32,24 +35,39 @@ import javax.swing.*; public class InlineSuperClassRefactoringDialog extends RefactoringDialog{ private final PsiClass mySuperClass; private final PsiClass[] myTargetClasses; + private final DocCommentPanel myDocPanel; protected InlineSuperClassRefactoringDialog(@NotNull Project project, PsiClass superClass, final PsiClass... targetClasses) { super(project, false); mySuperClass = superClass; myTargetClasses = targetClasses; + myDocPanel = new DocCommentPanel("JavaDoc for inlined members"); + myDocPanel.setPolicy(JavaRefactoringSettings.getInstance().PULL_UP_MEMBERS_JAVADOC); init(); setTitle(InlineSuperClassRefactoringHandler.REFACTORING_NAME); } protected void doAction() { - invokeRefactoring(new InlineSuperClassRefactoringProcessor(getProject(), mySuperClass, myTargetClasses)); + invokeRefactoring(new InlineSuperClassRefactoringProcessor(getProject(), mySuperClass, myDocPanel.getPolicy(), myTargetClasses)); + } + + @Override + protected JComponent createNorthPanel() { + return myDocPanel; } protected JComponent createCenterPanel() { - return new JLabel("Inline \'" + mySuperClass.getQualifiedName() + "\' to
   \'" + StringUtil.join(myTargetClasses, new Function() { - public String fun(final PsiClass psiClass) { - return psiClass.getQualifiedName(); - } - }, "\',
   \'") + "\'"); + final JLabel label = new JLabel("Inline \'" + + mySuperClass.getQualifiedName() + + "\' to " + + (myTargetClasses.length > 1 ? "
   \'" : "\'") + + StringUtil.join(myTargetClasses, new Function() { + public String fun(final PsiClass psiClass) { + return psiClass.getQualifiedName(); + } + }, "\',
   \'") + + "\'"); + label.setBorder(IdeBorderFactory.createEmptyBorder(5, 5, 5, 5)); + return label; } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java index 50f24d095af9..0c001672fd1e 100644 --- a/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inlineSuperClass/InlineSuperClassRefactoringProcessor.java @@ -51,12 +51,14 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori public static final Logger LOG = Logger.getInstance("#" + InlineSuperClassRefactoringProcessor.class.getName()); private final PsiClass mySuperClass; + private final int myPolicy; private final PsiClass[] myTargetClasses; private final MemberInfo[] myMemberInfos; - public InlineSuperClassRefactoringProcessor(Project project, PsiClass superClass, final PsiClass... targetClasses) { + public InlineSuperClassRefactoringProcessor(Project project, PsiClass superClass, int policy, final PsiClass... targetClasses) { super(project); mySuperClass = superClass; + myPolicy = policy; myTargetClasses = targetClasses; MemberInfoStorage memberInfoStorage = new MemberInfoStorage(mySuperClass, new MemberInfo.Filter() { public boolean includeMember(PsiMember element) { @@ -205,7 +207,7 @@ public class InlineSuperClassRefactoringProcessor extends FixableUsagesRefactori } protected void performRefactoring(final UsageInfo[] usages) { - new PushDownProcessor(mySuperClass.getProject(), myMemberInfos, mySuperClass, new DocCommentPolicy(DocCommentPolicy.ASIS)){ + new PushDownProcessor(mySuperClass.getProject(), myMemberInfos, mySuperClass, new DocCommentPolicy(myPolicy)){ //push down conflicts are already collected @Override protected boolean showConflicts(MultiMap conflicts, UsageInfo[] usages) { diff --git a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java index 6aa631de9748..618fb1655703 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPushDown/PushDownProcessor.java @@ -26,7 +26,9 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.impl.source.codeStyle.JavaCodeStyleManagerImpl; +import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; @@ -368,6 +370,17 @@ public class PushDownProcessor extends BaseRefactoringProcessor { if (annotation != null) { annotation.delete(); } + final PsiDocComment oldDocComment = method.getDocComment(); + if (oldDocComment != null) { + final PsiDocComment docComment = methodBySignature.getDocComment(); + if (myJavaDocPolicy.getJavaDocPolicy() == DocCommentPolicy.COPY || myJavaDocPolicy.getJavaDocPolicy() == DocCommentPolicy.MOVE) { + if (docComment != null) { + docComment.replace(oldDocComment); + } else { + methodBySignature.getParent().addBefore(oldDocComment, methodBySignature); + } + } + } } } else if (member instanceof PsiClass) { @@ -392,7 +405,7 @@ public class PushDownProcessor extends BaseRefactoringProcessor { } }); for (PsiReference psiReference : refsToRebind) { - JavaCodeStyleManagerImpl.getInstance(myProject).shortenClassReferences(psiReference.bindToElement(newMember)); + JavaCodeStyleManager.getInstance(myProject).shortenClassReferences(psiReference.bindToElement(newMember)); } final JavaRefactoringListenerManager listenerManager = JavaRefactoringListenerManager.getInstance(newMember.getProject()); ((JavaRefactoringListenerManagerImpl)listenerManager).fireMemberMoved(myClass, newMember); diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java index d4b03c5545eb..7351495b2e35 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InlineSuperClassTest.java @@ -11,6 +11,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.inlineSuperClass.InlineSuperClassRefactoringProcessor; +import com.intellij.refactoring.util.DocCommentPolicy; public class InlineSuperClassTest extends MultiFileTestCase { @Override @@ -42,7 +43,7 @@ public class InlineSuperClassTest extends MultiFileTestCase { if (superClass == null) superClass = myJavaFacade.findClass("p1.Super", GlobalSearchScope.allScope(myProject)); assertNotNull("Class Super not found", superClass); - new InlineSuperClassRefactoringProcessor(getProject(), superClass, aClass).run(); + new InlineSuperClassRefactoringProcessor(getProject(), superClass, DocCommentPolicy.ASIS, aClass).run(); //LocalFileSystem.getInstance().refresh(false); //FileDocumentManager.getInstance().saveAllDocuments(); @@ -177,7 +178,7 @@ public class InlineSuperClassTest extends MultiFileTestCase { PsiClass superClass = myJavaFacade.findClass("Super", GlobalSearchScope.allScope(myProject)); if (superClass == null) superClass = myJavaFacade.findClass("p1.Super", GlobalSearchScope.allScope(myProject)); assertNotNull("Class Super not found", superClass); - new InlineSuperClassRefactoringProcessor(getProject(), superClass, + new InlineSuperClassRefactoringProcessor(getProject(), superClass, DocCommentPolicy.ASIS, myJavaFacade.findClass("Test", GlobalSearchScope.allScope(myProject)), myJavaFacade.findClass("Test1", GlobalSearchScope.allScope(myProject))).run(); } diff --git a/platform/lang-impl/src/com/intellij/refactoring/util/DocCommentPolicy.java b/platform/lang-impl/src/com/intellij/refactoring/util/DocCommentPolicy.java index 13da2e26109f..308e147dd79a 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/util/DocCommentPolicy.java +++ b/platform/lang-impl/src/com/intellij/refactoring/util/DocCommentPolicy.java @@ -61,4 +61,8 @@ public class DocCommentPolicy { oldDocComment.delete(); } } + + public int getJavaDocPolicy() { + return myJavaDocPolicy; + } }