/*package*/ public NonTerminalType(IConstructor cons) { // TODO refactor this into different factory methods in RascalTypeFactory if (cons.getConstructorType() == RascalValueFactory.Tree_Appl) { // Note that here we go from * to + lists if the list is not empty this.symbol = TreeAdapter.getType((ITree) cons); } else if (cons.getConstructorType() == RascalValueFactory.Tree_Amb) { ISet alts = TreeAdapter.getAlternatives((ITree) cons); if (!alts.isEmpty()) { ITree first = (ITree) alts.iterator().next(); this.symbol = TreeAdapter.getType(first); } else { this.symbol = IRascalValueFactory.getInstance().constructor(RascalValueFactory.Symbol_Empty); } } else if (cons.getConstructorType() == RascalValueFactory.Tree_Cycle) { this.symbol = TreeAdapter.getType((ITree) cons); } else if (cons.getType() == RascalValueFactory.Symbol) { this.symbol = cons; } else if (cons.getType() == RascalValueFactory.Production) { this.symbol = ProductionAdapter.getType(cons); } else { throw new ImplementationError("Invalid concrete syntax type constructor:" + cons); } }
public Type getConstructorType() { return content.getConstructorType(); }