@Override
  public void generate(@Nonnull final JSFormatter f) {
    if (this.m_aCallee instanceof JSAnonymousFunction) {
      // It's an anonymous function
      f.generatable(((JSAnonymousFunction) this.m_aCallee).inParantheses()).plain('(');
    } else if (this.m_aCtorType != null) {
      // It's a constructor call
      f.plain("new ").generatable(this.m_aCtorType).plain('(');
    } else {
      // Find name
      String sName = this.m_sName;
      if (sName == null && this.m_aCallee instanceof IJSDeclaration)
        sName = ((IJSDeclaration) this.m_aCallee).name();

      if (this.m_aObject != null) {
        // Regular object method invocation
        if (sName == null)
          throw new IllegalStateException("Name is required if an object is present");
        f.generatable(this.m_aObject).plain('.').plain(sName).plain('(');
      } else if (sName != null) {
        // E.g. global function
        f.plain(sName).plain('(');
      }
    }

    // Add the arguments
    f.generatable(this.m_aArgs).plain(')');
  }
 @Override
 public void state(@Nonnull final JSFormatter f) {
   f.generatable(this).plain(';').nl();
 }
 public void generate(@Nonnull final JSFormatter aFormatter) {
   if (m_bOpFirst) aFormatter.plain(m_sOp).generatable(m_aExpr);
   else aFormatter.generatable(m_aExpr).plain(m_sOp);
 }