/**************************************************************************************
* Copyright (c) Jonas Bon�r, Alexandre Vasseur. All rights reserved. *
* http://aspectwerkz.codehaus.org *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the LGPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package org.codehaus.aspectwerkz.reflect;
/**
* Holds a tuple that consists of the class info and the info for a specific method.
*
* @author <a href="mailto:jboner@codehaus.org">Jonas Bon�r </a>
* @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur </a>
*/
public class CflowMetaData {
/**
* The class name.
*/
private final String m_className;
/**
* The class info.
*/
private ClassInfo m_classMetaData;
/**
* The method info.
*/
private final MethodInfo m_methodMetaData;
/**
* Creates a new ClassNameMethodInfoTuple.
*
* @param classMetaData the class metaData
* @param methodMetaData the method info
*/
public CflowMetaData(final ClassInfo classMetaData, final MethodInfo methodMetaData) {
m_className = classMetaData.getName();
m_classMetaData = classMetaData;
m_methodMetaData = methodMetaData;
}
/**
* Returns the class info.
*
* @return the class info
*/
public ClassInfo getClassInfo() {
return m_classMetaData;
}
/**
* Returns the class name.
*
* @return the class name
*/
public String getClassName() {
return m_className;
}
/**
* Returns the method info.
*
* @return the method info
*/
public MethodInfo getMethodInfo() {
return m_methodMetaData;
}
// --- over-ridden methods ---
public String toString() {
return '[' + super.toString() + ": " + ',' + m_className + ',' + m_classMetaData + ',' + m_methodMetaData +
']';
}
public int hashCode() {
int result = 17;
result = (37 * result) + hashCodeOrZeroIfNull(m_className);
result = (37 * result) + hashCodeOrZeroIfNull(m_classMetaData);
result = (37 * result) + hashCodeOrZeroIfNull(m_methodMetaData);
return result;
}
protected static int hashCodeOrZeroIfNull(final Object o) {
if (null == o) {
return 19;
}
return o.hashCode();
}
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (!(o instanceof CflowMetaData)) {
return false;
}
final CflowMetaData obj = (CflowMetaData) o;
return areEqualsOrBothNull(obj.m_className, this.m_className)
&& areEqualsOrBothNull(obj.m_classMetaData, this.m_classMetaData)
&& areEqualsOrBothNull(obj.m_methodMetaData, this.m_methodMetaData);
}
protected static boolean areEqualsOrBothNull(final Object o1, final Object o2) {
if (null == o1) {
return (null == o2);
}
return o1.equals(o2);
}
}