LNXSDK/Kha/Tools/linux_arm64/std/jvm/DynamicObject.hx

94 lines
2.1 KiB
Haxe
Raw Normal View History

2025-01-22 16:18:30 +01:00
package jvm;
import haxe.ds.StringMap;
@:keep
@:native('haxe.jvm.DynamicObject')
@:nativeGen
class DynamicObject implements java.lang.Cloneable extends Object {
@:private static var __hx_toString_depth = 0;
@:private var _hx_fields:Null<StringMap<Dynamic>>;
@:jvm.synthetic public var _hx_deletedAField:Null<Bool>;
public function toString() {
if (__hx_toString_depth >= 5) {
return "...";
}
++__hx_toString_depth;
_hx_initReflection();
if (_hx_hasField("toString")) {
--__hx_toString_depth;
return _hx_getField("toString")();
}
var buf = new StringBuf();
buf.addChar("{".code);
var first = true;
try {
for (key in _hx_fields.keys()) {
if (first)
first = false
else
buf.add(", ");
buf.add(key);
buf.add(": ");
buf.add(_hx_fields.get(key));
}
} catch (e:Dynamic) {
--__hx_toString_depth;
throw(e);
}
--__hx_toString_depth;
buf.addChar("}".code);
return buf.toString();
}
@:jvm.synthetic final public function _hx_deleteField(name:String) {
_hx_initReflection();
_hx_deletedAField = true;
try {
Jvm.writeFieldNoObject(this, name, null);
} catch (_:Dynamic) {}
return _hx_fields.remove(name);
}
@:jvm.synthetic final public function _hx_getFields() {
_hx_initReflection();
return [for (key in _hx_fields.keys()) key];
}
@:jvm.synthetic override public function _hx_getField<T>(name:String) {
_hx_initReflection();
return _hx_fields.get(name);
}
@:jvm.synthetic final public function _hx_hasField(name:String) {
_hx_initReflection();
return _hx_fields.exists(name);
}
@:jvm.synthetic override public function _hx_setField(name:String, value:Dynamic) {
_hx_initReflection();
_hx_fields.set(name, value);
}
@:jvm.synthetic final public function _hx_clone() {
var clone:DynamicObject = (cast this : java.lang.Object).clone();
if (_hx_fields != null) {
clone._hx_fields = this._hx_fields.copy();
}
return clone;
}
@:jvm.synthetic final function _hx_initReflection() {
if (_hx_fields == null) {
_hx_fields = _hx_getKnownFields();
}
}
@:jvm.synthetic function _hx_getKnownFields():StringMap<Dynamic> {
return new StringMap();
}
}