if (tree.symbol().isPrimaryConstructor())
if (name == Names.WILDCARD) return mk.DefaultPat(tree.pos, header.type); else if (tree.symbol().isPrimaryConstructor())
    protected PatternNode patternNode(Tree tree, Header header, CaseEnv env) {        switch (tree) {            case Bind(Name name, Tree pat):            	PatternNode node = patternNode(pat, header, env);            	if ((env != null) && (name != Names.WILDCARD))					env.newBoundVar(tree.pos,									tree.symbol(),									tree.type,									header.selector);				return node;			case Apply(Tree fn, Tree[] args):             // pattern with args				if (args.length == 1 && (tree.type.symbol().flags & Modifiers.CASE) == 0)					switch (args[0]) {						case Sequence(Tree[] ts):							return mk.SequencePat( tree.pos, tree.type, ts.length );					}				return mk.ConstrPat(tree.pos, tree.type);			case Typed(Ident(Name name), Tree tpe):       // variable pattern				PatternNode node =					(header.type.isSubType(tpe.type)) ?					mk.DefaultPat(tree.pos, tpe.type)					: mk.ConstrPat(tree.pos, tpe.type);				if ((env != null) && (name != Names.WILDCARD))					switch (node) {						case ConstrPat(Symbol casted):							env.newBoundVar(tree.pos,											((Tree.Typed)tree).expr.symbol(),											tpe.type,											make.Ident(tree.pos, casted.name).											setType(casted.type()).											setSymbol(casted));							break;						default:							env.newBoundVar(tree.pos,											((Tree.Typed)tree).expr.symbol(),											tpe.type,											header.selector);					}				return node;			case Ident(Name name):                  // pattern without args or variable				if (tree.symbol().isPrimaryConstructor())					return mk.ConstrPat(tree.pos, tree.type);				else if (name.isVariable()) {					if ((env != null) && (name != Names.WILDCARD))						env.newBoundVar(tree.pos,										tree.symbol(),										tree.type,										header.selector);					return mk.DefaultPat(tree.pos, header.type);				} else					return mk.VariablePat(tree.pos, tree);			case Select(_, Name name):                                    // variable				if (tree.symbol().isPrimaryConstructor())					return mk.ConstrPat(tree.pos, tree.type);				else					return mk.VariablePat(tree.pos, tree);			case Literal(Object value):				return mk.ConstantPat(tree.pos, tree.type, value);			case Sequence(Tree[] ts):				return mk.SequencePat(tree.pos, tree.type, ts.length);			case Alternative(Tree[] ts): // CAN THIS WORK ?				assert ts.length > 0;				PatternNode res = patternNode( ts[ 0 ], header, env );				for (int i = 1; i < ts.length; i++) {					res.or = patternNode(ts[i], header, env);					res = res.or ;				}				return res;			default:				new scalac.ast.printer.TextTreePrinter().print(tree).flush();				throw new ApplicationError(tree);        }    }