public Destructurer(final Tree.Pattern that,final GenerateJsVisitor gen,final Set<Declaration> directAccess,final String expvar,boolean first,final boolean forAssert){
  this.gen=gen;
  jsw=gen == null ? null : gen.out;
  names=gen == null ? null : gen.getNames();
  this.directAccess=directAccess;
  this.expvar=expvar;
  this.first=first;
  this.forAssert=forAssert;
  that.visit(this);
  if (jsw != null && !attribs.isEmpty()) {
    for (    Value attr : attribs) {
      jsw.write(";",names.self((TypeDeclaration)attr.getContainer()),".",names.name(attr),"=",names.name(attr));
    }
  }
}

public Destructurer ( final Tree . Pattern that , final GenerateJsVisitor gen , final Set < Declaration > directAccess , final String expvar , boolean first , final boolean forAssert ) { this . gen = gen ; jsw = gen == null ? null : gen . out ; names = gen == null ? null : gen . getNames ( ) ; this . directAccess = directAccess ; this . expvar = expvar ; this . first = first ; this . forAssert = forAssert ; that . visit ( this ) ; if ( jsw != null && ! attribs . isEmpty ( ) ) { for ( Value attr : attribs ) { jsw . write ( ";" , names . self ( ( TypeDeclaration ) attr . getContainer ( ) ) , "." , names . name ( attr ) , "=" , names . name ( attr ) ) ; } } }
generate the code for the specified pattern . if null is passed instead of a generator , no code is output but the patterns are still visited and their declarations gathered .
