View Javadoc

1   /***************************************************************************************
2    * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved.                 *
3    * http://aspectwerkz.codehaus.org                                                    *
4    * ---------------------------------------------------------------------------------- *
5    * The software in this package is published under the terms of the LGPL license      *
6    * a copy of which has been included with this distribution in the license.txt file.  *
7    **************************************************************************************/
8   package org.codehaus.aspectwerkz.reflect;
9   
10  /***
11   * Holds a tuple that consists of the class info and the info for a specific method.
12   *
13   * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a>
14   * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a>
15   */
16  public class CflowMetaData {
17      /***
18       * The class name.
19       */
20      private final String m_className;
21  
22      /***
23       * The class info.
24       */
25      private ClassInfo m_classMetaData;
26  
27      /***
28       * The method info.
29       */
30      private final MethodInfo m_methodMetaData;
31  
32      /***
33       * Creates a new ClassNameMethodInfoTuple.
34       *
35       * @param classMetaData  the class metaData
36       * @param methodMetaData the method info
37       */
38      public CflowMetaData(final ClassInfo classMetaData, final MethodInfo methodMetaData) {
39          m_className = classMetaData.getName();
40          m_classMetaData = classMetaData;
41          m_methodMetaData = methodMetaData;
42      }
43  
44      /***
45       * Returns the class info.
46       *
47       * @return the class info
48       */
49      public ClassInfo getClassInfo() {
50          return m_classMetaData;
51      }
52  
53      /***
54       * Returns the class name.
55       *
56       * @return the class name
57       */
58      public String getClassName() {
59          return m_className;
60      }
61  
62      /***
63       * Returns the method info.
64       *
65       * @return the method info
66       */
67      public MethodInfo getMethodInfo() {
68          return m_methodMetaData;
69      }
70  
71      // --- over-ridden methods ---
72      public String toString() {
73          return '[' + super.toString() + ": " + ',' + m_className + ',' + m_classMetaData + ',' + m_methodMetaData +
74                 ']';
75      }
76  
77      public int hashCode() {
78          int result = 17;
79          result = (37 * result) + hashCodeOrZeroIfNull(m_className);
80          result = (37 * result) + hashCodeOrZeroIfNull(m_classMetaData);
81          result = (37 * result) + hashCodeOrZeroIfNull(m_methodMetaData);
82          return result;
83      }
84  
85      protected static int hashCodeOrZeroIfNull(final Object o) {
86          if (null == o) {
87              return 19;
88          }
89          return o.hashCode();
90      }
91  
92      public boolean equals(final Object o) {
93          if (this == o) {
94              return true;
95          }
96          if (!(o instanceof CflowMetaData)) {
97              return false;
98          }
99          final CflowMetaData obj = (CflowMetaData) o;
100         return areEqualsOrBothNull(obj.m_className, this.m_className)
101                && areEqualsOrBothNull(obj.m_classMetaData, this.m_classMetaData)
102                && areEqualsOrBothNull(obj.m_methodMetaData, this.m_methodMetaData);
103     }
104 
105     protected static boolean areEqualsOrBothNull(final Object o1, final Object o2) {
106         if (null == o1) {
107             return (null == o2);
108         }
109         return o1.equals(o2);
110     }
111 }