Назад към всички

doxygen-javadoc

// Documentation generation for C, C++, and Java codebases using Doxygen and Javadoc. Extract API documentation from source code, generate cross-references, call graphs, and comprehensive technical documentation.

$ git log --oneline --stat
stars:384
forks:73
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
namedoxygen-javadoc
descriptionDocumentation generation for C, C++, and Java codebases using Doxygen and Javadoc. Extract API documentation from source code, generate cross-references, call graphs, and comprehensive technical documentation.
allowed-toolsRead, Write, Edit, Bash, Glob, Grep
backlog-idSK-015
metadata[object Object]

Doxygen/Javadoc Skill

Generate comprehensive API documentation for C, C++, Java, and other languages using Doxygen and Javadoc with cross-references, call graphs, and coverage analysis.

Capabilities

  • Configure Doxygen for C/C++/Java projects
  • Generate Javadoc for Java codebases
  • Create cross-reference documentation
  • Generate call graphs and dependency visualizations
  • Analyze documentation coverage
  • Support custom tag definitions
  • Multiple output formats (HTML, LaTeX, PDF, XML)
  • Integrate with build systems (CMake, Maven, Gradle)

Usage

Invoke this skill when you need to:

  • Document C/C++ libraries and applications
  • Generate Java API documentation
  • Create reference documentation with diagrams
  • Set up automated documentation builds
  • Analyze code structure and dependencies

Inputs

ParameterTypeRequiredDescription
projectPathstringYesRoot path of the project
toolstringNodoxygen or javadoc (auto-detected)
sourceDirstringNoSource directory (default: src)
outputDirstringNoOutput directory (default: docs)
outputFormatarrayNohtml, latex, pdf, xml, man
includeGraphsbooleanNoGenerate call/dependency graphs
configFilestringNoExisting Doxyfile or pom.xml path
coverageReportbooleanNoGenerate coverage analysis

Input Example

{
  "projectPath": "./mylib",
  "tool": "doxygen",
  "sourceDir": "src",
  "outputDir": "docs/api",
  "outputFormat": ["html", "xml"],
  "includeGraphs": true,
  "coverageReport": true
}

Output Structure

Doxygen Output

docs/api/
├── html/
│   ├── index.html           # Main documentation page
│   ├── annotated.html       # Class/struct list
│   ├── files.html           # File list
│   ├── modules.html         # Module grouping
│   ├── namespaces.html      # Namespace documentation
│   ├── hierarchy.html       # Class hierarchy
│   ├── class_*.html         # Individual class pages
│   ├── struct_*.html        # Struct documentation
│   ├── group__*.html        # Module documentation
│   ├── *_8h.html            # Header file documentation
│   └── search/              # Search index
├── xml/
│   ├── index.xml            # XML index
│   ├── class_*.xml          # Class XML
│   └── doxygen-layout.xml   # Layout configuration
├── latex/                   # LaTeX output (if enabled)
└── coverage.json            # Documentation coverage

Javadoc Output

docs/api/
├── index.html               # Package overview
├── overview-summary.html    # Overview page
├── allclasses-index.html    # Class index
├── allpackages-index.html   # Package index
├── com/
│   └── example/
│       └── package/
│           ├── package-summary.html
│           ├── ClassName.html
│           └── ...
├── element-list              # Package list
└── member-search-index.js    # Search data

Doxygen Documentation Patterns

File Header

/**
 * @file database.h
 * @brief Database connection and query utilities.
 *
 * This module provides thread-safe database connection pooling
 * and query execution with automatic retry logic.
 *
 * @author Development Team
 * @date 2026-01-24
 * @version 1.0.0
 *
 * @copyright Copyright (c) 2026, Company Inc.
 */

Class Documentation

/**
 * @class ConnectionPool
 * @brief Thread-safe database connection pool.
 *
 * Manages a pool of database connections with configurable
 * minimum and maximum sizes. Connections are automatically
 * validated before use.
 *
 * @tparam Connection The connection type to pool
 *
 * @note This class is thread-safe.
 * @warning Do not exceed maxConnections in high-load scenarios.
 *
 * @see Connection
 * @see PoolConfig
 *
 * @code{.cpp}
 * ConnectionPool<MySqlConnection> pool(config);
 * auto conn = pool.acquire();
 * conn->execute("SELECT * FROM users");
 * pool.release(conn);
 * @endcode
 */
template<typename Connection>
class ConnectionPool {
public:
    /**
     * @brief Creates a new connection pool.
     *
     * @param config Pool configuration parameters
     * @throws ConfigurationError If config is invalid
     *
     * @pre config.maxConnections > 0
     * @post Pool is initialized with minConnections
     */
    explicit ConnectionPool(const PoolConfig& config);

    /**
     * @brief Acquires a connection from the pool.
     *
     * Blocks until a connection is available or timeout expires.
     *
     * @param timeout Maximum wait time in milliseconds
     * @return Shared pointer to the acquired connection
     * @throws TimeoutError If no connection available within timeout
     *
     * @par Thread Safety
     * This method is thread-safe.
     */
    std::shared_ptr<Connection> acquire(int timeout = 30000);

    /**
     * @brief Releases a connection back to the pool.
     *
     * @param conn The connection to release
     * @retval true Connection successfully returned
     * @retval false Connection was invalid or pool is closed
     */
    bool release(std::shared_ptr<Connection> conn);
};

Function Documentation

/**
 * @brief Executes a SQL query with parameter binding.
 *
 * @param[in] query The SQL query string with placeholders
 * @param[in] params Parameter values to bind
 * @param[out] results Query results (if SELECT)
 *
 * @return Number of affected rows (for INSERT/UPDATE/DELETE)
 *
 * @throws QueryError If query execution fails
 * @throws ConnectionError If database connection is lost
 *
 * @par Example
 * @code{.cpp}
 * std::vector<std::string> params = {"John", "25"};
 * ResultSet results;
 * int affected = executeQuery(
 *     "SELECT * FROM users WHERE name = ? AND age > ?",
 *     params,
 *     results
 * );
 * @endcode
 *
 * @par Performance
 * Query preparation is cached for repeated executions.
 *
 * @todo Add support for batch parameter binding
 * @bug Large result sets may cause memory issues (see #123)
 *
 * @since 1.0.0
 * @deprecated Use PreparedStatement::execute() instead
 */
int executeQuery(
    const std::string& query,
    const std::vector<std::string>& params,
    ResultSet& results
);

Module/Group Documentation

/**
 * @defgroup Database Database Module
 * @brief Database connectivity and operations.
 *
 * This module provides database abstraction layer with support
 * for multiple database backends.
 *
 * @{
 */

/**
 * @defgroup Database_Connection Connection Management
 * @brief Connection pooling and lifecycle.
 */

/**
 * @defgroup Database_Query Query Execution
 * @brief Query building and execution.
 */

/** @} */ // end of Database group

Javadoc Documentation Patterns

Package Documentation (package-info.java)

/**
 * Database connectivity and query utilities.
 *
 * <p>This package provides thread-safe database operations with
 * connection pooling and automatic retry logic.</p>
 *
 * <h2>Usage Example</h2>
 * <pre>{@code
 * ConnectionPool pool = new ConnectionPool.Builder()
 *     .maxConnections(10)
 *     .timeout(Duration.ofSeconds(30))
 *     .build();
 *
 * try (Connection conn = pool.acquire()) {
 *     ResultSet rs = conn.executeQuery("SELECT * FROM users");
 * }
 * }</pre>
 *
 * @author Development Team
 * @version 1.0.0
 * @since 1.0.0
 * @see com.example.database.ConnectionPool
 */
package com.example.database;

Class Documentation

/**
 * Thread-safe database connection pool.
 *
 * <p>Manages a pool of database connections with configurable
 * minimum and maximum sizes. Connections are validated before
 * being handed out.</p>
 *
 * <h2>Thread Safety</h2>
 * <p>This class is thread-safe. All public methods use proper
 * synchronization.</p>
 *
 * @param <T> The connection type to pool
 *
 * @author John Doe
 * @version 1.0.0
 * @since 1.0.0
 *
 * @see Connection
 * @see PoolConfig
 */
public class ConnectionPool<T extends Connection> implements AutoCloseable {

    /**
     * Creates a connection pool with the specified configuration.
     *
     * @param config the pool configuration
     * @throws IllegalArgumentException if config is null
     * @throws ConfigurationException if config values are invalid
     */
    public ConnectionPool(PoolConfig config) {
        // Implementation
    }

    /**
     * Acquires a connection from the pool.
     *
     * <p>This method blocks until a connection becomes available
     * or the specified timeout expires.</p>
     *
     * @param timeout maximum time to wait for a connection
     * @return a valid connection from the pool
     * @throws TimeoutException if no connection available within timeout
     * @throws PoolClosedException if the pool has been closed
     */
    public T acquire(Duration timeout) throws TimeoutException {
        // Implementation
    }

    /**
     * {@inheritDoc}
     *
     * <p>Closes all connections and releases resources.</p>
     */
    @Override
    public void close() {
        // Implementation
    }
}

Method Documentation with Code Examples

/**
 * Executes a parameterized SQL query.
 *
 * <p>Parameters are bound in the order provided. Use {@code ?}
 * as placeholder in the query string.</p>
 *
 * <h3>Example</h3>
 * <pre>{@code
 * List<User> users = db.query(
 *     "SELECT * FROM users WHERE age > ? AND status = ?",
 *     List.of(18, "active"),
 *     User.class
 * );
 * }</pre>
 *
 * @param <R> the result type
 * @param sql the SQL query with {@code ?} placeholders
 * @param params the parameter values (in order)
 * @param resultType the class to map results to
 * @return list of mapped results
 * @throws SQLException if query execution fails
 * @throws MappingException if result mapping fails
 *
 * @see #execute(String, List) for non-SELECT queries
 * @since 1.0.0
 */
public <R> List<R> query(String sql, List<?> params, Class<R> resultType)
        throws SQLException {
    // Implementation
}

Doxyfile Configuration

# Doxyfile configuration

# Project settings
PROJECT_NAME           = "MyLib"
PROJECT_NUMBER         = "1.0.0"
PROJECT_BRIEF          = "Database connectivity library"
PROJECT_LOGO           = logo.png

# Input settings
INPUT                  = src include
FILE_PATTERNS          = *.c *.cc *.cpp *.h *.hpp
RECURSIVE              = YES
EXCLUDE                = src/test src/vendor
EXCLUDE_PATTERNS       = *_test.cpp *_mock.h

# Output settings
OUTPUT_DIRECTORY       = docs
GENERATE_HTML          = YES
GENERATE_XML           = YES
GENERATE_LATEX         = NO

# HTML settings
HTML_OUTPUT            = html
HTML_EXTRA_STYLESHEET  = custom.css
SEARCHENGINE           = YES
DISABLE_INDEX          = NO
GENERATE_TREEVIEW      = YES

# Graph settings
HAVE_DOT               = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
CLASS_GRAPH            = YES
COLLABORATION_GRAPH    = YES
INCLUDE_GRAPH          = YES
INCLUDED_BY_GRAPH      = YES
DOT_IMAGE_FORMAT       = svg

# Documentation extraction
EXTRACT_ALL            = NO
EXTRACT_PRIVATE        = NO
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = YES

# Warning settings
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = YES
WARN_AS_ERROR          = NO

# Preprocessing
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
PREDEFINED             = DOXYGEN_SKIP

# Aliases for custom commands
ALIASES                = "thread_safe=\par Thread Safety\n"
ALIASES               += "performance=\par Performance\n"

Maven Javadoc Configuration

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.6.3</version>
    <configuration>
        <source>17</source>
        <show>protected</show>
        <nohelp>true</nohelp>
        <doclint>all,-missing</doclint>
        <additionalOptions>
            <additionalOption>-Xdoclint:none</additionalOption>
        </additionalOptions>
        <links>
            <link>https://docs.oracle.com/en/java/javase/17/docs/api/</link>
        </links>
        <tags>
            <tag>
                <name>apiNote</name>
                <placement>a</placement>
                <head>API Note:</head>
            </tag>
            <tag>
                <name>implSpec</name>
                <placement>a</placement>
                <head>Implementation Specification:</head>
            </tag>
            <tag>
                <name>implNote</name>
                <placement>a</placement>
                <head>Implementation Note:</head>
            </tag>
        </tags>
    </configuration>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Workflow

  1. Detect project type - Identify C/C++/Java project
  2. Locate sources - Find source files and headers
  3. Generate config - Create Doxyfile or configure Maven
  4. Parse comments - Extract documentation from source
  5. Generate diagrams - Create call graphs (if enabled)
  6. Build output - Generate HTML/PDF/XML
  7. Analyze coverage - Report documentation gaps

Dependencies

Doxygen

# Ubuntu/Debian
apt-get install doxygen graphviz

# macOS
brew install doxygen graphviz

# Windows (chocolatey)
choco install doxygen.install graphviz

Javadoc

# Included with JDK
java -version  # JDK 11+ recommended

Best Practices Applied

  • Document all public API elements
  • Use @brief for one-line summaries
  • Include @param for all parameters
  • Specify @return values
  • Document exceptions with @throws
  • Add @code examples for complex functions
  • Use @see for cross-references
  • Enable warning for undocumented items

References

Target Processes

  • api-doc-generation.js
  • sdk-doc-generation.js
  • arch-docs-c4.js
  • docs-audit.js