|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectedu.vub.at.objects.natives.NATNil
edu.vub.at.objects.natives.NATByRef
edu.vub.at.objects.natives.NATCallframe
edu.vub.at.objects.natives.NATObject
edu.vub.at.objects.symbiosis.JavaObject
JavaObject instances represent java objects under symbiosis. A Java Object is represented in AmbientTalk as an AmbientTalk object where: - the Java Object's fields and methods correspond to the AmbientTalk object's fields and methods - overloaded methods are coerced into a single AmbientTalk method, which must be disambiguated at call site - the Java Object has a shares-a relation with its class (i.e. the class of the object is its dynamic parent) In addition, a JavaObject carries with it a static type. The static type is used during method dispatch to select the appropriate Java method to be invoked. A JavaObject's static type can be altered by casting it. Casting can be done using JavaClass instances.
Field Summary | |
private static java.lang.ThreadLocal |
_JAVAOBJECT_POOL_
A thread-local hashmap pooling all of the JavaObject wrappers for the current actor, referring to them using SOFT references, such that unused wrappers can be GC-ed when running low on memory. |
private java.lang.Object |
wrappedObject_
|
Fields inherited from class edu.vub.at.objects.natives.NATObject |
_EQL_NAME_, _INI_NAME_, _IS_A_, _NEW_NAME_, _NO_STRIPES_, _SHARES_A_, _SUPER_NAME_, stripes_ |
Fields inherited from class edu.vub.at.objects.natives.NATCallframe |
customFields_, lexicalParent_, stateVector_, variableMap_ |
Fields inherited from class edu.vub.at.objects.natives.NATNil |
_INSTANCE_ |
Constructor Summary | |
private |
JavaObject(java.lang.Object wrappedObject)
A JavaObject wrapping an object o has a dynamic SHARES-A parent pointing to the wrapper of o's class. |
Method Summary | |
JavaObject |
asJavaObjectUnderSymbiosis()
|
java.lang.Object |
getWrappedObject()
|
boolean |
isJavaObjectUnderSymbiosis()
|
ATNil |
meta_addMethod(ATMethod method)
Methods can be added to a symbiotic Java object provided they do not already exist in the Java object's class. |
ATNil |
meta_assignField(ATObject receiver,
ATSymbol name,
ATObject value)
Fields can be assigned within a symbiotic Java object if that object's class has a mutable field with a matching name. |
ATNil |
meta_assignVariable(ATSymbol name,
ATObject value)
Variables can be assigned within a symbiotic Java object if that object's class has a mutable field with a matching name. |
ATObject |
meta_clone()
Cloning a symbiotic object is not always possible as Java has no uniform cloning semantics. |
ATNil |
meta_defineField(ATSymbol name,
ATObject value)
Fields can be defined within a symbiotic Java object. |
ATField |
meta_grabField(ATSymbol fieldName)
Fields can be grabbed from a symbiotic Java object. |
ATMethod |
meta_grabMethod(ATSymbol methodName)
Methods can be grabbed from a symbiotic Java object. |
ATObject |
meta_invoke(ATObject receiver,
ATSymbol atSelector,
ATTable arguments)
When a method is invoked upon a symbiotic Java object, an underlying Java method with the same name as the AmbientTalk selector is invoked. |
ATBoolean |
meta_isCloneOf(ATObject original)
Detects whether this object an the passed parameter are the result of cloning from a common ancestor (possibly either one of the objects itself). |
ATTable |
meta_listFields()
Querying a symbiotic Java object for its fields results in a table containing both the 'native' Java fields and the fields of its AT symbiont |
ATTable |
meta_listMethods()
Querying a symbiotic Java object for its methods results in a table containing both all 'native' Java instance methods and the methods of its AT symbiont |
ATObject |
meta_lookup(ATSymbol selector)
A variable lookup is resolved by first checking whether the Java object has a field with a matching name. |
ATObject |
meta_newInstance(ATTable initargs)
Invoking new on a JavaObject will exhibit the same behaviour as if new was invoked on the parent class. |
ATObject |
meta_pass()
Passing a Java Object wrapper to another actor has the following effect: - if the wrapped Java object is serializable, the symbiotic AmbientTalk object is treated as by copy (i.e. as an isolate) |
NATText |
meta_print()
Prints out the object in a human-readable way. |
ATObject |
meta_resolve()
If the wrapped object was serializable, we may be asked to resolve ourselves. |
ATBoolean |
meta_respondsTo(ATSymbol atSelector)
A symbiotic Java object responds to all of the public non-static selectors of its Java class plus all of the per-instance selectors added to its AmbientTalk symbiont. |
ATObject |
meta_select(ATObject receiver,
ATSymbol selector)
When selecting a field from a symbiotic Java object, if the Java symbiont object's class has a non-static field with a matching selector, it is automatically read; if it has a corresponding method, the method is returned in a closure. |
static JavaObject |
wrapperFor(java.lang.Object o)
|
Methods inherited from class edu.vub.at.objects.natives.NATCallframe |
getLocalCustomField, getLocalField, hasLocalCustomField, hasLocalField, hasLocalNativeField, meta_addField, meta_doesNotUnderstand, meta_getDynamicParent, meta_getLexicalParent, setLocalField |
Methods inherited from class edu.vub.at.objects.natives.NATNil |
asJavaClassUnderSymbiosis, asNativeBoolean, asNativeException, asNativeFarReference, asNativeFraction, asNativeNumber, asNativeNumeric, asNativeTable, asNativeText, base__opeql__opeql_, base_asFarReference, base_asVariableAssignment, base_init, base_isFarReference, base_isMessageCreation, base_isVariableAssignment, base_new, equals, isNativeBoolean, isNativeField, isNativeText, meta_eval, meta_quote, meta_receive, meta_send, readResolve, toString, writeReplace |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface edu.vub.at.objects.ATObject |
base__opeql__opeql_, base_init, base_new, meta_addField, meta_doesNotUnderstand, meta_eval, meta_extend, meta_getDynamicParent, meta_getLexicalParent, meta_getStripes, meta_isRelatedTo, meta_isStripedWith, meta_quote, meta_receive, meta_send, meta_share |
Field Detail |
private static final java.lang.ThreadLocal _JAVAOBJECT_POOL_
private final java.lang.Object wrappedObject_
Constructor Detail |
private JavaObject(java.lang.Object wrappedObject)
Method Detail |
public static final JavaObject wrapperFor(java.lang.Object o)
public java.lang.Object getWrappedObject()
public boolean isJavaObjectUnderSymbiosis()
isJavaObjectUnderSymbiosis
in interface ATConversions
isJavaObjectUnderSymbiosis
in class NATNil
public JavaObject asJavaObjectUnderSymbiosis() throws XTypeMismatch
asJavaObjectUnderSymbiosis
in interface ATConversions
asJavaObjectUnderSymbiosis
in class NATNil
XTypeMismatch
public ATObject meta_invoke(ATObject receiver, ATSymbol atSelector, ATTable arguments) throws InterpreterException
meta_invoke
in interface ATObject
meta_invoke
in class NATObject
InterpreterException
public ATBoolean meta_respondsTo(ATSymbol atSelector) throws InterpreterException
meta_respondsTo
in interface ATObject
meta_respondsTo
in class NATObject
InterpreterException
public ATObject meta_select(ATObject receiver, ATSymbol selector) throws InterpreterException
meta_select
in interface ATObject
meta_select
in class NATObject
receiver
- the original receiver of the selectionselector
- the selector to look up
InterpreterException
public ATObject meta_lookup(ATSymbol selector) throws InterpreterException
meta_lookup
in interface ATObject
meta_lookup
in class NATObject
InterpreterException
public ATNil meta_defineField(ATSymbol name, ATObject value) throws InterpreterException
meta_defineField
in interface ATObject
meta_defineField
in class NATObject
InterpreterException
public ATNil meta_assignVariable(ATSymbol name, ATObject value) throws InterpreterException
meta_assignVariable
in interface ATObject
meta_assignVariable
in class NATCallframe
InterpreterException
public ATNil meta_assignField(ATObject receiver, ATSymbol name, ATObject value) throws InterpreterException
meta_assignField
in interface ATObject
meta_assignField
in class NATObject
value
- the value to assign to the fieldname
- the field to assign
InterpreterException
public ATObject meta_clone() throws InterpreterException
meta_clone
in interface ATObject
meta_clone
in class NATObject
InterpreterException
public ATObject meta_newInstance(ATTable initargs) throws InterpreterException
meta_newInstance
in interface ATObject
meta_newInstance
in class NATObject
InterpreterException
public ATNil meta_addMethod(ATMethod method) throws InterpreterException
meta_addMethod
in interface ATObject
meta_addMethod
in class NATObject
InterpreterException
public ATField meta_grabField(ATSymbol fieldName) throws InterpreterException
meta_grabField
in interface ATObject
meta_grabField
in class NATCallframe
InterpreterException
public ATMethod meta_grabMethod(ATSymbol methodName) throws InterpreterException
meta_grabMethod
in interface ATObject
meta_grabMethod
in class NATObject
InterpreterException
public ATTable meta_listFields() throws InterpreterException
meta_listFields
in interface ATObject
meta_listFields
in class NATCallframe
InterpreterException
public ATTable meta_listMethods() throws InterpreterException
meta_listMethods
in interface ATObject
meta_listMethods
in class NATObject
InterpreterException
public ATBoolean meta_isCloneOf(ATObject original) throws InterpreterException
ATObject
meta_isCloneOf
in interface ATObject
meta_isCloneOf
in class NATObject
InterpreterException
public NATText meta_print() throws InterpreterException
ATObject
meta_print
in interface ATObject
meta_print
in class NATObject
InterpreterException
public ATObject meta_pass() throws InterpreterException
meta_pass
in interface ATObject
meta_pass
in class NATObject
InterpreterException
public ATObject meta_resolve() throws InterpreterException
meta_resolve
in interface ATObject
meta_resolve
in class NATObject
InterpreterException
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |