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.
Files changed (193) hide show
  1. package/dist/boundaries/boundary-store.d.ts +92 -0
  2. package/dist/boundaries/boundary-store.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-store.js +458 -0
  4. package/dist/boundaries/boundary-store.js.map +1 -0
  5. package/dist/boundaries/index.d.ts +8 -0
  6. package/dist/boundaries/index.d.ts.map +1 -0
  7. package/dist/boundaries/index.js +8 -0
  8. package/dist/boundaries/index.js.map +1 -0
  9. package/dist/boundaries/types.d.ts +237 -0
  10. package/dist/boundaries/types.d.ts.map +1 -0
  11. package/dist/boundaries/types.js +8 -0
  12. package/dist/boundaries/types.js.map +1 -0
  13. package/dist/dna/ai-context.d.ts +10 -0
  14. package/dist/dna/ai-context.d.ts.map +1 -0
  15. package/dist/dna/ai-context.js +46 -0
  16. package/dist/dna/ai-context.js.map +1 -0
  17. package/dist/dna/dna-analyzer.d.ts +34 -0
  18. package/dist/dna/dna-analyzer.d.ts.map +1 -0
  19. package/dist/dna/dna-analyzer.js +110 -0
  20. package/dist/dna/dna-analyzer.js.map +1 -0
  21. package/dist/dna/dna-store.d.ts +13 -0
  22. package/dist/dna/dna-store.d.ts.map +1 -0
  23. package/dist/dna/dna-store.js +43 -0
  24. package/dist/dna/dna-store.js.map +1 -0
  25. package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
  26. package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
  27. package/dist/dna/gene-extractors/animation-approach.js +97 -0
  28. package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
  29. package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
  30. package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
  31. package/dist/dna/gene-extractors/base-extractor.js +76 -0
  32. package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
  33. package/dist/dna/gene-extractors/index.d.ts +16 -0
  34. package/dist/dna/gene-extractors/index.d.ts.map +1 -0
  35. package/dist/dna/gene-extractors/index.js +38 -0
  36. package/dist/dna/gene-extractors/index.js.map +1 -0
  37. package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
  38. package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
  39. package/dist/dna/gene-extractors/responsive-approach.js +30 -0
  40. package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
  41. package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
  42. package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
  43. package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
  44. package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
  45. package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
  46. package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
  47. package/dist/dna/gene-extractors/state-styling.js +29 -0
  48. package/dist/dna/gene-extractors/state-styling.js.map +1 -0
  49. package/dist/dna/gene-extractors/theming.d.ts +10 -0
  50. package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
  51. package/dist/dna/gene-extractors/theming.js +30 -0
  52. package/dist/dna/gene-extractors/theming.js.map +1 -0
  53. package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
  54. package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
  55. package/dist/dna/gene-extractors/variant-handling.js +38 -0
  56. package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
  57. package/dist/dna/health-calculator.d.ts +21 -0
  58. package/dist/dna/health-calculator.d.ts.map +1 -0
  59. package/dist/dna/health-calculator.js +113 -0
  60. package/dist/dna/health-calculator.js.map +1 -0
  61. package/dist/dna/index.d.ts +21 -0
  62. package/dist/dna/index.d.ts.map +1 -0
  63. package/dist/dna/index.js +19 -0
  64. package/dist/dna/index.js.map +1 -0
  65. package/dist/dna/mutation-detector.d.ts +10 -0
  66. package/dist/dna/mutation-detector.d.ts.map +1 -0
  67. package/dist/dna/mutation-detector.js +39 -0
  68. package/dist/dna/mutation-detector.js.map +1 -0
  69. package/dist/dna/playbook-generator.d.ts +6 -0
  70. package/dist/dna/playbook-generator.d.ts.map +1 -0
  71. package/dist/dna/playbook-generator.js +53 -0
  72. package/dist/dna/playbook-generator.js.map +1 -0
  73. package/dist/dna/types.d.ts +95 -0
  74. package/dist/dna/types.d.ts.map +1 -0
  75. package/dist/dna/types.js +8 -0
  76. package/dist/dna/types.js.map +1 -0
  77. package/dist/index.d.ts +7 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +10 -0
  80. package/dist/index.js.map +1 -1
  81. package/dist/parsers/parser-manager.d.ts.map +1 -1
  82. package/dist/parsers/parser-manager.js +2 -0
  83. package/dist/parsers/parser-manager.js.map +1 -1
  84. package/dist/parsers/tree-sitter/config.d.ts +82 -0
  85. package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
  86. package/dist/parsers/tree-sitter/config.js +200 -0
  87. package/dist/parsers/tree-sitter/config.js.map +1 -0
  88. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
  89. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
  90. package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
  91. package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
  92. package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
  93. package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
  94. package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
  95. package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
  96. package/dist/parsers/tree-sitter/index.d.ts +26 -0
  97. package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
  98. package/dist/parsers/tree-sitter/index.js +47 -0
  99. package/dist/parsers/tree-sitter/index.js.map +1 -0
  100. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
  101. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
  102. package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
  103. package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
  104. package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
  105. package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
  106. package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
  107. package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
  108. package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
  109. package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
  110. package/dist/parsers/tree-sitter/java/index.js +25 -0
  111. package/dist/parsers/tree-sitter/java/index.js.map +1 -0
  112. package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
  113. package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
  114. package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
  115. package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
  116. package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
  117. package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
  118. package/dist/parsers/tree-sitter/java/types.js +81 -0
  119. package/dist/parsers/tree-sitter/java/types.js.map +1 -0
  120. package/dist/parsers/tree-sitter/loader.d.ts +50 -0
  121. package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
  122. package/dist/parsers/tree-sitter/loader.js +156 -0
  123. package/dist/parsers/tree-sitter/loader.js.map +1 -0
  124. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
  125. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
  126. package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
  127. package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
  128. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
  129. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
  130. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
  131. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
  132. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
  133. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
  134. package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
  135. package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
  136. package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
  137. package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
  138. package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
  139. package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
  140. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
  141. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
  142. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
  143. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
  144. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
  145. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
  146. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
  147. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
  148. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
  149. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
  150. package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
  151. package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
  152. package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
  153. package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
  154. package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
  155. package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
  156. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
  157. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
  158. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
  159. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
  160. package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
  161. package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
  162. package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
  163. package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
  164. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
  165. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
  166. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
  167. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
  168. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
  169. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
  170. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
  171. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
  172. package/dist/parsers/tree-sitter/types.d.ts +399 -0
  173. package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
  174. package/dist/parsers/tree-sitter/types.js +20 -0
  175. package/dist/parsers/tree-sitter/types.js.map +1 -0
  176. package/dist/parsers/types.d.ts +1 -1
  177. package/dist/parsers/types.d.ts.map +1 -1
  178. package/dist/scanner/file-walker.d.ts.map +1 -1
  179. package/dist/scanner/file-walker.js +5 -0
  180. package/dist/scanner/file-walker.js.map +1 -1
  181. package/dist/store/history-store.d.ts +85 -269
  182. package/dist/store/history-store.d.ts.map +1 -1
  183. package/dist/store/history-store.js +272 -624
  184. package/dist/store/history-store.js.map +1 -1
  185. package/dist/types/index.d.ts +1 -0
  186. package/dist/types/index.d.ts.map +1 -1
  187. package/dist/types/index.js +2 -0
  188. package/dist/types/index.js.map +1 -1
  189. package/dist/types/java-type-mapping.d.ts +79 -0
  190. package/dist/types/java-type-mapping.d.ts.map +1 -0
  191. package/dist/types/java-type-mapping.js +290 -0
  192. package/dist/types/java-type-mapping.js.map +1 -0
  193. 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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"}