import { type Coverage } from './coverage';
import type { CoverageResult } from '../../languages/capabilities/types';
/**
 * Pure parser for JaCoCo's XML report (DTD: `report.dtd`). The structure:
 *
 *   <report name="...">
 *     <package name="com/example">
 *       <class name="com/example/Foo" sourcefilename="Foo.kt">...</class>
 *       <sourcefile name="Foo.kt">
 *         <line nr="N" mi="..." ci="..." mb="..." cb="..."/>
 *         <counter type="LINE" missed="X" covered="Y"/>
 *       </sourcefile>
 *       <counter type="LINE" missed="X" covered="Y"/>
 *     </package>
 *     <counter type="LINE" missed="X" covered="Y"/>
 *   </report>
 *
 * Per-file coverage comes from `<sourcefile>` blocks: their LINE counter
 * holds the file's missed/covered totals. Project-level total comes from
 * the top-level `<counter type="LINE">` (last in the document).
 *
 * Path attribution joins `<package name>` (forward-slashed, JVM-style)
 * with `<sourcefile name>` to produce the canonical relative path the
 * downstream consumers expect (`com/example/Foo.kt` or
 * `com/example/Foo.java`). JVM bytecode namespacing isn't 1:1 with
 * on-disk source paths in multi-module projects — accepted limitation
 * (matches C#'s cobertura attribution).
 *
 * Returns null when no `<counter type="LINE">` exists at the top level
 * — that's JaCoCo's "no coverage data" signal, distinct from "0%
 * coverage" (where the counter exists with covered=0).
 *
 * Language-agnostic: works for Kotlin (.kt), Java (.java), and any
 * other JVM language whose JaCoCo output respects the `<package>` /
 * `<sourcefile>` shape — `<sourcefile name>` carries the on-disk
 * filename verbatim so the parser doesn't need to know the language.
 */
export declare function parseJaCoCoXml(raw: string, sourceFile: string, _cwd: string): Coverage | null;
/**
 * Standard JaCoCo report locations across JVM build tools and project
 * layouts:
 *
 *   GRADLE (kotlin + java):
 *   - app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
 *     (Android default — `app` module, `jacocoTestReport` task)
 *   - build/reports/jacoco/test/jacocoTestReport.xml
 *     (plain JVM via the `jacoco` plugin's default `test` task)
 *   - build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml
 *     (multi-module aggregate; many builds rename the task)
 *
 *   MAVEN (java):
 *   - target/site/jacoco/jacoco.xml
 *     (default Maven JaCoCo plugin — single-module Java)
 *   - target/site/jacoco-aggregate/jacoco.xml
 *     (Maven multi-module aggregate via jacoco-maven-plugin's
 *     `report-aggregate` goal)
 *
 *   FALLBACKS:
 *   - jacocoTestReport.xml (top-level — fixture / direct path)
 *   - jacoco.xml (top-level — Maven fixture / direct path)
 *
 * Returns the first existing path, relative to cwd. Conservative
 * priority: most specific build-tool conventions first, root
 * fallbacks last.
 */
export declare function findJaCoCoReport(cwd: string): string | null;
/**
 * Locate + parse the JaCoCo XML report under cwd, wrap the result in a
 * `CoverageResult` envelope. Identical glue across JVM packs (kotlin,
 * java) — no language-specific dispatch needed because JaCoCo's
 * `<sourcefile name>` carries the on-disk filename verbatim and the
 * file extension survives intact through the parser. Both packs'
 * `coverageProvider.gather` should delegate here.
 */
export declare function gatherJaCoCoCoverageResult(cwd: string): CoverageResult | null;
//# sourceMappingURL=jacoco.d.ts.map