001 /** 
002  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html 
003  */ 
004 package net.sourceforge.pmd.dcd.graph; 
005  
006 import java.lang.reflect.Member; 
007 import java.util.ArrayList; 
008 import java.util.Collections; 
009 import java.util.List; 
010  
011 /** 
012  * Represents a Class Member in a UsageGraph. 
013  */ 
014 public abstract class MemberNode<S extends MemberNode<S, T>, T extends Member> implements NodeVisitorAcceptor, 
015     Comparable<S> { 
016   protected final ClassNode classNode; 
017  
018   protected final String name; 
019  
020   protected final String desc; 
021  
022   private List<MemberNode> uses; 
023  
024   private List<MemberNode> users; 
025  
026   private Object decoration; 
027  
028   public MemberNode(ClassNode classNode, String name, String desc) { 
029     this.classNode = classNode; 
030     this.name = name; 
031     this.desc = desc; 
032   } 
033  
034   public Object accept(NodeVisitor visitor, Object data) { 
035     visitor.visitUses(this, data); 
036     visitor.visitUsers(this, data); 
037     return data; 
038   } 
039  
040   public ClassNode getClassNode() { 
041     return classNode; 
042   } 
043  
044   public String getName() { 
045     return name; 
046   } 
047  
048   public String getDesc() { 
049     return desc; 
050   } 
051  
052   public abstract T getMember(); 
053  
054   public void addUse(MemberNode use) { 
055     if (uses == null) { 
056       uses = new ArrayList<MemberNode>(1); 
057     } 
058     if (!uses.contains(use)) { 
059       uses.add(use); 
060     } 
061   } 
062  
063   public List<MemberNode> getUses() { 
064     return uses != null ? uses : Collections.<MemberNode> emptyList(); 
065   } 
066  
067   public void addUser(MemberNode user) { 
068     if (users == null) { 
069       users = new ArrayList<MemberNode>(1); 
070     } 
071     if (!users.contains(user)) { 
072       users.add(user); 
073     } 
074   } 
075  
076   public List<MemberNode> getUsers() { 
077     return users != null ? users : Collections.<MemberNode> emptyList(); 
078   } 
079  
080   public String toString() { 
081     return name + " " + desc; 
082   } 
083  
084   public String toStringLong() { 
085     return getMember().toString(); 
086   } 
087  
088   public abstract boolean equals(Object that); 
089  
090   @SuppressWarnings("PMD.SuspiciousEqualsMethodName") 
091   public boolean equals(S that) { 
092     return equals(that.name, that.desc); 
093   } 
094  
095   public boolean equals(String name, String desc) { 
096     return this.name.equals(name) && this.desc.equals(desc); 
097   } 
098  
099   public int hashCode() { 
100     return name.hashCode() + desc.hashCode(); 
101   } 
102 }
    
    |