1 package com
.intellij
.refactoring
.util
.classMembers
;
3 import com
.intellij
.psi
.*;
4 import com
.intellij
.util
.containers
.HashMap
;
6 import java
.util
.HashSet
;
9 class MemberDependenciesStorage
{
10 protected final PsiClass myClass
;
11 private final PsiClass mySuperClass
;
12 private final HashMap
<PsiMember
,HashSet
<PsiMember
>> myDependencyGraph
;
14 MemberDependenciesStorage(PsiClass aClass
, PsiClass superClass
) {
16 mySuperClass
= superClass
;
17 myDependencyGraph
= new HashMap
<PsiMember
, HashSet
<PsiMember
>>();
20 protected HashSet
<PsiMember
> getMemberDependencies(PsiMember member
) {
21 HashSet
<PsiMember
> result
= myDependencyGraph
.get(member
);
23 DependentMembersCollector collector
= new DependentMembersCollector();
24 member
.accept(collector
);
25 result
= collector
.getCollection();
26 myDependencyGraph
.put(member
, result
);
31 class DependentMembersCollector
extends ClassMemberReferencesVisitor
{
32 private final HashSet
<PsiMember
> myCollection
= new HashSet
<PsiMember
>();
34 DependentMembersCollector() {
38 public HashSet
<PsiMember
> getCollection() {
42 protected void visitClassMemberReferenceElement(PsiMember classMember
, PsiJavaCodeReferenceElement classMemberReference
) {
43 if (!existsInSuperClass(classMember
)) {
44 myCollection
.add(classMember
);
49 private boolean existsInSuperClass(PsiMember classMember
) {
50 if(mySuperClass
== null) return false;
51 if (!(classMember
instanceof PsiMethod
)) return false;
52 final PsiMethod method
= ((PsiMethod
) classMember
);
53 final PsiMethod methodBySignature
= mySuperClass
.findMethodBySignature(method
, true);
54 return methodBySignature
!= null;