mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
respect javadoc policy for inlined members on inline super class as well as push down with existing members (IDEA-67580)
This commit is contained in:
+24
-6
@@ -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("<html>Inline \'" + mySuperClass.getQualifiedName() + "\' to <br> \'" + StringUtil.join(myTargetClasses, new Function<PsiClass, String>() {
|
||||
public String fun(final PsiClass psiClass) {
|
||||
return psiClass.getQualifiedName();
|
||||
}
|
||||
}, "\',<br> \'") + "\'</html>");
|
||||
final JLabel label = new JLabel("<html>Inline \'" +
|
||||
mySuperClass.getQualifiedName() +
|
||||
"\' to " +
|
||||
(myTargetClasses.length > 1 ? " <br> \'" : "\'") +
|
||||
StringUtil.join(myTargetClasses, new Function<PsiClass, String>() {
|
||||
public String fun(final PsiClass psiClass) {
|
||||
return psiClass.getQualifiedName();
|
||||
}
|
||||
}, "\',<br> \'") +
|
||||
"\'</html>");
|
||||
label.setBorder(IdeBorderFactory.createEmptyBorder(5, 5, 5, 5));
|
||||
return label;
|
||||
}
|
||||
}
|
||||
+4
-2
@@ -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<PsiMember>() {
|
||||
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<PsiElement, String> conflicts, UsageInfo[] usages) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user