DynamicObject.hx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package jvm;
  2. import haxe.ds.StringMap;
  3. @:keep
  4. @:native('haxe.jvm.DynamicObject')
  5. @:nativeGen
  6. class DynamicObject implements java.lang.Cloneable extends Object {
  7. @:private static var __hx_toString_depth = 0;
  8. @:private var _hx_fields:Null<StringMap<Dynamic>>;
  9. @:jvm.synthetic public var _hx_deletedAField:Null<Bool>;
  10. public function toString() {
  11. if (__hx_toString_depth >= 5) {
  12. return "...";
  13. }
  14. ++__hx_toString_depth;
  15. _hx_initReflection();
  16. if (_hx_hasField("toString")) {
  17. --__hx_toString_depth;
  18. return _hx_getField("toString")();
  19. }
  20. var buf = new StringBuf();
  21. buf.addChar("{".code);
  22. var first = true;
  23. try {
  24. for (key in _hx_fields.keys()) {
  25. if (first)
  26. first = false
  27. else
  28. buf.add(", ");
  29. buf.add(key);
  30. buf.add(": ");
  31. buf.add(_hx_fields.get(key));
  32. }
  33. } catch (e:Dynamic) {
  34. --__hx_toString_depth;
  35. throw(e);
  36. }
  37. --__hx_toString_depth;
  38. buf.addChar("}".code);
  39. return buf.toString();
  40. }
  41. @:jvm.synthetic final public function _hx_deleteField(name:String) {
  42. _hx_initReflection();
  43. _hx_deletedAField = true;
  44. try {
  45. Jvm.writeFieldNoObject(this, name, null);
  46. } catch (_:Dynamic) {}
  47. return _hx_fields.remove(name);
  48. }
  49. @:jvm.synthetic final public function _hx_getFields() {
  50. _hx_initReflection();
  51. return [for (key in _hx_fields.keys()) key];
  52. }
  53. @:jvm.synthetic override public function _hx_getField<T>(name:String) {
  54. _hx_initReflection();
  55. return _hx_fields.get(name);
  56. }
  57. @:jvm.synthetic final public function _hx_hasField(name:String) {
  58. _hx_initReflection();
  59. return _hx_fields.exists(name);
  60. }
  61. @:jvm.synthetic override public function _hx_setField(name:String, value:Dynamic) {
  62. _hx_initReflection();
  63. _hx_fields.set(name, value);
  64. }
  65. @:jvm.synthetic final public function _hx_clone() {
  66. var clone:DynamicObject = (cast this : java.lang.Object).clone();
  67. if (_hx_fields != null) {
  68. clone._hx_fields = this._hx_fields.copy();
  69. }
  70. return clone;
  71. }
  72. @:jvm.synthetic final function _hx_initReflection() {
  73. if (_hx_fields == null) {
  74. _hx_fields = _hx_getKnownFields();
  75. }
  76. }
  77. @:jvm.synthetic function _hx_getKnownFields():StringMap<Dynamic> {
  78. return new StringMap();
  79. }
  80. }