package org.kohsuke.bali.automaton.builder; import java.util.HashSet; import java.util.Set; import org.kohsuke.bali.automaton.NameSignature; import com.sun.msv.grammar.AttributeExp; import com.sun.msv.grammar.ElementExp; import com.sun.msv.grammar.Expression; import com.sun.msv.grammar.ListExp; import com.sun.msv.grammar.ReferenceExp; import com.sun.msv.grammar.util.ExpressionWalker; /** * Collects all NameSignatures from attributes. * * @author Kohsuke Kawaguchi (kk@kohsuke.org) */ public class AttNameSigCollector extends ExpressionWalker { public static Set collect( Expression exp, NameClassEncoder enc ) { AttNameSigCollector ansc = new AttNameSigCollector(enc); exp.visit(ansc); return ansc.nameSignatures; } private AttNameSigCollector( NameClassEncoder enc ) { this.encoder = enc; } private final Set nameSignatures = new HashSet(); private final NameClassEncoder encoder; /** * @see com.sun.msv.grammar.ExpressionVisitorVoid#onAttribute(AttributeExp) */ public void onAttribute(AttributeExp exp) { nameSignatures.add( encoder.getSignature(exp.nameClass) ); } public void onElement(ElementExp exp) {} // no need to visit inside. It can't contain attributes public void onList(ListExp exp) {} }