/** * Returns a language provided object that represents the instrumented node properties. The * returned is alwasy a valid interop object. The returned object is never <code>null</code> and * always returns <code>true</code> for the HAS_KEYS message. Multiple calls to * {@link #getNodeObject()} return the same node object instance. * * @see InstrumentableNode#getNodeObject() * @since 0.33 */ public Object getNodeObject() { Object object = this.nodeObject; if (object == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); Node node = getInstrumentedNode(); if (node instanceof InstrumentableNode) { object = ((InstrumentableNode) node).getNodeObject(); } else { return null; } if (object == null) { object = AccessorInstrumentHandler.interopAccess().createDefaultNodeObject(node); } else { assert AccessorInstrumentHandler.interopAccess().isValidNodeObject(object); } this.nodeObject = object; } return object; }
/** * Returns a language provided object that represents the instrumented node properties. The * returned is alwasy a valid interop object. The returned object is never <code>null</code> and * always returns <code>true</code> for the HAS_KEYS message. Multiple calls to * {@link #getNodeObject()} return the same node object instance. * * @see InstrumentableNode#getNodeObject() * @since 0.33 */ public Object getNodeObject() { Object object = this.nodeObject; if (object == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); Node node = getInstrumentedNode(); if (node instanceof InstrumentableNode) { object = ((InstrumentableNode) node).getNodeObject(); } else { return null; } if (object == null) { object = AccessorInstrumentHandler.interopAccess().createDefaultNodeObject(node); } else { assert AccessorInstrumentHandler.interopAccess().isValidNodeObject(object); } this.nodeObject = object; } return object; }