Files
odfstudio/codemaker/source/rustmaker/cpp_include_manager.hxx
T
Mohamed Ali d9f05dc007 Rust Bindings: Add rustmaker (Rust codemaker)
The rustmaker provides comprehensive support for converting UNO type definitions into idiomatic Rust code with proper memory safety and type system integration.

Also adds the RustFile, RustOptions, and RustProducer classes to handle
Rust code generation, file management, and command line option parsing
for various UNO type kinds such as enums, structs, and interfaces.

Change-Id: Iaf87af13352c55e81c1745ef7a8f591c3e61e0a4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188088
Reviewed-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Tested-by: Jenkins
2025-09-11 21:38:59 +02:00

87 lines
2.7 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#pragma once
#include "type_analyzer.hxx"
#include <rtl/string.hxx>
// Forward declaration
class CppFile;
/**
* Manages dynamic generation of C++ includes and namespace declarations
* based on type analysis results.
*/
class CppIncludeManager
{
public:
/**
* Constructor that takes type analysis results.
*
* @param typeInfo The type analysis results from TypeAnalyzer.
*/
explicit CppIncludeManager(const TypeAnalyzer::TypeInfo& typeInfo);
/**
* Writes the necessary #include directives to the C++ file.
*
* @param file The CppFile to write to.
* @param interfaceName The name of the interface being processed (for self-include).
*/
void dumpIncludes(CppFile& file, std::string_view interfaceName);
/**
* Writes the necessary using namespace declarations to the C++ file.
*
* @param file The CppFile to write to.
*/
void dumpNamespaces(CppFile& file);
private:
const TypeAnalyzer::TypeInfo& m_typeInfo;
/**
* Writes standard system includes that are always needed.
*
* @param file The CppFile to write to.
*/
void writeStandardIncludes(CppFile& file);
/**
* Writes UNO-specific includes based on type analysis.
*
* @param file The CppFile to write to.
*/
void writeUnoIncludes(CppFile& file);
/**
* Writes interface-specific includes.
*
* @param file The CppFile to write to.
* @param interfaceName The name of the interface being processed.
*/
void writeInterfaceIncludes(CppFile& file, std::string_view interfaceName);
/**
* Calculates relative include paths like cppumaker does.
* This generates the proper relative path from the current file being generated
* to the target dependency file.
*
* @param file The current file being generated (provides context for relative path)
* @param targetType The UNO type name (e.g., "com.sun.star.beans.Property")
* @param extension The file extension to use (e.g., ".hxx", ".hpp")
* @return Properly formatted include statement with quotes
*/
static OString calculateRelativeIncludePath(const CppFile& file, const OString& targetType,
const std::string& extension);
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */