home / skills / a5c-ai / babysitter / doxygen-javadoc

This skill generates comprehensive API documentation for C, C++, and Java projects using Doxygen and Javadoc, producing cross-references, graphs, and coverage

npx playbooks add skill a5c-ai/babysitter --skill doxygen-javadoc

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
14.4 KB
---
name: doxygen-javadoc
description: 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.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
backlog-id: SK-015
metadata:
  author: babysitter-sdk
  version: "1.0.0"
---

# 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

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| projectPath | string | Yes | Root path of the project |
| tool | string | No | doxygen or javadoc (auto-detected) |
| sourceDir | string | No | Source directory (default: src) |
| outputDir | string | No | Output directory (default: docs) |
| outputFormat | array | No | html, latex, pdf, xml, man |
| includeGraphs | boolean | No | Generate call/dependency graphs |
| configFile | string | No | Existing Doxyfile or pom.xml path |
| coverageReport | boolean | No | Generate coverage analysis |

### Input Example

```json
{
  "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

```cpp
/**
 * @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

```cpp
/**
 * @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

```cpp
/**
 * @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

```cpp
/**
 * @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)

```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

```java
/**
 * 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

```java
/**
 * 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

```ini
# 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

```xml
<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

```bash
# Ubuntu/Debian
apt-get install doxygen graphviz

# macOS
brew install doxygen graphviz

# Windows (chocolatey)
choco install doxygen.install graphviz
```

### Javadoc

```bash
# 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

- Doxygen Manual: https://www.doxygen.nl/manual/
- Javadoc Guide: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html
- Doxygen Special Commands: https://www.doxygen.nl/manual/commands.html
- Graphviz: https://graphviz.org/

## Target Processes

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

Overview

This skill generates comprehensive API documentation for C, C++, and Java codebases using Doxygen and Javadoc. It produces cross-references, call graphs, dependency visualizations, and documentation coverage reports. The skill integrates with common build systems and outputs multiple formats (HTML, XML, PDF, LaTeX).

How this skill works

The skill detects the project type and locates source files and headers. It generates or adapts configuration (Doxyfile or Maven/Gradle settings), parses inline comments and annotations, and runs Doxygen or Javadoc to produce HTML, XML, and other outputs. Optional steps include creating call/caller graphs with Graphviz and producing a coverage report highlighting undocumented API surface.

When to use it

  • When you need API reference sites for C, C++, or Java libraries and applications.
  • To automate docs generation in CI/CD pipelines (CMake, Maven, Gradle).
  • To produce call graphs and dependency diagrams for architecture reviews.
  • When auditing documentation coverage and finding undocumented public APIs.
  • To export docs in multiple formats for release artifacts or user manuals.

Best practices

  • Document all public API elements and use @brief/one-line summaries for every symbol.
  • Include @param, @return, and @throws tags and add @code examples for complex behavior.
  • Enable graph generation (HAVE_DOT) to surface call and dependency relationships when useful.
  • Integrate docs generation into the build pipeline and treat doc warnings as actionable items.
  • Provide a curated Doxyfile or Maven plugin configuration to control extraction and output formats.

Example use cases

  • Generate an HTML API portal for a C++ library with class hierarchies and search index.
  • Build Javadoc for a Java microservice and publish package and class overviews.
  • Produce XML outputs for downstream tooling or static analysis consumers.
  • Create call graphs to analyze hotspots and tight coupling before refactoring.
  • Run coverage analysis to identify undocumented public functions and prioritize documentation work.

FAQ

Which projects does the skill support?

C, C++, and Java projects are supported. The skill auto-detects project type and adapts configuration for Doxygen or Javadoc.

What output formats can be produced?

HTML, XML, LaTeX, PDF (via LaTeX), and man pages are supported depending on tooling configuration.

How are graphs generated?

Graphs use Graphviz (DOT). Enable HAVE_DOT and graph options (CALL_GRAPH, CLASS_GRAPH, etc.) in the Doxyfile to produce SVG/PNG diagrams.