comment added
[fedora-idea.git] / refactoring / impl / com / intellij / refactoring / util / classMembers / MemberDependenciesStorage.java
blob6eb4f674899869550c0651c4d8154face245cd7d
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) {
15 myClass = aClass;
16 mySuperClass = superClass;
17 myDependencyGraph = new HashMap<PsiMember, HashSet<PsiMember>>();
20 protected HashSet<PsiMember> getMemberDependencies(PsiMember member) {
21 HashSet<PsiMember> result = myDependencyGraph.get(member);
22 if (result == null) {
23 DependentMembersCollector collector = new DependentMembersCollector();
24 member.accept(collector);
25 result = collector.getCollection();
26 myDependencyGraph.put(member, result);
28 return result;
31 class DependentMembersCollector extends ClassMemberReferencesVisitor {
32 private final HashSet<PsiMember> myCollection = new HashSet<PsiMember>();
34 DependentMembersCollector() {
35 super(myClass);
38 public HashSet<PsiMember> getCollection() {
39 return myCollection;
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;