198 lines
8.1 KiB
C++
198 lines
8.1 KiB
C++
// Copyright 2014 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_
|
|
#define CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <base/macros.h>
|
|
|
|
#include "chromeos-dbus-bindings/header_generator.h"
|
|
#include "chromeos-dbus-bindings/indented_text.h"
|
|
#include "chromeos-dbus-bindings/interface.h"
|
|
|
|
namespace base {
|
|
|
|
class FilePath;
|
|
|
|
} // namespace base
|
|
|
|
namespace chromeos_dbus_bindings {
|
|
|
|
class IndentedText;
|
|
struct Interface;
|
|
|
|
class ProxyGenerator : public HeaderGenerator {
|
|
public:
|
|
static bool GenerateProxies(const ServiceConfig& config,
|
|
const std::vector<Interface>& interfaces,
|
|
const base::FilePath& output_file);
|
|
|
|
static bool GenerateMocks(const ServiceConfig& config,
|
|
const std::vector<Interface>& interfaces,
|
|
const base::FilePath& mock_file,
|
|
const base::FilePath& proxy_file,
|
|
bool use_literal_proxy_file);
|
|
|
|
private:
|
|
friend class ProxyGeneratorTest;
|
|
|
|
// Generates an abstract interface for one D-Bus interface proxy.
|
|
static void GenerateInterfaceProxyInterface(const ServiceConfig& config,
|
|
const Interface& interface,
|
|
IndentedText* text);
|
|
|
|
// Generates one interface proxy.
|
|
static void GenerateInterfaceProxy(const ServiceConfig& config,
|
|
const Interface& interface,
|
|
IndentedText* text);
|
|
|
|
// Generates one interface mock object.
|
|
static void GenerateInterfaceMock(const ServiceConfig& config,
|
|
const Interface& interface,
|
|
IndentedText* text);
|
|
|
|
// Generates the constructor and destructor for the proxy.
|
|
static void AddConstructor(const ServiceConfig& config,
|
|
const Interface& interface,
|
|
const std::string& class_name,
|
|
IndentedText* text);
|
|
static void AddDestructor(const std::string& class_name,
|
|
IndentedText* text);
|
|
|
|
// Generates ReleaseObjectProxy() method to release ownership
|
|
// of the object proxy.
|
|
static void AddReleaseObjectProxy(IndentedText* text);
|
|
|
|
// Generates AddGetObjectPath() method.
|
|
static void AddGetObjectPath(IndentedText* text);
|
|
|
|
// Generates GetObjectProxy() method.
|
|
static void AddGetObjectProxy(IndentedText* text);
|
|
|
|
// Generates SetPropertyChangedCallback/GetProperties() methods.
|
|
static void AddPropertyPublicMethods(const std::string& class_name,
|
|
bool declaration_only,
|
|
IndentedText* text);
|
|
|
|
// Generates OnPropertyChanged() method.
|
|
static void AddOnPropertyChanged(IndentedText* text);
|
|
|
|
// Generates logic permitting users to register handlers for signals.
|
|
static void AddSignalHandlerRegistration(const Interface::Signal& signal,
|
|
const std::string& interface_name,
|
|
bool declaration_only,
|
|
IndentedText* text);
|
|
|
|
// Generates the property set class to contain interface properties.
|
|
static void AddPropertySet(const ServiceConfig& config,
|
|
const Interface& interface,
|
|
IndentedText* text);
|
|
|
|
// Generates the property accessors.
|
|
static void AddProperties(const ServiceConfig& config,
|
|
const Interface& interface,
|
|
bool declaration_only,
|
|
IndentedText* text);
|
|
|
|
// Generates a native C++ method which calls a D-Bus method on the proxy.
|
|
static void AddMethodProxy(const Interface::Method& interface,
|
|
const std::string& interface_name,
|
|
bool declaration_only,
|
|
IndentedText* text);
|
|
|
|
// Generates a native C++ method which calls a D-Bus method asynchronously.
|
|
static void AddAsyncMethodProxy(const Interface::Method& interface,
|
|
const std::string& interface_name,
|
|
bool declaration_only,
|
|
IndentedText* text);
|
|
|
|
// Generates a mock for blocking D-Bus method.
|
|
static void AddMethodMock(const Interface::Method& interface,
|
|
const std::string& interface_name,
|
|
IndentedText* text);
|
|
|
|
// Generates a mock for asynchronous D-Bus method.
|
|
static void AddAsyncMethodMock(const Interface::Method& interface,
|
|
const std::string& interface_name,
|
|
IndentedText* text);
|
|
|
|
// Generates the MOCK_METHOD entry for the given arguments handling methods
|
|
// with more than 10 arguments.
|
|
static void AddMockMethodDeclaration(
|
|
const std::string& method_name,
|
|
const std::string& return_type,
|
|
const std::vector<std::string>& arguments,
|
|
IndentedText* text);
|
|
|
|
// Generates a mock for the signal handler registration method.
|
|
static void AddSignalHandlerRegistrationMock(
|
|
const Interface::Signal& signal,
|
|
IndentedText* text);
|
|
|
|
// Generate the signal callback argument of a signal handler.
|
|
static void AddSignalCallbackArg(const Interface::Signal& signal,
|
|
bool comment_arg_name,
|
|
IndentedText* block);
|
|
|
|
// Generates the Object Manager proxy class.
|
|
struct ObjectManager {
|
|
// Generates the top-level class for Object Manager proxy.
|
|
static void GenerateProxy(const ServiceConfig& config,
|
|
const std::vector<Interface>& interfaces,
|
|
IndentedText* text);
|
|
|
|
// Generates Object Manager constructor.
|
|
static void AddConstructor(const ServiceConfig& config,
|
|
const std::string& class_name,
|
|
const std::vector<Interface>& interfaces,
|
|
IndentedText* text);
|
|
|
|
// Generates Object Manager destructor.
|
|
static void AddDestructor(const std::string& class_name,
|
|
const std::vector<Interface>& interfaces,
|
|
IndentedText* text);
|
|
|
|
// Generates GetObjectManagerProxy() method.
|
|
static void AddGetObjectManagerProxy(IndentedText* text);
|
|
|
|
// Generates code for interface-specific accessor methods
|
|
static void AddInterfaceAccessors(const Interface& interface,
|
|
IndentedText* text);
|
|
|
|
// Generates OnPropertyChanged() method.
|
|
static void AddOnPropertyChanged(const std::vector<Interface>& interfaces,
|
|
IndentedText* text);
|
|
|
|
// Generates ObjectAdded() method.
|
|
static void AddObjectAdded(const ServiceConfig& config,
|
|
const std::vector<Interface>& interfaces,
|
|
IndentedText* text);
|
|
|
|
// Generates ObjectRemoved() method.
|
|
static void AddObjectRemoved(const std::vector<Interface>& interfaces,
|
|
IndentedText* text);
|
|
|
|
// Generates CreateProperties() method.
|
|
static void AddCreateProperties(const std::vector<Interface>& interfaces,
|
|
const std::string& class_name,
|
|
IndentedText* text);
|
|
|
|
// Generates data members of the class.
|
|
static void AddDataMembers(const ServiceConfig& config,
|
|
const std::vector<Interface>& interfaces,
|
|
const std::string& class_name,
|
|
IndentedText* text);
|
|
};
|
|
// Generates the signal handler name for a given signal name.
|
|
static std::string GetHandlerNameForSignal(const std::string& signal);
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(ProxyGenerator);
|
|
};
|
|
|
|
} // namespace chromeos_dbus_bindings
|
|
|
|
#endif // CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_
|