package org.scribble.ast.name.qualified;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.AstFactoryImpl;
import org.scribble.ast.name.PayloadElemNameNode;
import org.scribble.sesstype.Arg;
import org.scribble.sesstype.kind.DataTypeKind;
import org.scribble.sesstype.name.DataType;
//public class DataTypeNode extends MemberNameNode<DataTypeKind> implements PayloadElemNameNode
public class DataTypeNode extends MemberNameNode<DataTypeKind> implements PayloadElemNameNode<DataTypeKind>
{
public DataTypeNode(CommonTree source, String... elems)
{
super(source, elems);
}
@Override
protected DataTypeNode copy()
{
return new DataTypeNode(this.source, this.elems);
}
@Override
public DataTypeNode clone()
{
return (DataTypeNode) AstFactoryImpl.FACTORY.QualifiedNameNode(this.source, DataTypeKind.KIND, this.elems);
}
@Override
public DataType toName()
{
DataType membname = new DataType(getLastElement());
return isPrefixed()
? new DataType(getModuleNamePrefix(), membname)
: membname;
}
@Override
public boolean isDataTypeNameNode()
{
return true;
}
@Override
public Arg<DataTypeKind> toArg()
{
return toPayloadType();
}
@Override
public DataType toPayloadType()
{
return toName();
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (!(o instanceof DataTypeNode))
{
return false;
}
return ((DataTypeNode) o).canEqual(this) && super.equals(o);
}
@Override
public boolean canEqual(Object o)
{
return o instanceof DataTypeNode;
}
@Override
public int hashCode()
{
int hash = 409;
hash = 31 * hash + this.elems.hashCode();
return hash;
}
}