1 package com
.intellij
.refactoring
.memberPushDown
;
3 import com
.intellij
.openapi
.actionSystem
.DataContext
;
4 import com
.intellij
.openapi
.editor
.Editor
;
5 import com
.intellij
.openapi
.editor
.ScrollType
;
6 import com
.intellij
.openapi
.project
.Project
;
7 import com
.intellij
.psi
.*;
8 import com
.intellij
.psi
.impl
.source
.jsp
.jspJava
.JspClass
;
9 import com
.intellij
.refactoring
.HelpID
;
10 import com
.intellij
.refactoring
.RefactoringActionHandler
;
11 import com
.intellij
.refactoring
.RefactoringBundle
;
12 import com
.intellij
.refactoring
.util
.CommonRefactoringUtil
;
13 import com
.intellij
.refactoring
.util
.RefactoringMessageUtil
;
14 import com
.intellij
.refactoring
.util
.classMembers
.MemberInfo
;
15 import com
.intellij
.refactoring
.util
.classMembers
.MemberInfoStorage
;
16 import org
.jetbrains
.annotations
.NotNull
;
18 import java
.util
.List
;
23 public class PushDownHandler
implements RefactoringActionHandler
{
24 public static final String REFACTORING_NAME
= RefactoringBundle
.message("push.members.down.title");
26 public void invoke(@NotNull Project project
, Editor editor
, PsiFile file
, DataContext dataContext
) {
27 int offset
= editor
.getCaretModel().getOffset();
28 editor
.getScrollingModel().scrollToCaret(ScrollType
.MAKE_VISIBLE
);
29 PsiElement element
= file
.findElementAt(offset
);
32 if (element
== null || element
instanceof PsiFile
) {
33 String message
= RefactoringBundle
.getCannotRefactorMessage(
34 RefactoringBundle
.message("the.caret.should.be.positioned.inside.a.class.to.push.members.from"));
35 CommonRefactoringUtil
.showErrorHint(project
, editor
, message
, REFACTORING_NAME
, HelpID
.MEMBERS_PUSH_DOWN
);
39 if (element
instanceof PsiClass
|| element
instanceof PsiField
|| element
instanceof PsiMethod
) {
40 if (element
instanceof JspClass
) {
41 RefactoringMessageUtil
.showNotSupportedForJspClassesError(project
, editor
, REFACTORING_NAME
, HelpID
.MEMBERS_PUSH_DOWN
);
44 invoke(project
, new PsiElement
[]{element
}, dataContext
);
47 element
= element
.getParent();
51 public void invoke(@NotNull final Project project
, @NotNull PsiElement
[] elements
, DataContext dataContext
) {
52 if (elements
.length
!= 1) return;
54 PsiElement element
= elements
[0];
56 PsiElement aMember
= null;
58 if (element
instanceof PsiClass
) {
59 aClass
= (PsiClass
) element
;
60 } else if (element
instanceof PsiMethod
) {
61 aClass
= ((PsiMethod
) element
).getContainingClass();
63 } else if (element
instanceof PsiField
) {
64 aClass
= ((PsiField
) element
).getContainingClass();
69 if (!CommonRefactoringUtil
.checkReadOnlyStatus(project
, aClass
)) return;
70 MemberInfoStorage memberInfoStorage
= new MemberInfoStorage(aClass
, new MemberInfo
.Filter() {
71 public boolean includeMember(PsiMember element
) {
75 List
<MemberInfo
> members
= memberInfoStorage
.getClassMemberInfos(aClass
);
76 PsiManager manager
= aClass
.getManager();
78 for (MemberInfo member
: members
) {
79 if (manager
.areElementsEquivalent(member
.getMember(), aMember
)) {
80 member
.setChecked(true);
84 PushDownDialog dialog
= new PushDownDialog(
86 members
.toArray(new MemberInfo
[members
.size()]),