circle-ir 3.1.0
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/LICENSE +15 -0
- package/README.md +200 -0
- package/configs/sinks/code_injection.yaml +672 -0
- package/configs/sinks/command.yaml +917 -0
- package/configs/sinks/deserialization.yaml +105 -0
- package/configs/sinks/ldap.yaml +136 -0
- package/configs/sinks/nodejs.json +629 -0
- package/configs/sinks/path.yaml +715 -0
- package/configs/sinks/python.json +501 -0
- package/configs/sinks/rust.json +339 -0
- package/configs/sinks/sql.yaml +233 -0
- package/configs/sinks/ssrf.yaml +160 -0
- package/configs/sinks/xpath.yaml +121 -0
- package/configs/sinks/xss.yaml +727 -0
- package/configs/sources/db_sources.yaml +90 -0
- package/configs/sources/env_sources.yaml +94 -0
- package/configs/sources/express.json +197 -0
- package/configs/sources/file_sources.yaml +164 -0
- package/configs/sources/http_sources.yaml +379 -0
- package/configs/sources/io_sources.yaml +519 -0
- package/configs/sources/network_sources.yaml +99 -0
- package/configs/sources/python.json +230 -0
- package/configs/sources/rust.json +286 -0
- package/configs/sources/spring.yaml +70 -0
- package/dist/analysis/advisory-db.d.ts +86 -0
- package/dist/analysis/advisory-db.js +104 -0
- package/dist/analysis/advisory-db.js.map +1 -0
- package/dist/analysis/cargo-parser.d.ts +42 -0
- package/dist/analysis/cargo-parser.js +102 -0
- package/dist/analysis/cargo-parser.js.map +1 -0
- package/dist/analysis/config-loader.d.ts +37 -0
- package/dist/analysis/config-loader.js +1561 -0
- package/dist/analysis/config-loader.js.map +1 -0
- package/dist/analysis/constant-propagation/ast-utils.d.ts +25 -0
- package/dist/analysis/constant-propagation/ast-utils.js +34 -0
- package/dist/analysis/constant-propagation/ast-utils.js.map +1 -0
- package/dist/analysis/constant-propagation/evaluator.d.ts +32 -0
- package/dist/analysis/constant-propagation/evaluator.js +296 -0
- package/dist/analysis/constant-propagation/evaluator.js.map +1 -0
- package/dist/analysis/constant-propagation/index.d.ts +62 -0
- package/dist/analysis/constant-propagation/index.js +152 -0
- package/dist/analysis/constant-propagation/index.js.map +1 -0
- package/dist/analysis/constant-propagation/patterns.d.ts +8 -0
- package/dist/analysis/constant-propagation/patterns.js +126 -0
- package/dist/analysis/constant-propagation/patterns.js.map +1 -0
- package/dist/analysis/constant-propagation/propagator.d.ts +180 -0
- package/dist/analysis/constant-propagation/propagator.js +1985 -0
- package/dist/analysis/constant-propagation/propagator.js.map +1 -0
- package/dist/analysis/constant-propagation/types.d.ts +63 -0
- package/dist/analysis/constant-propagation/types.js +5 -0
- package/dist/analysis/constant-propagation/types.js.map +1 -0
- package/dist/analysis/constant-propagation.d.ts +9 -0
- package/dist/analysis/constant-propagation.js +18 -0
- package/dist/analysis/constant-propagation.js.map +1 -0
- package/dist/analysis/dependency-scanner.d.ts +79 -0
- package/dist/analysis/dependency-scanner.js +122 -0
- package/dist/analysis/dependency-scanner.js.map +1 -0
- package/dist/analysis/dfg-verifier.d.ts +116 -0
- package/dist/analysis/dfg-verifier.js +399 -0
- package/dist/analysis/dfg-verifier.js.map +1 -0
- package/dist/analysis/findings.d.ts +11 -0
- package/dist/analysis/findings.js +228 -0
- package/dist/analysis/findings.js.map +1 -0
- package/dist/analysis/index.d.ts +16 -0
- package/dist/analysis/index.js +18 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/interprocedural.d.ts +99 -0
- package/dist/analysis/interprocedural.js +526 -0
- package/dist/analysis/interprocedural.js.map +1 -0
- package/dist/analysis/path-finder.d.ts +133 -0
- package/dist/analysis/path-finder.js +354 -0
- package/dist/analysis/path-finder.js.map +1 -0
- package/dist/analysis/rules.d.ts +75 -0
- package/dist/analysis/rules.js +332 -0
- package/dist/analysis/rules.js.map +1 -0
- package/dist/analysis/semver.d.ts +27 -0
- package/dist/analysis/semver.js +127 -0
- package/dist/analysis/semver.js.map +1 -0
- package/dist/analysis/taint-matcher.d.ts +15 -0
- package/dist/analysis/taint-matcher.js +634 -0
- package/dist/analysis/taint-matcher.js.map +1 -0
- package/dist/analysis/taint-propagation.d.ts +67 -0
- package/dist/analysis/taint-propagation.js +298 -0
- package/dist/analysis/taint-propagation.js.map +1 -0
- package/dist/analysis/unresolved.d.ts +14 -0
- package/dist/analysis/unresolved.js +202 -0
- package/dist/analysis/unresolved.js.map +1 -0
- package/dist/analyzer.d.ts +43 -0
- package/dist/analyzer.js +1010 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/browser/circle-ir.js +16576 -0
- package/dist/browser.d.ts +38 -0
- package/dist/browser.js +38 -0
- package/dist/browser.js.map +1 -0
- package/dist/core/circle-ir-core.cjs +13626 -0
- package/dist/core/circle-ir-core.d.ts +59 -0
- package/dist/core/circle-ir-core.js +13591 -0
- package/dist/core/extractors/calls.d.ts +13 -0
- package/dist/core/extractors/calls.js +1429 -0
- package/dist/core/extractors/calls.js.map +1 -0
- package/dist/core/extractors/cfg.d.ts +9 -0
- package/dist/core/extractors/cfg.js +519 -0
- package/dist/core/extractors/cfg.js.map +1 -0
- package/dist/core/extractors/dfg.d.ts +12 -0
- package/dist/core/extractors/dfg.js +1081 -0
- package/dist/core/extractors/dfg.js.map +1 -0
- package/dist/core/extractors/exports.d.ts +14 -0
- package/dist/core/extractors/exports.js +80 -0
- package/dist/core/extractors/exports.js.map +1 -0
- package/dist/core/extractors/imports.d.ts +9 -0
- package/dist/core/extractors/imports.js +739 -0
- package/dist/core/extractors/imports.js.map +1 -0
- package/dist/core/extractors/index.d.ts +10 -0
- package/dist/core/extractors/index.js +11 -0
- package/dist/core/extractors/index.js.map +1 -0
- package/dist/core/extractors/meta.d.ts +10 -0
- package/dist/core/extractors/meta.js +109 -0
- package/dist/core/extractors/meta.js.map +1 -0
- package/dist/core/extractors/types.d.ts +10 -0
- package/dist/core/extractors/types.js +1479 -0
- package/dist/core/extractors/types.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/parser.d.ts +84 -0
- package/dist/core/parser.js +250 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core-lib.d.ts +59 -0
- package/dist/core-lib.js +62 -0
- package/dist/core-lib.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/index.d.ts +11 -0
- package/dist/languages/index.js +14 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/plugins/base.d.ts +44 -0
- package/dist/languages/plugins/base.js +82 -0
- package/dist/languages/plugins/base.js.map +1 -0
- package/dist/languages/plugins/index.d.ts +14 -0
- package/dist/languages/plugins/index.js +25 -0
- package/dist/languages/plugins/index.js.map +1 -0
- package/dist/languages/plugins/java.d.ts +49 -0
- package/dist/languages/plugins/java.js +402 -0
- package/dist/languages/plugins/java.js.map +1 -0
- package/dist/languages/plugins/javascript.d.ts +48 -0
- package/dist/languages/plugins/javascript.js +445 -0
- package/dist/languages/plugins/javascript.js.map +1 -0
- package/dist/languages/plugins/python.d.ts +47 -0
- package/dist/languages/plugins/python.js +480 -0
- package/dist/languages/plugins/python.js.map +1 -0
- package/dist/languages/plugins/rust.d.ts +47 -0
- package/dist/languages/plugins/rust.js +405 -0
- package/dist/languages/plugins/rust.js.map +1 -0
- package/dist/languages/registry.d.ts +30 -0
- package/dist/languages/registry.js +80 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/types.d.ts +184 -0
- package/dist/languages/types.js +8 -0
- package/dist/languages/types.js.map +1 -0
- package/dist/resolution/cross-file.d.ts +146 -0
- package/dist/resolution/cross-file.js +439 -0
- package/dist/resolution/cross-file.js.map +1 -0
- package/dist/resolution/index.d.ts +12 -0
- package/dist/resolution/index.js +10 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/symbol-table.d.ts +136 -0
- package/dist/resolution/symbol-table.js +336 -0
- package/dist/resolution/symbol-table.js.map +1 -0
- package/dist/resolution/type-hierarchy.d.ts +124 -0
- package/dist/resolution/type-hierarchy.js +515 -0
- package/dist/resolution/type-hierarchy.js.map +1 -0
- package/dist/types/config.d.ts +45 -0
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +392 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +85 -0
- package/dist/utils/logger.js +198 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wasm/tree-sitter-java.wasm +0 -0
- package/dist/wasm/tree-sitter-javascript.wasm +0 -0
- package/dist/wasm/tree-sitter-python.wasm +0 -0
- package/dist/wasm/tree-sitter-rust.wasm +0 -0
- package/dist/wasm/web-tree-sitter.wasm +0 -0
- package/docs/SPEC.md +1021 -0
- package/examples/browser-example.html +610 -0
- package/examples/node-example.ts +215 -0
- package/package.json +107 -0
- package/wasm/tree-sitter-java.wasm +0 -0
- package/wasm/tree-sitter-javascript.wasm +0 -0
- package/wasm/tree-sitter-python.wasm +0 -0
- package/wasm/tree-sitter-rust.wasm +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Plugin System
|
|
3
|
+
*
|
|
4
|
+
* Provides multi-language support through a plugin architecture.
|
|
5
|
+
* Each language (Java, JavaScript, Python, Rust) has its own plugin
|
|
6
|
+
* that handles AST node types, taint patterns, and framework detection.
|
|
7
|
+
*/
|
|
8
|
+
export type { SupportedLanguage, LanguageNodeTypes, LanguagePlugin, LanguageRegistry, ExtractionContext, FrameworkInfo, TaintSourcePattern, TaintSinkPattern, } from './types.js';
|
|
9
|
+
export { getLanguageRegistry, registerLanguage, getLanguagePlugin, getLanguageForFile, detectLanguage, isLanguageSupported, } from './registry.js';
|
|
10
|
+
export { JavaPlugin, JavaScriptPlugin, PythonPlugin, RustPlugin, registerBuiltinPlugins, } from './plugins/index.js';
|
|
11
|
+
export { BaseLanguagePlugin } from './plugins/base.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Plugin System
|
|
3
|
+
*
|
|
4
|
+
* Provides multi-language support through a plugin architecture.
|
|
5
|
+
* Each language (Java, JavaScript, Python, Rust) has its own plugin
|
|
6
|
+
* that handles AST node types, taint patterns, and framework detection.
|
|
7
|
+
*/
|
|
8
|
+
// Registry functions
|
|
9
|
+
export { getLanguageRegistry, registerLanguage, getLanguagePlugin, getLanguageForFile, detectLanguage, isLanguageSupported, } from './registry.js';
|
|
10
|
+
// Concrete plugins
|
|
11
|
+
export { JavaPlugin, JavaScriptPlugin, PythonPlugin, RustPlugin, registerBuiltinPlugins, } from './plugins/index.js';
|
|
12
|
+
// Base class for custom plugins
|
|
13
|
+
export { BaseLanguagePlugin } from './plugins/base.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/languages/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,qBAAqB;AACrB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,gCAAgC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Language Plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides common functionality for all language plugins.
|
|
5
|
+
*/
|
|
6
|
+
import type { Parser, Node as SyntaxNode } from 'web-tree-sitter';
|
|
7
|
+
import type { TypeInfo, CallInfo, ImportInfo } from '../../types/index.js';
|
|
8
|
+
import type { LanguagePlugin, LanguageNodeTypes, ExtractionContext, FrameworkInfo, TaintSourcePattern, TaintSinkPattern, SupportedLanguage } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Abstract base class for language plugins.
|
|
11
|
+
* Provides default implementations for common methods.
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class BaseLanguagePlugin implements LanguagePlugin {
|
|
14
|
+
abstract readonly id: SupportedLanguage;
|
|
15
|
+
abstract readonly name: string;
|
|
16
|
+
abstract readonly extensions: string[];
|
|
17
|
+
abstract readonly wasmPath: string;
|
|
18
|
+
abstract readonly nodeTypes: LanguageNodeTypes;
|
|
19
|
+
protected parser: Parser | null;
|
|
20
|
+
initialize(parser: Parser): Promise<void>;
|
|
21
|
+
canHandle(filePath: string): boolean;
|
|
22
|
+
abstract extractTypes(context: ExtractionContext): TypeInfo[];
|
|
23
|
+
abstract extractCalls(context: ExtractionContext): CallInfo[];
|
|
24
|
+
abstract extractImports(context: ExtractionContext): ImportInfo[];
|
|
25
|
+
abstract extractPackage(context: ExtractionContext): string | undefined;
|
|
26
|
+
abstract getBuiltinSources(): TaintSourcePattern[];
|
|
27
|
+
abstract getBuiltinSinks(): TaintSinkPattern[];
|
|
28
|
+
detectFramework(context: ExtractionContext): FrameworkInfo | undefined;
|
|
29
|
+
getReceiverType(node: SyntaxNode, context: ExtractionContext): string | undefined;
|
|
30
|
+
isStringLiteral(node: SyntaxNode): boolean;
|
|
31
|
+
getStringValue(node: SyntaxNode): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Helper to get text from a node
|
|
34
|
+
*/
|
|
35
|
+
protected getNodeText(node: SyntaxNode): string;
|
|
36
|
+
/**
|
|
37
|
+
* Helper to find all nodes of a given type
|
|
38
|
+
*/
|
|
39
|
+
protected findNodes(root: SyntaxNode, type: string): SyntaxNode[];
|
|
40
|
+
/**
|
|
41
|
+
* Helper to find first child of given type
|
|
42
|
+
*/
|
|
43
|
+
protected findChildByType(node: SyntaxNode, type: string): SyntaxNode | null;
|
|
44
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Language Plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides common functionality for all language plugins.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Abstract base class for language plugins.
|
|
8
|
+
* Provides default implementations for common methods.
|
|
9
|
+
*/
|
|
10
|
+
export class BaseLanguagePlugin {
|
|
11
|
+
parser = null;
|
|
12
|
+
async initialize(parser) {
|
|
13
|
+
this.parser = parser;
|
|
14
|
+
}
|
|
15
|
+
canHandle(filePath) {
|
|
16
|
+
const lowerPath = filePath.toLowerCase();
|
|
17
|
+
return this.extensions.some(ext => {
|
|
18
|
+
const normalizedExt = ext.startsWith('.') ? ext : `.${ext}`;
|
|
19
|
+
return lowerPath.endsWith(normalizedExt);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
// Default implementations for optional methods
|
|
23
|
+
detectFramework(context) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
getReceiverType(node, context) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
isStringLiteral(node) {
|
|
30
|
+
return node.type === 'string_literal' || node.type === 'string';
|
|
31
|
+
}
|
|
32
|
+
getStringValue(node) {
|
|
33
|
+
if (!this.isStringLiteral(node))
|
|
34
|
+
return undefined;
|
|
35
|
+
const text = node.text;
|
|
36
|
+
// Remove quotes
|
|
37
|
+
if ((text.startsWith('"') && text.endsWith('"')) ||
|
|
38
|
+
(text.startsWith("'") && text.endsWith("'"))) {
|
|
39
|
+
return text.slice(1, -1);
|
|
40
|
+
}
|
|
41
|
+
return text;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Helper to get text from a node
|
|
45
|
+
*/
|
|
46
|
+
getNodeText(node) {
|
|
47
|
+
return node.text;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Helper to find all nodes of a given type
|
|
51
|
+
*/
|
|
52
|
+
findNodes(root, type) {
|
|
53
|
+
const nodes = [];
|
|
54
|
+
const cursor = root.walk();
|
|
55
|
+
const visit = () => {
|
|
56
|
+
if (cursor.nodeType === type) {
|
|
57
|
+
nodes.push(cursor.currentNode);
|
|
58
|
+
}
|
|
59
|
+
if (cursor.gotoFirstChild()) {
|
|
60
|
+
do {
|
|
61
|
+
visit();
|
|
62
|
+
} while (cursor.gotoNextSibling());
|
|
63
|
+
cursor.gotoParent();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
visit();
|
|
67
|
+
return nodes;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Helper to find first child of given type
|
|
71
|
+
*/
|
|
72
|
+
findChildByType(node, type) {
|
|
73
|
+
for (let i = 0; i < node.childCount; i++) {
|
|
74
|
+
const child = node.child(i);
|
|
75
|
+
if (child?.type === type) {
|
|
76
|
+
return child;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/languages/plugins/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH;;;GAGG;AACH,MAAM,OAAgB,kBAAkB;IAO5B,MAAM,GAAkB,IAAI,CAAC;IAEvC,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAChC,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;YAC5D,OAAO,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAUD,+CAA+C;IAC/C,eAAe,CAAC,OAA0B;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,IAAgB,EAAE,OAA0B;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,IAAgB;QAC9B,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAClE,CAAC;IAED,cAAc,CAAC,IAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5C,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,IAAgB;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACO,SAAS,CAAC,IAAgB,EAAE,IAAY;QAChD,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC5B,GAAG,CAAC;oBACF,KAAK,EAAE,CAAC;gBACV,CAAC,QAAQ,MAAM,CAAC,eAAe,EAAE,EAAE;gBACnC,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,IAAgB,EAAE,IAAY;QACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Plugins - Concrete implementations
|
|
3
|
+
*
|
|
4
|
+
* Exports all language plugins and provides initialization helpers.
|
|
5
|
+
*/
|
|
6
|
+
export { JavaPlugin } from './java.js';
|
|
7
|
+
export { JavaScriptPlugin } from './javascript.js';
|
|
8
|
+
export { PythonPlugin } from './python.js';
|
|
9
|
+
export { RustPlugin } from './rust.js';
|
|
10
|
+
/**
|
|
11
|
+
* Register all built-in language plugins with the global registry.
|
|
12
|
+
* Call this during analyzer initialization.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerBuiltinPlugins(): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language Plugins - Concrete implementations
|
|
3
|
+
*
|
|
4
|
+
* Exports all language plugins and provides initialization helpers.
|
|
5
|
+
*/
|
|
6
|
+
export { JavaPlugin } from './java.js';
|
|
7
|
+
export { JavaScriptPlugin } from './javascript.js';
|
|
8
|
+
export { PythonPlugin } from './python.js';
|
|
9
|
+
export { RustPlugin } from './rust.js';
|
|
10
|
+
import { registerLanguage } from '../registry.js';
|
|
11
|
+
import { JavaPlugin } from './java.js';
|
|
12
|
+
import { JavaScriptPlugin } from './javascript.js';
|
|
13
|
+
import { PythonPlugin } from './python.js';
|
|
14
|
+
import { RustPlugin } from './rust.js';
|
|
15
|
+
/**
|
|
16
|
+
* Register all built-in language plugins with the global registry.
|
|
17
|
+
* Call this during analyzer initialization.
|
|
18
|
+
*/
|
|
19
|
+
export function registerBuiltinPlugins() {
|
|
20
|
+
registerLanguage(new JavaPlugin());
|
|
21
|
+
registerLanguage(new JavaScriptPlugin());
|
|
22
|
+
registerLanguage(new PythonPlugin());
|
|
23
|
+
registerLanguage(new RustPlugin());
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACnC,gBAAgB,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;IACzC,gBAAgB,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IACrC,gBAAgB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Language Plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides Java-specific AST handling, taint patterns, and framework detection.
|
|
5
|
+
*/
|
|
6
|
+
import type { Node as SyntaxNode } from 'web-tree-sitter';
|
|
7
|
+
import type { TypeInfo, CallInfo, ImportInfo } from '../../types/index.js';
|
|
8
|
+
import type { LanguageNodeTypes, ExtractionContext, FrameworkInfo, TaintSourcePattern, TaintSinkPattern } from '../types.js';
|
|
9
|
+
import { BaseLanguagePlugin } from './base.js';
|
|
10
|
+
/**
|
|
11
|
+
* Java language plugin implementation.
|
|
12
|
+
*/
|
|
13
|
+
export declare class JavaPlugin extends BaseLanguagePlugin {
|
|
14
|
+
readonly id: "java";
|
|
15
|
+
readonly name = "Java";
|
|
16
|
+
readonly extensions: string[];
|
|
17
|
+
readonly wasmPath = "tree-sitter-java.wasm";
|
|
18
|
+
readonly nodeTypes: LanguageNodeTypes;
|
|
19
|
+
/**
|
|
20
|
+
* Detect Java frameworks from imports and annotations.
|
|
21
|
+
*/
|
|
22
|
+
detectFramework(context: ExtractionContext): FrameworkInfo | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Java-specific taint source patterns.
|
|
25
|
+
* These supplement the YAML configuration.
|
|
26
|
+
*/
|
|
27
|
+
getBuiltinSources(): TaintSourcePattern[];
|
|
28
|
+
/**
|
|
29
|
+
* Java-specific taint sink patterns.
|
|
30
|
+
* These supplement the YAML configuration.
|
|
31
|
+
*/
|
|
32
|
+
getBuiltinSinks(): TaintSinkPattern[];
|
|
33
|
+
/**
|
|
34
|
+
* Get receiver type from a method invocation node.
|
|
35
|
+
*/
|
|
36
|
+
getReceiverType(node: SyntaxNode, context: ExtractionContext): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Check if node is a Java string literal.
|
|
39
|
+
*/
|
|
40
|
+
isStringLiteral(node: SyntaxNode): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get string value from Java string literal.
|
|
43
|
+
*/
|
|
44
|
+
getStringValue(node: SyntaxNode): string | undefined;
|
|
45
|
+
extractTypes(context: ExtractionContext): TypeInfo[];
|
|
46
|
+
extractCalls(context: ExtractionContext): CallInfo[];
|
|
47
|
+
extractImports(context: ExtractionContext): ImportInfo[];
|
|
48
|
+
extractPackage(context: ExtractionContext): string | undefined;
|
|
49
|
+
}
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Language Plugin
|
|
3
|
+
*
|
|
4
|
+
* Provides Java-specific AST handling, taint patterns, and framework detection.
|
|
5
|
+
*/
|
|
6
|
+
import { BaseLanguagePlugin } from './base.js';
|
|
7
|
+
/**
|
|
8
|
+
* Java language plugin implementation.
|
|
9
|
+
*/
|
|
10
|
+
export class JavaPlugin extends BaseLanguagePlugin {
|
|
11
|
+
id = 'java';
|
|
12
|
+
name = 'Java';
|
|
13
|
+
extensions = ['.java'];
|
|
14
|
+
wasmPath = 'tree-sitter-java.wasm';
|
|
15
|
+
nodeTypes = {
|
|
16
|
+
// Type declarations
|
|
17
|
+
classDeclaration: ['class_declaration'],
|
|
18
|
+
interfaceDeclaration: ['interface_declaration'],
|
|
19
|
+
enumDeclaration: ['enum_declaration'],
|
|
20
|
+
functionDeclaration: [],
|
|
21
|
+
methodDeclaration: ['method_declaration', 'constructor_declaration'],
|
|
22
|
+
// Expressions
|
|
23
|
+
methodCall: ['method_invocation'],
|
|
24
|
+
functionCall: [],
|
|
25
|
+
assignment: ['assignment_expression'],
|
|
26
|
+
variableDeclaration: ['local_variable_declaration', 'field_declaration'],
|
|
27
|
+
// Parameters and arguments
|
|
28
|
+
parameter: ['formal_parameter', 'spread_parameter'],
|
|
29
|
+
argument: ['argument_list'],
|
|
30
|
+
// Annotations/decorators
|
|
31
|
+
annotation: ['marker_annotation', 'annotation'],
|
|
32
|
+
decorator: [],
|
|
33
|
+
// Imports
|
|
34
|
+
importStatement: ['import_declaration'],
|
|
35
|
+
// Control flow
|
|
36
|
+
ifStatement: ['if_statement'],
|
|
37
|
+
forStatement: ['for_statement', 'enhanced_for_statement'],
|
|
38
|
+
whileStatement: ['while_statement'],
|
|
39
|
+
tryStatement: ['try_statement', 'try_with_resources_statement'],
|
|
40
|
+
returnStatement: ['return_statement'],
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Detect Java frameworks from imports and annotations.
|
|
44
|
+
*/
|
|
45
|
+
detectFramework(context) {
|
|
46
|
+
const indicators = [];
|
|
47
|
+
let framework;
|
|
48
|
+
let confidence = 0;
|
|
49
|
+
// Check imports for framework patterns
|
|
50
|
+
for (const imp of context.imports) {
|
|
51
|
+
const path = imp.from_package || imp.imported_name;
|
|
52
|
+
// Spring Framework
|
|
53
|
+
if (path.startsWith('org.springframework')) {
|
|
54
|
+
framework = 'spring';
|
|
55
|
+
confidence = Math.max(confidence, 0.9);
|
|
56
|
+
indicators.push(`import: ${path}`);
|
|
57
|
+
}
|
|
58
|
+
// Jakarta EE / Java EE
|
|
59
|
+
if (path.startsWith('jakarta.') || path.startsWith('javax.')) {
|
|
60
|
+
if (path.includes('servlet')) {
|
|
61
|
+
framework = framework || 'servlet';
|
|
62
|
+
confidence = Math.max(confidence, 0.8);
|
|
63
|
+
indicators.push(`import: ${path}`);
|
|
64
|
+
}
|
|
65
|
+
if (path.includes('ws.rs')) {
|
|
66
|
+
framework = 'jax-rs';
|
|
67
|
+
confidence = Math.max(confidence, 0.85);
|
|
68
|
+
indicators.push(`import: ${path}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Struts
|
|
72
|
+
if (path.startsWith('org.apache.struts')) {
|
|
73
|
+
framework = 'struts';
|
|
74
|
+
confidence = Math.max(confidence, 0.85);
|
|
75
|
+
indicators.push(`import: ${path}`);
|
|
76
|
+
}
|
|
77
|
+
// Quarkus
|
|
78
|
+
if (path.startsWith('io.quarkus')) {
|
|
79
|
+
framework = 'quarkus';
|
|
80
|
+
confidence = Math.max(confidence, 0.85);
|
|
81
|
+
indicators.push(`import: ${path}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (framework) {
|
|
85
|
+
return { name: framework, confidence, indicators };
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Java-specific taint source patterns.
|
|
91
|
+
* These supplement the YAML configuration.
|
|
92
|
+
*/
|
|
93
|
+
getBuiltinSources() {
|
|
94
|
+
return [
|
|
95
|
+
// Spring MVC annotations
|
|
96
|
+
{
|
|
97
|
+
annotation: 'RequestParam',
|
|
98
|
+
type: 'http_param',
|
|
99
|
+
severity: 'high',
|
|
100
|
+
confidence: 0.95,
|
|
101
|
+
returnTainted: true,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
annotation: 'RequestBody',
|
|
105
|
+
type: 'http_body',
|
|
106
|
+
severity: 'high',
|
|
107
|
+
confidence: 0.95,
|
|
108
|
+
returnTainted: true,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
annotation: 'PathVariable',
|
|
112
|
+
type: 'http_path',
|
|
113
|
+
severity: 'high',
|
|
114
|
+
confidence: 0.95,
|
|
115
|
+
returnTainted: true,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
annotation: 'RequestHeader',
|
|
119
|
+
type: 'http_header',
|
|
120
|
+
severity: 'high',
|
|
121
|
+
confidence: 0.9,
|
|
122
|
+
returnTainted: true,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
annotation: 'CookieValue',
|
|
126
|
+
type: 'http_cookie',
|
|
127
|
+
severity: 'high',
|
|
128
|
+
confidence: 0.9,
|
|
129
|
+
returnTainted: true,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
annotation: 'MatrixVariable',
|
|
133
|
+
type: 'http_param',
|
|
134
|
+
severity: 'high',
|
|
135
|
+
confidence: 0.85,
|
|
136
|
+
returnTainted: true,
|
|
137
|
+
},
|
|
138
|
+
// JAX-RS annotations
|
|
139
|
+
{
|
|
140
|
+
annotation: 'QueryParam',
|
|
141
|
+
type: 'http_param',
|
|
142
|
+
severity: 'high',
|
|
143
|
+
confidence: 0.95,
|
|
144
|
+
returnTainted: true,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
annotation: 'PathParam',
|
|
148
|
+
type: 'http_path',
|
|
149
|
+
severity: 'high',
|
|
150
|
+
confidence: 0.95,
|
|
151
|
+
returnTainted: true,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
annotation: 'FormParam',
|
|
155
|
+
type: 'http_body',
|
|
156
|
+
severity: 'high',
|
|
157
|
+
confidence: 0.95,
|
|
158
|
+
returnTainted: true,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
annotation: 'HeaderParam',
|
|
162
|
+
type: 'http_header',
|
|
163
|
+
severity: 'high',
|
|
164
|
+
confidence: 0.9,
|
|
165
|
+
returnTainted: true,
|
|
166
|
+
},
|
|
167
|
+
// Servlet API
|
|
168
|
+
{
|
|
169
|
+
method: 'getParameter',
|
|
170
|
+
class: 'HttpServletRequest',
|
|
171
|
+
type: 'http_param',
|
|
172
|
+
severity: 'high',
|
|
173
|
+
confidence: 0.95,
|
|
174
|
+
returnTainted: true,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
method: 'getParameterValues',
|
|
178
|
+
class: 'HttpServletRequest',
|
|
179
|
+
type: 'http_param',
|
|
180
|
+
severity: 'high',
|
|
181
|
+
confidence: 0.95,
|
|
182
|
+
returnTainted: true,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
method: 'getHeader',
|
|
186
|
+
class: 'HttpServletRequest',
|
|
187
|
+
type: 'http_header',
|
|
188
|
+
severity: 'high',
|
|
189
|
+
confidence: 0.9,
|
|
190
|
+
returnTainted: true,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
method: 'getCookies',
|
|
194
|
+
class: 'HttpServletRequest',
|
|
195
|
+
type: 'http_cookie',
|
|
196
|
+
severity: 'high',
|
|
197
|
+
confidence: 0.9,
|
|
198
|
+
returnTainted: true,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
method: 'getInputStream',
|
|
202
|
+
class: 'HttpServletRequest',
|
|
203
|
+
type: 'http_body',
|
|
204
|
+
severity: 'high',
|
|
205
|
+
confidence: 0.85,
|
|
206
|
+
returnTainted: true,
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
method: 'getReader',
|
|
210
|
+
class: 'HttpServletRequest',
|
|
211
|
+
type: 'http_body',
|
|
212
|
+
severity: 'high',
|
|
213
|
+
confidence: 0.85,
|
|
214
|
+
returnTainted: true,
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Java-specific taint sink patterns.
|
|
220
|
+
* These supplement the YAML configuration.
|
|
221
|
+
*/
|
|
222
|
+
getBuiltinSinks() {
|
|
223
|
+
return [
|
|
224
|
+
// SQL Injection
|
|
225
|
+
{
|
|
226
|
+
method: 'executeQuery',
|
|
227
|
+
class: 'Statement',
|
|
228
|
+
type: 'sql_injection',
|
|
229
|
+
cwe: 'CWE-89',
|
|
230
|
+
severity: 'critical',
|
|
231
|
+
argPositions: [0],
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
method: 'executeUpdate',
|
|
235
|
+
class: 'Statement',
|
|
236
|
+
type: 'sql_injection',
|
|
237
|
+
cwe: 'CWE-89',
|
|
238
|
+
severity: 'critical',
|
|
239
|
+
argPositions: [0],
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
method: 'execute',
|
|
243
|
+
class: 'Statement',
|
|
244
|
+
type: 'sql_injection',
|
|
245
|
+
cwe: 'CWE-89',
|
|
246
|
+
severity: 'critical',
|
|
247
|
+
argPositions: [0],
|
|
248
|
+
},
|
|
249
|
+
// Command Injection
|
|
250
|
+
{
|
|
251
|
+
method: 'exec',
|
|
252
|
+
class: 'Runtime',
|
|
253
|
+
type: 'command_injection',
|
|
254
|
+
cwe: 'CWE-78',
|
|
255
|
+
severity: 'critical',
|
|
256
|
+
argPositions: [0],
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
method: 'start',
|
|
260
|
+
class: 'ProcessBuilder',
|
|
261
|
+
type: 'command_injection',
|
|
262
|
+
cwe: 'CWE-78',
|
|
263
|
+
severity: 'critical',
|
|
264
|
+
argPositions: [], // Constructor args are dangerous
|
|
265
|
+
},
|
|
266
|
+
// Path Traversal
|
|
267
|
+
{
|
|
268
|
+
method: 'FileInputStream',
|
|
269
|
+
type: 'path_traversal',
|
|
270
|
+
cwe: 'CWE-22',
|
|
271
|
+
severity: 'high',
|
|
272
|
+
argPositions: [0],
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
method: 'FileOutputStream',
|
|
276
|
+
type: 'path_traversal',
|
|
277
|
+
cwe: 'CWE-22',
|
|
278
|
+
severity: 'high',
|
|
279
|
+
argPositions: [0],
|
|
280
|
+
},
|
|
281
|
+
// XSS
|
|
282
|
+
{
|
|
283
|
+
method: 'write',
|
|
284
|
+
class: 'PrintWriter',
|
|
285
|
+
type: 'xss',
|
|
286
|
+
cwe: 'CWE-79',
|
|
287
|
+
severity: 'high',
|
|
288
|
+
argPositions: [0],
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
method: 'println',
|
|
292
|
+
class: 'PrintWriter',
|
|
293
|
+
type: 'xss',
|
|
294
|
+
cwe: 'CWE-79',
|
|
295
|
+
severity: 'high',
|
|
296
|
+
argPositions: [0],
|
|
297
|
+
},
|
|
298
|
+
// LDAP Injection
|
|
299
|
+
{
|
|
300
|
+
method: 'search',
|
|
301
|
+
class: 'DirContext',
|
|
302
|
+
type: 'ldap_injection',
|
|
303
|
+
cwe: 'CWE-90',
|
|
304
|
+
severity: 'high',
|
|
305
|
+
argPositions: [0, 1],
|
|
306
|
+
},
|
|
307
|
+
// XPath Injection
|
|
308
|
+
{
|
|
309
|
+
method: 'evaluate',
|
|
310
|
+
class: 'XPath',
|
|
311
|
+
type: 'xpath_injection',
|
|
312
|
+
cwe: 'CWE-643',
|
|
313
|
+
severity: 'high',
|
|
314
|
+
argPositions: [0],
|
|
315
|
+
},
|
|
316
|
+
// Deserialization
|
|
317
|
+
{
|
|
318
|
+
method: 'readObject',
|
|
319
|
+
class: 'ObjectInputStream',
|
|
320
|
+
type: 'deserialization',
|
|
321
|
+
cwe: 'CWE-502',
|
|
322
|
+
severity: 'critical',
|
|
323
|
+
argPositions: [],
|
|
324
|
+
},
|
|
325
|
+
];
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Get receiver type from a method invocation node.
|
|
329
|
+
*/
|
|
330
|
+
getReceiverType(node, context) {
|
|
331
|
+
if (node.type !== 'method_invocation')
|
|
332
|
+
return undefined;
|
|
333
|
+
const receiver = node.childForFieldName('object');
|
|
334
|
+
if (!receiver)
|
|
335
|
+
return undefined;
|
|
336
|
+
// If receiver is an identifier, look up its type
|
|
337
|
+
if (receiver.type === 'identifier') {
|
|
338
|
+
const name = receiver.text;
|
|
339
|
+
// Try to find variable declaration to get type
|
|
340
|
+
// This is a simplified lookup - full implementation would use scope analysis
|
|
341
|
+
return undefined; // TODO: Implement type resolution
|
|
342
|
+
}
|
|
343
|
+
// If receiver is a field access, return the field type
|
|
344
|
+
if (receiver.type === 'field_access') {
|
|
345
|
+
return receiver.text;
|
|
346
|
+
}
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Check if node is a Java string literal.
|
|
351
|
+
*/
|
|
352
|
+
isStringLiteral(node) {
|
|
353
|
+
return node.type === 'string_literal';
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get string value from Java string literal.
|
|
357
|
+
*/
|
|
358
|
+
getStringValue(node) {
|
|
359
|
+
if (node.type !== 'string_literal')
|
|
360
|
+
return undefined;
|
|
361
|
+
const text = node.text;
|
|
362
|
+
// Remove surrounding quotes
|
|
363
|
+
if (text.startsWith('"') && text.endsWith('"')) {
|
|
364
|
+
return text.slice(1, -1);
|
|
365
|
+
}
|
|
366
|
+
return text;
|
|
367
|
+
}
|
|
368
|
+
// Extraction methods - delegate to existing extractors for now
|
|
369
|
+
// These will be migrated into the plugin in future iterations
|
|
370
|
+
extractTypes(context) {
|
|
371
|
+
// Delegated to existing extractor
|
|
372
|
+
return [];
|
|
373
|
+
}
|
|
374
|
+
extractCalls(context) {
|
|
375
|
+
// Delegated to existing extractor
|
|
376
|
+
return [];
|
|
377
|
+
}
|
|
378
|
+
extractImports(context) {
|
|
379
|
+
// Delegated to existing extractor
|
|
380
|
+
return [];
|
|
381
|
+
}
|
|
382
|
+
extractPackage(context) {
|
|
383
|
+
// Find package declaration in tree
|
|
384
|
+
const packages = this.findNodes(context.tree.rootNode, 'package_declaration');
|
|
385
|
+
if (packages.length === 0)
|
|
386
|
+
return undefined;
|
|
387
|
+
const pkgDecl = packages[0];
|
|
388
|
+
const nameNode = pkgDecl.childForFieldName('name');
|
|
389
|
+
if (nameNode) {
|
|
390
|
+
return this.getNodeText(nameNode);
|
|
391
|
+
}
|
|
392
|
+
// Fallback: find scoped_identifier or identifier
|
|
393
|
+
for (let i = 0; i < pkgDecl.childCount; i++) {
|
|
394
|
+
const child = pkgDecl.child(i);
|
|
395
|
+
if (child && (child.type === 'scoped_identifier' || child.type === 'identifier')) {
|
|
396
|
+
return this.getNodeText(child);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
return undefined;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=java.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.js","sourceRoot":"","sources":["../../../src/languages/plugins/java.ts"],"names":[],"mappings":"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"}
|