1// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMEOS_DBUS_BINDINGS_HEADER_GENERATOR_H_
6#define CHROMEOS_DBUS_BINDINGS_HEADER_GENERATOR_H_
7
8#include <string>
9#include <vector>
10
11#include <base/macros.h>
12
13namespace base {
14
15class FilePath;
16
17};
18
19namespace chromeos_dbus_bindings {
20
21struct Interface;
22class  IndentedText;
23
24// General D-Bus service configuration settings used by Adaptor/Proxy code
25// generators.
26struct ServiceConfig {
27  // D-Bus service name to be used when constructing proxy objects.
28  // If omitted (empty), the service name parameter will be added to the
29  // constructor of generated proxy class(es).
30  std::string service_name;
31  // Object Manager settings.
32  struct {
33    // The name of the Object Manager class to use. If empty, no object manager
34    // is generated in the proxy code (this also disables property support on
35    // proxy objects).
36    // This is a "fake" name used to generate namespaces and the actual class
37    // name for the object manager proxy. This name has no relationship to the
38    // actual D-Bus properties of the actual object manager.
39    std::string name;
40    // The D-Bus path to Object Manager instance.
41    std::string object_path;
42  } object_manager;
43
44  // A list of interfaces we should ignore and not generate any adaptors and
45  // proxies for.
46  std::vector<std::string> ignore_interfaces;
47};
48
49class HeaderGenerator {
50 protected:
51  // Create a unique header guard string to protect multiple includes of header.
52  static std::string GenerateHeaderGuard(const base::FilePath& output_file);
53
54  // Used to decide whether the argument should be a const reference.
55  static bool IsIntegralType(const std::string& type);
56
57  // If |type| is a non-integral type, converts it into a const reference.
58  static void MakeConstReferenceIfNeeded(std::string* type);
59
60  // Writes indented text to a file.
61  static bool WriteTextToFile(const base::FilePath& output_file,
62                              const IndentedText& text);
63
64  // Generate a name of a method/signal argument based on the name provided in
65  // the XML file. If |arg_name| is empty, it generates a name using
66  // the |arg_index| counter.
67  static std::string GetArgName(const char* prefix,
68                                const std::string& arg_name,
69                                int arg_index);
70
71  static const int kScopeOffset = 1;
72  static const int kBlockOffset = 2;
73  static const int kLineContinuationOffset = 4;
74
75 private:
76  DISALLOW_COPY_AND_ASSIGN(HeaderGenerator);
77};
78
79}  // namespace chromeos_dbus_bindings
80
81#endif  // CHROMEOS_DBUS_BINDINGS_HEADER_GENERATOR_H_
82