package cn.mutils.core.reflect;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
import cn.mutils.core.IClearable;
/**
* Simple implementation of {@link ParameterizedType}
*/
@SuppressWarnings({"unused", "RedundantIfStatement"})
public class ArgumentsType implements ParameterizedType, IClearable {
protected Type[] mArguments;
protected Type mOwnerType;
protected Type mRawType;
public ArgumentsType() {
}
public ArgumentsType(Type[] arguments, Type ownerType, Type rawType) {
mArguments = arguments;
mOwnerType = ownerType;
mRawType = rawType;
}
@Override
public Type[] getActualTypeArguments() {
return mArguments;
}
public void setActualTypeArguments(Type[] arguments) {
mArguments = arguments;
}
public void setActualTypeArguments(List<Type> arguments) {
mArguments = (Type[]) arguments.toArray();
}
@Override
public Type getOwnerType() {
return mOwnerType;
}
public void setOwnerType(Type ownerType) {
mOwnerType = ownerType;
}
@Override
public Type getRawType() {
return mRawType;
}
public void setRawType(Type rawType) {
mRawType = rawType;
}
public void clear() {
mOwnerType = null;
mRawType = null;
if (mArguments != null) {
Arrays.fill(mArguments, null);
mArguments = null;
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || !(o instanceof ParameterizedType)) {
return false;
}
if (mOwnerType == null || mRawType == null || mArguments == null) {
return false;
}
ParameterizedType paramType = (ParameterizedType) o;
if (!mOwnerType.equals(paramType.getOwnerType())) {
return false;
}
if (!mRawType.equals(paramType.getRawType())) {
return false;
}
if (!Arrays.equals(mArguments, paramType.getActualTypeArguments())) {
return false;
}
return true;
}
}