if ( javaMethod != null ) try { return Reflect.invokeOnMethod( javaMethod, javaObject, argValues ); } catch ( ReflectError e ) { throw new EvalError( "Error invoking Java method: "+e, callerInfo, callstack ); } catch ( InvocationTargetException e2 ) { throw new TargetError( "Exception invoking imported object method.", e2, callerInfo, callstack, true ); }   if ( modifiers != null && modifiers.hasModifier("synchronized") ) {    Object lock; if ( declaringNameSpace.isClass ) { try { lock = declaringNameSpace.getClassInstance(); } catch ( UtilEvalError e ) { throw new InterpreterError( "Can't get class instance for synchronized method."); } } else lock = declaringNameSpace.getThis(interpreter);  synchronized( lock ) { return invokeImpl( argValues, interpreter, callstack, callerInfo, overrideNameSpace ); } } else return invokeImpl( argValues, interpreter, callstack, callerInfo, overrideNameSpace );
return invoke( argValues, interpreter, null, null, false );
	Object invoke( 		Object[] argValues, Interpreter interpreter, CallStack callstack,			SimpleNode callerInfo, boolean overrideNameSpace ) 		throws EvalError 	{		if ( javaMethod != null )			try {				return Reflect.invokeOnMethod( 					javaMethod, javaObject, argValues ); 			} catch ( ReflectError e ) {				throw new EvalError(					"Error invoking Java method: "+e, callerInfo, callstack );			} catch ( InvocationTargetException e2 ) {				throw new TargetError( 					"Exception invoking imported object method.", 					e2, callerInfo, callstack, true/*isNative*/ );			}		// is this a syncrhonized method?		if ( modifiers != null && modifiers.hasModifier("synchronized") )		{			// The lock is our declaring namespace's This reference			// (the method's 'super').  Or in the case of a class it's the			// class instance.			Object lock;			if ( declaringNameSpace.isClass )			{				try {					lock = declaringNameSpace.getClassInstance();				} catch ( UtilEvalError e ) {					throw new InterpreterError(						"Can't get class instance for synchronized method.");				}			} else				lock = declaringNameSpace.getThis(interpreter); // ???			synchronized( lock ) 			{				return invokeImpl( 					argValues, interpreter, callstack, 					callerInfo, overrideNameSpace );			}		} else			return invokeImpl( argValues, interpreter, callstack, callerInfo,				overrideNameSpace );	}