@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.
- package/.github/workflows/build.yml +19 -0
- package/.github/workflows/release-docs.yml +15 -0
- package/.github/workflows/release-voyager.yml +57 -0
- package/.github/workflows/release.yml +102 -0
- package/Dockerfile +8 -0
- package/README.md +89 -0
- package/TODO.txt +7 -0
- package/bin/insider.bat +1 -0
- package/bin/insider.sh +1 -0
- package/build.gradle +55 -0
- package/config/.ignore +4 -0
- package/config/comments.json +71 -0
- package/config/fingerprints/_anomalies-full.json +116 -0
- package/config/fingerprints/_extLibs.json +2555 -0
- package/config/fingerprints/code_smells.json +94 -0
- package/config/fingerprints/generated_code.json +17 -0
- package/config/fingerprints/libraries.json +4667 -0
- package/config/ignoredImports.txt +0 -0
- package/config/insider-conf.properties +3 -0
- package/config/rules/cloud_services/ad_networks.json +50 -0
- package/config/rules/cloud_services/bigdata.json +21 -0
- package/config/rules/cloud_services/cloud_hosting.json +398 -0
- package/config/rules/cloud_services/data_storage.json +291 -0
- package/config/rules/cloud_services/ecommerce.json +45 -0
- package/config/rules/cloud_services/socialmedia.json +82 -0
- package/config/rules/cloud_services/web_analytics.json +108 -0
- package/config/rules/components/active_content.json +157 -0
- package/config/rules/components/load_dll.json +66 -0
- package/config/rules/cryptography/algorithm_implementation.json +62 -0
- package/config/rules/cryptography/certificate.json +199 -0
- package/config/rules/cryptography/ciphers.json +174 -0
- package/config/rules/cryptography/crypto_currency.json +32 -0
- package/config/rules/cryptography/encoding.json +20 -0
- package/config/rules/cryptography/extended.json +220 -0
- package/config/rules/cryptography/external_libraries.json +141 -0
- package/config/rules/cryptography/hash_algorithm.json +98 -0
- package/config/rules/cryptography/key_derivation.json +65 -0
- package/config/rules/cryptography/protocol.json +156 -0
- package/config/rules/cryptography/random.json +97 -0
- package/config/rules/cryptography/weakssl.json +206 -0
- package/config/rules/data_handling/compressed_files.json +18 -0
- package/config/rules/data_handling/database.json +361 -0
- package/config/rules/data_handling/deserialization.json +296 -0
- package/config/rules/data_handling/json_parsing.json +49 -0
- package/config/rules/data_handling/media_parsing.json +33 -0
- package/config/rules/data_handling/pastebin.json +18 -0
- package/config/rules/data_handling/xml_parsing.json +168 -0
- package/config/rules/data_types/financial.json +106 -0
- package/config/rules/data_types/media.json +48 -0
- package/config/rules/data_types/secrets.json +91 -0
- package/config/rules/data_types/sensitive.json +176 -0
- package/config/rules/device_permissions/IOSPermissions.json +240 -0
- package/config/rules/device_permissions/UWP.json +221 -0
- package/config/rules/device_permissions/android_intents.json +599 -0
- package/config/rules/frameworks/PHP.json +172 -0
- package/config/rules/frameworks/build.json +189 -0
- package/config/rules/frameworks/c.json +45 -0
- package/config/rules/frameworks/csharp-nonMS.json +19 -0
- package/config/rules/frameworks/java.json +291 -0
- package/config/rules/frameworks/javascript.json +318 -0
- package/config/rules/frameworks/logging.json +103 -0
- package/config/rules/frameworks/microsoft.json +257 -0
- package/config/rules/frameworks/python.json +274 -0
- package/config/rules/frameworks/ruby.json +53 -0
- package/config/rules/frameworks/rust.json +77 -0
- package/config/rules/general/OSS_license.json +146 -0
- package/config/rules/general/code_metrics.json +132 -0
- package/config/rules/general/dependencies.json +199 -0
- package/config/rules/general/hygiene.json +47 -0
- package/config/rules/general/platforms.json +283 -0
- package/config/rules/general/solutioninfo.json +378 -0
- package/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
- package/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
- package/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
- package/config/rules/networkcomms/outbound_network.json +429 -0
- package/config/rules/os/acl.json +250 -0
- package/config/rules/os/dynamic_execution.json +359 -0
- package/config/rules/os/file_io.json +468 -0
- package/config/rules/os/process.json +179 -0
- package/config/rules/os/setenv.json +270 -0
- package/config/rules/os/system_registry.json +237 -0
- package/config/rules/os/user_accts.json +34 -0
- package/config/rules/security_feature/authentication.json +387 -0
- package/config/rules/security_feature/authorization.json +148 -0
- package/config/rules/test_frameworks/cpp_testing.json +194 -0
- package/config/rules/test_frameworks/go_testing.json +18 -0
- package/config/rules/test_frameworks/java_testing.json +720 -0
- package/config/rules/test_frameworks/javascript_testing.json +724 -0
- package/config/rules/test_frameworks/objectiveC_testing.json +146 -0
- package/config/rules/test_frameworks/php_testing.json +156 -0
- package/config/rules/test_frameworks/powershell_testing.json +17 -0
- package/config/rules/test_frameworks/python_testing.json +108 -0
- package/config/rules/test_frameworks/ruby_testing.json +114 -0
- package/config/rules/tools/pipeline.json +195 -0
- package/config/rules/webapp/comms.json +89 -0
- package/config/rules/webapp/headers.json +178 -0
- package/config/rules/webapp/media.json +56 -0
- package/config/rules/webapp/sessions.json +228 -0
- package/config/rules/webapp/storage.json +215 -0
- package/dist/config/.ignore +4 -0
- package/dist/config/comments.json +71 -0
- package/dist/config/fingerprints/_anomalies-full.json +116 -0
- package/dist/config/fingerprints/_extLibs.json +2555 -0
- package/dist/config/fingerprints/code_smells.json +94 -0
- package/dist/config/fingerprints/generated_code.json +17 -0
- package/dist/config/fingerprints/libraries.json +4667 -0
- package/dist/config/ignoredImports.txt +0 -0
- package/dist/config/insider-conf.properties +3 -0
- package/dist/config/rules/cloud_services/ad_networks.json +50 -0
- package/dist/config/rules/cloud_services/bigdata.json +21 -0
- package/dist/config/rules/cloud_services/cloud_hosting.json +398 -0
- package/dist/config/rules/cloud_services/data_storage.json +291 -0
- package/dist/config/rules/cloud_services/ecommerce.json +45 -0
- package/dist/config/rules/cloud_services/socialmedia.json +82 -0
- package/dist/config/rules/cloud_services/web_analytics.json +108 -0
- package/dist/config/rules/components/active_content.json +157 -0
- package/dist/config/rules/components/load_dll.json +66 -0
- package/dist/config/rules/cryptography/algorithm_implementation.json +62 -0
- package/dist/config/rules/cryptography/certificate.json +199 -0
- package/dist/config/rules/cryptography/ciphers.json +174 -0
- package/dist/config/rules/cryptography/crypto_currency.json +32 -0
- package/dist/config/rules/cryptography/encoding.json +20 -0
- package/dist/config/rules/cryptography/extended.json +220 -0
- package/dist/config/rules/cryptography/external_libraries.json +141 -0
- package/dist/config/rules/cryptography/hash_algorithm.json +98 -0
- package/dist/config/rules/cryptography/key_derivation.json +65 -0
- package/dist/config/rules/cryptography/protocol.json +156 -0
- package/dist/config/rules/cryptography/random.json +97 -0
- package/dist/config/rules/cryptography/weakssl.json +206 -0
- package/dist/config/rules/data_handling/compressed_files.json +18 -0
- package/dist/config/rules/data_handling/database.json +361 -0
- package/dist/config/rules/data_handling/deserialization.json +296 -0
- package/dist/config/rules/data_handling/json_parsing.json +49 -0
- package/dist/config/rules/data_handling/media_parsing.json +33 -0
- package/dist/config/rules/data_handling/pastebin.json +18 -0
- package/dist/config/rules/data_handling/xml_parsing.json +168 -0
- package/dist/config/rules/data_types/financial.json +106 -0
- package/dist/config/rules/data_types/media.json +48 -0
- package/dist/config/rules/data_types/secrets.json +91 -0
- package/dist/config/rules/data_types/sensitive.json +176 -0
- package/dist/config/rules/device_permissions/IOSPermissions.json +240 -0
- package/dist/config/rules/device_permissions/UWP.json +221 -0
- package/dist/config/rules/device_permissions/android_intents.json +599 -0
- package/dist/config/rules/frameworks/PHP.json +172 -0
- package/dist/config/rules/frameworks/build.json +189 -0
- package/dist/config/rules/frameworks/c.json +45 -0
- package/dist/config/rules/frameworks/csharp-nonMS.json +19 -0
- package/dist/config/rules/frameworks/java.json +291 -0
- package/dist/config/rules/frameworks/javascript.json +318 -0
- package/dist/config/rules/frameworks/logging.json +103 -0
- package/dist/config/rules/frameworks/microsoft.json +257 -0
- package/dist/config/rules/frameworks/python.json +274 -0
- package/dist/config/rules/frameworks/ruby.json +53 -0
- package/dist/config/rules/frameworks/rust.json +77 -0
- package/dist/config/rules/general/OSS_license.json +146 -0
- package/dist/config/rules/general/code_metrics.json +132 -0
- package/dist/config/rules/general/dependencies.json +199 -0
- package/dist/config/rules/general/hygiene.json +47 -0
- package/dist/config/rules/general/platforms.json +283 -0
- package/dist/config/rules/general/solutioninfo.json +378 -0
- package/dist/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
- package/dist/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
- package/dist/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
- package/dist/config/rules/networkcomms/outbound_network.json +429 -0
- package/dist/config/rules/os/acl.json +250 -0
- package/dist/config/rules/os/dynamic_execution.json +359 -0
- package/dist/config/rules/os/file_io.json +468 -0
- package/dist/config/rules/os/process.json +179 -0
- package/dist/config/rules/os/setenv.json +270 -0
- package/dist/config/rules/os/system_registry.json +237 -0
- package/dist/config/rules/os/user_accts.json +34 -0
- package/dist/config/rules/security_feature/authentication.json +387 -0
- package/dist/config/rules/security_feature/authorization.json +148 -0
- package/dist/config/rules/test_frameworks/cpp_testing.json +194 -0
- package/dist/config/rules/test_frameworks/go_testing.json +18 -0
- package/dist/config/rules/test_frameworks/java_testing.json +720 -0
- package/dist/config/rules/test_frameworks/javascript_testing.json +724 -0
- package/dist/config/rules/test_frameworks/objectiveC_testing.json +146 -0
- package/dist/config/rules/test_frameworks/php_testing.json +156 -0
- package/dist/config/rules/test_frameworks/powershell_testing.json +17 -0
- package/dist/config/rules/test_frameworks/python_testing.json +108 -0
- package/dist/config/rules/test_frameworks/ruby_testing.json +114 -0
- package/dist/config/rules/tools/pipeline.json +195 -0
- package/dist/config/rules/webapp/comms.json +89 -0
- package/dist/config/rules/webapp/headers.json +178 -0
- package/dist/config/rules/webapp/media.json +56 -0
- package/dist/config/rules/webapp/sessions.json +228 -0
- package/dist/config/rules/webapp/storage.json +215 -0
- package/dist/index.js +13 -0
- package/dist/insider.jar +0 -0
- package/dist/insider.js +7 -0
- package/dist/lib.js +21 -0
- package/docs/config/config.md +3 -0
- package/docs/config/ignore.md +3 -0
- package/docs/config/languages.md +3 -0
- package/docs/index.md +58 -0
- package/dxworks-site.json +13 -0
- package/gradle.properties +0 -0
- package/gradlew +240 -0
- package/gradlew.bat +91 -0
- package/insider/README.md +89 -0
- package/insider/config/.ignore +4 -0
- package/insider/config/comments.json +71 -0
- package/insider/config/fingerprints/_anomalies-full.json +116 -0
- package/insider/config/fingerprints/_extLibs.json +2555 -0
- package/insider/config/fingerprints/code_smells.json +94 -0
- package/insider/config/fingerprints/generated_code.json +17 -0
- package/insider/config/fingerprints/libraries.json +4667 -0
- package/insider/config/ignoredImports.txt +0 -0
- package/insider/config/insider-conf.properties +3 -0
- package/insider/config/rules/cloud_services/ad_networks.json +50 -0
- package/insider/config/rules/cloud_services/bigdata.json +21 -0
- package/insider/config/rules/cloud_services/cloud_hosting.json +398 -0
- package/insider/config/rules/cloud_services/data_storage.json +291 -0
- package/insider/config/rules/cloud_services/ecommerce.json +45 -0
- package/insider/config/rules/cloud_services/socialmedia.json +82 -0
- package/insider/config/rules/cloud_services/web_analytics.json +108 -0
- package/insider/config/rules/components/active_content.json +157 -0
- package/insider/config/rules/components/load_dll.json +66 -0
- package/insider/config/rules/cryptography/algorithm_implementation.json +62 -0
- package/insider/config/rules/cryptography/certificate.json +199 -0
- package/insider/config/rules/cryptography/ciphers.json +174 -0
- package/insider/config/rules/cryptography/crypto_currency.json +32 -0
- package/insider/config/rules/cryptography/encoding.json +20 -0
- package/insider/config/rules/cryptography/extended.json +220 -0
- package/insider/config/rules/cryptography/external_libraries.json +141 -0
- package/insider/config/rules/cryptography/hash_algorithm.json +98 -0
- package/insider/config/rules/cryptography/key_derivation.json +65 -0
- package/insider/config/rules/cryptography/protocol.json +156 -0
- package/insider/config/rules/cryptography/random.json +97 -0
- package/insider/config/rules/cryptography/weakssl.json +206 -0
- package/insider/config/rules/data_handling/compressed_files.json +18 -0
- package/insider/config/rules/data_handling/database.json +361 -0
- package/insider/config/rules/data_handling/deserialization.json +296 -0
- package/insider/config/rules/data_handling/json_parsing.json +49 -0
- package/insider/config/rules/data_handling/media_parsing.json +33 -0
- package/insider/config/rules/data_handling/pastebin.json +18 -0
- package/insider/config/rules/data_handling/xml_parsing.json +168 -0
- package/insider/config/rules/data_types/financial.json +106 -0
- package/insider/config/rules/data_types/media.json +48 -0
- package/insider/config/rules/data_types/secrets.json +91 -0
- package/insider/config/rules/data_types/sensitive.json +176 -0
- package/insider/config/rules/device_permissions/IOSPermissions.json +240 -0
- package/insider/config/rules/device_permissions/UWP.json +221 -0
- package/insider/config/rules/device_permissions/android_intents.json +599 -0
- package/insider/config/rules/frameworks/PHP.json +172 -0
- package/insider/config/rules/frameworks/build.json +189 -0
- package/insider/config/rules/frameworks/c.json +45 -0
- package/insider/config/rules/frameworks/csharp-nonMS.json +19 -0
- package/insider/config/rules/frameworks/java.json +291 -0
- package/insider/config/rules/frameworks/javascript.json +318 -0
- package/insider/config/rules/frameworks/logging.json +103 -0
- package/insider/config/rules/frameworks/microsoft.json +257 -0
- package/insider/config/rules/frameworks/python.json +274 -0
- package/insider/config/rules/frameworks/ruby.json +53 -0
- package/insider/config/rules/frameworks/rust.json +77 -0
- package/insider/config/rules/general/OSS_license.json +146 -0
- package/insider/config/rules/general/code_metrics.json +132 -0
- package/insider/config/rules/general/dependencies.json +199 -0
- package/insider/config/rules/general/hygiene.json +47 -0
- package/insider/config/rules/general/platforms.json +283 -0
- package/insider/config/rules/general/solutioninfo.json +378 -0
- package/insider/config/rules/infrastructure/hashicorp_packers_tmpl.json +18 -0
- package/insider/config/rules/infrastructure/hashicorp_terraform_tmpl.json +19 -0
- package/insider/config/rules/infrastructure/microsoft_arm_tmpl.json +198 -0
- package/insider/config/rules/networkcomms/outbound_network.json +429 -0
- package/insider/config/rules/os/acl.json +250 -0
- package/insider/config/rules/os/dynamic_execution.json +359 -0
- package/insider/config/rules/os/file_io.json +468 -0
- package/insider/config/rules/os/process.json +179 -0
- package/insider/config/rules/os/setenv.json +270 -0
- package/insider/config/rules/os/system_registry.json +237 -0
- package/insider/config/rules/os/user_accts.json +34 -0
- package/insider/config/rules/security_feature/authentication.json +387 -0
- package/insider/config/rules/security_feature/authorization.json +148 -0
- package/insider/config/rules/test_frameworks/cpp_testing.json +194 -0
- package/insider/config/rules/test_frameworks/go_testing.json +18 -0
- package/insider/config/rules/test_frameworks/java_testing.json +720 -0
- package/insider/config/rules/test_frameworks/javascript_testing.json +724 -0
- package/insider/config/rules/test_frameworks/objectiveC_testing.json +146 -0
- package/insider/config/rules/test_frameworks/php_testing.json +156 -0
- package/insider/config/rules/test_frameworks/powershell_testing.json +17 -0
- package/insider/config/rules/test_frameworks/python_testing.json +108 -0
- package/insider/config/rules/test_frameworks/ruby_testing.json +114 -0
- package/insider/config/rules/tools/pipeline.json +195 -0
- package/insider/config/rules/webapp/comms.json +89 -0
- package/insider/config/rules/webapp/headers.json +178 -0
- package/insider/config/rules/webapp/media.json +56 -0
- package/insider/config/rules/webapp/sessions.json +228 -0
- package/insider/config/rules/webapp/storage.json +215 -0
- package/insider/insider.bat +1 -0
- package/insider/insider.jar +0 -0
- package/insider/insider.sh +1 -0
- package/insider/languages.yml +3988 -0
- package/instrument.yml +37 -0
- package/languages.yml +3988 -0
- package/lib/index.js +13 -0
- package/lib/insider.js +7 -0
- package/lib/lib.js +21 -0
- package/lombok.config +2 -0
- package/mkdocs.yml +18 -0
- package/package.json +51 -0
- package/releaseNotes/v2.6.0.md +1 -0
- package/releaseNotes/v2.7.1.md +1 -0
- package/settings.gradle +2 -0
- package/src/main/java/org/dxworks/insider/ChronosTag.java +14 -0
- package/src/main/java/org/dxworks/insider/Insider.java +214 -0
- package/src/main/java/org/dxworks/insider/InsiderAnalysis.java +7 -0
- package/src/main/java/org/dxworks/insider/InsiderFile.java +125 -0
- package/src/main/java/org/dxworks/insider/InsiderOptions.java +78 -0
- package/src/main/java/org/dxworks/insider/InsiderResult.java +15 -0
- package/src/main/java/org/dxworks/insider/application/inspector/CodeRuleExtractor.java +14 -0
- package/src/main/java/org/dxworks/insider/application/inspector/CommentRuleExtractor.java +14 -0
- package/src/main/java/org/dxworks/insider/application/inspector/FileRuleExtractor.java +14 -0
- package/src/main/java/org/dxworks/insider/application/inspector/RuleExtractor.java +11 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/Comment.java +18 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/CommentPattern.java +44 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/Condition.java +15 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/InsiderPattern.java +149 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/PatternMatch.java +23 -0
- package/src/main/java/org/dxworks/insider/application/inspector/dtos/Rule.java +61 -0
- package/src/main/java/org/dxworks/insider/application/inspector/services/CommentService.java +165 -0
- package/src/main/java/org/dxworks/insider/application/inspector/services/RuleService.java +54 -0
- package/src/main/java/org/dxworks/insider/commands/AddCommand.java +125 -0
- package/src/main/java/org/dxworks/insider/commands/AllFilesCommand.java +4 -0
- package/src/main/java/org/dxworks/insider/commands/ConvertCommand.java +55 -0
- package/src/main/java/org/dxworks/insider/commands/DetectCommand.java +42 -0
- package/src/main/java/org/dxworks/insider/commands/DiagnoseCommand.java +74 -0
- package/src/main/java/org/dxworks/insider/commands/ExtractCommand.java +35 -0
- package/src/main/java/org/dxworks/insider/commands/FindCommand.java +102 -0
- package/src/main/java/org/dxworks/insider/commands/HelpCommand.java +56 -0
- package/src/main/java/org/dxworks/insider/commands/IndentationCount.java +69 -0
- package/src/main/java/org/dxworks/insider/commands/InsiderCommand.java +71 -0
- package/src/main/java/org/dxworks/insider/commands/InspectCommand.java +98 -0
- package/src/main/java/org/dxworks/insider/commands/MeasureCommand.java +47 -0
- package/src/main/java/org/dxworks/insider/commands/NoFilesCommand.java +4 -0
- package/src/main/java/org/dxworks/insider/commands/VersionCommand.java +34 -0
- package/src/main/java/org/dxworks/insider/configuration/InsiderConfiguration.java +123 -0
- package/src/main/java/org/dxworks/insider/constants/InsiderConstants.java +19 -0
- package/src/main/java/org/dxworks/insider/depext/AbstractImportsProcessor.java +57 -0
- package/src/main/java/org/dxworks/insider/depext/CPPImportsProcessor.java +55 -0
- package/src/main/java/org/dxworks/insider/depext/CSharpImportsProcessor.java +53 -0
- package/src/main/java/org/dxworks/insider/depext/DependencyExtractor.java +105 -0
- package/src/main/java/org/dxworks/insider/depext/ImportItem.java +19 -0
- package/src/main/java/org/dxworks/insider/depext/ImportResult.java +32 -0
- package/src/main/java/org/dxworks/insider/depext/JavastackImportsProcessor.java +88 -0
- package/src/main/java/org/dxworks/insider/depext/VBImportsProcessor.java +41 -0
- package/src/main/java/org/dxworks/insider/exceptions/InsiderException.java +7 -0
- package/src/main/java/org/dxworks/insider/library/detector/C_ImportsContainer.java +73 -0
- package/src/main/java/org/dxworks/insider/library/detector/ImportsContainer.java +122 -0
- package/src/main/java/org/dxworks/insider/library/detector/JavaImportsContainer.java +63 -0
- package/src/main/java/org/dxworks/insider/library/detector/LibraryDetector.java +150 -0
- package/src/main/java/org/dxworks/insider/library/detector/LibraryDetectorLanguage.java +6 -0
- package/src/main/java/org/dxworks/insider/library/detector/model/PackagingUnit.java +26 -0
- package/src/main/java/org/dxworks/insider/technology/finder/LinguistService.java +79 -0
- package/src/main/java/org/dxworks/insider/technology/finder/converters/XmlToJsonConverter.java +41 -0
- package/src/main/java/org/dxworks/insider/technology/finder/exceptions/FingerprintParseException.java +7 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/Technology.java +73 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/json/JsonConfigurationDTO.java +14 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/json/TechnologyJsonDTO.java +66 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/CategoryXmlDTO.java +21 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/ConfigurationDataXmlDTO.java +17 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/FingerprintXmlDTO.java +17 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguageXmlDTO.java +20 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/LanguagesXmlDTO.java +18 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/TechnologyXmlDTO.java +19 -0
- package/src/main/java/org/dxworks/insider/technology/finder/model/xml/old/XmlConfigurationDTO.java +17 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsParser.java +14 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParser.java +57 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/JavaLibrariesCsvParser.java +71 -0
- package/src/main/java/org/dxworks/insider/technology/finder/parsers/JsonFingerprintParser.java +58 -0
- package/src/main/java/org/dxworks/insider/utils/FileUtils.java +45 -0
- package/src/main/java/org/dxworks/insider/utils/ImportUtils.java +21 -0
- package/src/main/java/org/dxworks/insider/utils/LibraryImport.java +17 -0
- package/src/main/java/org/dxworks/insider/utils/LibraryImportInOtherTechnology.java +30 -0
- package/src/main/java/org/dxworks/insider/utils/MapUtils.java +19 -0
- package/src/main/resources/insider-version +1 -0
- package/src/test/java/org/dxworks/insider/application/inspector/services/CommentServiceTest.java +40 -0
- package/src/test/java/org/dxworks/insider/technology/finder/parsers/FingerprintsXmlParserTest.java +15 -0
- package/src/test/java/org/dxworks/insider/utils/FileUtilsTest.java +31 -0
- package/src/test/java/org/dxworks/insider/utils/ImportUtilsTest.java +24 -0
- package/src/test/java/org/dxworks/insider/utils/transformers/JsonToCsvTransformerTest.java +18 -0
- package/src/test/resources/Test1.java +21 -0
- package/src/test/resources/Test2.java +21 -0
- package/src/test/resources/cobol/CM201M.CBL +88 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
package org.dxworks.insider.library.detector;
|
|
2
|
+
|
|
3
|
+
import lombok.extern.slf4j.Slf4j;
|
|
4
|
+
|
|
5
|
+
import java.io.IOException;
|
|
6
|
+
import java.nio.file.Files;
|
|
7
|
+
import java.nio.file.Paths;
|
|
8
|
+
import java.util.HashMap;
|
|
9
|
+
import java.util.List;
|
|
10
|
+
|
|
11
|
+
@Slf4j
|
|
12
|
+
public class C_ImportsContainer extends ImportsContainer {
|
|
13
|
+
|
|
14
|
+
private static final String HEADERS_TO_LIBRARIES_MAPPING_FILE_NAME = "config/headersToLibraries.csv";
|
|
15
|
+
|
|
16
|
+
private static final String HEADERS_IMPORTED_OUTPUT_FILE_NAME = "Headers.csv";
|
|
17
|
+
private static final String FILES_WHIT_HEADERS_OUTPUT_FILE_NAME = "FilesWithHeaders.csv";
|
|
18
|
+
private static final String LIBRARIES_OUTPUT_FILE_NAME = "Libraries.csv";
|
|
19
|
+
|
|
20
|
+
private HashMap<String, String> headersToLibraries = new HashMap<>();
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
protected void configure() {
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
List<String> stringList = Files.readAllLines(Paths.get(HEADERS_TO_LIBRARIES_MAPPING_FILE_NAME));
|
|
27
|
+
stringList.forEach(line ->
|
|
28
|
+
{
|
|
29
|
+
String[] pair = line.split("\t");
|
|
30
|
+
if (pair.length != 2) {
|
|
31
|
+
log.error("Incorrect input type for 'headersToLibraries.csv'. Headers and libraries have to be tab separated!");
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
String header = pair[0];
|
|
35
|
+
String library = pair[1];
|
|
36
|
+
|
|
37
|
+
if (headersToLibraries.containsKey(header)) {
|
|
38
|
+
System.out.println("Header " + header + " present in 2 libraries: " + headersToLibraries.get(header) + " and " + library + "!");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
headersToLibraries.put(header, library);
|
|
43
|
+
});
|
|
44
|
+
} catch (IOException e) {
|
|
45
|
+
log.error("Could not read headersToLibraries.csv file!");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Override
|
|
50
|
+
protected String getImportsResultFilePath() {
|
|
51
|
+
return HEADERS_IMPORTED_OUTPUT_FILE_NAME;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Override
|
|
55
|
+
protected String getFilesWithImportsResultFile() {
|
|
56
|
+
return FILES_WHIT_HEADERS_OUTPUT_FILE_NAME;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Override
|
|
60
|
+
protected String getPackagingUnitResultFilePath() {
|
|
61
|
+
return LIBRARIES_OUTPUT_FILE_NAME;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@Override
|
|
65
|
+
public boolean accepts(String importString) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@Override
|
|
70
|
+
protected String getPackagingUnitFor(String importedFile) {
|
|
71
|
+
return headersToLibraries.get(importedFile);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
package org.dxworks.insider.library.detector;
|
|
2
|
+
|
|
3
|
+
import lombok.extern.slf4j.Slf4j;
|
|
4
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
5
|
+
import org.dxworks.insider.library.detector.model.PackagingUnit;
|
|
6
|
+
import org.dxworks.insider.utils.MapUtils;
|
|
7
|
+
|
|
8
|
+
import java.io.IOException;
|
|
9
|
+
import java.nio.file.Files;
|
|
10
|
+
import java.nio.file.Paths;
|
|
11
|
+
import java.util.*;
|
|
12
|
+
import java.util.stream.Collectors;
|
|
13
|
+
|
|
14
|
+
import static org.dxworks.insider.constants.InsiderConstants.RESULTS_FOLDER;
|
|
15
|
+
|
|
16
|
+
@Slf4j
|
|
17
|
+
public abstract class ImportsContainer {
|
|
18
|
+
|
|
19
|
+
protected Map<String, Integer> filesToNumberOfImportsMap = new HashMap<>();
|
|
20
|
+
protected Map<String, Integer> importedFilesToNumberOfTimesBeingImportedMap = new HashMap<>();
|
|
21
|
+
|
|
22
|
+
public ImportsContainer() {
|
|
23
|
+
configure();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
protected abstract void configure();
|
|
27
|
+
|
|
28
|
+
public void addImport(String newImport) {
|
|
29
|
+
int newapp = 1;
|
|
30
|
+
Integer app = importedFilesToNumberOfTimesBeingImportedMap.get(newImport);
|
|
31
|
+
if (app != null)
|
|
32
|
+
newapp = app + 1;
|
|
33
|
+
importedFilesToNumberOfTimesBeingImportedMap.put(newImport, newapp);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public void addFile(String fileName, int importNo) {
|
|
37
|
+
filesToNumberOfImportsMap.put(fileName, importNo);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public void writeImportsToFile() {
|
|
41
|
+
importedFilesToNumberOfTimesBeingImportedMap = MapUtils.sortMapByValuesDesc(importedFilesToNumberOfTimesBeingImportedMap);
|
|
42
|
+
|
|
43
|
+
String content = getContentFromMap(importedFilesToNumberOfTimesBeingImportedMap);
|
|
44
|
+
|
|
45
|
+
content = "Packages,Appearances,\n" + content;
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
Files.write(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-" + getImportsResultFilePath()), content.getBytes());
|
|
49
|
+
} catch (IOException e) {
|
|
50
|
+
log.error("Could not write Imports file!", e);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private String getContentFromMap(Map<String, Integer> map) {
|
|
55
|
+
return map.entrySet().stream()
|
|
56
|
+
.map(entry -> String.join(",", entry.getKey(), entry.getValue().toString()))
|
|
57
|
+
.collect(Collectors.joining("\n"));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
protected abstract String getImportsResultFilePath();
|
|
61
|
+
|
|
62
|
+
public void writeFilesWithImports() {
|
|
63
|
+
filesToNumberOfImportsMap = MapUtils.sortMapByValuesDesc(filesToNumberOfImportsMap);
|
|
64
|
+
|
|
65
|
+
String content = getContentFromMap(filesToNumberOfImportsMap);
|
|
66
|
+
|
|
67
|
+
content = "Files,Imports,\n" + content;
|
|
68
|
+
try {
|
|
69
|
+
Files.write(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-" + getFilesWithImportsResultFile()), content.getBytes());
|
|
70
|
+
} catch (IOException e) {
|
|
71
|
+
log.error("Could not write Imports file!", e);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
protected abstract String getFilesWithImportsResultFile();
|
|
76
|
+
|
|
77
|
+
public void writePackagingUnits() {
|
|
78
|
+
List<PackagingUnit> packagingUnitList = createPackagingUnitList();
|
|
79
|
+
packagingUnitList = packagingUnitList.stream()
|
|
80
|
+
.sorted(Comparator.comparing(PackagingUnit::getName).reversed())
|
|
81
|
+
.collect(Collectors.toList());
|
|
82
|
+
|
|
83
|
+
String content = packagingUnitList.stream()
|
|
84
|
+
.map(packagingUnit -> String.join(",",
|
|
85
|
+
packagingUnit.getName(),
|
|
86
|
+
packagingUnit.getFrequency() + "",
|
|
87
|
+
packagingUnit.getUnitNumber() + ""))
|
|
88
|
+
.collect(Collectors.joining("\n"));
|
|
89
|
+
|
|
90
|
+
content = "Packages,Appearances,Different Files\n" + content;
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
Files.write(Paths.get(RESULTS_FOLDER, InsiderConfiguration.getInstance().getProjectID() + "-" + getPackagingUnitResultFilePath()), content.getBytes());
|
|
94
|
+
} catch (IOException e) {
|
|
95
|
+
log.error("Could not write packaging unit result file file!", e);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
protected abstract String getPackagingUnitResultFilePath();
|
|
100
|
+
|
|
101
|
+
public abstract boolean accepts(String importString);
|
|
102
|
+
|
|
103
|
+
protected List<PackagingUnit> createPackagingUnitList() {
|
|
104
|
+
List<PackagingUnit> packagingUnits = new ArrayList<>();
|
|
105
|
+
|
|
106
|
+
for (String importedFile : importedFilesToNumberOfTimesBeingImportedMap.keySet()) {
|
|
107
|
+
String packagingUnitName = getPackagingUnitFor(importedFile);
|
|
108
|
+
Integer frequency = importedFilesToNumberOfTimesBeingImportedMap.get(importedFile);
|
|
109
|
+
|
|
110
|
+
PackagingUnit packagingUnit = packagingUnits.stream().filter(packUnit -> packUnit.getName().equals(packagingUnitName)).findFirst().orElse(null);
|
|
111
|
+
if (packagingUnit == null) {
|
|
112
|
+
packagingUnit = new PackagingUnit(packagingUnitName, frequency);
|
|
113
|
+
packagingUnits.add(packagingUnit);
|
|
114
|
+
} else {
|
|
115
|
+
packagingUnit.increment(frequency);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return packagingUnits;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
protected abstract String getPackagingUnitFor(String importedFile);
|
|
122
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
package org.dxworks.insider.library.detector;
|
|
2
|
+
|
|
3
|
+
import lombok.extern.slf4j.Slf4j;
|
|
4
|
+
|
|
5
|
+
import java.io.File;
|
|
6
|
+
import java.io.IOException;
|
|
7
|
+
import java.nio.file.Files;
|
|
8
|
+
import java.nio.file.Paths;
|
|
9
|
+
import java.util.ArrayList;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
|
|
12
|
+
@Slf4j
|
|
13
|
+
public class JavaImportsContainer extends ImportsContainer {
|
|
14
|
+
private static final String IGNORED_IMPORTS_FILE_NAME = "config/ignoredImports.txt";
|
|
15
|
+
|
|
16
|
+
private static final String IMPORTS_OUTPUT_FILE_NAME = "Imports.csv";
|
|
17
|
+
private static final String FILES_WITH_IMPORTS_NAME = "FilesWithImports.csv";
|
|
18
|
+
private static final String PACKAGE_IMPORTS_OUTPUT_FILE_NAME = "PackageImports.csv";
|
|
19
|
+
|
|
20
|
+
private List<String> ignoredImports;
|
|
21
|
+
|
|
22
|
+
public void configure() {
|
|
23
|
+
try {
|
|
24
|
+
ignoredImports = Files.readAllLines(Paths.get(IGNORED_IMPORTS_FILE_NAME));
|
|
25
|
+
} catch (IOException e) {
|
|
26
|
+
log.error("Could not read ignored imports file!");
|
|
27
|
+
ignoredImports = new ArrayList<>();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
protected String getImportsResultFilePath() {
|
|
33
|
+
return IMPORTS_OUTPUT_FILE_NAME;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override
|
|
37
|
+
protected String getFilesWithImportsResultFile() {
|
|
38
|
+
return FILES_WITH_IMPORTS_NAME;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@Override
|
|
42
|
+
protected String getPackagingUnitResultFilePath() {
|
|
43
|
+
return PACKAGE_IMPORTS_OUTPUT_FILE_NAME;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public boolean accepts(String importString) {
|
|
48
|
+
return ignoredImports.stream().noneMatch(importString::startsWith);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Override
|
|
52
|
+
protected String getPackagingUnitFor(String importedFile) {
|
|
53
|
+
return getPackageName(importedFile);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private String getPackageName(String _import) {
|
|
57
|
+
int index = _import.lastIndexOf('.');
|
|
58
|
+
if (index == -1)
|
|
59
|
+
return _import;
|
|
60
|
+
|
|
61
|
+
return _import.substring(0, index);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
package org.dxworks.insider.library.detector;
|
|
2
|
+
|
|
3
|
+
import lombok.extern.slf4j.Slf4j;
|
|
4
|
+
import org.dxworks.insider.InsiderAnalysis;
|
|
5
|
+
import org.dxworks.insider.InsiderFile;
|
|
6
|
+
import org.dxworks.insider.InsiderResult;
|
|
7
|
+
import org.dxworks.insider.technology.finder.LinguistService;
|
|
8
|
+
import org.dxworks.insider.utils.FileUtils;
|
|
9
|
+
|
|
10
|
+
import java.util.List;
|
|
11
|
+
import java.util.regex.Matcher;
|
|
12
|
+
import java.util.regex.Pattern;
|
|
13
|
+
import java.util.stream.Collectors;
|
|
14
|
+
import java.util.stream.Stream;
|
|
15
|
+
|
|
16
|
+
import static java.util.Arrays.asList;
|
|
17
|
+
|
|
18
|
+
@Slf4j
|
|
19
|
+
public class LibraryDetector implements InsiderAnalysis {
|
|
20
|
+
|
|
21
|
+
private static final String JAVA_LANGUAGE = "java";
|
|
22
|
+
private static final List<String> C_LIKE_LANGUAGES = asList("c", "c++", "objective-c", "objective-c++");
|
|
23
|
+
public static final List<String> ACCEPTED_LANGUAGES = Stream.concat(
|
|
24
|
+
Stream.of(JAVA_LANGUAGE),
|
|
25
|
+
C_LIKE_LANGUAGES.stream())
|
|
26
|
+
.collect(Collectors.toList());
|
|
27
|
+
|
|
28
|
+
private LinguistService linguistService = LinguistService.getInstance();
|
|
29
|
+
private ImportsContainer importsContainer;
|
|
30
|
+
private LibraryDetectorLanguage language;
|
|
31
|
+
|
|
32
|
+
public LibraryDetector(LibraryDetectorLanguage language) {
|
|
33
|
+
this.language = language;
|
|
34
|
+
if (language == LibraryDetectorLanguage.C_LIKE)
|
|
35
|
+
importsContainer = new C_ImportsContainer();
|
|
36
|
+
if (language == LibraryDetectorLanguage.JAVA)
|
|
37
|
+
importsContainer = new JavaImportsContainer();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public InsiderResult analyze(InsiderFile file) {
|
|
41
|
+
int importNumber = 0;
|
|
42
|
+
String content = file.getContent();
|
|
43
|
+
|
|
44
|
+
content = FileUtils.removeComments(content);
|
|
45
|
+
|
|
46
|
+
if (file.getExtension().equals("java") && !"package-info.java".equalsIgnoreCase(file.getName())) {
|
|
47
|
+
importNumber = analyzeForJava(content, file.getPath());
|
|
48
|
+
} else if (file.getExtension().equals("m") || file.getExtension().equals("mm") || file.getExtension()
|
|
49
|
+
.equals("h") || file.getExtension().equals("cpp") || file.getExtension().equals("c")) {
|
|
50
|
+
importNumber = analyzeForC_Like(content);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (importNumber > 0) {
|
|
54
|
+
importsContainer.addFile(file.getName(), importNumber);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private int analyzeForC_Like(String content) {
|
|
61
|
+
int importNumber = 0;
|
|
62
|
+
importNumber += getImportNumberForC_Like(content, "(#(include|import)[ \t]*<[^>]*>)", line ->
|
|
63
|
+
{
|
|
64
|
+
int firstIndex = line.indexOf('<');
|
|
65
|
+
int lastIndex = line.indexOf('>');
|
|
66
|
+
return line.substring(firstIndex + 1, lastIndex);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
importNumber += getImportNumberForC_Like(content, "(#(include|import)[ \t]*\"[^\"]*\")", line ->
|
|
70
|
+
{
|
|
71
|
+
int firstIndex = line.indexOf('\"');
|
|
72
|
+
int lastIndex = line.indexOf('\"', firstIndex + 1);
|
|
73
|
+
return line.substring(firstIndex + 1, lastIndex);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return importNumber;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private int getImportNumberForC_Like(String content, String usedPattern,
|
|
80
|
+
C_LikeImportExtractor cLikeImportExtractor) {
|
|
81
|
+
int importNumber = 0;
|
|
82
|
+
Pattern pattern = Pattern.compile(usedPattern);
|
|
83
|
+
Matcher matcher = pattern.matcher(content);
|
|
84
|
+
while (matcher.find()) {
|
|
85
|
+
String importLine = content.substring(matcher.start(), matcher.end());
|
|
86
|
+
String importString = cLikeImportExtractor.getImportedHeaderFromLine(importLine);
|
|
87
|
+
|
|
88
|
+
int index = importString.lastIndexOf('/');
|
|
89
|
+
importString = importString.substring(++index);
|
|
90
|
+
|
|
91
|
+
if (importsContainer.accepts(importString)) {
|
|
92
|
+
importsContainer.addImport(importString);
|
|
93
|
+
importNumber++;
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return importNumber;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private int analyzeForJava(String content, String filePath) {
|
|
101
|
+
int firstAcc = content.indexOf("{");
|
|
102
|
+
if (firstAcc == -1) {
|
|
103
|
+
log.warn("Java file " + filePath + " has no class / viable content!");
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
content = content.substring(0, firstAcc);
|
|
107
|
+
|
|
108
|
+
int importNumber = 0;
|
|
109
|
+
|
|
110
|
+
Pattern pattern = Pattern.compile("(import [^;]*;)");
|
|
111
|
+
Matcher matcher = pattern.matcher(content);
|
|
112
|
+
while (matcher.find()) {
|
|
113
|
+
String importString = content.substring(matcher.start() + 7, matcher.end() - 1).trim();
|
|
114
|
+
|
|
115
|
+
if (importString.indexOf("static ") == 0 || importString.indexOf("static\t") == 0) {
|
|
116
|
+
importString = importString.substring(6).trim();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (importsContainer.accepts(importString)) {
|
|
120
|
+
importsContainer.addImport(importString);
|
|
121
|
+
importNumber++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return importNumber;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@Override
|
|
129
|
+
public boolean accepts(InsiderFile insiderFile) {
|
|
130
|
+
if (language == LibraryDetectorLanguage.JAVA) {
|
|
131
|
+
return linguistService.hasAcceptedExtension(insiderFile, List.of(JAVA_LANGUAGE));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (language == LibraryDetectorLanguage.C_LIKE) {
|
|
135
|
+
return linguistService.hasAcceptedExtension(insiderFile, C_LIKE_LANGUAGES);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
public void generateResults() {
|
|
142
|
+
importsContainer.writeFilesWithImports();
|
|
143
|
+
importsContainer.writeImportsToFile();
|
|
144
|
+
importsContainer.writePackagingUnits();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
private interface C_LikeImportExtractor {
|
|
148
|
+
String getImportedHeaderFromLine(String line);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package org.dxworks.insider.library.detector.model;
|
|
2
|
+
|
|
3
|
+
import lombok.Data;
|
|
4
|
+
import lombok.EqualsAndHashCode;
|
|
5
|
+
|
|
6
|
+
@Data
|
|
7
|
+
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
|
|
8
|
+
public class PackagingUnit {
|
|
9
|
+
|
|
10
|
+
@EqualsAndHashCode.Include
|
|
11
|
+
protected String name;
|
|
12
|
+
|
|
13
|
+
protected int frequency;
|
|
14
|
+
protected int unitNumber;
|
|
15
|
+
|
|
16
|
+
public PackagingUnit(String name, int frequency) {
|
|
17
|
+
this.name = name;
|
|
18
|
+
this.frequency = frequency;
|
|
19
|
+
this.unitNumber = 1;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public void increment(int frequency) {
|
|
23
|
+
this.frequency += frequency;
|
|
24
|
+
unitNumber++;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
package org.dxworks.insider.technology.finder;
|
|
2
|
+
|
|
3
|
+
import lombok.NonNull;
|
|
4
|
+
import org.dxworks.insider.InsiderFile;
|
|
5
|
+
import org.dxworks.insider.configuration.InsiderConfiguration;
|
|
6
|
+
import org.dxworks.linguist.Language;
|
|
7
|
+
import org.dxworks.linguist.Linguist;
|
|
8
|
+
|
|
9
|
+
import java.nio.file.Path;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
import java.util.stream.Collectors;
|
|
12
|
+
|
|
13
|
+
import static org.dxworks.insider.constants.InsiderConstants.DEFAULT_LINGUIST_FILE;
|
|
14
|
+
|
|
15
|
+
public class LinguistService {
|
|
16
|
+
|
|
17
|
+
private static final LinguistService _instance = new LinguistService();
|
|
18
|
+
private Linguist linguist;
|
|
19
|
+
private List<String> programmingLanguages;
|
|
20
|
+
|
|
21
|
+
private LinguistService() {
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public static LinguistService getInstance() {
|
|
25
|
+
return _instance;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public boolean hasAcceptedExtension(InsiderFile insiderFile) {
|
|
29
|
+
return hasAcceptedExtension(insiderFile.getPath());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public boolean hasAcceptedExtension(InsiderFile insiderFile, @NonNull List<String> languages) {
|
|
33
|
+
return hasAcceptedExtension(insiderFile.getPath(), languages);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public boolean hasAcceptedExtension(String path) {
|
|
37
|
+
return hasAcceptedExtension(path, InsiderConfiguration.getInstance().getLanguages());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public boolean hasAcceptedExtension(String path, @NonNull List<String> languages) {
|
|
41
|
+
return linguist.isOf(path, languages.toArray(new String[0]));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public List<String> getLanguagesForFile(InsiderFile file) {
|
|
45
|
+
return linguist.getLanguages(file.getPath()).stream()
|
|
46
|
+
.map(Language::getName)
|
|
47
|
+
.collect(Collectors.toList());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public boolean containsLanguage(String lang) {
|
|
51
|
+
return linguist.isRegistered(lang);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private List<String> getAllProgrammingLanguages() {
|
|
55
|
+
return linguist.getLanguages().values().stream()
|
|
56
|
+
.filter(lang -> "programming".equalsIgnoreCase(lang.getType()))
|
|
57
|
+
.map(Language::getName)
|
|
58
|
+
.collect(Collectors.toList());
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
public List<String> getProgrammingLanguages() {
|
|
63
|
+
return programmingLanguages;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public void initLinguist(String linguistFile) {
|
|
67
|
+
if (linguistFile == null) {
|
|
68
|
+
try {
|
|
69
|
+
linguist = new Linguist();
|
|
70
|
+
} catch (Exception e) {
|
|
71
|
+
linguist = new Linguist(Path.of(DEFAULT_LINGUIST_FILE).toFile());
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
linguist = new Linguist(Path.of(linguistFile).toFile());
|
|
75
|
+
}
|
|
76
|
+
programmingLanguages = getAllProgrammingLanguages();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
}
|
package/src/main/java/org/dxworks/insider/technology/finder/converters/XmlToJsonConverter.java
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package org.dxworks.insider.technology.finder.converters;
|
|
2
|
+
|
|
3
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
4
|
+
import lombok.extern.slf4j.Slf4j;
|
|
5
|
+
import org.dxworks.insider.technology.finder.model.Technology;
|
|
6
|
+
import org.dxworks.insider.technology.finder.model.json.JsonConfigurationDTO;
|
|
7
|
+
import org.dxworks.insider.technology.finder.model.json.TechnologyJsonDTO;
|
|
8
|
+
import org.dxworks.insider.technology.finder.parsers.FingerprintsXmlParser;
|
|
9
|
+
|
|
10
|
+
import java.io.FileWriter;
|
|
11
|
+
import java.io.IOException;
|
|
12
|
+
import java.util.List;
|
|
13
|
+
import java.util.stream.Collectors;
|
|
14
|
+
|
|
15
|
+
@Slf4j
|
|
16
|
+
public class XmlToJsonConverter {
|
|
17
|
+
|
|
18
|
+
public static void main(String[] args) {
|
|
19
|
+
XmlToJsonConverter xmlToJsonConverter = new XmlToJsonConverter();
|
|
20
|
+
|
|
21
|
+
xmlToJsonConverter.convertXmlFileTOJson("config\\libraries.xml");
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public void convertXmlFileTOJson(String xmlFilePath) {
|
|
26
|
+
FingerprintsXmlParser fingerprintsXmlParser = new FingerprintsXmlParser();
|
|
27
|
+
List<Technology> technologies = fingerprintsXmlParser.parseTechnologiesFile(xmlFilePath);
|
|
28
|
+
|
|
29
|
+
List<TechnologyJsonDTO> technologyJsonDTOS = technologies.stream().map(TechnologyJsonDTO::fromTechnology).collect(Collectors.toList());
|
|
30
|
+
|
|
31
|
+
JsonConfigurationDTO jsonConfigurationDTO = new JsonConfigurationDTO();
|
|
32
|
+
jsonConfigurationDTO.setTechnologies(technologyJsonDTOS);
|
|
33
|
+
|
|
34
|
+
ObjectMapper objectMapper = new ObjectMapper();
|
|
35
|
+
try {
|
|
36
|
+
objectMapper.writerWithDefaultPrettyPrinter().writeValue(new FileWriter(xmlFilePath.substring(0, xmlFilePath.lastIndexOf(".xml")) + ".json"), jsonConfigurationDTO);
|
|
37
|
+
} catch (IOException e) {
|
|
38
|
+
log.error("Could not write JSON file when converting from XML!", e);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
package org.dxworks.insider.technology.finder.model;
|
|
2
|
+
|
|
3
|
+
import lombok.Data;
|
|
4
|
+
import lombok.NoArgsConstructor;
|
|
5
|
+
import org.dxworks.insider.InsiderAnalysis;
|
|
6
|
+
import org.dxworks.insider.InsiderFile;
|
|
7
|
+
import org.dxworks.insider.InsiderResult;
|
|
8
|
+
import org.dxworks.insider.technology.finder.LinguistService;
|
|
9
|
+
|
|
10
|
+
import java.util.List;
|
|
11
|
+
import java.util.regex.Matcher;
|
|
12
|
+
import java.util.regex.Pattern;
|
|
13
|
+
import java.util.stream.Collectors;
|
|
14
|
+
|
|
15
|
+
@Data
|
|
16
|
+
@NoArgsConstructor
|
|
17
|
+
public class Technology implements InsiderAnalysis {
|
|
18
|
+
|
|
19
|
+
private final LinguistService linguistService = LinguistService.getInstance();
|
|
20
|
+
private String category;
|
|
21
|
+
private String name;
|
|
22
|
+
private List<String> languages;
|
|
23
|
+
private List<String> extensions;
|
|
24
|
+
private List<String> fingerprints;
|
|
25
|
+
private List<Pattern> patterns;
|
|
26
|
+
|
|
27
|
+
public Technology(String category, String name, List<String> languages, List<String> extensions,
|
|
28
|
+
List<String> fingerprints) {
|
|
29
|
+
this.category = category;
|
|
30
|
+
this.name = name;
|
|
31
|
+
this.languages = languages;
|
|
32
|
+
this.extensions = extensions;
|
|
33
|
+
this.fingerprints = fingerprints;
|
|
34
|
+
patterns = fingerprints.stream().map(Pattern::compile).collect(Collectors.toList());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Override
|
|
38
|
+
public InsiderResult analyze(InsiderFile insiderFile) {
|
|
39
|
+
if (!accepts(insiderFile))
|
|
40
|
+
return null;
|
|
41
|
+
|
|
42
|
+
int totalOccurrences = patterns.parallelStream()
|
|
43
|
+
.mapToInt(pattern -> getPatternOccurrencesInFile(insiderFile, pattern))
|
|
44
|
+
.sum();
|
|
45
|
+
|
|
46
|
+
return InsiderResult.builder()
|
|
47
|
+
.file(insiderFile.getFullyQualifiedName().toString())
|
|
48
|
+
.category(category)
|
|
49
|
+
.name(name)
|
|
50
|
+
.value(totalOccurrences)
|
|
51
|
+
.build();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Override
|
|
55
|
+
public boolean accepts(InsiderFile insiderFile) {
|
|
56
|
+
return linguistService.hasAcceptedExtension(insiderFile, languages)
|
|
57
|
+
|| extensions.contains(insiderFile.getExtension());
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private int getPatternOccurrencesInFile(InsiderFile insiderFile, Pattern pattern) {
|
|
61
|
+
int fileOcc = 0;
|
|
62
|
+
Matcher matcher = pattern.matcher(insiderFile.getContent());
|
|
63
|
+
|
|
64
|
+
while (matcher.find())
|
|
65
|
+
fileOcc++;
|
|
66
|
+
return fileOcc;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public void setFingerprints(List<String> fingerprints) {
|
|
70
|
+
this.fingerprints = fingerprints;
|
|
71
|
+
patterns = fingerprints.stream().map(Pattern::compile).collect(Collectors.toList());
|
|
72
|
+
}
|
|
73
|
+
}
|
package/src/main/java/org/dxworks/insider/technology/finder/model/json/JsonConfigurationDTO.java
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package org.dxworks.insider.technology.finder.model.json;
|
|
2
|
+
|
|
3
|
+
import lombok.Data;
|
|
4
|
+
|
|
5
|
+
import java.util.List;
|
|
6
|
+
|
|
7
|
+
@Data
|
|
8
|
+
public class JsonConfigurationDTO {
|
|
9
|
+
private String outputFileName;
|
|
10
|
+
|
|
11
|
+
private boolean useProjectPrefix = true;
|
|
12
|
+
|
|
13
|
+
private List<TechnologyJsonDTO> technologies;
|
|
14
|
+
}
|