|
|||||||||||
| 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 ATConversionsisJavaObjectUnderSymbiosis in class NATNil
public JavaObject asJavaObjectUnderSymbiosis()
throws XTypeMismatch
asJavaObjectUnderSymbiosis in interface ATConversionsasJavaObjectUnderSymbiosis in class NATNilXTypeMismatch
public ATObject meta_invoke(ATObject receiver,
ATSymbol atSelector,
ATTable arguments)
throws InterpreterException
meta_invoke in interface ATObjectmeta_invoke in class NATObjectInterpreterException
public ATBoolean meta_respondsTo(ATSymbol atSelector)
throws InterpreterException
meta_respondsTo in interface ATObjectmeta_respondsTo in class NATObjectInterpreterException
public ATObject meta_select(ATObject receiver,
ATSymbol selector)
throws InterpreterException
meta_select in interface ATObjectmeta_select in class NATObjectreceiver - the original receiver of the selectionselector - the selector to look up
InterpreterException
public ATObject meta_lookup(ATSymbol selector)
throws InterpreterException
meta_lookup in interface ATObjectmeta_lookup in class NATObjectInterpreterException
public ATNil meta_defineField(ATSymbol name,
ATObject value)
throws InterpreterException
meta_defineField in interface ATObjectmeta_defineField in class NATObjectInterpreterException
public ATNil meta_assignVariable(ATSymbol name,
ATObject value)
throws InterpreterException
meta_assignVariable in interface ATObjectmeta_assignVariable in class NATCallframeInterpreterException
public ATNil meta_assignField(ATObject receiver,
ATSymbol name,
ATObject value)
throws InterpreterException
meta_assignField in interface ATObjectmeta_assignField in class NATObjectvalue - the value to assign to the fieldname - the field to assign
InterpreterException
public ATObject meta_clone()
throws InterpreterException
meta_clone in interface ATObjectmeta_clone in class NATObjectInterpreterException
public ATObject meta_newInstance(ATTable initargs)
throws InterpreterException
meta_newInstance in interface ATObjectmeta_newInstance in class NATObjectInterpreterException
public ATNil meta_addMethod(ATMethod method)
throws InterpreterException
meta_addMethod in interface ATObjectmeta_addMethod in class NATObjectInterpreterException
public ATField meta_grabField(ATSymbol fieldName)
throws InterpreterException
meta_grabField in interface ATObjectmeta_grabField in class NATCallframeInterpreterException
public ATMethod meta_grabMethod(ATSymbol methodName)
throws InterpreterException
meta_grabMethod in interface ATObjectmeta_grabMethod in class NATObjectInterpreterException
public ATTable meta_listFields()
throws InterpreterException
meta_listFields in interface ATObjectmeta_listFields in class NATCallframeInterpreterException
public ATTable meta_listMethods()
throws InterpreterException
meta_listMethods in interface ATObjectmeta_listMethods in class NATObjectInterpreterException
public ATBoolean meta_isCloneOf(ATObject original)
throws InterpreterException
ATObject
meta_isCloneOf in interface ATObjectmeta_isCloneOf in class NATObjectInterpreterException
public NATText meta_print()
throws InterpreterException
ATObject
meta_print in interface ATObjectmeta_print in class NATObjectInterpreterException
public ATObject meta_pass()
throws InterpreterException
meta_pass in interface ATObjectmeta_pass in class NATObjectInterpreterException
public ATObject meta_resolve()
throws InterpreterException
meta_resolve in interface ATObjectmeta_resolve in class NATObjectInterpreterException
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||