@dxworks/insider 2.9.1

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 (385) hide show
  1. package/.github/workflows/build.yml +19 -0
  2. package/.github/workflows/release-docs.yml +15 -0
  3. package/.github/workflows/release-voyager.yml +57 -0
  4. package/.github/workflows/release.yml +102 -0
  5. package/Dockerfile +8 -0
  6. package/README.md +89 -0
  7. package/TODO.txt +7 -0
  8. package/bin/insider.bat +1 -0
  9. package/bin/insider.sh +1 -0
  10. package/build.gradle +55 -0
  11. package/config/.ignore +4 -0
  12. package/config/comments.json +71 -0
  13. package/config/fingerprints/_anomalies-full.json +116 -0
  14. package/config/fingerprints/_extLibs.json +2555 -0
  15. package/config/fingerprints/code_smells.json +94 -0
  16. package/config/fingerprints/generated_code.json +17 -0
  17. package/config/fingerprints/libraries.json +4667 -0
  18. package/config/ignoredImports.txt +0 -0
  19. package/config/insider-conf.properties +3 -0
  20. package/config/rules/cloud_services/ad_networks.json +50 -0
  21. package/config/rules/cloud_services/bigdata.json +21 -0
  22. package/config/rules/cloud_services/cloud_hosting.json +398 -0
  23. package/config/rules/cloud_services/data_storage.json +291 -0
  24. package/config/rules/cloud_services/ecommerce.json +45 -0
  25. package/config/rules/cloud_services/socialmedia.json +82 -0
  26. package/config/rules/cloud_services/web_analytics.json +108 -0
  27. package/config/rules/components/active_content.json +157 -0
  28. package/config/rules/components/load_dll.json +66 -0
  29. package/config/rules/cryptography/algorithm_implementation.json +62 -0
  30. package/config/rules/cryptography/certificate.json +199 -0
  31. package/config/rules/cryptography/ciphers.json +174 -0
  32. package/config/rules/cryptography/crypto_currency.json +32 -0
  33. package/config/rules/cryptography/encoding.json +20 -0
  34. package/config/rules/cryptography/extended.json +220 -0
  35. package/config/rules/cryptography/external_libraries.json +141 -0
  36. package/config/rules/cryptography/hash_algorithm.json +98 -0
  37. package/config/rules/cryptography/key_derivation.json +65 -0
  38. package/config/rules/cryptography/protocol.json +156 -0
  39. package/config/rules/cryptography/random.json +97 -0
  40. package/config/rules/cryptography/weakssl.json +206 -0
  41. package/config/rules/data_handling/compressed_files.json +18 -0
  42. package/config/rules/data_handling/database.json +361 -0
  43. package/config/rules/data_handling/deserialization.json +296 -0
  44. package/config/rules/data_handling/json_parsing.json +49 -0
  45. package/config/rules/data_handling/media_parsing.json +33 -0
  46. package/config/rules/data_handling/pastebin.json +18 -0
  47. package/config/rules/data_handling/xml_parsing.json +168 -0
  48. package/config/rules/data_types/financial.json +106 -0
  49. package/config/rules/data_types/media.json +48 -0
  50. package/config/rules/data_types/secrets.json +91 -0
  51. package/config/rules/data_types/sensitive.json +176 -0
  52. package/config/rules/device_permissions/IOSPermissions.json +240 -0
  53. package/config/rules/device_permissions/UWP.json +221 -0
  54. package/config/rules/device_permissions/android_intents.json +599 -0
  55. package/config/rules/frameworks/PHP.json +172 -0
  56. package/config/rules/frameworks/build.json +189 -0
  57. package/config/rules/frameworks/c.json +45 -0
  58. package/config/rules/frameworks/csharp-nonMS.json +19 -0
  59. package/config/rules/frameworks/java.json +291 -0
  60. package/config/rules/frameworks/javascript.json +318 -0
  61. package/config/rules/frameworks/logging.json +103 -0
  62. package/config/rules/frameworks/microsoft.json +257 -0
  63. package/config/rules/frameworks/python.json +274 -0
  64. package/config/rules/frameworks/ruby.json +53 -0
  65. package/config/rules/frameworks/rust.json +77 -0
  66. package/config/rules/general/OSS_license.json +146 -0
  67. package/config/rules/general/code_metrics.json +132 -0
  68. package/config/rules/general/dependencies.json +199 -0
  69. package/config/rules/general/hygiene.json +47 -0
  70. package/config/rules/general/platforms.json +283 -0
  71. package/config/rules/general/solutioninfo.json +378 -0
  72. package/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
  73. package/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
  74. package/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
  75. package/config/rules/networkcomms/outbound_network.json +429 -0
  76. package/config/rules/os/acl.json +250 -0
  77. package/config/rules/os/dynamic_execution.json +359 -0
  78. package/config/rules/os/file_io.json +468 -0
  79. package/config/rules/os/process.json +179 -0
  80. package/config/rules/os/setenv.json +270 -0
  81. package/config/rules/os/system_registry.json +237 -0
  82. package/config/rules/os/user_accts.json +34 -0
  83. package/config/rules/security_feature/authentication.json +387 -0
  84. package/config/rules/security_feature/authorization.json +148 -0
  85. package/config/rules/test_frameworks/cpp_testing.json +194 -0
  86. package/config/rules/test_frameworks/go_testing.json +18 -0
  87. package/config/rules/test_frameworks/java_testing.json +720 -0
  88. package/config/rules/test_frameworks/javascript_testing.json +724 -0
  89. package/config/rules/test_frameworks/objectiveC_testing.json +146 -0
  90. package/config/rules/test_frameworks/php_testing.json +156 -0
  91. package/config/rules/test_frameworks/powershell_testing.json +17 -0
  92. package/config/rules/test_frameworks/python_testing.json +108 -0
  93. package/config/rules/test_frameworks/ruby_testing.json +114 -0
  94. package/config/rules/tools/pipeline.json +195 -0
  95. package/config/rules/webapp/comms.json +89 -0
  96. package/config/rules/webapp/headers.json +178 -0
  97. package/config/rules/webapp/media.json +56 -0
  98. package/config/rules/webapp/sessions.json +228 -0
  99. package/config/rules/webapp/storage.json +215 -0
  100. package/dist/config/.ignore +4 -0
  101. package/dist/config/comments.json +71 -0
  102. package/dist/config/fingerprints/_anomalies-full.json +116 -0
  103. package/dist/config/fingerprints/_extLibs.json +2555 -0
  104. package/dist/config/fingerprints/code_smells.json +94 -0
  105. package/dist/config/fingerprints/generated_code.json +17 -0
  106. package/dist/config/fingerprints/libraries.json +4667 -0
  107. package/dist/config/ignoredImports.txt +0 -0
  108. package/dist/config/insider-conf.properties +3 -0
  109. package/dist/config/rules/cloud_services/ad_networks.json +50 -0
  110. package/dist/config/rules/cloud_services/bigdata.json +21 -0
  111. package/dist/config/rules/cloud_services/cloud_hosting.json +398 -0
  112. package/dist/config/rules/cloud_services/data_storage.json +291 -0
  113. package/dist/config/rules/cloud_services/ecommerce.json +45 -0
  114. package/dist/config/rules/cloud_services/socialmedia.json +82 -0
  115. package/dist/config/rules/cloud_services/web_analytics.json +108 -0
  116. package/dist/config/rules/components/active_content.json +157 -0
  117. package/dist/config/rules/components/load_dll.json +66 -0
  118. package/dist/config/rules/cryptography/algorithm_implementation.json +62 -0
  119. package/dist/config/rules/cryptography/certificate.json +199 -0
  120. package/dist/config/rules/cryptography/ciphers.json +174 -0
  121. package/dist/config/rules/cryptography/crypto_currency.json +32 -0
  122. package/dist/config/rules/cryptography/encoding.json +20 -0
  123. package/dist/config/rules/cryptography/extended.json +220 -0
  124. package/dist/config/rules/cryptography/external_libraries.json +141 -0
  125. package/dist/config/rules/cryptography/hash_algorithm.json +98 -0
  126. package/dist/config/rules/cryptography/key_derivation.json +65 -0
  127. package/dist/config/rules/cryptography/protocol.json +156 -0
  128. package/dist/config/rules/cryptography/random.json +97 -0
  129. package/dist/config/rules/cryptography/weakssl.json +206 -0
  130. package/dist/config/rules/data_handling/compressed_files.json +18 -0
  131. package/dist/config/rules/data_handling/database.json +361 -0
  132. package/dist/config/rules/data_handling/deserialization.json +296 -0
  133. package/dist/config/rules/data_handling/json_parsing.json +49 -0
  134. package/dist/config/rules/data_handling/media_parsing.json +33 -0
  135. package/dist/config/rules/data_handling/pastebin.json +18 -0
  136. package/dist/config/rules/data_handling/xml_parsing.json +168 -0
  137. package/dist/config/rules/data_types/financial.json +106 -0
  138. package/dist/config/rules/data_types/media.json +48 -0
  139. package/dist/config/rules/data_types/secrets.json +91 -0
  140. package/dist/config/rules/data_types/sensitive.json +176 -0
  141. package/dist/config/rules/device_permissions/IOSPermissions.json +240 -0
  142. package/dist/config/rules/device_permissions/UWP.json +221 -0
  143. package/dist/config/rules/device_permissions/android_intents.json +599 -0
  144. package/dist/config/rules/frameworks/PHP.json +172 -0
  145. package/dist/config/rules/frameworks/build.json +189 -0
  146. package/dist/config/rules/frameworks/c.json +45 -0
  147. package/dist/config/rules/frameworks/csharp-nonMS.json +19 -0
  148. package/dist/config/rules/frameworks/java.json +291 -0
  149. package/dist/config/rules/frameworks/javascript.json +318 -0
  150. package/dist/config/rules/frameworks/logging.json +103 -0
  151. package/dist/config/rules/frameworks/microsoft.json +257 -0
  152. package/dist/config/rules/frameworks/python.json +274 -0
  153. package/dist/config/rules/frameworks/ruby.json +53 -0
  154. package/dist/config/rules/frameworks/rust.json +77 -0
  155. package/dist/config/rules/general/OSS_license.json +146 -0
  156. package/dist/config/rules/general/code_metrics.json +132 -0
  157. package/dist/config/rules/general/dependencies.json +199 -0
  158. package/dist/config/rules/general/hygiene.json +47 -0
  159. package/dist/config/rules/general/platforms.json +283 -0
  160. package/dist/config/rules/general/solutioninfo.json +378 -0
  161. package/dist/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
  162. package/dist/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
  163. package/dist/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
  164. package/dist/config/rules/networkcomms/outbound_network.json +429 -0
  165. package/dist/config/rules/os/acl.json +250 -0
  166. package/dist/config/rules/os/dynamic_execution.json +359 -0
  167. package/dist/config/rules/os/file_io.json +468 -0
  168. package/dist/config/rules/os/process.json +179 -0
  169. package/dist/config/rules/os/setenv.json +270 -0
  170. package/dist/config/rules/os/system_registry.json +237 -0
  171. package/dist/config/rules/os/user_accts.json +34 -0
  172. package/dist/config/rules/security_feature/authentication.json +387 -0
  173. package/dist/config/rules/security_feature/authorization.json +148 -0
  174. package/dist/config/rules/test_frameworks/cpp_testing.json +194 -0
  175. package/dist/config/rules/test_frameworks/go_testing.json +18 -0
  176. package/dist/config/rules/test_frameworks/java_testing.json +720 -0
  177. package/dist/config/rules/test_frameworks/javascript_testing.json +724 -0
  178. package/dist/config/rules/test_frameworks/objectiveC_testing.json +146 -0
  179. package/dist/config/rules/test_frameworks/php_testing.json +156 -0
  180. package/dist/config/rules/test_frameworks/powershell_testing.json +17 -0
  181. package/dist/config/rules/test_frameworks/python_testing.json +108 -0
  182. package/dist/config/rules/test_frameworks/ruby_testing.json +114 -0
  183. package/dist/config/rules/tools/pipeline.json +195 -0
  184. package/dist/config/rules/webapp/comms.json +89 -0
  185. package/dist/config/rules/webapp/headers.json +178 -0
  186. package/dist/config/rules/webapp/media.json +56 -0
  187. package/dist/config/rules/webapp/sessions.json +228 -0
  188. package/dist/config/rules/webapp/storage.json +215 -0
  189. package/dist/index.js +13 -0
  190. package/dist/insider.jar +0 -0
  191. package/dist/insider.js +7 -0
  192. package/dist/lib.js +21 -0
  193. package/docs/config/config.md +3 -0
  194. package/docs/config/ignore.md +3 -0
  195. package/docs/config/languages.md +3 -0
  196. package/docs/index.md +58 -0
  197. package/dxworks-site.json +13 -0
  198. package/gradle.properties +0 -0
  199. package/gradlew +240 -0
  200. package/gradlew.bat +91 -0
  201. package/insider/README.md +89 -0
  202. package/insider/config/.ignore +4 -0
  203. package/insider/config/comments.json +71 -0
  204. package/insider/config/fingerprints/_anomalies-full.json +116 -0
  205. package/insider/config/fingerprints/_extLibs.json +2555 -0
  206. package/insider/config/fingerprints/code_smells.json +94 -0
  207. package/insider/config/fingerprints/generated_code.json +17 -0
  208. package/insider/config/fingerprints/libraries.json +4667 -0
  209. package/insider/config/ignoredImports.txt +0 -0
  210. package/insider/config/insider-conf.properties +3 -0
  211. package/insider/config/rules/cloud_services/ad_networks.json +50 -0
  212. package/insider/config/rules/cloud_services/bigdata.json +21 -0
  213. package/insider/config/rules/cloud_services/cloud_hosting.json +398 -0
  214. package/insider/config/rules/cloud_services/data_storage.json +291 -0
  215. package/insider/config/rules/cloud_services/ecommerce.json +45 -0
  216. package/insider/config/rules/cloud_services/socialmedia.json +82 -0
  217. package/insider/config/rules/cloud_services/web_analytics.json +108 -0
  218. package/insider/config/rules/components/active_content.json +157 -0
  219. package/insider/config/rules/components/load_dll.json +66 -0
  220. package/insider/config/rules/cryptography/algorithm_implementation.json +62 -0
  221. package/insider/config/rules/cryptography/certificate.json +199 -0
  222. package/insider/config/rules/cryptography/ciphers.json +174 -0
  223. package/insider/config/rules/cryptography/crypto_currency.json +32 -0
  224. package/insider/config/rules/cryptography/encoding.json +20 -0
  225. package/insider/config/rules/cryptography/extended.json +220 -0
  226. package/insider/config/rules/cryptography/external_libraries.json +141 -0
  227. package/insider/config/rules/cryptography/hash_algorithm.json +98 -0
  228. package/insider/config/rules/cryptography/key_derivation.json +65 -0
  229. package/insider/config/rules/cryptography/protocol.json +156 -0
  230. package/insider/config/rules/cryptography/random.json +97 -0
  231. package/insider/config/rules/cryptography/weakssl.json +206 -0
  232. package/insider/config/rules/data_handling/compressed_files.json +18 -0
  233. package/insider/config/rules/data_handling/database.json +361 -0
  234. package/insider/config/rules/data_handling/deserialization.json +296 -0
  235. package/insider/config/rules/data_handling/json_parsing.json +49 -0
  236. package/insider/config/rules/data_handling/media_parsing.json +33 -0
  237. package/insider/config/rules/data_handling/pastebin.json +18 -0
  238. package/insider/config/rules/data_handling/xml_parsing.json +168 -0
  239. package/insider/config/rules/data_types/financial.json +106 -0
  240. package/insider/config/rules/data_types/media.json +48 -0
  241. package/insider/config/rules/data_types/secrets.json +91 -0
  242. package/insider/config/rules/data_types/sensitive.json +176 -0
  243. package/insider/config/rules/device_permissions/IOSPermissions.json +240 -0
  244. package/insider/config/rules/device_permissions/UWP.json +221 -0
  245. package/insider/config/rules/device_permissions/android_intents.json +599 -0
  246. package/insider/config/rules/frameworks/PHP.json +172 -0
  247. package/insider/config/rules/frameworks/build.json +189 -0
  248. package/insider/config/rules/frameworks/c.json +45 -0
  249. package/insider/config/rules/frameworks/csharp-nonMS.json +19 -0
  250. package/insider/config/rules/frameworks/java.json +291 -0
  251. package/insider/config/rules/frameworks/javascript.json +318 -0
  252. package/insider/config/rules/frameworks/logging.json +103 -0
  253. package/insider/config/rules/frameworks/microsoft.json +257 -0
  254. package/insider/config/rules/frameworks/python.json +274 -0
  255. package/insider/config/rules/frameworks/ruby.json +53 -0
  256. package/insider/config/rules/frameworks/rust.json +77 -0
  257. package/insider/config/rules/general/OSS_license.json +146 -0
  258. package/insider/config/rules/general/code_metrics.json +132 -0
  259. package/insider/config/rules/general/dependencies.json +199 -0
  260. package/insider/config/rules/general/hygiene.json +47 -0
  261. package/insider/config/rules/general/platforms.json +283 -0
  262. package/insider/config/rules/general/solutioninfo.json +378 -0
  263. package/insider/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
  264. package/insider/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
  265. package/insider/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
  266. package/insider/config/rules/networkcomms/outbound_network.json +429 -0
  267. package/insider/config/rules/os/acl.json +250 -0
  268. package/insider/config/rules/os/dynamic_execution.json +359 -0
  269. package/insider/config/rules/os/file_io.json +468 -0
  270. package/insider/config/rules/os/process.json +179 -0
  271. package/insider/config/rules/os/setenv.json +270 -0
  272. package/insider/config/rules/os/system_registry.json +237 -0
  273. package/insider/config/rules/os/user_accts.json +34 -0
  274. package/insider/config/rules/security_feature/authentication.json +387 -0
  275. package/insider/config/rules/security_feature/authorization.json +148 -0
  276. package/insider/config/rules/test_frameworks/cpp_testing.json +194 -0
  277. package/insider/config/rules/test_frameworks/go_testing.json +18 -0
  278. package/insider/config/rules/test_frameworks/java_testing.json +720 -0
  279. package/insider/config/rules/test_frameworks/javascript_testing.json +724 -0
  280. package/insider/config/rules/test_frameworks/objectiveC_testing.json +146 -0
  281. package/insider/config/rules/test_frameworks/php_testing.json +156 -0
  282. package/insider/config/rules/test_frameworks/powershell_testing.json +17 -0
  283. package/insider/config/rules/test_frameworks/python_testing.json +108 -0
  284. package/insider/config/rules/test_frameworks/ruby_testing.json +114 -0
  285. package/insider/config/rules/tools/pipeline.json +195 -0
  286. package/insider/config/rules/webapp/comms.json +89 -0
  287. package/insider/config/rules/webapp/headers.json +178 -0
  288. package/insider/config/rules/webapp/media.json +56 -0
  289. package/insider/config/rules/webapp/sessions.json +228 -0
  290. package/insider/config/rules/webapp/storage.json +215 -0
  291. package/insider/insider.bat +1 -0
  292. package/insider/insider.jar +0 -0
  293. package/insider/insider.sh +1 -0
  294. package/insider/languages.yml +3988 -0
  295. package/instrument.yml +37 -0
  296. package/languages.yml +3988 -0
  297. package/lib/index.js +13 -0
  298. package/lib/insider.js +7 -0
  299. package/lib/lib.js +21 -0
  300. package/lombok.config +2 -0
  301. package/mkdocs.yml +18 -0
  302. package/package.json +51 -0
  303. package/releaseNotes/v2.6.0.md +1 -0
  304. package/releaseNotes/v2.7.1.md +1 -0
  305. package/settings.gradle +2 -0
  306. package/src/main/java/org/dxworks/insider/ChronosTag.java +14 -0
  307. package/src/main/java/org/dxworks/insider/Insider.java +214 -0
  308. package/src/main/java/org/dxworks/insider/InsiderAnalysis.java +7 -0
  309. package/src/main/java/org/dxworks/insider/InsiderFile.java +125 -0
  310. package/src/main/java/org/dxworks/insider/InsiderOptions.java +78 -0
  311. package/src/main/java/org/dxworks/insider/InsiderResult.java +15 -0
  312. package/src/main/java/org/dxworks/insider/application/inspector/CodeRuleExtractor.java +14 -0
  313. package/src/main/java/org/dxworks/insider/application/inspector/CommentRuleExtractor.java +14 -0
  314. package/src/main/java/org/dxworks/insider/application/inspector/FileRuleExtractor.java +14 -0
  315. package/src/main/java/org/dxworks/insider/application/inspector/RuleExtractor.java +11 -0
  316. package/src/main/java/org/dxworks/insider/application/inspector/dtos/Comment.java +18 -0
  317. package/src/main/java/org/dxworks/insider/application/inspector/dtos/CommentPattern.java +44 -0
  318. package/src/main/java/org/dxworks/insider/application/inspector/dtos/Condition.java +15 -0
  319. package/src/main/java/org/dxworks/insider/application/inspector/dtos/InsiderPattern.java +149 -0
  320. package/src/main/java/org/dxworks/insider/application/inspector/dtos/PatternMatch.java +23 -0
  321. package/src/main/java/org/dxworks/insider/application/inspector/dtos/Rule.java +61 -0
  322. package/src/main/java/org/dxworks/insider/application/inspector/services/CommentService.java +165 -0
  323. package/src/main/java/org/dxworks/insider/application/inspector/services/RuleService.java +54 -0
  324. package/src/main/java/org/dxworks/insider/commands/AddCommand.java +125 -0
  325. package/src/main/java/org/dxworks/insider/commands/AllFilesCommand.java +4 -0
  326. package/src/main/java/org/dxworks/insider/commands/ConvertCommand.java +55 -0
  327. package/src/main/java/org/dxworks/insider/commands/DetectCommand.java +42 -0
  328. package/src/main/java/org/dxworks/insider/commands/DiagnoseCommand.java +74 -0
  329. package/src/main/java/org/dxworks/insider/commands/ExtractCommand.java +35 -0
  330. package/src/main/java/org/dxworks/insider/commands/FindCommand.java +102 -0
  331. package/src/main/java/org/dxworks/insider/commands/HelpCommand.java +56 -0
  332. package/src/main/java/org/dxworks/insider/commands/IndentationCount.java +69 -0
  333. package/src/main/java/org/dxworks/insider/commands/InsiderCommand.java +71 -0
  334. package/src/main/java/org/dxworks/insider/commands/InspectCommand.java +98 -0
  335. package/src/main/java/org/dxworks/insider/commands/MeasureCommand.java +47 -0
  336. package/src/main/java/org/dxworks/insider/commands/NoFilesCommand.java +4 -0
  337. package/src/main/java/org/dxworks/insider/commands/VersionCommand.java +34 -0
  338. package/src/main/java/org/dxworks/insider/configuration/InsiderConfiguration.java +123 -0
  339. package/src/main/java/org/dxworks/insider/constants/InsiderConstants.java +19 -0
  340. package/src/main/java/org/dxworks/insider/depext/AbstractImportsProcessor.java +57 -0
  341. package/src/main/java/org/dxworks/insider/depext/CPPImportsProcessor.java +55 -0
  342. package/src/main/java/org/dxworks/insider/depext/CSharpImportsProcessor.java +53 -0
  343. package/src/main/java/org/dxworks/insider/depext/DependencyExtractor.java +105 -0
  344. package/src/main/java/org/dxworks/insider/depext/ImportItem.java +19 -0
  345. package/src/main/java/org/dxworks/insider/depext/ImportResult.java +32 -0
  346. package/src/main/java/org/dxworks/insider/depext/JavastackImportsProcessor.java +88 -0
  347. package/src/main/java/org/dxworks/insider/depext/VBImportsProcessor.java +41 -0
  348. package/src/main/java/org/dxworks/insider/exceptions/InsiderException.java +7 -0
  349. package/src/main/java/org/dxworks/insider/library/detector/C_ImportsContainer.java +73 -0
  350. package/src/main/java/org/dxworks/insider/library/detector/ImportsContainer.java +122 -0
  351. package/src/main/java/org/dxworks/insider/library/detector/JavaImportsContainer.java +63 -0
  352. package/src/main/java/org/dxworks/insider/library/detector/LibraryDetector.java +150 -0
  353. package/src/main/java/org/dxworks/insider/library/detector/LibraryDetectorLanguage.java +6 -0
  354. package/src/main/java/org/dxworks/insider/library/detector/model/PackagingUnit.java +26 -0
  355. package/src/main/java/org/dxworks/insider/technology/finder/LinguistService.java +79 -0
  356. package/src/main/java/org/dxworks/insider/technology/finder/converters/XmlToJsonConverter.java +41 -0
  357. package/src/main/java/org/dxworks/insider/technology/finder/exceptions/FingerprintParseException.java +7 -0
  358. package/src/main/java/org/dxworks/insider/technology/finder/model/Technology.java +73 -0
  359. package/src/main/java/org/dxworks/insider/technology/finder/model/json/JsonConfigurationDTO.java +14 -0
  360. package/src/main/java/org/dxworks/insider/technology/finder/model/json/TechnologyJsonDTO.java +66 -0
  361. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/CategoryXmlDTO.java +21 -0
  362. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/ConfigurationDataXmlDTO.java +17 -0
  363. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/FingerprintXmlDTO.java +17 -0
  364. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguageXmlDTO.java +20 -0
  365. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguagesXmlDTO.java +18 -0
  366. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/TechnologyXmlDTO.java +19 -0
  367. package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/XmlConfigurationDTO.java +17 -0
  368. package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsParser.java +14 -0
  369. package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParser.java +57 -0
  370. package/src/main/java/org/dxworks/insider/technology/finder/parsers/JavaLibrariesCsvParser.java +71 -0
  371. package/src/main/java/org/dxworks/insider/technology/finder/parsers/JsonFingerprintParser.java +58 -0
  372. package/src/main/java/org/dxworks/insider/utils/FileUtils.java +45 -0
  373. package/src/main/java/org/dxworks/insider/utils/ImportUtils.java +21 -0
  374. package/src/main/java/org/dxworks/insider/utils/LibraryImport.java +17 -0
  375. package/src/main/java/org/dxworks/insider/utils/LibraryImportInOtherTechnology.java +30 -0
  376. package/src/main/java/org/dxworks/insider/utils/MapUtils.java +19 -0
  377. package/src/main/resources/insider-version +1 -0
  378. package/src/test/java/org/dxworks/insider/application/inspector/services/CommentServiceTest.java +40 -0
  379. package/src/test/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParserTest.java +15 -0
  380. package/src/test/java/org/dxworks/insider/utils/FileUtilsTest.java +31 -0
  381. package/src/test/java/org/dxworks/insider/utils/ImportUtilsTest.java +24 -0
  382. package/src/test/java/org/dxworks/insider/utils/transformers/JsonToCsvTransformerTest.java +18 -0
  383. package/src/test/resources/Test1.java +21 -0
  384. package/src/test/resources/Test2.java +21 -0
  385. package/src/test/resources/cobol/CM201M.CBL +88 -0
