driftdetect-core 0.1.2 → 0.3.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/dist/boundaries/boundary-store.d.ts +92 -0
- package/dist/boundaries/boundary-store.d.ts.map +1 -0
- package/dist/boundaries/boundary-store.js +458 -0
- package/dist/boundaries/boundary-store.js.map +1 -0
- package/dist/boundaries/index.d.ts +8 -0
- package/dist/boundaries/index.d.ts.map +1 -0
- package/dist/boundaries/index.js +8 -0
- package/dist/boundaries/index.js.map +1 -0
- package/dist/boundaries/types.d.ts +237 -0
- package/dist/boundaries/types.d.ts.map +1 -0
- package/dist/boundaries/types.js +8 -0
- package/dist/boundaries/types.js.map +1 -0
- package/dist/dna/ai-context.d.ts +10 -0
- package/dist/dna/ai-context.d.ts.map +1 -0
- package/dist/dna/ai-context.js +46 -0
- package/dist/dna/ai-context.js.map +1 -0
- package/dist/dna/dna-analyzer.d.ts +34 -0
- package/dist/dna/dna-analyzer.d.ts.map +1 -0
- package/dist/dna/dna-analyzer.js +110 -0
- package/dist/dna/dna-analyzer.js.map +1 -0
- package/dist/dna/dna-store.d.ts +13 -0
- package/dist/dna/dna-store.d.ts.map +1 -0
- package/dist/dna/dna-store.js +43 -0
- package/dist/dna/dna-store.js.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.js +97 -0
- package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.js +76 -0
- package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
- package/dist/dna/gene-extractors/index.d.ts +16 -0
- package/dist/dna/gene-extractors/index.d.ts.map +1 -0
- package/dist/dna/gene-extractors/index.js +38 -0
- package/dist/dna/gene-extractors/index.js.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.js +30 -0
- package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
- package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
- package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/state-styling.js +29 -0
- package/dist/dna/gene-extractors/state-styling.js.map +1 -0
- package/dist/dna/gene-extractors/theming.d.ts +10 -0
- package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
- package/dist/dna/gene-extractors/theming.js +30 -0
- package/dist/dna/gene-extractors/theming.js.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.js +38 -0
- package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
- package/dist/dna/health-calculator.d.ts +21 -0
- package/dist/dna/health-calculator.d.ts.map +1 -0
- package/dist/dna/health-calculator.js +113 -0
- package/dist/dna/health-calculator.js.map +1 -0
- package/dist/dna/index.d.ts +21 -0
- package/dist/dna/index.d.ts.map +1 -0
- package/dist/dna/index.js +19 -0
- package/dist/dna/index.js.map +1 -0
- package/dist/dna/mutation-detector.d.ts +10 -0
- package/dist/dna/mutation-detector.d.ts.map +1 -0
- package/dist/dna/mutation-detector.js +39 -0
- package/dist/dna/mutation-detector.js.map +1 -0
- package/dist/dna/playbook-generator.d.ts +6 -0
- package/dist/dna/playbook-generator.d.ts.map +1 -0
- package/dist/dna/playbook-generator.js +53 -0
- package/dist/dna/playbook-generator.js.map +1 -0
- package/dist/dna/types.d.ts +95 -0
- package/dist/dna/types.d.ts.map +1 -0
- package/dist/dna/types.js +8 -0
- package/dist/dna/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/parser-manager.d.ts.map +1 -1
- package/dist/parsers/parser-manager.js +2 -0
- package/dist/parsers/parser-manager.js.map +1 -1
- package/dist/parsers/tree-sitter/config.d.ts +82 -0
- package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/config.js +200 -0
- package/dist/parsers/tree-sitter/config.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
- package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/index.d.ts +26 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/index.js +47 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
- package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/index.js +25 -0
- package/dist/parsers/tree-sitter/java/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
- package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/types.js +81 -0
- package/dist/parsers/tree-sitter/java/types.js.map +1 -0
- package/dist/parsers/tree-sitter/loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/loader.js +156 -0
- package/dist/parsers/tree-sitter/loader.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
- package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
- package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/types.d.ts +399 -0
- package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/types.js +20 -0
- package/dist/parsers/tree-sitter/types.js.map +1 -0
- package/dist/parsers/types.d.ts +1 -1
- package/dist/parsers/types.d.ts.map +1 -1
- package/dist/scanner/file-walker.d.ts.map +1 -1
- package/dist/scanner/file-walker.js +5 -0
- package/dist/scanner/file-walker.js.map +1 -1
- package/dist/store/history-store.d.ts +85 -269
- package/dist/store/history-store.d.ts.map +1 -1
- package/dist/store/history-store.js +272 -624
- package/dist/store/history-store.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/java-type-mapping.d.ts +79 -0
- package/dist/types/java-type-mapping.d.ts.map +1 -0
- package/dist/types/java-type-mapping.js +290 -0
- package/dist/types/java-type-mapping.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java Method Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts method, constructor, and field declarations from Java AST.
|
|
5
|
+
* Handles all member declarations with their annotations, modifiers,
|
|
6
|
+
* parameters, and return types.
|
|
7
|
+
*
|
|
8
|
+
* @requirements Java/Spring Boot Language Support
|
|
9
|
+
*/
|
|
10
|
+
import { extractAnnotations, extractParameterAnnotations } from './annotation-extractor.js';
|
|
11
|
+
// ============================================
|
|
12
|
+
// Position Helpers
|
|
13
|
+
// ============================================
|
|
14
|
+
/**
|
|
15
|
+
* Convert tree-sitter position to drift Position.
|
|
16
|
+
*/
|
|
17
|
+
function toPosition(point) {
|
|
18
|
+
return {
|
|
19
|
+
row: point.row,
|
|
20
|
+
column: point.column,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// ============================================
|
|
24
|
+
// Modifier Extraction
|
|
25
|
+
// ============================================
|
|
26
|
+
/**
|
|
27
|
+
* Extract modifiers from a node.
|
|
28
|
+
*/
|
|
29
|
+
function extractModifiers(node) {
|
|
30
|
+
const modifiers = [];
|
|
31
|
+
// Look for modifiers node
|
|
32
|
+
const modifiersNode = findChildByType(node, 'modifiers');
|
|
33
|
+
if (modifiersNode) {
|
|
34
|
+
for (const child of modifiersNode.children) {
|
|
35
|
+
const modifier = parseModifier(child);
|
|
36
|
+
if (modifier) {
|
|
37
|
+
modifiers.push(modifier);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Also check direct children for modifier keywords
|
|
42
|
+
for (const child of node.children) {
|
|
43
|
+
const modifier = parseModifier(child);
|
|
44
|
+
if (modifier && !modifiers.includes(modifier)) {
|
|
45
|
+
modifiers.push(modifier);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return modifiers;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse a single modifier from a node.
|
|
52
|
+
*/
|
|
53
|
+
function parseModifier(node) {
|
|
54
|
+
const modifierKeywords = [
|
|
55
|
+
'public', 'private', 'protected',
|
|
56
|
+
'static', 'final', 'abstract',
|
|
57
|
+
'synchronized', 'volatile', 'transient',
|
|
58
|
+
'native', 'strictfp', 'default',
|
|
59
|
+
'sealed', 'non-sealed',
|
|
60
|
+
];
|
|
61
|
+
const text = node.text.toLowerCase();
|
|
62
|
+
// Handle non-sealed which might be parsed differently
|
|
63
|
+
if (text === 'non-sealed' || node.type === 'non_sealed') {
|
|
64
|
+
return 'non-sealed';
|
|
65
|
+
}
|
|
66
|
+
if (modifierKeywords.includes(text)) {
|
|
67
|
+
return text;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Derive accessibility from modifiers.
|
|
73
|
+
*/
|
|
74
|
+
function deriveAccessibility(modifiers) {
|
|
75
|
+
if (modifiers.includes('public'))
|
|
76
|
+
return 'public';
|
|
77
|
+
if (modifiers.includes('private'))
|
|
78
|
+
return 'private';
|
|
79
|
+
if (modifiers.includes('protected'))
|
|
80
|
+
return 'protected';
|
|
81
|
+
return 'package-private';
|
|
82
|
+
}
|
|
83
|
+
// ============================================
|
|
84
|
+
// Method Extraction
|
|
85
|
+
// ============================================
|
|
86
|
+
/**
|
|
87
|
+
* Extract a method declaration.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* @GetMapping("/users/{id}")
|
|
91
|
+
* @PreAuthorize("hasRole('USER')")
|
|
92
|
+
* public ResponseEntity<UserDto> getUser(@PathVariable Long id) throws NotFoundException {
|
|
93
|
+
* ...
|
|
94
|
+
* }
|
|
95
|
+
*/
|
|
96
|
+
export function extractMethod(node, imports) {
|
|
97
|
+
const modifiers = extractModifiers(node);
|
|
98
|
+
const annotations = extractAnnotations(node, 'method', imports);
|
|
99
|
+
// Get method name
|
|
100
|
+
const nameNode = findChildByType(node, 'identifier');
|
|
101
|
+
if (!nameNode) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const name = nameNode.text;
|
|
105
|
+
// Get return type
|
|
106
|
+
const returnType = extractReturnType(node);
|
|
107
|
+
// Get type parameters
|
|
108
|
+
const typeParams = extractTypeParameters(node);
|
|
109
|
+
// Get parameters
|
|
110
|
+
const parameters = extractParameters(node, imports);
|
|
111
|
+
// Get throws clause
|
|
112
|
+
const throwsTypes = extractThrowsTypes(node);
|
|
113
|
+
return {
|
|
114
|
+
name,
|
|
115
|
+
annotations,
|
|
116
|
+
returnType,
|
|
117
|
+
parameters,
|
|
118
|
+
modifiers,
|
|
119
|
+
typeParameters: typeParams,
|
|
120
|
+
throwsTypes,
|
|
121
|
+
accessibility: deriveAccessibility(modifiers),
|
|
122
|
+
isStatic: modifiers.includes('static'),
|
|
123
|
+
isAbstract: modifiers.includes('abstract'),
|
|
124
|
+
isFinal: modifiers.includes('final'),
|
|
125
|
+
isSynchronized: modifiers.includes('synchronized'),
|
|
126
|
+
isNative: modifiers.includes('native'),
|
|
127
|
+
isDefault: modifiers.includes('default'),
|
|
128
|
+
startPosition: toPosition(node.startPosition),
|
|
129
|
+
endPosition: toPosition(node.endPosition),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Extract the return type from a method declaration.
|
|
134
|
+
*/
|
|
135
|
+
function extractReturnType(node) {
|
|
136
|
+
// The return type is typically a type node before the method name
|
|
137
|
+
// In tree-sitter-java, it might be in different positions
|
|
138
|
+
// Try to find type nodes
|
|
139
|
+
for (const child of node.children) {
|
|
140
|
+
if (isTypeNode(child)) {
|
|
141
|
+
return child.text;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Check for void_type specifically
|
|
145
|
+
const voidNode = findChildByType(node, 'void_type');
|
|
146
|
+
if (voidNode) {
|
|
147
|
+
return 'void';
|
|
148
|
+
}
|
|
149
|
+
// Default to void if no return type found
|
|
150
|
+
return 'void';
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Extract type parameters from a generic method.
|
|
154
|
+
*/
|
|
155
|
+
function extractTypeParameters(node) {
|
|
156
|
+
const params = [];
|
|
157
|
+
const typeParamsNode = findChildByType(node, 'type_parameters');
|
|
158
|
+
if (typeParamsNode) {
|
|
159
|
+
for (const child of typeParamsNode.children) {
|
|
160
|
+
if (child.type === 'type_parameter') {
|
|
161
|
+
const nameNode = findChildByType(child, 'identifier');
|
|
162
|
+
if (nameNode) {
|
|
163
|
+
// Include bounds if present
|
|
164
|
+
const boundsNode = findChildByType(child, 'type_bound');
|
|
165
|
+
if (boundsNode) {
|
|
166
|
+
params.push(`${nameNode.text} ${boundsNode.text}`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
params.push(nameNode.text);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return params;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Extract throws clause types.
|
|
179
|
+
*/
|
|
180
|
+
function extractThrowsTypes(node) {
|
|
181
|
+
const types = [];
|
|
182
|
+
const throwsNode = findChildByType(node, 'throws');
|
|
183
|
+
if (throwsNode) {
|
|
184
|
+
for (const child of throwsNode.children) {
|
|
185
|
+
if (isTypeNode(child)) {
|
|
186
|
+
types.push(child.text);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return types;
|
|
191
|
+
}
|
|
192
|
+
// ============================================
|
|
193
|
+
// Constructor Extraction
|
|
194
|
+
// ============================================
|
|
195
|
+
/**
|
|
196
|
+
* Extract a constructor declaration.
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* @Autowired
|
|
200
|
+
* public UserService(UserRepository userRepo, EmailService emailService) {
|
|
201
|
+
* this.userRepo = userRepo;
|
|
202
|
+
* this.emailService = emailService;
|
|
203
|
+
* }
|
|
204
|
+
*/
|
|
205
|
+
export function extractConstructor(node, imports) {
|
|
206
|
+
const modifiers = extractModifiers(node);
|
|
207
|
+
const annotations = extractAnnotations(node, 'constructor', imports);
|
|
208
|
+
// Get parameters
|
|
209
|
+
const parameters = extractParameters(node, imports);
|
|
210
|
+
// Get throws clause
|
|
211
|
+
const throwsTypes = extractThrowsTypes(node);
|
|
212
|
+
return {
|
|
213
|
+
annotations,
|
|
214
|
+
parameters,
|
|
215
|
+
modifiers,
|
|
216
|
+
throwsTypes,
|
|
217
|
+
accessibility: deriveAccessibility(modifiers),
|
|
218
|
+
startPosition: toPosition(node.startPosition),
|
|
219
|
+
endPosition: toPosition(node.endPosition),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// ============================================
|
|
223
|
+
// Parameter Extraction
|
|
224
|
+
// ============================================
|
|
225
|
+
/**
|
|
226
|
+
* Extract parameters from a method or constructor.
|
|
227
|
+
*/
|
|
228
|
+
function extractParameters(node, imports) {
|
|
229
|
+
const parameters = [];
|
|
230
|
+
// Find the formal_parameters node
|
|
231
|
+
const paramsNode = findChildByType(node, 'formal_parameters');
|
|
232
|
+
if (!paramsNode) {
|
|
233
|
+
return parameters;
|
|
234
|
+
}
|
|
235
|
+
for (const child of paramsNode.children) {
|
|
236
|
+
if (child.type === 'formal_parameter' || child.type === 'spread_parameter') {
|
|
237
|
+
const param = parseParameter(child, imports);
|
|
238
|
+
if (param) {
|
|
239
|
+
parameters.push(param);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return parameters;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Parse a single parameter.
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* @PathVariable Long id
|
|
250
|
+
* @RequestBody @Valid UserDto dto
|
|
251
|
+
* String... args
|
|
252
|
+
*/
|
|
253
|
+
function parseParameter(node, imports) {
|
|
254
|
+
const annotations = extractParameterAnnotations(node, imports);
|
|
255
|
+
let type = '';
|
|
256
|
+
let name = '';
|
|
257
|
+
let isVarargs = false;
|
|
258
|
+
let isFinal = false;
|
|
259
|
+
// Check for spread_parameter (varargs)
|
|
260
|
+
if (node.type === 'spread_parameter') {
|
|
261
|
+
isVarargs = true;
|
|
262
|
+
}
|
|
263
|
+
for (const child of node.children) {
|
|
264
|
+
if (child.type === 'identifier') {
|
|
265
|
+
// The last identifier is the parameter name
|
|
266
|
+
name = child.text;
|
|
267
|
+
}
|
|
268
|
+
else if (isTypeNode(child)) {
|
|
269
|
+
type = child.text;
|
|
270
|
+
}
|
|
271
|
+
else if (child.type === 'modifiers') {
|
|
272
|
+
// Check for final modifier
|
|
273
|
+
for (const modChild of child.children) {
|
|
274
|
+
if (modChild.text === 'final') {
|
|
275
|
+
isFinal = true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else if (child.text === 'final') {
|
|
280
|
+
isFinal = true;
|
|
281
|
+
}
|
|
282
|
+
else if (child.text === '...') {
|
|
283
|
+
isVarargs = true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Handle varargs type (remove ... from type if present)
|
|
287
|
+
if (type.endsWith('...')) {
|
|
288
|
+
type = type.slice(0, -3).trim();
|
|
289
|
+
isVarargs = true;
|
|
290
|
+
}
|
|
291
|
+
if (!name) {
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
return {
|
|
295
|
+
name,
|
|
296
|
+
type,
|
|
297
|
+
annotations,
|
|
298
|
+
isVarargs,
|
|
299
|
+
isFinal,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// ============================================
|
|
303
|
+
// Field Extraction
|
|
304
|
+
// ============================================
|
|
305
|
+
/**
|
|
306
|
+
* Extract field declarations.
|
|
307
|
+
* A single field_declaration can declare multiple fields.
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* @Autowired
|
|
311
|
+
* private UserRepository userRepository;
|
|
312
|
+
*
|
|
313
|
+
* @Value("${app.name}")
|
|
314
|
+
* private String appName;
|
|
315
|
+
*
|
|
316
|
+
* private int x, y, z; // Multiple fields
|
|
317
|
+
*/
|
|
318
|
+
export function extractField(node, imports) {
|
|
319
|
+
const fields = [];
|
|
320
|
+
const modifiers = extractModifiers(node);
|
|
321
|
+
const annotations = extractAnnotations(node, 'field', imports);
|
|
322
|
+
// Get the type
|
|
323
|
+
let type = '';
|
|
324
|
+
for (const child of node.children) {
|
|
325
|
+
if (isTypeNode(child)) {
|
|
326
|
+
type = child.text;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Find variable declarators (there can be multiple: int x, y, z;)
|
|
331
|
+
for (const child of node.children) {
|
|
332
|
+
if (child.type === 'variable_declarator') {
|
|
333
|
+
const field = parseVariableDeclarator(child, type, modifiers, annotations, node.startPosition, node.endPosition);
|
|
334
|
+
if (field) {
|
|
335
|
+
fields.push(field);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return fields;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Parse a variable declarator into a field.
|
|
343
|
+
*/
|
|
344
|
+
function parseVariableDeclarator(node, type, modifiers, annotations, startPos, endPos) {
|
|
345
|
+
let name = '';
|
|
346
|
+
let initializer = null;
|
|
347
|
+
for (const child of node.children) {
|
|
348
|
+
if (child.type === 'identifier') {
|
|
349
|
+
name = child.text;
|
|
350
|
+
}
|
|
351
|
+
else if (child.type === '=') {
|
|
352
|
+
// Skip the equals sign
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
else if (name && child.type !== 'dimensions') {
|
|
356
|
+
// Everything after the name (except dimensions) is the initializer
|
|
357
|
+
initializer = child.text;
|
|
358
|
+
}
|
|
359
|
+
else if (child.type === 'dimensions') {
|
|
360
|
+
// Array dimensions like [] should be added to the type
|
|
361
|
+
type = type + child.text;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
if (!name) {
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
name,
|
|
369
|
+
type,
|
|
370
|
+
annotations,
|
|
371
|
+
modifiers,
|
|
372
|
+
initializer,
|
|
373
|
+
accessibility: deriveAccessibility(modifiers),
|
|
374
|
+
isStatic: modifiers.includes('static'),
|
|
375
|
+
isFinal: modifiers.includes('final'),
|
|
376
|
+
isVolatile: modifiers.includes('volatile'),
|
|
377
|
+
isTransient: modifiers.includes('transient'),
|
|
378
|
+
startPosition: toPosition(startPos),
|
|
379
|
+
endPosition: toPosition(endPos),
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
// ============================================
|
|
383
|
+
// Utility Functions
|
|
384
|
+
// ============================================
|
|
385
|
+
/**
|
|
386
|
+
* Find a child node by type.
|
|
387
|
+
*/
|
|
388
|
+
function findChildByType(node, type) {
|
|
389
|
+
for (const child of node.children) {
|
|
390
|
+
if (child.type === type) {
|
|
391
|
+
return child;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Check if a node is a type node.
|
|
398
|
+
*/
|
|
399
|
+
function isTypeNode(node) {
|
|
400
|
+
const typeNodeTypes = [
|
|
401
|
+
'type_identifier',
|
|
402
|
+
'generic_type',
|
|
403
|
+
'scoped_type_identifier',
|
|
404
|
+
'array_type',
|
|
405
|
+
'integral_type',
|
|
406
|
+
'floating_point_type',
|
|
407
|
+
'boolean_type',
|
|
408
|
+
'void_type',
|
|
409
|
+
// Primitive types
|
|
410
|
+
'int',
|
|
411
|
+
'long',
|
|
412
|
+
'short',
|
|
413
|
+
'byte',
|
|
414
|
+
'float',
|
|
415
|
+
'double',
|
|
416
|
+
'boolean',
|
|
417
|
+
'char',
|
|
418
|
+
];
|
|
419
|
+
// Also check if it's a primitive type keyword
|
|
420
|
+
const primitiveTypes = ['int', 'long', 'short', 'byte', 'float', 'double', 'boolean', 'char', 'void'];
|
|
421
|
+
if (primitiveTypes.includes(node.text)) {
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
return typeNodeTypes.includes(node.type);
|
|
425
|
+
}
|
|
426
|
+
// ============================================
|
|
427
|
+
// Helper Functions for External Use
|
|
428
|
+
// ============================================
|
|
429
|
+
/**
|
|
430
|
+
* Check if a method has a specific annotation.
|
|
431
|
+
*/
|
|
432
|
+
export function hasAnnotation(method, annotationName) {
|
|
433
|
+
return method.annotations.some(ann => ann.name === annotationName || ann.fullName?.endsWith(`.${annotationName}`));
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Get a specific annotation from a method.
|
|
437
|
+
*/
|
|
438
|
+
export function getAnnotation(method, annotationName) {
|
|
439
|
+
return method.annotations.find(ann => ann.name === annotationName || ann.fullName?.endsWith(`.${annotationName}`));
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Check if a method is a Spring request handler.
|
|
443
|
+
*/
|
|
444
|
+
export function isRequestHandler(method) {
|
|
445
|
+
const mappingAnnotations = [
|
|
446
|
+
'RequestMapping',
|
|
447
|
+
'GetMapping',
|
|
448
|
+
'PostMapping',
|
|
449
|
+
'PutMapping',
|
|
450
|
+
'DeleteMapping',
|
|
451
|
+
'PatchMapping',
|
|
452
|
+
];
|
|
453
|
+
return method.annotations.some(ann => mappingAnnotations.includes(ann.name));
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Check if a method is transactional.
|
|
457
|
+
*/
|
|
458
|
+
export function isTransactional(method) {
|
|
459
|
+
return hasAnnotation(method, 'Transactional');
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Check if a method has security annotations.
|
|
463
|
+
*/
|
|
464
|
+
export function hasSecurityAnnotation(method) {
|
|
465
|
+
const securityAnnotations = [
|
|
466
|
+
'PreAuthorize',
|
|
467
|
+
'PostAuthorize',
|
|
468
|
+
'Secured',
|
|
469
|
+
'RolesAllowed',
|
|
470
|
+
];
|
|
471
|
+
return method.annotations.some(ann => securityAnnotations.includes(ann.name));
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Get the HTTP method from a request mapping annotation.
|
|
475
|
+
*/
|
|
476
|
+
export function getHttpMethod(method) {
|
|
477
|
+
for (const ann of method.annotations) {
|
|
478
|
+
switch (ann.name) {
|
|
479
|
+
case 'GetMapping':
|
|
480
|
+
return 'GET';
|
|
481
|
+
case 'PostMapping':
|
|
482
|
+
return 'POST';
|
|
483
|
+
case 'PutMapping':
|
|
484
|
+
return 'PUT';
|
|
485
|
+
case 'DeleteMapping':
|
|
486
|
+
return 'DELETE';
|
|
487
|
+
case 'PatchMapping':
|
|
488
|
+
return 'PATCH';
|
|
489
|
+
case 'RequestMapping':
|
|
490
|
+
// Check for method argument
|
|
491
|
+
const methodArg = ann.arguments.find(arg => arg.name === 'method');
|
|
492
|
+
if (methodArg) {
|
|
493
|
+
// Extract method from RequestMethod.GET, etc.
|
|
494
|
+
const match = methodArg.value.match(/RequestMethod\.(\w+)/);
|
|
495
|
+
if (match) {
|
|
496
|
+
return match[1] ?? null;
|
|
497
|
+
}
|
|
498
|
+
return methodArg.value;
|
|
499
|
+
}
|
|
500
|
+
// Default to GET if no method specified
|
|
501
|
+
return 'GET';
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Get the request path from a method's mapping annotation.
|
|
508
|
+
*/
|
|
509
|
+
export function getRequestPath(method) {
|
|
510
|
+
for (const ann of method.annotations) {
|
|
511
|
+
if ([
|
|
512
|
+
'RequestMapping',
|
|
513
|
+
'GetMapping',
|
|
514
|
+
'PostMapping',
|
|
515
|
+
'PutMapping',
|
|
516
|
+
'DeleteMapping',
|
|
517
|
+
'PatchMapping',
|
|
518
|
+
].includes(ann.name)) {
|
|
519
|
+
// Check for value argument (or single value)
|
|
520
|
+
const valueArg = ann.arguments.find(arg => arg.name === 'value' || arg.name === null);
|
|
521
|
+
if (valueArg) {
|
|
522
|
+
return valueArg.value;
|
|
523
|
+
}
|
|
524
|
+
// Check for path argument
|
|
525
|
+
const pathArg = ann.arguments.find(arg => arg.name === 'path');
|
|
526
|
+
if (pathArg) {
|
|
527
|
+
return pathArg.value;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
return null;
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Extract path variables from method parameters.
|
|
535
|
+
*/
|
|
536
|
+
export function getPathVariables(method) {
|
|
537
|
+
return method.parameters.filter(param => param.annotations.some(ann => ann.name === 'PathVariable'));
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Extract request body parameter from method.
|
|
541
|
+
*/
|
|
542
|
+
export function getRequestBody(method) {
|
|
543
|
+
return method.parameters.find(param => param.annotations.some(ann => ann.name === 'RequestBody'));
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Extract query parameters from method parameters.
|
|
547
|
+
*/
|
|
548
|
+
export function getQueryParameters(method) {
|
|
549
|
+
return method.parameters.filter(param => param.annotations.some(ann => ann.name === 'RequestParam'));
|
|
550
|
+
}
|
|
551
|
+
//# sourceMappingURL=method-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method-extractor.js","sourceRoot":"","sources":["../../../../src/parsers/tree-sitter/java/method-extractor.ts"],"names":[],"mappings":"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"}
|