38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
|
import keyword
|
||
|
import logging
|
||
|
|
||
|
import jpype
|
||
|
|
||
|
|
||
|
# pylint: disable=no-member, too-few-public-methods
|
||
|
@jpype.JImplementationFor("java.lang.Object")
|
||
|
class _JavaObject:
|
||
|
|
||
|
def __jclass_init__(self: jpype.JClass):
|
||
|
try:
|
||
|
if isinstance(self, jpype.JException):
|
||
|
# don't process any exceptions
|
||
|
return
|
||
|
exposer = jpype.JClass("dc3.pyhidra.plugin.PythonFieldExposer")
|
||
|
if exposer.class_.isAssignableFrom(self.class_):
|
||
|
return
|
||
|
utils = jpype.JClass("dc3.pyhidra.property.PropertyUtils")
|
||
|
for prop in utils.getProperties(self.class_):
|
||
|
field = prop.field
|
||
|
if keyword.iskeyword(field):
|
||
|
field += '_'
|
||
|
if field == "class_":
|
||
|
continue
|
||
|
fget = prop.fget if prop.hasGetter() else None
|
||
|
fset = prop.fset if prop.hasSetter() else None
|
||
|
self._customize(field, property(fget, fset))
|
||
|
|
||
|
# allowing any exception to escape here may cause the jvm to terminate
|
||
|
# pylint: disable=bare-except
|
||
|
except:
|
||
|
logger = logging.getLogger(__name__)
|
||
|
logger.error("Failed to add property customizations for %s", self, exc_info=1)
|
||
|
|
||
|
def __repr__(self):
|
||
|
return str(self)
|