@@ -0,0 +1,55 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import lombok.extern.slf4j.Slf4j;
4
+ import org.dxworks.insider.InsiderFile;
5
+ import org.dxworks.insider.technology.finder.model.Technology;
6
+ import org.dxworks.insider.technology.finder.parsers.JavaLibrariesCsvParser;
7
+ import org.dxworks.insider.technology.finder.parsers.JsonFingerprintParser;
8
+
9
+ import java.io.IOException;
10
+ import java.nio.file.Paths;
11
+ import java.util.List;
12
+
13
+ @Slf4j
14
+ public class ConvertCommand implements NoFilesCommand {
15
+ protected String sourceFile;
16
+ protected String targetFile;
17
+
18
+ @Override
19
+ public boolean parse(List<String> args) {
20
+ if (args.size() != 3)
21
+ return false;
22
+
23
+ sourceFile = args.get(1);
24
+ targetFile = args.get(2);
25
+
26
+ return fileExists(sourceFile);
27
+ }
28
+
29
+ @Override
30
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
31
+ try {
32
+ transformJsonFileToCsv(sourceFile, targetFile);
33
+ } catch (IOException e) {
34
+ log.error("Could not transform file!", e);
35
+ }
36
+ }
37
+
38
+ private void transformJsonFileToCsv(String jsonFile, String csvFile) throws IOException {
39
+ JsonFingerprintParser jsonFingerprintParser = new JsonFingerprintParser();
40
+ List<Technology> technologies = jsonFingerprintParser.parseTechnologiesFile(jsonFile);
41
+
42
+ JavaLibrariesCsvParser javaLibrariesCsvParser = new JavaLibrariesCsvParser();
43
+ javaLibrariesCsvParser.writeTechnologiesToFile(technologies, Paths.get(csvFile));
44
+ }
45
+
46
+ @Override
47
+ public String usage() {
48
+ return "insider convert <path_to_json> <path_to_csv>";
49
+ }
50
+
51
+ @Override
52
+ public String getName() {
53
+ return CONVERT;
54
+ }
55
+ }
@@ -0,0 +1,42 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import org.dxworks.insider.InsiderFile;
4
+ import org.dxworks.insider.library.detector.LibraryDetector;
5
+ import org.dxworks.insider.library.detector.LibraryDetectorLanguage;
6
+ import org.dxworks.insider.technology.finder.LinguistService;
7
+
8
+ import java.util.List;
9
+
10
+ public class DetectCommand implements InsiderCommand {
11
+
12
+ @Override
13
+ public boolean parse(List<String> args) {
14
+ return args.size() == 1;
15
+ }
16
+
17
+
18
+ @Override
19
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
20
+ LibraryDetector libraryDetector = new LibraryDetector(LibraryDetectorLanguage.JAVA);
21
+ insiderFiles.stream()
22
+ .filter(libraryDetector::accepts)
23
+ .forEach(libraryDetector::analyze);
24
+
25
+ libraryDetector.generateResults();
26
+ }
27
+
28
+ @Override
29
+ public String usage() {
30
+ return "insider detect";
31
+ }
32
+
33
+ @Override
34
+ public String getName() {
35
+ return DETECT;
36
+ }
37
+
38
+ @Override
39
+ public boolean acceptsFile(String path) {
40
+ return LinguistService.getInstance().hasAcceptedExtension(path, LibraryDetector.ACCEPTED_LANGUAGES);
41
+ }
42
+ }
@@ -0,0 +1,74 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import org.dxworks.insider.InsiderFile;
4
+ import org.dxworks.insider.technology.finder.model.Technology;
5
+ import org.dxworks.insider.technology.finder.parsers.JsonFingerprintParser;
6
+ import org.dxworks.insider.utils.ImportUtils;
7
+ import org.dxworks.insider.utils.LibraryImport;
8
+ import org.dxworks.insider.utils.LibraryImportInOtherTechnology;
9
+
10
+ import java.util.ArrayList;
11
+ import java.util.List;
12
+ import java.util.Map;
13
+ import java.util.stream.Collectors;
14
+
15
+ public class DiagnoseCommand implements NoFilesCommand {
16
+
17
+ private String file;
18
+
19
+ @Override
20
+ public boolean parse(List<String> args) {
21
+ if (args.size() != 2)
22
+ return false;
23
+
24
+ file = args.get(1);
25
+
26
+ return fileExists(file);
27
+ }
28
+
29
+ @Override
30
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
31
+
32
+ JsonFingerprintParser jsonFingerprintParser = new JsonFingerprintParser();
33
+ List<Technology> jsonTechnologies = jsonFingerprintParser.parseTechnologiesFile(file);
34
+
35
+ List<String> duplicatedTechnologies = jsonTechnologies.stream()
36
+ .collect(Collectors.groupingBy(Technology::getName, Collectors.counting()))
37
+ .entrySet().stream()
38
+ .filter(e -> e.getValue() > 1)
39
+ .map(Map.Entry::getKey)
40
+ .collect(Collectors.toList());
41
+
42
+ System.out.println("Duplicated technologies: " + duplicatedTechnologies.toString());
43
+
44
+ List<LibraryImportInOtherTechnology> duplicatedFingerPrints = new ArrayList<>();
45
+
46
+ jsonTechnologies.forEach(technology -> {
47
+ List<String> fingerprints = technology.getFingerprints();
48
+ fingerprints.forEach(fingerprint ->
49
+ jsonTechnologies.forEach(otherTechnology -> {
50
+ if (technology.equals(otherTechnology))
51
+ return;
52
+ if (otherTechnology.getFingerprints().contains(fingerprint)) {
53
+ duplicatedFingerPrints.add(new LibraryImportInOtherTechnology(fingerprint, technology.getName(), otherTechnology.getName()));
54
+ }
55
+ }));
56
+ });
57
+
58
+ System.out.println("Duplicated Fingerprints: " + duplicatedFingerPrints.stream()
59
+ .distinct()
60
+ .map(LibraryImport::get_import)
61
+ .map(ImportUtils::unwrapImportPackage)
62
+ .collect(Collectors.toList()));
63
+ }
64
+
65
+ @Override
66
+ public String usage() {
67
+ return "insider diagnose <path_to_json>";
68
+ }
69
+
70
+ @Override
71
+ public String getName() {
72
+ return DIAGNOSE;
73
+ }
74
+ }
@@ -0,0 +1,35 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import org.dxworks.insider.InsiderFile;
4
+ import org.dxworks.insider.depext.DependencyExtractor;
5
+
6
+ import java.util.List;
7
+
8
+ public class ExtractCommand implements InsiderCommand {
9
+ private final DependencyExtractor dependencyExtractor = new DependencyExtractor();
10
+
11
+ @Override
12
+ public boolean parse(List<String> args) {
13
+ return true;
14
+ }
15
+
16
+ @Override
17
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
18
+ dependencyExtractor.processAndWriteResults(insiderFiles);
19
+ }
20
+
21
+ @Override
22
+ public String usage() {
23
+ return "insider extract";
24
+ }
25
+
26
+ @Override
27
+ public String getName() {
28
+ return EXTRACT;
29
+ }
30
+
31
+ @Override
32
+ public boolean acceptsFile(String path) {
33
+ return dependencyExtractor.acceptFile(path);
34
+ }
35
+ }
@@ -0,0 +1,102 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import lombok.extern.slf4j.Slf4j;
5
+ import me.tongfei.progressbar.ProgressBar;
6
+ import me.tongfei.progressbar.ProgressBarBuilder;
7
+ import me.tongfei.progressbar.ProgressBarStyle;
8
+ import org.dxworks.insider.InsiderFile;
9
+ import org.dxworks.insider.InsiderResult;
10
+ import org.dxworks.insider.configuration.InsiderConfiguration;
11
+ import org.dxworks.insider.technology.finder.model.Technology;
12
+ import org.dxworks.insider.technology.finder.model.json.JsonConfigurationDTO;
13
+ import org.dxworks.insider.technology.finder.parsers.JsonFingerprintParser;
14
+
15
+ import java.io.File;
16
+ import java.io.FileWriter;
17
+ import java.io.IOException;
18
+ import java.nio.file.Paths;
19
+ import java.util.List;
20
+ import java.util.Objects;
21
+ import java.util.stream.Collectors;
22
+ import java.util.stream.Stream;
23
+
24
+ import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
25
+
26
+ @Slf4j
27
+ public class FindCommand implements InsiderCommand {
28
+
29
+ private List<String> fingerprintFiles;
30
+
31
+ @Override
32
+ public boolean parse(List<String> args) {
33
+ if (args.size() == 1) {
34
+ return false;
35
+ }
36
+
37
+ List<String> files = args.subList(1, args.size());
38
+ fingerprintFiles = files.stream().filter(this::fileExists).collect(Collectors.toList());
39
+
40
+ return !fingerprintFiles.isEmpty() && files.size() == fingerprintFiles.size();
41
+ }
42
+
43
+ @Override
44
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
45
+ JsonFingerprintParser parser = new JsonFingerprintParser();
46
+
47
+ fingerprintFiles.forEach(file -> {
48
+ JsonConfigurationDTO configurationDTO = parser.getConfigurationDTO(file);
49
+
50
+ List<Technology> technologies = parser.parseTechnologiesFile(file);
51
+
52
+ List<InsiderResult> insiderResults;
53
+
54
+ try (ProgressBar pb = new ProgressBarBuilder()
55
+ .setInitialMax(insiderFiles.size())
56
+ .setUnit(" Files", 1)
57
+ .setTaskName("Matching")
58
+ .setStyle(ProgressBarStyle.ASCII)
59
+ .setUpdateIntervalMillis(100)
60
+ .setPrintStream(System.err)
61
+ .build()) {
62
+ insiderResults = insiderFiles.parallelStream()
63
+ .flatMap(insiderFile ->
64
+ {
65
+ Stream<InsiderResult> insiderResultStream = technologies.parallelStream()
66
+ .map(technology -> technology.analyze(insiderFile))
67
+ .filter(Objects::nonNull)
68
+ .filter(insiderResult -> insiderResult.getValue() > 0);
69
+ pb.step();
70
+ return insiderResultStream;
71
+ })
72
+ .collect(Collectors.toList());
73
+ }
74
+ int sum = insiderResults.stream().mapToInt(InsiderResult::getValue).sum();
75
+
76
+ System.out.println(sum);
77
+
78
+ String outputFileName = configurationDTO.getOutputFileName();
79
+ if (outputFileName == null) {
80
+ outputFileName = InsiderConfiguration.getInstance().getProjectID() + "-" + Paths.get(file).toFile().getName();
81
+ }
82
+
83
+ ObjectMapper objectMapper = new ObjectMapper();
84
+ File outputFile = Paths.get(RESULTS_FOLDER, outputFileName).toFile();
85
+ try {
86
+ objectMapper.writerWithDefaultPrettyPrinter().writeValue(new FileWriter(outputFile), insiderResults);
87
+ } catch (IOException e) {
88
+ log.error("Could not write JSON file" + outputFile + "!", e);
89
+ }
90
+ });
91
+ }
92
+
93
+ @Override
94
+ public String usage() {
95
+ return "insider find <paths_to_json>...";
96
+ }
97
+
98
+ @Override
99
+ public String getName() {
100
+ return FIND;
101
+ }
102
+ }
@@ -0,0 +1,56 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import org.dxworks.insider.InsiderFile;
4
+ import org.dxworks.insider.configuration.InsiderConfiguration;
5
+
6
+ import java.util.List;
7
+ import java.util.stream.Collectors;
8
+ import java.util.stream.Stream;
9
+
10
+ public class HelpCommand implements NoFilesCommand {
11
+ @Override
12
+ public boolean parse(List<String> args) {
13
+ if (args.size() != 1)
14
+ return false;
15
+
16
+ return HELP.contains(args.get(0));
17
+ }
18
+
19
+ @Override
20
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
21
+ String usage = "Insider " + InsiderConfiguration.getInstance().getInsiderVersion() + " - usage guide:\n";
22
+ usage += "Configure the source root and the project id in the config/insider-conf.properties file\n\n";
23
+
24
+ usage += "This is a list of the commands:\n";
25
+
26
+ usage += Stream.of(
27
+ new HelpCommand(),
28
+ new VersionCommand(),
29
+ new AddCommand(),
30
+ new ConvertCommand(),
31
+ new DiagnoseCommand(),
32
+ new DetectCommand(),
33
+ new FindCommand(),
34
+ new InspectCommand(),
35
+ new ExtractCommand(),
36
+ new MeasureCommand(),
37
+ new IndentationCount())
38
+ .map(InsiderCommand::usage)
39
+ .map(s -> "\t" + s)
40
+ .collect(Collectors.joining("\n"));
41
+
42
+ usage += "\n\nPlease run insider with the specified commands from the folder you have installed Insider to!\n";
43
+
44
+ System.out.println(usage);
45
+ }
46
+
47
+ @Override
48
+ public String usage() {
49
+ return "insider {-h | -help | --help | help}";
50
+ }
51
+
52
+ @Override
53
+ public String getName() {
54
+ return "help";
55
+ }
56
+ }
@@ -0,0 +1,69 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import lombok.SneakyThrows;
5
+ import org.dxworks.insider.InsiderFile;
6
+ import org.dxworks.insider.InsiderResult;
7
+ import org.dxworks.insider.configuration.InsiderConfiguration;
8
+ import org.dxworks.insider.constants.InsiderConstants;
9
+
10
+ import java.nio.file.Path;
11
+ import java.util.Arrays;
12
+ import java.util.IntSummaryStatistics;
13
+ import java.util.List;
14
+ import java.util.stream.Collectors;
15
+ import java.util.stream.Stream;
16
+
17
+ public class IndentationCount implements AllFilesCommand {
18
+ @Override
19
+ public boolean parse(List<String> args) {
20
+ return args.size() == 1;
21
+ }
22
+
23
+ @SneakyThrows
24
+ @Override
25
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
26
+ List<InsiderResult> insiderResults = insiderFiles.stream().flatMap(file -> {
27
+ IntSummaryStatistics summary = Arrays.stream(file.getContent().split("\n"))
28
+ .filter(l -> !l.isBlank())
29
+ .mapToInt(this::getLineIndentation)
30
+ .summaryStatistics();
31
+
32
+ return Stream.of(new InsiderResult("max_indentation", "complexity", file.getFullyQualifiedName(), summary.getMax()),
33
+ new InsiderResult("avg_indentation", "complexity", file.getFullyQualifiedName(), (int) Math.round(summary.getAverage())),
34
+ new InsiderResult("total_indentation", "complexity", file.getFullyQualifiedName(), (int) summary.getSum())
35
+ );
36
+ }
37
+ ).collect(Collectors.toList());
38
+
39
+ ObjectMapper objectMapper = new ObjectMapper();
40
+
41
+ objectMapper.writeValue(Path.of(InsiderConstants.RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-indentation.json").toFile(), insiderResults);
42
+ }
43
+
44
+ private int getLineIndentation(String l) {
45
+ int indentation = 0;
46
+ for (int i = 0; i < l.toCharArray().length; i++) {
47
+ char ch = l.charAt(i);
48
+ if (Character.isWhitespace(ch)) {
49
+ if (ch == '\t')
50
+ indentation += 2;
51
+ if (ch == ' ')
52
+ indentation += 1;
53
+ } else {
54
+ break;
55
+ }
56
+ }
57
+ return indentation / 2;
58
+ }
59
+
60
+ @Override
61
+ public String usage() {
62
+ return "insider indent";
63
+ }
64
+
65
+ @Override
66
+ public String getName() {
67
+ return INDENT;
68
+ }
69
+ }
@@ -0,0 +1,71 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import org.dxworks.insider.InsiderFile;
4
+ import org.slf4j.Logger;
5
+ import org.slf4j.LoggerFactory;
6
+
7
+ import java.nio.file.Files;
8
+ import java.nio.file.Path;
9
+ import java.nio.file.Paths;
10
+ import java.util.Arrays;
11
+ import java.util.List;
12
+
13
+ public interface InsiderCommand {
14
+
15
+ Logger log = LoggerFactory.getLogger(InsiderCommand.class);
16
+
17
+ String DETECT = "detect";
18
+ String FIND = "find";
19
+ String ADD = "add";
20
+ String DIAGNOSE = "diagnose";
21
+ String CONVERT = "convert";
22
+ String INSPECT = "inspect";
23
+ String EXTRACT = "extract";
24
+ String INDENT = "indent";
25
+ String MEASURE = "measure";
26
+ List<String> VERSION = Arrays.asList("version", "-version", "--version", "-v");
27
+ List<String> HELP = Arrays.asList("help", "-help", "--help", "-h");
28
+
29
+ boolean parse(List<String> args);
30
+
31
+ default boolean fileExists(String filePath) {
32
+ Path path = Path.of(filePath).toAbsolutePath();
33
+
34
+ if (!Files.exists(path)) {
35
+ log.error("File " + path.toAbsolutePath() + " does not exist");
36
+ return false;
37
+ }
38
+
39
+ if (!Files.isRegularFile(path)) {
40
+ log.error("File " + path.toAbsolutePath() + " is not a file!");
41
+ return false;
42
+ }
43
+
44
+ return true;
45
+ }
46
+
47
+ default boolean folderExists(String folderPath) {
48
+ Path path = Paths.get(folderPath).toAbsolutePath();
49
+ if (!Files.exists(path)) {
50
+ log.error("Folder " + path.toAbsolutePath() + " does not exist");
51
+ return false;
52
+ }
53
+
54
+ if (!Files.isDirectory(path)) {
55
+ log.error("Folder " + path.toAbsolutePath() + " is not a firectory!");
56
+ return false;
57
+ }
58
+
59
+ return true;
60
+ }
61
+
62
+ default boolean acceptsFile(String path) {
63
+ return true;
64
+ }
65
+
66
+ void execute(List<InsiderFile> insiderFiles, List<String> args);
67
+
68
+ String usage();
69
+
70
+ String getName();
71
+ }
@@ -0,0 +1,98 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import lombok.extern.slf4j.Slf4j;
5
+ import me.tongfei.progressbar.ProgressBar;
6
+ import me.tongfei.progressbar.ProgressBarBuilder;
7
+ import me.tongfei.progressbar.ProgressBarStyle;
8
+ import org.apache.commons.lang.math.IntRange;
9
+ import org.dxworks.insider.ChronosTag;
10
+ import org.dxworks.insider.InsiderFile;
11
+ import org.dxworks.insider.InsiderResult;
12
+ import org.dxworks.insider.configuration.InsiderConfiguration;
13
+ import org.dxworks.insider.application.inspector.dtos.Rule;
14
+ import org.dxworks.insider.application.inspector.services.CommentService;
15
+ import org.dxworks.insider.application.inspector.services.RuleService;
16
+
17
+ import java.io.IOException;
18
+ import java.nio.file.Paths;
19
+ import java.util.ArrayList;
20
+ import java.util.List;
21
+ import java.util.Map;
22
+ import java.util.stream.Collectors;
23
+ import java.util.stream.Stream;
24
+
25
+ import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
26
+
27
+ @Slf4j
28
+ public class InspectCommand implements InsiderCommand {
29
+
30
+ private List<String> ruleFiles;
31
+
32
+ @Override
33
+ public boolean parse(List<String> args) {
34
+ if (args.size() == 1)
35
+ return false;
36
+
37
+ List<String> files = args.subList(1, args.size());
38
+ ruleFiles = files.stream().filter(filePath -> folderExists(filePath) || fileExists(filePath)).collect(Collectors.toList());
39
+
40
+ return !ruleFiles.isEmpty() && files.size() == ruleFiles.size();
41
+ }
42
+
43
+ @Override
44
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
45
+ RuleService ruleService = new RuleService();
46
+ List<Rule> rules = ruleService.getRuleFromFiles(ruleFiles);
47
+ rules.forEach(Rule::transformPatterns);
48
+
49
+ List<InsiderResult> insiderResults;
50
+
51
+ try (ProgressBar pb = new ProgressBarBuilder()
52
+ .setInitialMax(insiderFiles.size())
53
+ .setUnit(" Files", 1)
54
+ .setTaskName("Inspecting...")
55
+ .setStyle(ProgressBarStyle.ASCII)
56
+ .setUpdateIntervalMillis(100)
57
+ .setPrintStream(System.err)
58
+ .build()) {
59
+ insiderResults = insiderFiles.parallelStream()
60
+ .flatMap(insiderFile -> {
61
+ List<IntRange> commentRanges = getCommentRanges(insiderFile);
62
+
63
+ Stream<InsiderResult> insiderResultStream = rules.parallelStream()
64
+ .flatMap(rule -> rule.analyze(insiderFile, commentRanges).stream());
65
+ pb.step();
66
+ return insiderResultStream;
67
+ })
68
+ .collect(Collectors.toList());
69
+
70
+ List<ChronosTag> chronosTags = insiderResults.stream().map(insiderResult -> new ChronosTag(insiderResult.getFile(), "appinspector." + insiderResult.getName(), insiderResult.getValue())).collect(Collectors.toList());
71
+ Map<String, Map<String, List<ChronosTag>>> chronosResult = Map.of("file", Map.of("concerns", chronosTags));
72
+
73
+ ObjectMapper objectMapper = new ObjectMapper();
74
+ objectMapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-tags.json").toFile(), insiderResults);
75
+ objectMapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-chronos-tags.json").toFile(), chronosResult);
76
+ } catch (IOException e) {
77
+ log.error("Inspect command finished unsuccessfully!", e);
78
+ }
79
+ }
80
+
81
+ private List<IntRange> getCommentRanges(InsiderFile insiderFile) {
82
+ List<IntRange> commentRanges = new ArrayList<>();
83
+ CommentService commentService = CommentService.getInstance();
84
+ commentRanges.addAll(commentService.extractInlineCommentLines(insiderFile));
85
+ commentRanges.addAll(commentService.extractMultilineCommentLines(insiderFile));
86
+ return commentRanges;
87
+ }
88
+
89
+ @Override
90
+ public String usage() {
91
+ return "insider inspect <paths_to_rule>...";
92
+ }
93
+
94
+ @Override
95
+ public String getName() {
96
+ return INSPECT;
97
+ }
98
+ }
@@ -0,0 +1,47 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ import com.fasterxml.jackson.databind.ObjectMapper;
4
+ import org.dxworks.insider.ChronosTag;
5
+ import org.dxworks.insider.InsiderFile;
6
+ import org.dxworks.insider.configuration.InsiderConfiguration;
7
+
8
+ import java.io.IOException;
9
+ import java.nio.file.Paths;
10
+ import java.util.List;
11
+ import java.util.stream.Collectors;
12
+ import java.util.stream.Stream;
13
+
14
+ import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
15
+
16
+ public class MeasureCommand implements AllFilesCommand {
17
+ @Override
18
+ public boolean parse(List<String> args) {
19
+ return args.size() == 1;
20
+ }
21
+
22
+ @Override
23
+ public void execute(List<InsiderFile> insiderFiles, List<String> args) {
24
+ List<ChronosTag> sizeTags = insiderFiles.stream().flatMap(insiderFile -> Stream.of(
25
+ new ChronosTag(insiderFile.getFullyQualifiedName(), "loc", insiderFile.getLines()),
26
+ new ChronosTag(insiderFile.getFullyQualifiedName(), "size", (int) insiderFile.getSize()))
27
+ ).collect(Collectors.toList());
28
+
29
+ ObjectMapper objectMapper = new ObjectMapper();
30
+ try {
31
+ objectMapper.writerWithDefaultPrettyPrinter().writeValue(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-size.json").toFile(), sizeTags);
32
+ } catch (IOException e) {
33
+ System.err.println("Measure command finished unsuccessfully");
34
+ e.printStackTrace();
35
+ }
36
+ }
37
+
38
+ @Override
39
+ public String usage() {
40
+ return "insider measure";
41
+ }
42
+
43
+ @Override
44
+ public String getName() {
45
+ return MEASURE;
46
+ }
47
+ }
@@ -0,0 +1,4 @@
1
+ package org.dxworks.insider.commands;
2
+
3
+ public interface NoFilesCommand extends InsiderCommand {
4
+ }