switch (tree) { case Alternative(_): result = true; break; case Bind(_, Tree pat): variables.add(tree.symbol()); traverse(pat); break; case Ident(_): Symbol symbol = tree.symbol(); if ((symbol != Global.instance.definitions.PATTERN_WILDCARD) && variables.contains(symbol)) result = true; break; case CaseDef(Tree pat, _, _): traverse(pat); break; default: super.traverse( tree ); }
switch (tree) { case Alternative(_): result = true; break; case Bind(_, Tree pat): if( TreeInfo.isEmptySequence( pat ) ) {   nilVariables.add(tree.symbol()); } else { variables.add(tree.symbol()); } traverse(pat); break; case Ident(_): Symbol symbol = tree.symbol(); if ((symbol != Global.instance.definitions.PATTERN_WILDCARD) && variables.contains(symbol)) result = true; break; case CaseDef(Tree pat, _, _): traverse(pat); break;  case Sequence( Tree[] trees):  traverse( trees ); result = true; break;  default: super.traverse( tree ); }
    public void traverse(Tree tree) {    	if (!result)			switch (tree) {				case Alternative(_):					result = true;					break;				case Bind(_, Tree pat):					variables.add(tree.symbol());					traverse(pat);					break;				case Ident(_):					Symbol symbol = tree.symbol();					if ((symbol != Global.instance.definitions.PATTERN_WILDCARD) &&					    variables.contains(symbol))						result = true;					break;				 case CaseDef(Tree pat, _, _):				     traverse(pat);            		break;				default:					super.traverse( tree );			}    }