package org.scribble.ast.local; import org.antlr.runtime.tree.CommonTree; import org.scribble.ast.AstFactoryImpl; import org.scribble.ast.UnaryPayloadElem; import org.scribble.ast.name.qualified.LProtocolNameNode; import org.scribble.del.ScribDel; import org.scribble.main.ScribbleException; import org.scribble.sesstype.kind.Local; import org.scribble.sesstype.name.PayloadType; import org.scribble.visit.AstVisitor; // N.B. extends UnaryPayloadElem, not DelegationElem public class LDelegationElem extends UnaryPayloadElem<Local> { // Currently no potential for ambiguity because only generated, not parsed public LDelegationElem(CommonTree source, LProtocolNameNode proto) { super(source, proto); } @Override public boolean isLocalDelegationElem() { return true; } @Override protected LDelegationElem copy() { return new LDelegationElem(this.source, (LProtocolNameNode) this.name); } @Override public LDelegationElem clone() { LProtocolNameNode name = (LProtocolNameNode) this.name.clone(); return AstFactoryImpl.FACTORY.LDelegationElem(this.source, name); } public LDelegationElem reconstruct(LProtocolNameNode proto) { ScribDel del = del(); LDelegationElem elem = new LDelegationElem(this.source, proto); elem = (LDelegationElem) elem.del(del); return elem; } @Override public LDelegationElem visitChildren(AstVisitor nv) throws ScribbleException { LProtocolNameNode name = (LProtocolNameNode) visitChild(this.name, nv); return reconstruct(name); } /*@Override public String toString() { return this.proto + "@" + this.role; }*/ @Override //public PayloadType<? extends PayloadTypeKind> toPayloadType() public PayloadType<Local> toPayloadType() { return this.name.toPayloadType(); } }