package org.scribble.ast.name.simple; import org.antlr.runtime.tree.CommonTree; import org.scribble.ast.AstFactoryImpl; import org.scribble.ast.MessageNode; import org.scribble.ast.name.PayloadElemNameNode; import org.scribble.sesstype.Arg; import org.scribble.sesstype.Message; import org.scribble.sesstype.kind.AmbigKind; import org.scribble.sesstype.kind.DataTypeKind; import org.scribble.sesstype.kind.NonRoleArgKind; import org.scribble.sesstype.name.AmbigName; import org.scribble.sesstype.name.PayloadType; // Primitive payload type, MessageSigName or parameter names only: if name is parsed as a CompoundNameNodes, it must be a payload type (not ambiguous in this case) // No counterpart needed for MessageNode because MessageSignature values can be syntactically distinguished from sig parameters //public class AmbigNameNode extends SimpleNameNode<AmbigKind> implements MessageNode, PayloadElemNameNode //public class AmbigNameNode extends SimpleNameNode<AmbigKind> implements MessageNode, PayloadElemNameNode<PayloadTypeKind> public class AmbigNameNode extends SimpleNameNode<AmbigKind> implements MessageNode, PayloadElemNameNode<DataTypeKind> // Currently hardcoded to DataTypeKind for payload elems { public AmbigNameNode(CommonTree source, String identifier) { super(source, identifier); } @Override public MessageNode project() { throw new RuntimeException("Shouldn't get in here: " + this); } @Override protected AmbigNameNode copy() { return new AmbigNameNode(this.source, getIdentifier()); } @Override public AmbigNameNode clone() { return (AmbigNameNode) AstFactoryImpl.FACTORY.AmbiguousNameNode(this.source, getIdentifier()); } @Override public Arg<? extends NonRoleArgKind> toArg() { throw new RuntimeException("Ambiguous name node not disambiguated: " + this); } @Override public Message toMessage() { throw new RuntimeException("Ambiguous name node not disambiguated: " + this); } @Override //public PayloadType<AmbigKind> toPayloadType() public PayloadType<DataTypeKind> toPayloadType() // As a payload elem, currently hardcoded to expect only DataTypeKind (protocol payloads not supported) //public PayloadType<PayloadTypeKind> toPayloadType() { throw new RuntimeException("Ambiguous name node not disambiguated: " + this); } @Override public AmbigName toName() { return new AmbigName(getIdentifier()); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof AmbigNameNode)) { return false; } return ((AmbigNameNode) o).canEqual(this) && super.equals(o); } @Override public boolean canEqual(Object o) { return o instanceof AmbigNameNode; } @Override public int hashCode() { int hash = 331; hash = 31 * super.hashCode(); return hash; } }