Program: 27344
Project: 27344
Buggy source:
protected void add(Node n,Context context){
  if (!cc.continueProcessing()) {
    return;
  }
  if (preserveTypeAnnotations && n.getJSDocInfo() != null) {
    String jsdocAsString=JSDocInfoPrinter.print(n.getJSDocInfo());
    if (!jsdocAsString.equals("String_Node_Str")) {
      add(jsdocAsString);
    }
  }
  Token type=n.getToken();
  String opstr=NodeUtil.opToStr(type);
  int childCount=n.getChildCount();
  Node first=n.getFirstChild();
  Node last=n.getLastChild();
  if (opstr != null && first != last) {
    Preconditions.checkState(childCount == 2,"String_Node_Str",opstr,childCount);
    int p=NodeUtil.precedence(type);
    Context rhsContext=getContextForNoInOperator(context);
    boolean needsParens=(context == Context.START_OF_EXPR) && first.isObjectPattern();
    if (n.isAssign() && needsParens) {
      add("String_Node_Str");
    }
    if (NodeUtil.isAssignmentOp(n) || type == Token.EXPONENT) {
      addExpr(first,p + 1,context);
      cc.addOp(opstr,true);
      addExpr(last,p,rhsContext);
    }
 else {
      unrollBinaryOperator(n,type,opstr,context,rhsContext,p,p + 1);
    }
    if (n.isAssign() && needsParens) {
      add("String_Node_Str");
    }
    return;
  }
  cc.startSourceMapping(n);
switch (type) {
case TRY:
{
      Preconditions.checkState(first.getNext().isBlock() && !first.getNext().hasMoreThanOneChild());
      Preconditions.checkState(childCount >= 2 && childCount <= 3);
      add("String_Node_Str");
      add(first,Context.PRESERVE_BLOCK);
      Node catchblock=first.getNext().getFirstChild();
      if (catchblock != null) {
        add(catchblock);
      }
      if (childCount == 3) {
        cc.maybeInsertSpace();
        add("String_Node_Str");
        add(last,Context.PRESERVE_BLOCK);
      }
      break;
    }
case CATCH:
  Preconditions.checkState(childCount == 2);
cc.maybeInsertSpace();
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
add(last,Context.PRESERVE_BLOCK);
break;
case THROW:
Preconditions.checkState(childCount == 1);
add("String_Node_Str");
cc.maybeInsertSpace();
add(first);
cc.endStatement(true);
break;
case RETURN:
add("String_Node_Str");
if (childCount == 1) {
cc.maybeInsertSpace();
add(first);
}
 else {
Preconditions.checkState(childCount == 0);
}
cc.endStatement();
break;
case VAR:
if (first != null) {
add("String_Node_Str");
addList(first,false,getContextForNoInOperator(context),"String_Node_Str");
}
break;
case CONST:
add("String_Node_Str");
addList(first,false,getContextForNoInOperator(context),"String_Node_Str");
break;
case LET:
add("String_Node_Str");
addList(first,false,getContextForNoInOperator(context),"String_Node_Str");
break;
case LABEL_NAME:
Preconditions.checkState(!n.getString().isEmpty());
addIdentifier(n.getString());
break;
case DESTRUCTURING_LHS:
add(first);
if (first != last) {
Preconditions.checkState(childCount == 2);
cc.addOp("String_Node_Str",true);
add(last);
}
break;
case NAME:
if (useOriginalName && n.getOriginalName() != null) {
addIdentifier(n.getOriginalName());
}
 else {
addIdentifier(n.getString());
}
maybeAddOptional(n);
maybeAddTypeDecl(n);
if (first != null && !first.isEmpty()) {
Preconditions.checkState(childCount == 1);
cc.addOp("String_Node_Str",true);
if (first.isComma()) {
addExpr(first,NodeUtil.precedence(Token.ASSIGN),Context.OTHER);
}
 else {
addExpr(first,0,getContextForNoInOperator(context));
}
}
break;
case ARRAYLIT:
add("String_Node_Str");
addArrayList(first);
add("String_Node_Str");
break;
case ARRAY_PATTERN:
add("String_Node_Str");
addArrayList(first);
add("String_Node_Str");
maybeAddTypeDecl(n);
break;
case PARAM_LIST:
add("String_Node_Str");
addList(first);
add("String_Node_Str");
break;
case DEFAULT_VALUE:
add(first);
maybeAddTypeDecl(n);
cc.addOp("String_Node_Str",true);
add(first.getNext());
break;
case COMMA:
Preconditions.checkState(childCount == 2);
unrollBinaryOperator(n,Token.COMMA,"String_Node_Str",context,getContextForNoInOperator(context),0,0);
break;
case NUMBER:
Preconditions.checkState(childCount == 0);
cc.addNumber(n.getDouble());
break;
case TYPEOF:
case VOID:
case NOT:
case BITNOT:
case POS:
{
Preconditions.checkState(childCount == 1);
cc.addOp(NodeUtil.opToStrNoFail(type),false);
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
break;
}
case NEG:
{
Preconditions.checkState(childCount == 1);
if (n.getFirstChild().isNumber()) {
cc.addNumber(-n.getFirstChild().getDouble());
}
 else {
cc.addOp(NodeUtil.opToStrNoFail(type),false);
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
}
break;
}
case HOOK:
{
Preconditions.checkState(childCount == 3);
int p=NodeUtil.precedence(type);
Context rhsContext=getContextForNoInOperator(context);
addExpr(first,p + 1,context);
cc.addOp("String_Node_Str",true);
addExpr(first.getNext(),1,rhsContext);
cc.addOp("String_Node_Str",true);
addExpr(last,1,rhsContext);
break;
}
case REGEXP:
if (!first.isString() || !last.isString()) {
throw new Error("String_Node_Str");
}
String regexp=regexpEscape(first.getString());
if (childCount == 2) {
add(regexp + last.getString());
}
 else {
Preconditions.checkState(childCount == 1);
add(regexp);
}
break;
case FUNCTION:
{
if (n.getClass() != Node.class) {
throw new Error("String_Node_Str");
}
Preconditions.checkState(childCount == 3);
if (n.isArrowFunction()) {
addArrowFunction(n,first,last,context);
}
 else {
addFunction(n,first,last,context);
}
break;
}
case REST:
add("String_Node_Str");
add(first);
maybeAddTypeDecl(n);
break;
case SPREAD:
add("String_Node_Str");
add(n.getFirstChild());
break;
case EXPORT:
add("String_Node_Str");
if (n.getBooleanProp(Node.EXPORT_DEFAULT)) {
add("String_Node_Str");
}
if (n.getBooleanProp(Node.EXPORT_ALL_FROM)) {
add("String_Node_Str");
Preconditions.checkState(first != null && first.isEmpty());
}
 else {
add(first);
}
if (childCount == 2) {
add("String_Node_Str");
add(last);
}
processEnd(first,context);
break;
case IMPORT:
add("String_Node_Str");
Node second=first.getNext();
if (!first.isEmpty()) {
add(first);
if (!second.isEmpty()) {
cc.listSeparator();
}
}
if (!second.isEmpty()) {
add(second);
}
if (!first.isEmpty() || !second.isEmpty()) {
add("String_Node_Str");
}
add(last);
cc.endStatement();
break;
case EXPORT_SPECS:
case IMPORT_SPECS:
add("String_Node_Str");
for (Node c=first; c != null; c=c.getNext()) {
if (c != first) {
cc.listSeparator();
}
add(c);
}
add("String_Node_Str");
break;
case EXPORT_SPEC:
case IMPORT_SPEC:
add(first);
if (first != last) {
add("String_Node_Str");
add(last);
}
break;
case IMPORT_STAR:
add("String_Node_Str");
add("String_Node_Str");
add(n.getString());
break;
case CLASS:
{
Preconditions.checkState(childCount == 3);
boolean classNeedsParens=(context == Context.START_OF_EXPR);
if (classNeedsParens) {
add("String_Node_Str");
}
Node name=first;
Node superClass=first.getNext();
Node members=last;
add("String_Node_Str");
if (!name.isEmpty()) {
add(name);
}
maybeAddGenericTypes(first);
if (!superClass.isEmpty()) {
add("String_Node_Str");
add(superClass);
}
Node interfaces=(Node)n.getProp(Node.IMPLEMENTS);
if (interfaces != null) {
add("String_Node_Str");
Node child=interfaces.getFirstChild();
add(child);
while ((child=child.getNext()) != null) {
add("String_Node_Str");
cc.maybeInsertSpace();
add(child);
}
}
add(members);
cc.endClass(context == Context.STATEMENT);
if (classNeedsParens) {
add("String_Node_Str");
}
}
break;
case CLASS_MEMBERS:
case INTERFACE_MEMBERS:
case NAMESPACE_ELEMENTS:
cc.beginBlock();
for (Node c=first; c != null; c=c.getNext()) {
add(c);
processEnd(c,context);
cc.endLine();
}
cc.endBlock(false);
break;
case ENUM_MEMBERS:
cc.beginBlock();
for (Node c=first; c != null; c=c.getNext()) {
add(c);
if (c.getNext() != null) {
add("String_Node_Str");
}
cc.endLine();
}
cc.endBlock(false);
break;
case GETTER_DEF:
case SETTER_DEF:
case MEMBER_FUNCTION_DEF:
case MEMBER_VARIABLE_DEF:
{
n.getParent().toStringTree();
Preconditions.checkState(n.getParent().isObjectLit() || n.getParent().isClassMembers() || n.getParent().isInterfaceMembers()|| n.getParent().isRecordType()|| n.getParent().isIndexSignature());
maybeAddAccessibilityModifier(n);
if (n.isStaticMember()) {
add("String_Node_Str");
}
if (!n.isMemberVariableDef() && n.getFirstChild().isGeneratorFunction()) {
Preconditions.checkState(type == Token.MEMBER_FUNCTION_DEF);
add("String_Node_Str");
}
if (n.isMemberFunctionDef() && n.getFirstChild().isAsyncFunction()) {
add("String_Node_Str");
}
switch (type) {
case GETTER_DEF:
Preconditions.checkState(!first.getSecondChild().hasChildren());
add("String_Node_Str");
break;
case SETTER_DEF:
Preconditions.checkState(first.getSecondChild().hasOneChild());
add("String_Node_Str");
break;
case MEMBER_FUNCTION_DEF:
case MEMBER_VARIABLE_DEF:
break;
default :
break;
}
String name=n.getString();
if (n.isMemberVariableDef()) {
add(n.getString());
maybeAddOptional(n);
maybeAddTypeDecl(n);
}
 else {
Preconditions.checkState(childCount == 1);
Preconditions.checkState(first.isFunction());
Preconditions.checkState(first.getFirstChild().getString().isEmpty());
Node fn=first;
Node parameters=fn.getSecondChild();
Node body=fn.getLastChild();
if (!n.isQuotedString() && TokenStream.isJSIdentifier(name) && NodeUtil.isLatin(name)) {
add(name);
maybeAddGenericTypes(fn.getFirstChild());
}
 else {
double d=getSimpleNumber(name);
if (!Double.isNaN(d)) {
cc.addNumber(d);
}
 else {
addJsString(n);
}
}
maybeAddOptional(fn);
add(parameters);
maybeAddTypeDecl(fn);
add(body,Context.PRESERVE_BLOCK);
}
break;
}
case SCRIPT:
case MODULE_BODY:
case BLOCK:
{
if (n.getClass() != Node.class) {
throw new Error("String_Node_Str");
}
boolean preserveBlock=context == Context.PRESERVE_BLOCK;
if (preserveBlock) {
cc.beginBlock();
}
boolean preferLineBreaks=type == Token.SCRIPT || (type == Token.BLOCK && !preserveBlock && n.getParent() != null && n.getParent().isScript());
for (Node c=first; c != null; c=c.getNext()) {
add(c,Context.STATEMENT);
if (NodeUtil.isNameDeclaration(c)) {
cc.endStatement();
}
if (c.isFunction() || c.isClass()) {
cc.maybeLineBreak();
}
if (preferLineBreaks) {
cc.notePreferredLineBreak();
}
}
if (preserveBlock) {
cc.endBlock(cc.breakAfterBlockFor(n,context == Context.STATEMENT));
}
break;
}
case FOR:
if (childCount == 4) {
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
if (NodeUtil.isNameDeclaration(first)) {
add(first,Context.IN_FOR_INIT_CLAUSE);
}
 else {
addExpr(first,0,Context.IN_FOR_INIT_CLAUSE);
}
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
add(first.getNext().getNext());
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
}
 else {
Preconditions.checkState(childCount == 3);
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
}
break;
case FOR_OF:
Preconditions.checkState(childCount == 3);
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
break;
case DO:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
addNonEmptyStatement(first,Context.OTHER,false);
cc.maybeInsertSpace();
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(last);
add("String_Node_Str");
cc.endStatement();
break;
case WHILE:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
break;
case EMPTY:
Preconditions.checkState(childCount == 0);
break;
case GETPROP:
{
Preconditions.checkState(childCount == 2,"String_Node_Str",childCount);
Preconditions.checkState(last.isString(),"String_Node_Str");
boolean needsParens=(first.isNumber());
if (needsParens) {
add("String_Node_Str");
}
addExpr(first,NodeUtil.precedence(type),context);
if (needsParens) {
add("String_Node_Str");
}
if (quoteKeywordProperties && TokenStream.isKeyword(last.getString())) {
add("String_Node_Str");
add(last);
add("String_Node_Str");
}
 else {
add("String_Node_Str");
addIdentifier(last.getString());
}
break;
}
case GETELEM:
Preconditions.checkState(childCount == 2,"String_Node_Str",childCount,n);
addExpr(first,NodeUtil.precedence(type),context);
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
break;
case WITH:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
add(first);
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
break;
case INC:
case DEC:
{
Preconditions.checkState(childCount == 1);
String o=type == Token.INC ? "String_Node_Str" : "String_Node_Str";
boolean postProp=n.getBooleanProp(Node.INCRDECR_PROP);
if (postProp) {
addExpr(first,NodeUtil.precedence(type),context);
cc.addOp(o,false);
}
 else {
cc.addOp(o,false);
add(first);
}
break;
}
case CALL:
if (isIndirectEval(first) || (n.getBooleanProp(Node.FREE_CALL) && NodeUtil.isGet(first))) {
add("String_Node_Str");
addExpr(first,NodeUtil.precedence(Token.COMMA),Context.OTHER);
add("String_Node_Str");
}
 else {
addExpr(first,NodeUtil.precedence(type),context);
}
Node args=first.getNext();
add("String_Node_Str");
addList(args);
add("String_Node_Str");
break;
case IF:
boolean hasElse=childCount == 3;
boolean ambiguousElseClause=context == Context.BEFORE_DANGLING_ELSE && !hasElse;
if (ambiguousElseClause) {
cc.beginBlock();
}
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
if (childCount == 1) {
break;
}
if (hasElse) {
addNonEmptyStatement(first.getNext(),Context.BEFORE_DANGLING_ELSE,false);
cc.maybeInsertSpace();
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
}
 else {
addNonEmptyStatement(first.getNext(),Context.OTHER,false);
Preconditions.checkState(childCount == 2);
}
if (ambiguousElseClause) {
cc.endBlock();
}
break;
case NULL:
Preconditions.checkState(childCount == 0);
cc.addConstant("String_Node_Str");
break;
case THIS:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
break;
case SUPER:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
break;
case NEW_TARGET:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
break;
case YIELD:
add("String_Node_Str");
if (n.isYieldFor()) {
Preconditions.checkNotNull(first);
add("String_Node_Str");
}
if (first != null) {
cc.maybeInsertSpace();
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
}
break;
case AWAIT:
add("String_Node_Str");
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
break;
case FALSE:
Preconditions.checkState(childCount == 0);
cc.addConstant("String_Node_Str");
break;
case TRUE:
Preconditions.checkState(childCount == 0);
cc.addConstant("String_Node_Str");
break;
case CONTINUE:
Preconditions.checkState(childCount <= 1);
add("String_Node_Str");
if (childCount == 1) {
if (!first.isLabelName()) {
throw new Error("String_Node_Str");
}
add("String_Node_Str");
add(first);
}
cc.endStatement();
break;
case DEBUGGER:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
cc.endStatement();
break;
case BREAK:
Preconditions.checkState(childCount <= 1);
add("String_Node_Str");
if (childCount == 1) {
if (!first.isLabelName()) {
throw new Error("String_Node_Str");
}
add("String_Node_Str");
add(first);
}
cc.endStatement();
break;
case EXPR_RESULT:
Preconditions.checkState(childCount == 1);
add(first,Context.START_OF_EXPR);
cc.endStatement();
break;
case NEW:
add("String_Node_Str");
int precedence=NodeUtil.precedence(type);
if (NodeUtil.containsType(first,Token.CALL,NodeUtil.MATCH_NOT_FUNCTION)) {
precedence=NodeUtil.precedence(first.getToken()) + 1;
}
addExpr(first,precedence,Context.OTHER);
Node next=first.getNext();
if (next != null) {
add("String_Node_Str");
addList(next);
add("String_Node_Str");
}
break;
case STRING_KEY:
addStringKey(n);
break;
case STRING:
Preconditions.checkState(childCount == 0,"String_Node_Str");
addJsString(n);
break;
case DELPROP:
Preconditions.checkState(childCount == 1);
add("String_Node_Str");
add(first);
break;
case OBJECTLIT:
{
boolean needsParens=(context == Context.START_OF_EXPR);
if (needsParens) {
add("String_Node_Str");
}
add("String_Node_Str");
for (Node c=first; c != null; c=c.getNext()) {
if (c != first) {
cc.listSeparator();
}
Preconditions.checkState(c.isComputedProp() || c.isGetterDef() || c.isSetterDef()|| c.isStringKey()|| c.isMemberFunctionDef());
add(c);
}
add("String_Node_Str");
if (needsParens) {
add("String_Node_Str");
}
break;
}
case COMPUTED_PROP:
maybeAddAccessibilityModifier(n);
if (n.getBooleanProp(Node.STATIC_MEMBER)) {
add("String_Node_Str");
}
if (n.getBooleanProp(Node.COMPUTED_PROP_GETTER)) {
add("String_Node_Str");
}
 else if (n.getBooleanProp(Node.COMPUTED_PROP_SETTER)) {
add("String_Node_Str");
}
 else if (last.getBooleanProp(Node.GENERATOR_FN)) {
add("String_Node_Str");
}
 else if (last.isAsyncFunction()) {
add("String_Node_Str");
}
add("String_Node_Str");
add(first);
add("String_Node_Str");
maybeAddTypeDecl(n);
if (n.getBooleanProp(Node.COMPUTED_PROP_METHOD) || n.getBooleanProp(Node.COMPUTED_PROP_GETTER) || n.getBooleanProp(Node.COMPUTED_PROP_SETTER)) {
Node function=first.getNext();
Node params=function.getSecondChild();
Node body=function.getLastChild();
add(params);
add(body,Context.PRESERVE_BLOCK);
}
 else {
boolean isInClass=n.getParent().getToken() == Token.CLASS_MEMBERS;
Node initializer=first.getNext();
if (initializer != null) {
Preconditions.checkState(!isInClass,"String_Node_Str");
cc.addOp("String_Node_Str",false);
add(initializer);
}
 else {
Preconditions.checkState(n.getBooleanProp(Node.COMPUTED_PROP_VARIABLE),n);
}
}
break;
case OBJECT_PATTERN:
addObjectPattern(n);
maybeAddTypeDecl(n);
break;
case SWITCH:
add("String_Node_Str");
add(first);
add("String_Node_Str");
cc.beginBlock();
addAllSiblings(first.getNext());
cc.endBlock(context == Context.STATEMENT);
break;
case CASE:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
add(first);
addCaseBody(last);
break;
case DEFAULT_CASE:
Preconditions.checkState(childCount == 1);
add("String_Node_Str");
addCaseBody(first);
break;
case LABEL:
Preconditions.checkState(childCount == 2);
if (!first.isLabelName()) {
throw new Error("String_Node_Str");
}
add(first);
add("String_Node_Str");
if (!last.isBlock()) {
cc.maybeInsertSpace();
}
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),true);
break;
case CAST:
add("String_Node_Str");
add(first);
add("String_Node_Str");
break;
case TAGGED_TEMPLATELIT:
add(first,Context.START_OF_EXPR);
add(first.getNext());
break;
case TEMPLATELIT:
add("String_Node_Str");
for (Node c=first; c != null; c=c.getNext()) {
if (c.isString()) {
add(strEscape(c.getString(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str",false,false));
}
 else {
cc.append("String_Node_Str");
add(c.getFirstChild(),Context.START_OF_EXPR);
add("String_Node_Str");
}
}
add("String_Node_Str");
break;
case STRING_TYPE:
add("String_Node_Str");
break;
case BOOLEAN_TYPE:
add("String_Node_Str");
break;
case NUMBER_TYPE:
add("String_Node_Str");
break;
case ANY_TYPE:
add("String_Node_Str");
break;
case VOID_TYPE:
add("String_Node_Str");
break;
case NAMED_TYPE:
add(first);
break;
case ARRAY_TYPE:
addExpr(first,NodeUtil.precedence(Token.ARRAY_TYPE),context);
add("String_Node_Str");
break;
case FUNCTION_TYPE:
Node returnType=first;
add("String_Node_Str");
addList(first.getNext());
add("String_Node_Str");
cc.addOp("String_Node_Str",true);
add(returnType);
break;
case UNION_TYPE:
addList(first,"String_Node_Str");
break;
case RECORD_TYPE:
add("String_Node_Str");
addList(first,false,Context.OTHER,"String_Node_Str");
add("String_Node_Str");
break;
case PARAMETERIZED_TYPE:
add(first);
add("String_Node_Str");
addList(first.getNext());
add("String_Node_Str");
break;
case GENERIC_TYPE_LIST:
add("String_Node_Str");
addList(first,false,Context.STATEMENT,"String_Node_Str");
add("String_Node_Str");
break;
case GENERIC_TYPE:
addIdentifier(n.getString());
if (n.hasChildren()) {
add("String_Node_Str");
cc.maybeInsertSpace();
add(n.getFirstChild());
}
break;
case INTERFACE:
{
Preconditions.checkState(childCount == 3);
Node name=first;
Node superTypes=first.getNext();
Node members=last;
add("String_Node_Str");
add(name);
maybeAddGenericTypes(name);
if (!superTypes.isEmpty()) {
add("String_Node_Str");
Node superType=superTypes.getFirstChild();
add(superType);
while ((superType=superType.getNext()) != null) {
add("String_Node_Str");
cc.maybeInsertSpace();
add(superType);
}
}
add(members);
}
break;
case ENUM:
{
Preconditions.checkState(childCount == 2);
Node name=first;
Node members=last;
add("String_Node_Str");
add(name);
add(members);
break;
}
case NAMESPACE:
{
Preconditions.checkState(childCount == 2);
Node name=first;
Node elements=last;
add("String_Node_Str");
add(name);
add(elements);
break;
}
case TYPE_ALIAS:
add("String_Node_Str");
add(n.getString());
cc.addOp("String_Node_Str",true);
add(last);
cc.endStatement(true);
break;
case DECLARE:
add("String_Node_Str");
add(first);
processEnd(n,context);
break;
case INDEX_SIGNATURE:
add("String_Node_Str");
add(first);
add("String_Node_Str");
maybeAddTypeDecl(n);
cc.endStatement(true);
break;
case CALL_SIGNATURE:
if (n.getBooleanProp(Node.CONSTRUCT_SIGNATURE)) {
add("String_Node_Str");
}
maybeAddGenericTypes(n);
add(first);
maybeAddTypeDecl(n);
cc.endStatement(true);
break;
default :
throw new RuntimeException("String_Node_Str" + type + "String_Node_Str"+ n.toStringTree());
}
cc.endSourceMapping(n);
}

Fixed version (ground truth):
protected void add(Node n,Context context){
  if (!cc.continueProcessing()) {
    return;
  }
  if (preserveTypeAnnotations && n.getJSDocInfo() != null) {
    String jsdocAsString=jsDocInfoPrinter.print(n.getJSDocInfo());
    if (!jsdocAsString.equals("String_Node_Str")) {
      add(jsdocAsString);
    }
  }
  Token type=n.getToken();
  String opstr=NodeUtil.opToStr(type);
  int childCount=n.getChildCount();
  Node first=n.getFirstChild();
  Node last=n.getLastChild();
  if (opstr != null && first != last) {
    Preconditions.checkState(childCount == 2,"String_Node_Str",opstr,childCount);
    int p=NodeUtil.precedence(type);
    Context rhsContext=getContextForNoInOperator(context);
    boolean needsParens=(context == Context.START_OF_EXPR) && first.isObjectPattern();
    if (n.isAssign() && needsParens) {
      add("String_Node_Str");
    }
    if (NodeUtil.isAssignmentOp(n) || type == Token.EXPONENT) {
      addExpr(first,p + 1,context);
      cc.addOp(opstr,true);
      addExpr(last,p,rhsContext);
    }
 else {
      unrollBinaryOperator(n,type,opstr,context,rhsContext,p,p + 1);
    }
    if (n.isAssign() && needsParens) {
      add("String_Node_Str");
    }
    return;
  }
  cc.startSourceMapping(n);
switch (type) {
case TRY:
{
      Preconditions.checkState(first.getNext().isBlock() && !first.getNext().hasMoreThanOneChild());
      Preconditions.checkState(childCount >= 2 && childCount <= 3);
      add("String_Node_Str");
      add(first,Context.PRESERVE_BLOCK);
      Node catchblock=first.getNext().getFirstChild();
      if (catchblock != null) {
        add(catchblock);
      }
      if (childCount == 3) {
        cc.maybeInsertSpace();
        add("String_Node_Str");
        add(last,Context.PRESERVE_BLOCK);
      }
      break;
    }
case CATCH:
  Preconditions.checkState(childCount == 2);
cc.maybeInsertSpace();
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
add(last,Context.PRESERVE_BLOCK);
break;
case THROW:
Preconditions.checkState(childCount == 1);
add("String_Node_Str");
cc.maybeInsertSpace();
add(first);
cc.endStatement(true);
break;
case RETURN:
add("String_Node_Str");
if (childCount == 1) {
cc.maybeInsertSpace();
add(first);
}
 else {
Preconditions.checkState(childCount == 0);
}
cc.endStatement();
break;
case VAR:
if (first != null) {
add("String_Node_Str");
addList(first,false,getContextForNoInOperator(context),"String_Node_Str");
}
break;
case CONST:
add("String_Node_Str");
addList(first,false,getContextForNoInOperator(context),"String_Node_Str");
break;
case LET:
add("String_Node_Str");
addList(first,false,getContextForNoInOperator(context),"String_Node_Str");
break;
case LABEL_NAME:
Preconditions.checkState(!n.getString().isEmpty());
addIdentifier(n.getString());
break;
case DESTRUCTURING_LHS:
add(first);
if (first != last) {
Preconditions.checkState(childCount == 2);
cc.addOp("String_Node_Str",true);
add(last);
}
break;
case NAME:
if (useOriginalName && n.getOriginalName() != null) {
addIdentifier(n.getOriginalName());
}
 else {
addIdentifier(n.getString());
}
maybeAddOptional(n);
maybeAddTypeDecl(n);
if (first != null && !first.isEmpty()) {
Preconditions.checkState(childCount == 1);
cc.addOp("String_Node_Str",true);
if (first.isComma()) {
addExpr(first,NodeUtil.precedence(Token.ASSIGN),Context.OTHER);
}
 else {
addExpr(first,0,getContextForNoInOperator(context));
}
}
break;
case ARRAYLIT:
add("String_Node_Str");
addArrayList(first);
add("String_Node_Str");
break;
case ARRAY_PATTERN:
add("String_Node_Str");
addArrayList(first);
add("String_Node_Str");
maybeAddTypeDecl(n);
break;
case PARAM_LIST:
add("String_Node_Str");
addList(first);
add("String_Node_Str");
break;
case DEFAULT_VALUE:
add(first);
maybeAddTypeDecl(n);
cc.addOp("String_Node_Str",true);
add(first.getNext());
break;
case COMMA:
Preconditions.checkState(childCount == 2);
unrollBinaryOperator(n,Token.COMMA,"String_Node_Str",context,getContextForNoInOperator(context),0,0);
break;
case NUMBER:
Preconditions.checkState(childCount == 0);
cc.addNumber(n.getDouble());
break;
case TYPEOF:
case VOID:
case NOT:
case BITNOT:
case POS:
{
Preconditions.checkState(childCount == 1);
cc.addOp(NodeUtil.opToStrNoFail(type),false);
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
break;
}
case NEG:
{
Preconditions.checkState(childCount == 1);
if (n.getFirstChild().isNumber()) {
cc.addNumber(-n.getFirstChild().getDouble());
}
 else {
cc.addOp(NodeUtil.opToStrNoFail(type),false);
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
}
break;
}
case HOOK:
{
Preconditions.checkState(childCount == 3);
int p=NodeUtil.precedence(type);
Context rhsContext=getContextForNoInOperator(context);
addExpr(first,p + 1,context);
cc.addOp("String_Node_Str",true);
addExpr(first.getNext(),1,rhsContext);
cc.addOp("String_Node_Str",true);
addExpr(last,1,rhsContext);
break;
}
case REGEXP:
if (!first.isString() || !last.isString()) {
throw new Error("String_Node_Str");
}
String regexp=regexpEscape(first.getString());
if (childCount == 2) {
add(regexp + last.getString());
}
 else {
Preconditions.checkState(childCount == 1);
add(regexp);
}
break;
case FUNCTION:
{
if (n.getClass() != Node.class) {
throw new Error("String_Node_Str");
}
Preconditions.checkState(childCount == 3);
if (n.isArrowFunction()) {
addArrowFunction(n,first,last,context);
}
 else {
addFunction(n,first,last,context);
}
break;
}
case REST:
add("String_Node_Str");
add(first);
maybeAddTypeDecl(n);
break;
case SPREAD:
add("String_Node_Str");
add(n.getFirstChild());
break;
case EXPORT:
add("String_Node_Str");
if (n.getBooleanProp(Node.EXPORT_DEFAULT)) {
add("String_Node_Str");
}
if (n.getBooleanProp(Node.EXPORT_ALL_FROM)) {
add("String_Node_Str");
Preconditions.checkState(first != null && first.isEmpty());
}
 else {
add(first);
}
if (childCount == 2) {
add("String_Node_Str");
add(last);
}
processEnd(first,context);
break;
case IMPORT:
add("String_Node_Str");
Node second=first.getNext();
if (!first.isEmpty()) {
add(first);
if (!second.isEmpty()) {
cc.listSeparator();
}
}
if (!second.isEmpty()) {
add(second);
}
if (!first.isEmpty() || !second.isEmpty()) {
add("String_Node_Str");
}
add(last);
cc.endStatement();
break;
case EXPORT_SPECS:
case IMPORT_SPECS:
add("String_Node_Str");
for (Node c=first; c != null; c=c.getNext()) {
if (c != first) {
cc.listSeparator();
}
add(c);
}
add("String_Node_Str");
break;
case EXPORT_SPEC:
case IMPORT_SPEC:
add(first);
if (first != last) {
add("String_Node_Str");
add(last);
}
break;
case IMPORT_STAR:
add("String_Node_Str");
add("String_Node_Str");
add(n.getString());
break;
case CLASS:
{
Preconditions.checkState(childCount == 3);
boolean classNeedsParens=(context == Context.START_OF_EXPR);
if (classNeedsParens) {
add("String_Node_Str");
}
Node name=first;
Node superClass=first.getNext();
Node members=last;
add("String_Node_Str");
if (!name.isEmpty()) {
add(name);
}
maybeAddGenericTypes(first);
if (!superClass.isEmpty()) {
add("String_Node_Str");
add(superClass);
}
Node interfaces=(Node)n.getProp(Node.IMPLEMENTS);
if (interfaces != null) {
add("String_Node_Str");
Node child=interfaces.getFirstChild();
add(child);
while ((child=child.getNext()) != null) {
add("String_Node_Str");
cc.maybeInsertSpace();
add(child);
}
}
add(members);
cc.endClass(context == Context.STATEMENT);
if (classNeedsParens) {
add("String_Node_Str");
}
}
break;
case CLASS_MEMBERS:
case INTERFACE_MEMBERS:
case NAMESPACE_ELEMENTS:
cc.beginBlock();
for (Node c=first; c != null; c=c.getNext()) {
add(c);
processEnd(c,context);
cc.endLine();
}
cc.endBlock(false);
break;
case ENUM_MEMBERS:
cc.beginBlock();
for (Node c=first; c != null; c=c.getNext()) {
add(c);
if (c.getNext() != null) {
add("String_Node_Str");
}
cc.endLine();
}
cc.endBlock(false);
break;
case GETTER_DEF:
case SETTER_DEF:
case MEMBER_FUNCTION_DEF:
case MEMBER_VARIABLE_DEF:
{
n.getParent().toStringTree();
Preconditions.checkState(n.getParent().isObjectLit() || n.getParent().isClassMembers() || n.getParent().isInterfaceMembers()|| n.getParent().isRecordType()|| n.getParent().isIndexSignature());
maybeAddAccessibilityModifier(n);
if (n.isStaticMember()) {
add("String_Node_Str");
}
if (!n.isMemberVariableDef() && n.getFirstChild().isGeneratorFunction()) {
Preconditions.checkState(type == Token.MEMBER_FUNCTION_DEF);
add("String_Node_Str");
}
if (n.isMemberFunctionDef() && n.getFirstChild().isAsyncFunction()) {
add("String_Node_Str");
}
switch (type) {
case GETTER_DEF:
Preconditions.checkState(!first.getSecondChild().hasChildren());
add("String_Node_Str");
break;
case SETTER_DEF:
Preconditions.checkState(first.getSecondChild().hasOneChild());
add("String_Node_Str");
break;
case MEMBER_FUNCTION_DEF:
case MEMBER_VARIABLE_DEF:
break;
default :
break;
}
String name=n.getString();
if (n.isMemberVariableDef()) {
add(n.getString());
maybeAddOptional(n);
maybeAddTypeDecl(n);
}
 else {
Preconditions.checkState(childCount == 1);
Preconditions.checkState(first.isFunction());
Preconditions.checkState(first.getFirstChild().getString().isEmpty());
Node fn=first;
Node parameters=fn.getSecondChild();
Node body=fn.getLastChild();
if (!n.isQuotedString() && TokenStream.isJSIdentifier(name) && NodeUtil.isLatin(name)) {
add(name);
maybeAddGenericTypes(fn.getFirstChild());
}
 else {
double d=getSimpleNumber(name);
if (!Double.isNaN(d)) {
cc.addNumber(d);
}
 else {
addJsString(n);
}
}
maybeAddOptional(fn);
add(parameters);
maybeAddTypeDecl(fn);
add(body,Context.PRESERVE_BLOCK);
}
break;
}
case SCRIPT:
case MODULE_BODY:
case BLOCK:
{
if (n.getClass() != Node.class) {
throw new Error("String_Node_Str");
}
boolean preserveBlock=context == Context.PRESERVE_BLOCK;
if (preserveBlock) {
cc.beginBlock();
}
boolean preferLineBreaks=type == Token.SCRIPT || (type == Token.BLOCK && !preserveBlock && n.getParent() != null && n.getParent().isScript());
for (Node c=first; c != null; c=c.getNext()) {
add(c,Context.STATEMENT);
if (NodeUtil.isNameDeclaration(c)) {
cc.endStatement();
}
if (c.isFunction() || c.isClass()) {
cc.maybeLineBreak();
}
if (preferLineBreaks) {
cc.notePreferredLineBreak();
}
}
if (preserveBlock) {
cc.endBlock(cc.breakAfterBlockFor(n,context == Context.STATEMENT));
}
break;
}
case FOR:
if (childCount == 4) {
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
if (NodeUtil.isNameDeclaration(first)) {
add(first,Context.IN_FOR_INIT_CLAUSE);
}
 else {
addExpr(first,0,Context.IN_FOR_INIT_CLAUSE);
}
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
add(first.getNext().getNext());
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
}
 else {
Preconditions.checkState(childCount == 3);
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
}
break;
case FOR_OF:
Preconditions.checkState(childCount == 3);
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
break;
case DO:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
addNonEmptyStatement(first,Context.OTHER,false);
cc.maybeInsertSpace();
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(last);
add("String_Node_Str");
cc.endStatement();
break;
case WHILE:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
break;
case EMPTY:
Preconditions.checkState(childCount == 0);
break;
case GETPROP:
{
if (useOriginalName && n.getOriginalName() != null) {
if (n.getFirstChild().matchesQualifiedName("String_Node_Str") && n.getParent().isAssign()) {
add("String_Node_Str");
}
addIdentifier(n.getOriginalName());
break;
}
Preconditions.checkState(childCount == 2,"String_Node_Str",childCount);
Preconditions.checkState(last.isString(),"String_Node_Str");
boolean needsParens=(first.isNumber());
if (needsParens) {
add("String_Node_Str");
}
addExpr(first,NodeUtil.precedence(type),context);
if (needsParens) {
add("String_Node_Str");
}
if (quoteKeywordProperties && TokenStream.isKeyword(last.getString())) {
add("String_Node_Str");
add(last);
add("String_Node_Str");
}
 else {
add("String_Node_Str");
addIdentifier(last.getString());
}
break;
}
case GETELEM:
Preconditions.checkState(childCount == 2,"String_Node_Str",childCount,n);
addExpr(first,NodeUtil.precedence(type),context);
add("String_Node_Str");
add(first.getNext());
add("String_Node_Str");
break;
case WITH:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
add(first);
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
break;
case INC:
case DEC:
{
Preconditions.checkState(childCount == 1);
String o=type == Token.INC ? "String_Node_Str" : "String_Node_Str";
boolean postProp=n.getBooleanProp(Node.INCRDECR_PROP);
if (postProp) {
addExpr(first,NodeUtil.precedence(type),context);
cc.addOp(o,false);
}
 else {
cc.addOp(o,false);
add(first);
}
break;
}
case CALL:
if (isIndirectEval(first) || (n.getBooleanProp(Node.FREE_CALL) && NodeUtil.isGet(first))) {
add("String_Node_Str");
addExpr(first,NodeUtil.precedence(Token.COMMA),Context.OTHER);
add("String_Node_Str");
}
 else {
addExpr(first,NodeUtil.precedence(type),context);
}
Node args=first.getNext();
add("String_Node_Str");
addList(args);
add("String_Node_Str");
break;
case IF:
boolean hasElse=childCount == 3;
boolean ambiguousElseClause=context == Context.BEFORE_DANGLING_ELSE && !hasElse;
if (ambiguousElseClause) {
cc.beginBlock();
}
add("String_Node_Str");
cc.maybeInsertSpace();
add("String_Node_Str");
add(first);
add("String_Node_Str");
if (childCount == 1) {
break;
}
if (hasElse) {
addNonEmptyStatement(first.getNext(),Context.BEFORE_DANGLING_ELSE,false);
cc.maybeInsertSpace();
add("String_Node_Str");
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),false);
}
 else {
addNonEmptyStatement(first.getNext(),Context.OTHER,false);
Preconditions.checkState(childCount == 2);
}
if (ambiguousElseClause) {
cc.endBlock();
}
break;
case NULL:
Preconditions.checkState(childCount == 0);
cc.addConstant("String_Node_Str");
break;
case THIS:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
break;
case SUPER:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
break;
case NEW_TARGET:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
break;
case YIELD:
add("String_Node_Str");
if (n.isYieldFor()) {
Preconditions.checkNotNull(first);
add("String_Node_Str");
}
if (first != null) {
cc.maybeInsertSpace();
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
}
break;
case AWAIT:
add("String_Node_Str");
addExpr(first,NodeUtil.precedence(type),Context.OTHER);
break;
case FALSE:
Preconditions.checkState(childCount == 0);
cc.addConstant("String_Node_Str");
break;
case TRUE:
Preconditions.checkState(childCount == 0);
cc.addConstant("String_Node_Str");
break;
case CONTINUE:
Preconditions.checkState(childCount <= 1);
add("String_Node_Str");
if (childCount == 1) {
if (!first.isLabelName()) {
throw new Error("String_Node_Str");
}
add("String_Node_Str");
add(first);
}
cc.endStatement();
break;
case DEBUGGER:
Preconditions.checkState(childCount == 0);
add("String_Node_Str");
cc.endStatement();
break;
case BREAK:
Preconditions.checkState(childCount <= 1);
add("String_Node_Str");
if (childCount == 1) {
if (!first.isLabelName()) {
throw new Error("String_Node_Str");
}
add("String_Node_Str");
add(first);
}
cc.endStatement();
break;
case EXPR_RESULT:
Preconditions.checkState(childCount == 1);
add(first,Context.START_OF_EXPR);
cc.endStatement();
break;
case NEW:
add("String_Node_Str");
int precedence=NodeUtil.precedence(type);
if (NodeUtil.containsType(first,Token.CALL,NodeUtil.MATCH_NOT_FUNCTION)) {
precedence=NodeUtil.precedence(first.getToken()) + 1;
}
addExpr(first,precedence,Context.OTHER);
Node next=first.getNext();
if (next != null) {
add("String_Node_Str");
addList(next);
add("String_Node_Str");
}
break;
case STRING_KEY:
addStringKey(n);
break;
case STRING:
Preconditions.checkState(childCount == 0,"String_Node_Str");
addJsString(n);
break;
case DELPROP:
Preconditions.checkState(childCount == 1);
add("String_Node_Str");
add(first);
break;
case OBJECTLIT:
{
boolean needsParens=(context == Context.START_OF_EXPR);
if (needsParens) {
add("String_Node_Str");
}
add("String_Node_Str");
for (Node c=first; c != null; c=c.getNext()) {
if (c != first) {
cc.listSeparator();
}
Preconditions.checkState(c.isComputedProp() || c.isGetterDef() || c.isSetterDef()|| c.isStringKey()|| c.isMemberFunctionDef());
add(c);
}
add("String_Node_Str");
if (needsParens) {
add("String_Node_Str");
}
break;
}
case COMPUTED_PROP:
maybeAddAccessibilityModifier(n);
if (n.getBooleanProp(Node.STATIC_MEMBER)) {
add("String_Node_Str");
}
if (n.getBooleanProp(Node.COMPUTED_PROP_GETTER)) {
add("String_Node_Str");
}
 else if (n.getBooleanProp(Node.COMPUTED_PROP_SETTER)) {
add("String_Node_Str");
}
 else if (last.getBooleanProp(Node.GENERATOR_FN)) {
add("String_Node_Str");
}
 else if (last.isAsyncFunction()) {
add("String_Node_Str");
}
add("String_Node_Str");
add(first);
add("String_Node_Str");
maybeAddTypeDecl(n);
if (n.getBooleanProp(Node.COMPUTED_PROP_METHOD) || n.getBooleanProp(Node.COMPUTED_PROP_GETTER) || n.getBooleanProp(Node.COMPUTED_PROP_SETTER)) {
Node function=first.getNext();
Node params=function.getSecondChild();
Node body=function.getLastChild();
add(params);
add(body,Context.PRESERVE_BLOCK);
}
 else {
boolean isInClass=n.getParent().getToken() == Token.CLASS_MEMBERS;
Node initializer=first.getNext();
if (initializer != null) {
Preconditions.checkState(!isInClass,"String_Node_Str");
cc.addOp("String_Node_Str",false);
add(initializer);
}
 else {
Preconditions.checkState(n.getBooleanProp(Node.COMPUTED_PROP_VARIABLE),n);
}
}
break;
case OBJECT_PATTERN:
addObjectPattern(n);
maybeAddTypeDecl(n);
break;
case SWITCH:
add("String_Node_Str");
add(first);
add("String_Node_Str");
cc.beginBlock();
addAllSiblings(first.getNext());
cc.endBlock(context == Context.STATEMENT);
break;
case CASE:
Preconditions.checkState(childCount == 2);
add("String_Node_Str");
add(first);
addCaseBody(last);
break;
case DEFAULT_CASE:
Preconditions.checkState(childCount == 1);
add("String_Node_Str");
addCaseBody(first);
break;
case LABEL:
Preconditions.checkState(childCount == 2);
if (!first.isLabelName()) {
throw new Error("String_Node_Str");
}
add(first);
add("String_Node_Str");
if (!last.isBlock()) {
cc.maybeInsertSpace();
}
addNonEmptyStatement(last,getContextForNonEmptyExpression(context),true);
break;
case CAST:
add("String_Node_Str");
add(first);
add("String_Node_Str");
break;
case TAGGED_TEMPLATELIT:
add(first,Context.START_OF_EXPR);
add(first.getNext());
break;
case TEMPLATELIT:
add("String_Node_Str");
for (Node c=first; c != null; c=c.getNext()) {
if (c.isString()) {
add(strEscape(c.getString(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str",false,false));
}
 else {
cc.append("String_Node_Str");
add(c.getFirstChild(),Context.START_OF_EXPR);
add("String_Node_Str");
}
}
add("String_Node_Str");
break;
case STRING_TYPE:
add("String_Node_Str");
break;
case BOOLEAN_TYPE:
add("String_Node_Str");
break;
case NUMBER_TYPE:
add("String_Node_Str");
break;
case ANY_TYPE:
add("String_Node_Str");
break;
case VOID_TYPE:
add("String_Node_Str");
break;
case NAMED_TYPE:
add(first);
break;
case ARRAY_TYPE:
addExpr(first,NodeUtil.precedence(Token.ARRAY_TYPE),context);
add("String_Node_Str");
break;
case FUNCTION_TYPE:
Node returnType=first;
add("String_Node_Str");
addList(first.getNext());
add("String_Node_Str");
cc.addOp("String_Node_Str",true);
add(returnType);
break;
case UNION_TYPE:
addList(first,"String_Node_Str");
break;
case RECORD_TYPE:
add("String_Node_Str");
addList(first,false,Context.OTHER,"String_Node_Str");
add("String_Node_Str");
break;
case PARAMETERIZED_TYPE:
add(first);
add("String_Node_Str");
addList(first.getNext());
add("String_Node_Str");
break;
case GENERIC_TYPE_LIST:
add("String_Node_Str");
addList(first,false,Context.STATEMENT,"String_Node_Str");
add("String_Node_Str");
break;
case GENERIC_TYPE:
addIdentifier(n.getString());
if (n.hasChildren()) {
add("String_Node_Str");
cc.maybeInsertSpace();
add(n.getFirstChild());
}
break;
case INTERFACE:
{
Preconditions.checkState(childCount == 3);
Node name=first;
Node superTypes=first.getNext();
Node members=last;
add("String_Node_Str");
add(name);
maybeAddGenericTypes(name);
if (!superTypes.isEmpty()) {
add("String_Node_Str");
Node superType=superTypes.getFirstChild();
add(superType);
while ((superType=superType.getNext()) != null) {
add("String_Node_Str");
cc.maybeInsertSpace();
add(superType);
}
}
add(members);
}
break;
case ENUM:
{
Preconditions.checkState(childCount == 2);
Node name=first;
Node members=last;
add("String_Node_Str");
add(name);
add(members);
break;
}
case NAMESPACE:
{
Preconditions.checkState(childCount == 2);
Node name=first;
Node elements=last;
add("String_Node_Str");
add(name);
add(elements);
break;
}
case TYPE_ALIAS:
add("String_Node_Str");
add(n.getString());
cc.addOp("String_Node_Str",true);
add(last);
cc.endStatement(true);
break;
case DECLARE:
add("String_Node_Str");
add(first);
processEnd(n,context);
break;
case INDEX_SIGNATURE:
add("String_Node_Str");
add(first);
add("String_Node_Str");
maybeAddTypeDecl(n);
cc.endStatement(true);
break;
case CALL_SIGNATURE:
if (n.getBooleanProp(Node.CONSTRUCT_SIGNATURE)) {
add("String_Node_Str");
}
maybeAddGenericTypes(n);
add(first);
maybeAddTypeDecl(n);
cc.endStatement(true);
break;
default :
throw new RuntimeException("String_Node_Str" + type + "String_Node_Str"+ n.toStringTree());
}
cc.endSourceMapping(n);
}