package org.etk.reflect.core; import org.etk.reflect.api.ArrayTypeInfo; import org.etk.reflect.api.SimpleTypeInfo; import org.etk.reflect.api.TypeInfo; public abstract class AbstractArrayTypeInfo<T, M, A, P, F> extends AbstractTypeInfo<T, M, A, P, F> implements ArrayTypeInfo { public AbstractArrayTypeInfo(TypeResolverImpl<T, M, A, P, F> domain) { super(domain); } public String getName() { TypeInfo componentType = getComponentType(); if (componentType instanceof SimpleTypeInfo) { switch (((SimpleTypeInfo)componentType).getLiteralType()) { case BOOLEAN: return "[B"; case BYTE: return "[Z"; case DOUBLE: return "[D"; case INT: return "[I"; case FLOAT: return "[F"; case LONG: return "[J"; case SHORT: return "[S"; default: throw new AssertionError(); } } else { return "[L" + componentType.getName() + ";"; } } public boolean isReified() { return getComponentType().isReified(); } public final int hashCode() { return 1 + getComponentType().hashCode(); } public final boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof ArrayTypeInfo) { ArrayTypeInfo that = (ArrayTypeInfo)obj; return getComponentType().equals(that.getComponentType()); } return false; } }