Babysitter 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.
install
source · Clone the upstream repo
git clone https://github.com/a5c-ai/babysitter
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/a5c-ai/babysitter "$T" && mkdir -p ~/.claude/skills && cp -r "$T/library/specializations/technical-documentation/skills/doxygen-javadoc" ~/.claude/skills/a5c-ai-babysitter-doxygen-javadoc && rm -rf "$T"
manifest:
library/specializations/technical-documentation/skills/doxygen-javadoc/SKILL.mdsource content
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
{ "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
- Detect project type - Identify C/C++/Java project
- Locate sources - Find source files and headers
- Generate config - Create Doxyfile or configure Maven
- Parse comments - Extract documentation from source
- Generate diagrams - Create call graphs (if enabled)
- Build output - Generate HTML/PDF/XML
- 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
- 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