| // 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/indented_text.h" |
| #include "chromeos-dbus-bindings/interface.h" |
| #include "chromeos-dbus-bindings/service_config.h" |
| |
| namespace base { |
| |
| class FilePath; |
| |
| } // namespace base |
| |
| namespace chromeos_dbus_bindings { |
| |
| class IndentedText; |
| struct Interface; |
| |
| class ProxyGenerator { |
| public: |
| ProxyGenerator(); |
| ProxyGenerator(const ProxyGenerator&) = delete; |
| ProxyGenerator& operator=(const ProxyGenerator&) = delete; |
| |
| bool GenerateProxies(const ServiceConfig& config, |
| const std::vector<Interface>& interfaces, |
| const base::FilePath& output_file); |
| |
| 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. |
| void GenerateInterfaceProxyInterface(const ServiceConfig& config, |
| const Interface& interface, |
| IndentedText* text); |
| |
| // Generates one interface proxy. |
| void GenerateInterfaceProxy(const ServiceConfig& config, |
| const Interface& interface, |
| IndentedText* text); |
| |
| // Generates one interface mock object. |
| void GenerateInterfaceMock(const ServiceConfig& config, |
| const Interface& interface, |
| IndentedText* text); |
| |
| // Generates the constructor and destructor for the proxy. |
| void AddConstructor(const ServiceConfig& config, |
| const Interface& interface, |
| const std::string& class_name, |
| IndentedText* text); |
| void AddDestructor(const std::string& class_name, IndentedText* text); |
| |
| // Generates ReleaseObjectProxy() method to release ownership |
| // of the object proxy. |
| void AddReleaseObjectProxy(IndentedText* text); |
| |
| // Generates AddGetObjectPath() method. |
| void AddGetObjectPath(IndentedText* text); |
| |
| // Generates GetObjectProxy() method. |
| void AddGetObjectProxy(IndentedText* text); |
| |
| // Generates InitializeProperties() method and callback. |
| void AddInitializeProperties(const std::string& class_name, |
| bool declaration_only, |
| IndentedText* text); |
| |
| // Generates SetPropertyChanged() method and callback. |
| void AddSetPropertyChanged(const std::string& class_name, |
| bool declaration_only, |
| IndentedText* text); |
| |
| // Generates GetProperties() methods. |
| void AddGetProperties(IndentedText* text); |
| |
| // Generates OnPropertyChanged() method. |
| void AddOnPropertyChanged(IndentedText* text); |
| |
| // Generates logic permitting users to register handlers for signals. |
| 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. |
| void AddPropertySet(const ServiceConfig& config, |
| const Interface& interface, |
| IndentedText* text); |
| |
| // Generates the property accessors. |
| void AddProperties(const Interface& interface, |
| bool declaration_only, |
| IndentedText* text); |
| |
| // Generates a native C++ method which calls a D-Bus method on the proxy. |
| 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. |
| void AddAsyncMethodProxy(const Interface::Method& interface, |
| const std::string& interface_name, |
| bool declaration_only, |
| IndentedText* text); |
| |
| // Generates a mock for blocking D-Bus method. |
| void AddMethodMock(const Interface::Method& interface, |
| const std::string& interface_name, |
| IndentedText* text); |
| |
| // Generates a mock for asynchronous D-Bus method. |
| 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. |
| 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. |
| void AddSignalHandlerRegistrationMock(const Interface::Signal& signal, |
| IndentedText* text); |
| |
| // Generate the signal callback argument of a signal handler. |
| 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. |
| std::string GetHandlerNameForSignal(const std::string& signal); |
| }; |
| |
| } // namespace chromeos_dbus_bindings |
| |
| #endif // CHROMEOS_DBUS_BINDINGS_PROXY_GENERATOR_H_ |