@Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   if (namespace != null) {
     namespace.toString(writer, localData);
     writer.append("::");
   } else {
     /*Namespace ns = constants.getMultiname(multinameIndex).getNamespace(constants);
     if ((ns != null)&&(ns.name_index!=0)) {
     ret =  hilight(ns.getName(constants) + "::")+ret;
     }*/
   }
   if (name != null) {
     writer.append("[");
     name.toString(writer, localData);
     writer.append("]");
   } else {
     AVM2ConstantPool constants = localData.constantsAvm2;
     List<DottedChain> fullyQualifiedNames =
         property ? new ArrayList<>() : localData.fullyQualifiedNames;
     if (multinameIndex > 0 && multinameIndex < constants.getMultinameCount()) {
       writer.append(
           constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames, false));
     } else {
       writer.append("§§unknown_multiname");
     }
   }
   return writer;
 }
 @Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   writer.append("printAsBitmapNum");
   writer.spaceBeforeCallParenthesies(2);
   writer.append("(");
   num.toString(writer, localData);
   writer.append(",");
   boundingBox.toString(writer, localData);
   return writer.append(")");
 }
  public void getValueStr(
      Trait parent, GraphTextWriter writer, ABC abc, List<String> fullyQualifiedNames)
      throws InterruptedException {
    if (assignedValue != null) {
      if (parent instanceof TraitClass) {
        TraitClass tc = (TraitClass) parent;
        int traitInitId =
            abc.class_info.get(tc.class_info).static_traits.traits.size()
                + abc.instance_info.get(tc.class_info).instance_traits.traits.size()
                + 1;
        int initMethod = abc.class_info.get(tc.class_info).cinit_index;
        writer.startTrait(traitInitId);
        writer.startMethod(initMethod);
        if (Configuration.showMethodBodyId.get()) {
          writer.appendNoHilight("// method body id: ");
          writer.appendNoHilight(abc.findBodyIndex(initMethod));
          writer.newLine();
        }
      }
      assignedValue.toString(
          writer,
          LocalData.create(abc.constants, new HashMap<Integer, String>(), fullyQualifiedNames));
      if (parent instanceof TraitClass) {
        writer.endMethod();
        writer.endTrait();
      }
      return;
    }

    if (value_kind != 0) {
      ValueKind val = new ValueKind(value_index, value_kind);
      writer.hilightSpecial(val.toString(abc.constants), HighlightSpecialType.TRAIT_VALUE);
    }
  }
 @Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   writer.append(operator);
   if (value != null) {
     if (value.getPrecedence() > precedence) {
       writer.append("(");
       value.toString(writer, localData);
       writer.append(")");
     } else {
       value.toString(writer, localData);
     }
   } else {
     writer.append("null");
   }
   return writer;
 }
 public boolean isXML(
     ConstantPool constants,
     HashMap<Integer, String> localRegNames,
     List<String> fullyQualifiedNames)
     throws InterruptedException {
   String cname;
   if (name != null) {
     cname = name.toString(LocalData.create(constants, localRegNames, fullyQualifiedNames));
   } else {
     cname = (constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames));
   }
   String cns = "";
   if (namespace != null) {
     cns = namespace.toString(LocalData.create(constants, localRegNames, fullyQualifiedNames));
   } else {
     Namespace ns = constants.getMultiname(multinameIndex).getNamespace(constants);
     if ((ns != null) && (ns.name_index != 0)) {
       cns = ns.getName(constants);
     }
   }
   return cname.equals("XML") && cns.isEmpty();
 }
 @Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   if (namespace != null) {
     namespace.toString(writer, localData);
     writer.append("::");
   } else {
     /*Namespace ns = constants.getMultiname(multinameIndex).getNamespace(constants);
     if ((ns != null)&&(ns.name_index!=0)) {
     ret =  hilight(ns.getName(constants) + "::")+ret;
     }*/
   }
   if (name != null) {
     writer.append("[");
     name.toString(writer, localData);
     writer.append("]");
   } else {
     ConstantPool constants = localData.constantsAvm2;
     List<String> fullyQualifiedNames = localData.fullyQualifiedNames;
     writer.append(constants.getMultiname(multinameIndex).getName(constants, fullyQualifiedNames));
   }
   return writer;
 }
 @Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   String prefix = "gotoAndStop";
   if (playFlag) {
     prefix = "gotoAndPlay";
   }
   writer.append(prefix);
   writer.spaceBeforeCallParenthesies(1);
   writer.append("(");
   frame.toString(writer, localData);
   writer.append((sceneBiasFlag ? "," + sceneBias : ""));
   return writer.append(")");
 }
 @Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   receiver.toString(writer, localData);
   writer.append(".");
   writer.append(methodName);
   writer.spaceBeforeCallParenthesies(arguments.size());
   writer.append("(");
   for (int a = 0; a < arguments.size(); a++) {
     if (a > 0) {
       writer.append(",");
     }
     arguments.get(a).toString(writer, localData);
   }
   return writer.append(")");
 }
 @Override
 public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData)
     throws InterruptedException {
   object.toString(writer, localData);
   return writer.append("++");
 }