package org.springframework.roo.classpath.details.annotations; import org.apache.commons.lang3.Validate; import org.springframework.roo.model.JavaSymbolName; /** * Abstract base class for annotation attribute values. * * @author Ben Alex * @since 1.0 */ public abstract class AbstractAnnotationAttributeValue<T extends Object> implements AnnotationAttributeValue<T> { private final JavaSymbolName name; /** * Constructor * * @param name the attribute name (required) */ protected AbstractAnnotationAttributeValue(final JavaSymbolName name) { Validate.notNull(name, "Annotation attribute name required"); this.name = name; } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof AbstractAnnotationAttributeValue<?>)) { return false; } final AbstractAnnotationAttributeValue<?> other = (AbstractAnnotationAttributeValue<?>) obj; if (getValue() == null) { if (other.getValue() != null) { return false; } } else if (!getValue().equals(other.getValue())) { return false; } if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } return true; } public JavaSymbolName getName() { return name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (getValue() == null ? 0 : getValue().hashCode()); result = prime * result + (name == null ? 0 : name.hashCode()); return result; } }