@Nonnull
  public static AbstractJSExpression plus (@Nonnull final IJSExpression aLeft, @Nonnull final IJSExpression aRight)
  {
    // Some optimizations
    if (aLeft instanceof JSStringLiteral && aRight instanceof JSStringLiteral)
      return new JSStringLiteral (((JSStringLiteral) aLeft).getContainedString () +
                                  ((JSStringLiteral) aRight).getContainedString ());
    if (aLeft instanceof AbstractJSAtomNumeric && aRight instanceof AbstractJSAtomNumeric)
      return ((AbstractJSAtomNumeric) aLeft).numericPlus ((AbstractJSAtomNumeric) aRight);

    return new JSOpBinary (aLeft, "+", aRight);
  }
@ Nonnull public static AbstractJSExpression plus ( @ Nonnull final IJSExpression aLeft , @ Nonnull final IJSExpression aRight ) { if ( aLeft instanceof JSStringLiteral && aRight instanceof JSStringLiteral ) return new JSStringLiteral ( ( ( JSStringLiteral ) aLeft ) . getContainedString ( ) + ( ( JSStringLiteral ) aRight ) . getContainedString ( ) ) ; if ( aLeft instanceof AbstractJSAtomNumeric && aRight instanceof AbstractJSAtomNumeric ) return ( ( AbstractJSAtomNumeric ) aLeft ) . numericPlus ( ( AbstractJSAtomNumeric ) aRight ) ; return new JSOpBinary ( aLeft , "+" , aRight ) ; }
/* -- Binary operators --