docs: @JRubyMethod
      public static IRubyObject initialize(IRubyObject self, IRubyObject type_id, IRubyObject val, IRubyObject style) {
          org.yecht.Node node = (org.yecht.Node)self.dataGetStructChecked();
          Ruby runtime = self.getRuntime();
          ThreadContext ctx = runtime.getCurrentContext();
          Data.Map ds = (Data.Map)node.data;
  
          if(!val.isNil()) {
              IRubyObject hsh = TypeConverter.convertToTypeWithCheck(val, runtime.getHash(), "to_hash");
  
              if(hsh.isNil()) {
                  throw runtime.newTypeError("wrong argument type");
              }
              IRubyObject keys = hsh.callMethod(ctx, "keys");
              for(int i = 0; i < ((RubyArray)keys).getLength(); i++) {
                  IRubyObject key = ((RubyArray)keys).entry(i);
                  node.mapAdd(key, ((RubyHash)hsh).op_aref(ctx, key));
              }
          }
  
          ((RubyObject)self).fastSetInstanceVariable("@kind", ((Node)self).x.seq); // NOT A TYPO - Syck does the same
          self.callMethod(ctx, "type_id=", type_id);
          self.callMethod(ctx, "value=", val);
          self.callMethod(ctx, "style=", style);
          return self;
      }