Package org.python.core
Class JyAttribute
java.lang.Object
org.python.core.JyAttribute
- All Implemented Interfaces:
Serializable
Manages a linked list of general purpose Object-attributes that
can be attached to arbitrary PyObject
s.
This method replaces the formerly used method of maintaining weak
hash-maps (WeakHashMap
) for such cases.
These weak hash-maps were used to map
PyObject
s to such attributes, for instance
to attach
GlobalRef
-objects in the
WeakrefModule
.
Attributes attached via the weak hash-map-method break, if the
PyObject
is resurrected in its finalizer. The
JyAttribute
-method is resurrection-safe.
To reduce memory footprint of PyObject
s, the fields for
FinalizeTrigger
s and
javaProxy
are included in the list; javaProxy
always
on top so there is no speed-regression,
FinalizeTrigger
on bottom,
as it is usually never accessed.
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final byte
static final byte
Used bygc
-module to mark cyclic trash.static final byte
Used bygc
-module to mark finalizable objects that might have been resurrected during a delayed finalization process.static final byte
static final byte
Reserved for use by JyNI.static final byte
Allows the id of aPyObject
to persist resurrection of that object.static final byte
Only used internally byPy.javaPyClass(PyObject, Class)
static final byte
Stores list of weak references linking to thisPyObject
.static final byte
Holds the current thread for anAbstractReference
while referent-retrieval is pending due to a potentially restored-by-resurrection weak reference. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
debugPrintAttributes
(PyObject o, PrintStream out) Prints the current state of the attribute-list of the given object to the given stream.static void
Removes the attribute of given type from the given object's attribute-list (if it existed at all).static Object
Retrieves the attribute of the given type from the givenPyObject
.static boolean
Checks whether the givenPyObject
has an attribute of the given type attached.static byte
Reserves and returns a new non-transient attr type for custom use.static byte
Reserves and returns a new transient attr type for custom use.static void
Sets the attribute of typeattr_type
inob
tovalue
.
-
Field Details
-
JAVA_PROXY_ATTR
public static final byte JAVA_PROXY_ATTR- See Also:
-
WEAK_REF_ATTR
public static final byte WEAK_REF_ATTRStores list of weak references linking to thisPyObject
. This list is weakref-based, so it does not keep the weakrefs alive. This is the only way to find out which weakrefs (i.e.AbstractReference
) linked to the object after a resurrection. A weak hash-map-based approach for this purpose would break on resurrection.- See Also:
-
JYNI_HANDLE_ATTR
public static final byte JYNI_HANDLE_ATTRReserved for use by JyNI.- See Also:
-
PY_ID_ATTR
public static final byte PY_ID_ATTRAllows the id of aPyObject
to persist resurrection of that object.- See Also:
-
WEAKREF_PENDING_GET_ATTR
public static final byte WEAKREF_PENDING_GET_ATTRHolds the current thread for anAbstractReference
while referent-retrieval is pending due to a potentially restored-by-resurrection weak reference. After the restore has happened or the clear was confirmed, the thread is interrupted and the attribute is cleared.- See Also:
-
PYCLASS_PY2JY_CACHE_ATTR
public static final byte PYCLASS_PY2JY_CACHE_ATTROnly used internally byPy.javaPyClass(PyObject, Class)
- See Also:
-
GC_CYCLE_MARK_ATTR
public static final byte GC_CYCLE_MARK_ATTRUsed bygc
-module to mark cyclic trash. Searching for cyclic trash is usually not required by Jython. It is only done if gc-features are enabled that mimic CPython behavior.- See Also:
-
GC_DELAYED_FINALIZE_CRITICAL_MARK_ATTR
public static final byte GC_DELAYED_FINALIZE_CRITICAL_MARK_ATTRUsed bygc
-module to mark finalizable objects that might have been resurrected during a delayed finalization process.- See Also:
-
FINALIZE_TRIGGER_ATTR
public static final byte FINALIZE_TRIGGER_ATTR- See Also:
-
-
Method Details
-
reserveCustomAttrType
public static byte reserveCustomAttrType()Reserves and returns a new non-transient attr type for custom use.- Returns:
- a non-transient attr type for custom use
-
reserveTransientCustomAttrType
public static byte reserveTransientCustomAttrType()Reserves and returns a new transient attr type for custom use.- Returns:
- a transient attr type for custom use
-
hasAttr
Checks whether the givenPyObject
has an attribute of the given type attached. -
getAttr
Retrieves the attribute of the given type from the givenPyObject
. If no attribute of the given type is attached, null is returned. -
debugPrintAttributes
Prints the current state of the attribute-list of the given object to the given stream. (Intended for debugging) -
setAttr
Sets the attribute of typeattr_type
inob
tovalue
. If no corresponding attribute exists yet, one is created. Ifvalue == null
, the attribute is removed (if it existed at all). -
delAttr
Removes the attribute of given type from the given object's attribute-list (if it existed at all). This is equivalent to callingsetAttr(ob, attr_type, null)
.
-