// GWT 2: called static scope with dispId as parameter
if (dispId == 0 && (flags & COM.DISPATCH_METHOD) != 0 && params.length >= 2) {
Variant dispIdVar = params[0]; // zero is dispId, next should be null (as 'this') for static context
dispId = dispIdVar.getInt();
if (javaDispatch.isMethod(dispId)) {
MethodAdaptor method = javaDispatch.getMethod(dispId);
Object target = getTarget();
Object jthis = method.needsThis() ?
JsValueGlue.get(new JsValueIE6(params[1]),
classLoader,
method.getDeclaringClass(),
"this") : null;
Variant[] otherParams = new Variant[params.length - 2];
System.arraycopy(params, 2, otherParams, 0, otherParams.length);
return callMethod(classLoader, jthis, otherParams, method);
}
}
// Whatever the caller asks for, try to find it via reflection.
//
if (dispId == DISPID_MAGIC_GETGLOBALREF && myGlobalRef != 0) {
// Handle specially.
//
return new Variant(myGlobalRef);
} else if (dispId == 0) {
if ((flags & COM.DISPATCH_METHOD) != 0) {
// implicit call -- "m()"
// not supported -- fall through to unsupported failure
} else if ((flags & COM.DISPATCH_PROPERTYGET) != 0) {
// implicit toString -- "'foo' + m"
return new Variant(getTarget().toString());
}
} else if (dispId > 0) {
if (javaDispatch.isMethod(dispId)) {
MethodAdaptor method = javaDispatch.getMethod(dispId);
if ((flags & COM.DISPATCH_METHOD) != 0) {
// This is a method call.
return callMethod(classLoader, getTarget(), params, method);
} else if (flags == COM.DISPATCH_PROPERTYGET) {
// The function is being accessed as a property.
AccessibleObject obj = method.getUnderlyingObject();
IDispatchImpl dispMethod = (IDispatchImpl) classLoader.getWrapperForObject(obj);
if (dispMethod == null || dispMethod.refCount < 1) {
dispMethod = new MethodDispatch(classLoader, method);
classLoader.putWrapperForObject(obj, dispMethod);
}