@vyuhlabs/dxkit 2.4.4 → 2.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +202 -0
- package/README.md +15 -11
- package/dist/analyzers/tools/jacoco.d.ts +76 -0
- package/dist/analyzers/tools/jacoco.d.ts.map +1 -0
- package/dist/analyzers/tools/jacoco.js +228 -0
- package/dist/analyzers/tools/jacoco.js.map +1 -0
- package/dist/analyzers/tools/osv-scanner-fix.d.ts +20 -0
- package/dist/analyzers/tools/osv-scanner-fix.d.ts.map +1 -1
- package/dist/analyzers/tools/osv-scanner-fix.js +45 -20
- package/dist/analyzers/tools/osv-scanner-fix.js.map +1 -1
- package/dist/analyzers/tools/osv-scanner-maven.d.ts +42 -0
- package/dist/analyzers/tools/osv-scanner-maven.d.ts.map +1 -0
- package/dist/analyzers/tools/osv-scanner-maven.js +161 -0
- package/dist/analyzers/tools/osv-scanner-maven.js.map +1 -0
- package/dist/analyzers/tools/runner.d.ts +47 -0
- package/dist/analyzers/tools/runner.d.ts.map +1 -1
- package/dist/analyzers/tools/runner.js +79 -0
- package/dist/analyzers/tools/runner.js.map +1 -1
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +22 -0
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -2
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +10 -1
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts +67 -0
- package/dist/languages/java.d.ts.map +1 -0
- package/dist/languages/java.js +419 -0
- package/dist/languages/java.js.map +1 -0
- package/dist/languages/kotlin.d.ts +1 -52
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +14 -286
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/types.d.ts +9 -1
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/tools-cli.d.ts +16 -1
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +69 -6
- package/dist/tools-cli.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/templates/.claude/rules/java.md +11 -0
- package/templates/configs/java/README.md +6 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.java = void 0;
|
|
37
|
+
exports.extractJavaImportsRaw = extractJavaImportsRaw;
|
|
38
|
+
exports.mapPmdRuleSeverity = mapPmdRuleSeverity;
|
|
39
|
+
exports.parsePmdOutput = parsePmdOutput;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const exclusions_1 = require("../analyzers/tools/exclusions");
|
|
43
|
+
const jacoco_1 = require("../analyzers/tools/jacoco");
|
|
44
|
+
const osv_scanner_maven_1 = require("../analyzers/tools/osv-scanner-maven");
|
|
45
|
+
const runner_1 = require("../analyzers/tools/runner");
|
|
46
|
+
const tool_registry_1 = require("../analyzers/tools/tool-registry");
|
|
47
|
+
// ─── Detection ──────────────────────────────────────────────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* Walk the project tree looking for a `.java` source file. Java's
|
|
50
|
+
* standard layout (`src/main/java/com/example/...`) is much deeper
|
|
51
|
+
* than Kotlin's `src/main/kotlin/`, so this walk uses a deeper bound
|
|
52
|
+
* than the kotlin pack's depth-3 — package hierarchies of 4-5
|
|
53
|
+
* segments are common in real-world Java projects. Stops short of
|
|
54
|
+
* a full filesystem scan (build/, target/, .gradle/, node_modules/
|
|
55
|
+
* are pruned).
|
|
56
|
+
*/
|
|
57
|
+
function hasJavaSourceWithinDepth(cwd, maxDepth = 5) {
|
|
58
|
+
function search(dir, depth) {
|
|
59
|
+
if (depth > maxDepth)
|
|
60
|
+
return false;
|
|
61
|
+
let entries;
|
|
62
|
+
try {
|
|
63
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
for (const e of entries) {
|
|
69
|
+
if (e.name.startsWith('.') ||
|
|
70
|
+
['node_modules', 'build', '.gradle', 'target', 'out'].includes(e.name)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (e.isFile() && e.name.endsWith('.java'))
|
|
74
|
+
return true;
|
|
75
|
+
if (e.isDirectory() && search(path.join(dir, e.name), depth + 1))
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return search(cwd, 0);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Java pack detection. Strict: requires evidence of actual Java SOURCE,
|
|
84
|
+
* not just a JVM build manifest. `pom.xml` alone is NOT a Java signal —
|
|
85
|
+
* Kotlin (incl. our own `test/fixtures/benchmarks/kotlin/pom.xml` for
|
|
86
|
+
* osv-scanner) and Scala projects also ship Maven POMs. The two
|
|
87
|
+
* unambiguous signals:
|
|
88
|
+
*
|
|
89
|
+
* 1. `src/main/java/` directory exists — the path itself is the
|
|
90
|
+
* Maven/Gradle convention for Java sources.
|
|
91
|
+
* 2. A `.java` file lives within depth 5 of cwd (Java package
|
|
92
|
+
* hierarchies are routinely 4-5 segments under `src/`).
|
|
93
|
+
*
|
|
94
|
+
* Mixed Kotlin+Java projects (legacy Android migrations, polyglot
|
|
95
|
+
* monorepos) activate BOTH packs — correct, the project genuinely is
|
|
96
|
+
* both. Pure Kotlin/Scala/Groovy projects with `pom.xml` but no
|
|
97
|
+
* `.java` source no longer false-trigger Java (10k.1.3 fix).
|
|
98
|
+
*/
|
|
99
|
+
function detectJava(cwd) {
|
|
100
|
+
// Standard Maven/Gradle Java layout — directory name is the signal.
|
|
101
|
+
if (fs.existsSync(path.join(cwd, 'src', 'main', 'java')))
|
|
102
|
+
return true;
|
|
103
|
+
// Otherwise require actual `.java` source presence.
|
|
104
|
+
return hasJavaSourceWithinDepth(cwd, 5);
|
|
105
|
+
}
|
|
106
|
+
// ─── Imports (regex extraction, no resolver) ───────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Extract `import com.foo.Bar;` paths from a Java source string. Handles:
|
|
109
|
+
* - regular imports: `import com.foo.Bar;`
|
|
110
|
+
* - static imports: `import static com.foo.Bar.method;`
|
|
111
|
+
* - wildcard imports: `import com.foo.*;`
|
|
112
|
+
* Strips line + block comments first so commented-out imports don't
|
|
113
|
+
* false-match.
|
|
114
|
+
*
|
|
115
|
+
* Exported for unit tests; consumed by `gatherJavaImportsResult`.
|
|
116
|
+
*/
|
|
117
|
+
function extractJavaImportsRaw(content) {
|
|
118
|
+
const out = [];
|
|
119
|
+
// Strip block comments first (they may span multiple lines and contain
|
|
120
|
+
// `import` text), then line comments.
|
|
121
|
+
const stripped = content.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/[^\n]*/g, '');
|
|
122
|
+
// Match `import` at line start (after optional whitespace), optionally
|
|
123
|
+
// `static`, then a dotted path with optional trailing `*`, then `;`.
|
|
124
|
+
// The `as` aliasing Kotlin allows isn't valid Java syntax.
|
|
125
|
+
const re = /^\s*import\s+(?:static\s+)?([\w.*]+)\s*;/gm;
|
|
126
|
+
let m;
|
|
127
|
+
while ((m = re.exec(stripped)) !== null) {
|
|
128
|
+
out.push(m[1]);
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Enumerate `.java` files under cwd and capture per-file imports. Java
|
|
134
|
+
* package paths don't 1:1 map to filesystem paths in all build layouts
|
|
135
|
+
* (a single package can span `src/main/java/com/foo/` *and*
|
|
136
|
+
* `src/test/java/com/foo/`, plus IDE-generated extras), so we don't
|
|
137
|
+
* produce `edges` — the resolution would be heuristic. Mirrors the
|
|
138
|
+
* kotlin/rust pack choice.
|
|
139
|
+
*/
|
|
140
|
+
function gatherJavaImportsResult(cwd) {
|
|
141
|
+
const excludes = (0, exclusions_1.getFindExcludeFlags)(cwd);
|
|
142
|
+
const raw = (0, runner_1.run)(`find . -type f -name "*.java" ${excludes} 2>/dev/null`, cwd);
|
|
143
|
+
if (!raw)
|
|
144
|
+
return null;
|
|
145
|
+
const extracted = new Map();
|
|
146
|
+
for (const line of raw.split('\n')) {
|
|
147
|
+
const p = line.trim();
|
|
148
|
+
if (!p)
|
|
149
|
+
continue;
|
|
150
|
+
const rel = p.replace(/^\.\//, '');
|
|
151
|
+
let content;
|
|
152
|
+
try {
|
|
153
|
+
content = fs.readFileSync(path.join(cwd, rel), 'utf-8');
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
extracted.set(rel, extractJavaImportsRaw(content));
|
|
159
|
+
}
|
|
160
|
+
if (extracted.size === 0)
|
|
161
|
+
return null;
|
|
162
|
+
return {
|
|
163
|
+
schemaVersion: 1,
|
|
164
|
+
tool: 'java-imports',
|
|
165
|
+
sourceExtensions: ['.java'],
|
|
166
|
+
extracted,
|
|
167
|
+
edges: new Map(),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const javaImportsProvider = {
|
|
171
|
+
source: 'java',
|
|
172
|
+
async gather(cwd) {
|
|
173
|
+
return gatherJavaImportsResult(cwd);
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
// ─── Test framework detection (build-file substring scan) ──────────────────
|
|
177
|
+
/**
|
|
178
|
+
* Detect which test framework a Java project uses by scanning Maven and
|
|
179
|
+
* Gradle build files for the canonical artifact substrings. Order of
|
|
180
|
+
* preference matches what coexisting projects most likely standardize
|
|
181
|
+
* on:
|
|
182
|
+
* - JUnit 5 (Jupiter) — modern default; `junit-jupiter` artifact
|
|
183
|
+
* - Spock — `org.spockframework` / `spock-core`
|
|
184
|
+
* - TestNG — `org.testng` / `:testng:`
|
|
185
|
+
* - JUnit 4 — `junit:junit` or any other `junit` mention as last
|
|
186
|
+
* resort, since `junit-jupiter` already matched JUnit 5
|
|
187
|
+
*
|
|
188
|
+
* Substring matching is intentional — same approach as the kotlin pack.
|
|
189
|
+
* Robust to syntactic variation across pom.xml (XML <artifactId>) and
|
|
190
|
+
* build.gradle{,.kts} (Groovy/Kotlin DSL string literals).
|
|
191
|
+
*/
|
|
192
|
+
function gatherJavaTestFrameworkResult(cwd) {
|
|
193
|
+
const buildFiles = ['pom.xml', 'build.gradle.kts', 'build.gradle'];
|
|
194
|
+
let combined = '';
|
|
195
|
+
for (const rel of buildFiles) {
|
|
196
|
+
if (!(0, runner_1.fileExists)(cwd, rel))
|
|
197
|
+
continue;
|
|
198
|
+
try {
|
|
199
|
+
combined += fs.readFileSync(path.join(cwd, rel), 'utf-8') + '\n';
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
/* ignore unreadable */
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (!combined)
|
|
206
|
+
return null;
|
|
207
|
+
if (combined.includes('junit-jupiter')) {
|
|
208
|
+
return { schemaVersion: 1, tool: 'java', name: 'junit5' };
|
|
209
|
+
}
|
|
210
|
+
if (combined.includes('org.spockframework') || combined.includes('spock-core')) {
|
|
211
|
+
return { schemaVersion: 1, tool: 'java', name: 'spock' };
|
|
212
|
+
}
|
|
213
|
+
if (combined.includes('org.testng') || combined.includes(':testng:')) {
|
|
214
|
+
return { schemaVersion: 1, tool: 'java', name: 'testng' };
|
|
215
|
+
}
|
|
216
|
+
if (combined.toLowerCase().includes('junit')) {
|
|
217
|
+
return { schemaVersion: 1, tool: 'java', name: 'junit4' };
|
|
218
|
+
}
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const javaTestFrameworkProvider = {
|
|
222
|
+
source: 'java',
|
|
223
|
+
async gather(cwd) {
|
|
224
|
+
return gatherJavaTestFrameworkResult(cwd);
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
// ─── Lint (PMD JSON output) ────────────────────────────────────────────────
|
|
228
|
+
/**
|
|
229
|
+
* Map PMD's 1-5 priority scale to dxkit's 4-tier severity. PMD's
|
|
230
|
+
* priority semantics (per official docs):
|
|
231
|
+
* 1 = High → critical
|
|
232
|
+
* 2 = Medium High → high
|
|
233
|
+
* 3 = Medium → medium
|
|
234
|
+
* 4 = Medium Low → low
|
|
235
|
+
* 5 = Low → low
|
|
236
|
+
*
|
|
237
|
+
* Defensive: unknown / missing priorities tier as 'medium' — visibility
|
|
238
|
+
* tilts toward "developer sees it" rather than "silently dropped". Same
|
|
239
|
+
* defensive-default approach as detekt / mapDetektSeverity.
|
|
240
|
+
*
|
|
241
|
+
* Exported for unit tests.
|
|
242
|
+
*/
|
|
243
|
+
function mapPmdRuleSeverity(priority) {
|
|
244
|
+
if (priority === 1)
|
|
245
|
+
return 'critical';
|
|
246
|
+
if (priority === 2)
|
|
247
|
+
return 'high';
|
|
248
|
+
if (priority === 3)
|
|
249
|
+
return 'medium';
|
|
250
|
+
if (priority === 4 || priority === 5)
|
|
251
|
+
return 'low';
|
|
252
|
+
return 'medium';
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Parse PMD 7.x JSON output (`pmd check -f json`) into a tiered
|
|
256
|
+
* SeverityCounts. Shape:
|
|
257
|
+
*
|
|
258
|
+
* {
|
|
259
|
+
* "formatVersion": 0,
|
|
260
|
+
* "pmdVersion": "7.24.0",
|
|
261
|
+
* "files": [
|
|
262
|
+
* {
|
|
263
|
+
* "filename": "<path>",
|
|
264
|
+
* "violations": [
|
|
265
|
+
* {
|
|
266
|
+
* "beginline": N, "begincolumn": N,
|
|
267
|
+
* "endline": N, "endcolumn": N,
|
|
268
|
+
* "description": "...",
|
|
269
|
+
* "rule": "<ruleName>",
|
|
270
|
+
* "ruleset": "<rulesetCategory>",
|
|
271
|
+
* "priority": 1-5,
|
|
272
|
+
* "externalInfoUrl": "..."
|
|
273
|
+
* }
|
|
274
|
+
* ]
|
|
275
|
+
* }
|
|
276
|
+
* ],
|
|
277
|
+
* "suppressedViolations": [],
|
|
278
|
+
* "processingErrors": [],
|
|
279
|
+
* "configurationErrors": []
|
|
280
|
+
* }
|
|
281
|
+
*
|
|
282
|
+
* Tolerates malformed JSON (returns empty counts) and missing
|
|
283
|
+
* `files`/`violations` arrays. Real-fixture tests live in
|
|
284
|
+
* `test/languages-java.test.ts` against
|
|
285
|
+
* `test/fixtures/raw/java/pmd-output.json`.
|
|
286
|
+
*
|
|
287
|
+
* Exported for unit tests; consumed by `gatherJavaLintResult`.
|
|
288
|
+
*/
|
|
289
|
+
function parsePmdOutput(raw) {
|
|
290
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
291
|
+
let parsed;
|
|
292
|
+
try {
|
|
293
|
+
parsed = JSON.parse(raw);
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
return counts;
|
|
297
|
+
}
|
|
298
|
+
for (const file of parsed.files ?? []) {
|
|
299
|
+
for (const v of file.violations ?? []) {
|
|
300
|
+
counts[mapPmdRuleSeverity(v.priority)]++;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return counts;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Single source of truth for the java pack's lint gathering. Consumed
|
|
307
|
+
* by `javaLintProvider`.
|
|
308
|
+
*
|
|
309
|
+
* PMD 7.x switched to subcommand syntax (`pmd check -d <dir> -R
|
|
310
|
+
* <ruleset> -f <format>`). We use the built-in
|
|
311
|
+
* `rulesets/java/quickstart.xml` — the curated subset PMD recommends
|
|
312
|
+
* for general scanning across rule categories (Best Practices, Code
|
|
313
|
+
* Style, Design, Documentation, Error Prone, Multithreading,
|
|
314
|
+
* Performance, Security). Projects that ship their own
|
|
315
|
+
* `pmd-ruleset.xml` aren't honored yet — Recipe v3 candidate if
|
|
316
|
+
* customer-need surfaces.
|
|
317
|
+
*
|
|
318
|
+
* Exit codes: PMD exits 0 (no violations), 4 (violations found),
|
|
319
|
+
* other (error). Our `run` helper captures stdout regardless of exit
|
|
320
|
+
* code, so violations-found doesn't block parsing.
|
|
321
|
+
*/
|
|
322
|
+
function gatherJavaLintResult(cwd) {
|
|
323
|
+
// Activation gate — match detectJava (no pom.xml-alone trigger).
|
|
324
|
+
if (!fs.existsSync(path.join(cwd, 'src', 'main', 'java')) && !hasJavaSourceWithinDepth(cwd, 5)) {
|
|
325
|
+
return { kind: 'unavailable', reason: 'no java source' };
|
|
326
|
+
}
|
|
327
|
+
const pmd = (0, tool_registry_1.findTool)(tool_registry_1.TOOL_DEFS.pmd, cwd);
|
|
328
|
+
if (!pmd.available || !pmd.path) {
|
|
329
|
+
return { kind: 'unavailable', reason: 'not installed' };
|
|
330
|
+
}
|
|
331
|
+
const cmd = `${pmd.path} check -d . -R rulesets/java/quickstart.xml -f json 2>/dev/null`;
|
|
332
|
+
const raw = (0, runner_1.run)(cmd, cwd, 120000);
|
|
333
|
+
if (!raw)
|
|
334
|
+
return { kind: 'unavailable', reason: 'no pmd output' };
|
|
335
|
+
const counts = parsePmdOutput(raw);
|
|
336
|
+
const envelope = { schemaVersion: 1, tool: 'pmd', counts };
|
|
337
|
+
return { kind: 'success', envelope };
|
|
338
|
+
}
|
|
339
|
+
const javaLintProvider = {
|
|
340
|
+
source: 'java',
|
|
341
|
+
async gather(cwd) {
|
|
342
|
+
const outcome = gatherJavaLintResult(cwd);
|
|
343
|
+
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
// ─── Coverage (JaCoCo XML — shared with kotlin pack) ───────────────────────
|
|
347
|
+
//
|
|
348
|
+
// Per CLAUDE.md rule #2 ("Each tool has ONE gather function"), the
|
|
349
|
+
// JaCoCo parser + locator + gather glue all live in
|
|
350
|
+
// `src/analyzers/tools/jacoco.ts`. Both kotlin and java packs delegate.
|
|
351
|
+
// Java's Maven paths (`target/site/jacoco/jacoco.xml`) and Gradle paths
|
|
352
|
+
// share the same candidate list because they're mutually exclusive on
|
|
353
|
+
// any given project root.
|
|
354
|
+
const javaCoverageProvider = {
|
|
355
|
+
source: 'java',
|
|
356
|
+
async gather(cwd) {
|
|
357
|
+
return (0, jacoco_1.gatherJaCoCoCoverageResult)(cwd);
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
// ─── DepVulns (osv-scanner against Maven — shared with kotlin pack) ────────
|
|
361
|
+
//
|
|
362
|
+
// Same shape as coverage above — parser + manifest discovery + tool
|
|
363
|
+
// invocation + CVSS resolution all live in
|
|
364
|
+
// `src/analyzers/tools/osv-scanner-maven.ts` (extracted from kotlin
|
|
365
|
+
// pack in 10k.1.4 for SSOT). Java contributes the same Maven manifest
|
|
366
|
+
// candidates (pom.xml, gradle.lockfile, gradle/verification-metadata.xml)
|
|
367
|
+
// — JVM ecosystem manifests are language-agnostic.
|
|
368
|
+
const javaDepVulnsProvider = {
|
|
369
|
+
source: 'java',
|
|
370
|
+
async gather(cwd) {
|
|
371
|
+
const outcome = await (0, osv_scanner_maven_1.gatherOsvScannerMavenDepVulnsResult)(cwd, 'java');
|
|
372
|
+
return outcome.kind === 'success' ? outcome.envelope : null;
|
|
373
|
+
},
|
|
374
|
+
};
|
|
375
|
+
// ─── Pack export ────────────────────────────────────────────────────────────
|
|
376
|
+
exports.java = {
|
|
377
|
+
id: 'java',
|
|
378
|
+
displayName: 'Java',
|
|
379
|
+
sourceExtensions: ['.java'],
|
|
380
|
+
// JUnit 4/5, TestNG, Spock all converge on these naming conventions.
|
|
381
|
+
// *IT.java is the Maven Failsafe convention for integration tests.
|
|
382
|
+
testFilePatterns: ['*Test.java', '*Tests.java', '*IT.java'],
|
|
383
|
+
// Build artifact dirs across Maven (target), Gradle (build, .gradle,
|
|
384
|
+
// out). Universal exclusions live in src/analyzers/tools/exclusions.ts.
|
|
385
|
+
extraExcludes: ['target', 'build', '.gradle', 'out'],
|
|
386
|
+
detect: detectJava,
|
|
387
|
+
tools: ['pmd', 'osv-scanner'],
|
|
388
|
+
// Semgrep ships a Java ruleset under p/java.
|
|
389
|
+
semgrepRulesets: ['p/java'],
|
|
390
|
+
capabilities: {
|
|
391
|
+
imports: javaImportsProvider,
|
|
392
|
+
testFramework: javaTestFrameworkProvider,
|
|
393
|
+
coverage: javaCoverageProvider,
|
|
394
|
+
lint: javaLintProvider,
|
|
395
|
+
depVulns: javaDepVulnsProvider,
|
|
396
|
+
},
|
|
397
|
+
// ─── LP-recipe metadata ────────────────────────────────────────────────
|
|
398
|
+
permissions: [
|
|
399
|
+
'Bash(mvn:*)',
|
|
400
|
+
'Bash(./gradlew:*)',
|
|
401
|
+
'Bash(gradle:*)',
|
|
402
|
+
'Bash(java:*)',
|
|
403
|
+
'Bash(javac:*)',
|
|
404
|
+
],
|
|
405
|
+
ruleFile: 'java.md',
|
|
406
|
+
templateFiles: [],
|
|
407
|
+
// doctor checks the runtime + build tool + linter. `java` is the
|
|
408
|
+
// JVM runtime PMD/JaCoCo wrappers shell into; `mvn` is the dominant
|
|
409
|
+
// build tool; `pmd` is the canonical linter wired in 10k.1.3.
|
|
410
|
+
cliBinaries: ['java', 'mvn', 'pmd'],
|
|
411
|
+
// Java 17 is current LTS as of 2026-04 with very wide deployment.
|
|
412
|
+
defaultVersion: '17',
|
|
413
|
+
projectYamlBlock: ({ config, enabled }) => [
|
|
414
|
+
` java:`,
|
|
415
|
+
` enabled: ${enabled}`,
|
|
416
|
+
` version: "${config.versions['java'] ?? '17'}"`,
|
|
417
|
+
].join('\n'),
|
|
418
|
+
};
|
|
419
|
+
//# sourceMappingURL=java.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.js","sourceRoot":"","sources":["../../src/languages/java.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { DepVulnFinding, SeverityCounts } from './capabilities/types';
|
|
1
|
+
import type { SeverityCounts } from './capabilities/types';
|
|
3
2
|
import type { LanguageSupport, LintSeverity } from './types';
|
|
4
3
|
/**
|
|
5
4
|
* Map detekt's lowercased Severity enum to dxkit's four-tier scheme.
|
|
@@ -38,56 +37,6 @@ export declare function mapDetektSeverity(severity: string): LintSeverity;
|
|
|
38
37
|
* Exported for unit tests; consumed by `gatherKotlinLintResult`.
|
|
39
38
|
*/
|
|
40
39
|
export declare function parseDetektCheckstyleXml(raw: string): SeverityCounts;
|
|
41
|
-
/**
|
|
42
|
-
* Pure parser for JaCoCo's XML report (DTD: `report.dtd`). The structure:
|
|
43
|
-
*
|
|
44
|
-
* <report name="...">
|
|
45
|
-
* <package name="com/example">
|
|
46
|
-
* <class name="com/example/Foo" sourcefilename="Foo.kt">...</class>
|
|
47
|
-
* <sourcefile name="Foo.kt">
|
|
48
|
-
* <line nr="N" mi="..." ci="..." mb="..." cb="..."/>
|
|
49
|
-
* <counter type="LINE" missed="X" covered="Y"/>
|
|
50
|
-
* </sourcefile>
|
|
51
|
-
* <counter type="LINE" missed="X" covered="Y"/>
|
|
52
|
-
* </package>
|
|
53
|
-
* <counter type="LINE" missed="X" covered="Y"/>
|
|
54
|
-
* </report>
|
|
55
|
-
*
|
|
56
|
-
* Per-file coverage comes from `<sourcefile>` blocks: their LINE counter
|
|
57
|
-
* holds the file's missed/covered totals. Project-level total comes from
|
|
58
|
-
* the top-level `<counter type="LINE">` (last in the document).
|
|
59
|
-
*
|
|
60
|
-
* Path attribution joins `<package name>` (forward-slashed, JVM-style)
|
|
61
|
-
* with `<sourcefile name>` to produce the canonical relative path the
|
|
62
|
-
* downstream consumers expect (`com/example/Foo.kt`). JVM bytecode
|
|
63
|
-
* namespacing isn't 1:1 with on-disk source paths in multi-module
|
|
64
|
-
* projects — accepted limitation (matches C#'s cobertura attribution).
|
|
65
|
-
*
|
|
66
|
-
* Returns null when no `<counter type="LINE">` exists at the top level
|
|
67
|
-
* — that's JaCoCo's "no coverage data" signal, distinct from "0%
|
|
68
|
-
* coverage" (where the counter exists with covered=0).
|
|
69
|
-
*
|
|
70
|
-
* Exported for unit tests; consumed by `gatherKotlinCoverageResult`.
|
|
71
|
-
*/
|
|
72
|
-
export declare function parseJaCoCoXml(raw: string, sourceFile: string, _cwd: string): Coverage | null;
|
|
73
|
-
/**
|
|
74
|
-
* Pure parser for osv-scanner v2.x JSON output, scoped to Maven
|
|
75
|
-
* findings only. Other ecosystems (npm, PyPI, Go) are filtered out so
|
|
76
|
-
* polyglot repos don't double-count: the typescript pack handles npm,
|
|
77
|
-
* the python pack handles PyPI, etc. The kotlin pack owns Maven.
|
|
78
|
-
*
|
|
79
|
-
* Returns counts + findings + the raw OSV vuln records for downstream
|
|
80
|
-
* CVSS resolution. Exported for unit tests.
|
|
81
|
-
*/
|
|
82
|
-
export declare function parseOsvScannerMavenFindings(raw: string): {
|
|
83
|
-
counts: SeverityCounts;
|
|
84
|
-
findings: DepVulnFinding[];
|
|
85
|
-
vulnsForCvss: Array<{
|
|
86
|
-
primaryId: string;
|
|
87
|
-
embeddedCvss: number | null;
|
|
88
|
-
aliases: string[];
|
|
89
|
-
}>;
|
|
90
|
-
};
|
|
91
40
|
/**
|
|
92
41
|
* Capture Kotlin import specifiers from source text. Handles both
|
|
93
42
|
* `import com.foo.Bar` (single) and `import com.foo.*` (wildcard) plus
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kotlin.d.ts","sourceRoot":"","sources":["../../src/languages/kotlin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kotlin.d.ts","sourceRoot":"","sources":["../../src/languages/kotlin.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAMV,cAAc,EAEf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAmE7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAMhE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAWpE;AAuFD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAYjE;AA8FD,eAAO,MAAM,MAAM,EAAE,eA6DpB,CAAC"}
|