package org.rascalmpl.eclipse.editor.proposer; import java.util.ArrayList; import java.util.List; import io.usethesource.vallang.ISourceLocation; public class Scope implements ISymbol { private final ISymbol scopeSymbol; private final List<ISymbol> childSymbols; private final ISourceLocation location; private String label; public Scope(ISymbol scopeSymbol) { if (scopeSymbol == null) { throw new IllegalArgumentException("scopeSymbol"); } this.scopeSymbol = scopeSymbol; this.location = scopeSymbol.getLocation(); label = scopeSymbol.getName(); childSymbols = new ArrayList<ISymbol>(); } public Scope(ISymbol scopeSymbol, ISourceLocation location) { this.scopeSymbol = scopeSymbol; this.label = scopeSymbol != null ? scopeSymbol.getName() : ""; this.location = location; childSymbols = new ArrayList<ISymbol>(); } @Override public <T> T accept(SymbolVisitor<T> visitor) { return visitor.visitScope(this); } public void addSymbol(ISymbol symbol) { if (symbol != null) { childSymbols.add(symbol); } } public void addSymbols(java.util.List<ISymbol> symbols) { if (symbols != null) { this.childSymbols.addAll(symbols); } } @Override public String getLabel() { return label; } @Override public ISourceLocation getLocation() { return location; } public String getName() { return scopeSymbol != null ? scopeSymbol.getName() : ""; } public ISymbol getScopeSymbol() { return scopeSymbol; } public List<ISymbol> getSymbols() { return childSymbols; } public String getType() { return scopeSymbol != null ? scopeSymbol.getType() : Symbol.symbol_type_void; } @Override public void setLabel(String label) { this.label = label; } @Override public String toString() { //scope(SymbolTree scopeSymbol, list[SymbolTree] children) //scope(list[SymbolTree] children) String childListString = ""; if (childSymbols.size() > 0) { for (ISymbol child : childSymbols) { if (!childListString.isEmpty()) childListString += ", "; childListString += child.toString(); } childListString = "[" + childListString + "]"; } if (childListString.isEmpty()) childListString = "[]"; if (scopeSymbol != null) { return String.format("scope(%s, %s)", scopeSymbol.toString(), childListString); } return String.format("scope(%s)", childListString); } @Override public String getAttribute(String key) { return null; } @Override public void setAttribute(String key, String value) {} }