Full Code of jfrog/jfrog-idea-plugin for AI

master e9d2b9d85584 cached
635 files
1.6 MB
414.9k tokens
2574 symbols
1 requests
Download .txt
Showing preview only (1,913K chars total). Download the full file or copy to clipboard to get everything.
Repository: jfrog/jfrog-idea-plugin
Branch: master
Commit: e9d2b9d85584
Files: 635
Total size: 1.6 MB

Directory structure:
gitextract_05909tqq/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── feature_request.md
│   │   └── question.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── release.yml
│   └── workflows/
│       ├── cla.yml
│       ├── frogbot-scan-pull-request.yml
│       ├── integration-tests.yml
│       ├── test.yml
│       └── verification.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── release/
│   ├── pipelines.release.yml
│   ├── pipelines.resources.yml
│   ├── pipelines.snapshot.yml
│   └── specs/
│       ├── dev-rbc-filespec.json
│       └── prod-rbc-filespec.json
├── settings.gradle
└── src/
    ├── main/
    │   ├── java/
    │   │   └── com/
    │   │       └── jfrog/
    │   │           └── ide/
    │   │               └── idea/
    │   │                   ├── Syncable.java
    │   │                   ├── actions/
    │   │                   │   ├── CollapseAllAction.java
    │   │                   │   ├── CreateIgnoreRuleAction.java
    │   │                   │   ├── ExpandAllAction.java
    │   │                   │   ├── GoToSettingsAction.java
    │   │                   │   ├── RefreshBuildsAction.java
    │   │                   │   ├── ScanTimeLabelAction.java
    │   │                   │   ├── StartLocalScanAction.java
    │   │                   │   └── StopLocalScanAction.java
    │   │                   ├── ci/
    │   │                   │   └── CiManager.java
    │   │                   ├── configuration/
    │   │                   │   ├── GlobalSettings.java
    │   │                   │   └── ServerConfigImpl.java
    │   │                   ├── events/
    │   │                   │   ├── AnnotationEvents.java
    │   │                   │   ├── ApplicationEvents.java
    │   │                   │   ├── BuildEvents.java
    │   │                   │   └── ProjectEvents.java
    │   │                   ├── exclusion/
    │   │                   │   ├── Excludable.java
    │   │                   │   ├── ExclusionUtils.java
    │   │                   │   └── MavenExclusion.java
    │   │                   ├── inspections/
    │   │                   │   ├── AbstractInspection.java
    │   │                   │   ├── AnnotationIconRenderer.java
    │   │                   │   ├── AnnotationUtils.java
    │   │                   │   ├── GoInspection.java
    │   │                   │   ├── GradleGroovyInspection.java
    │   │                   │   ├── GradleInspection.java
    │   │                   │   ├── GradleKotlinInspection.java
    │   │                   │   ├── JFrogSecurityAnnotator.java
    │   │                   │   ├── JFrogSecurityWarning.java
    │   │                   │   ├── JumpToCode.java
    │   │                   │   ├── MavenInspection.java
    │   │                   │   ├── NpmInspection.java
    │   │                   │   ├── ShowInDependencyTree.java
    │   │                   │   ├── YarnInspection.java
    │   │                   │   └── upgradeversion/
    │   │                   │       ├── GoUpgradeVersion.java
    │   │                   │       ├── GradleGroovyUpgradeVersion.java
    │   │                   │       ├── GradleKotlinUpgradeVersion.java
    │   │                   │       ├── MavenUpgradeVersion.java
    │   │                   │       ├── NpmUpgradeVersion.java
    │   │                   │       ├── UpgradeVersion.java
    │   │                   │       └── YarnUpgradeVersion.java
    │   │                   ├── log/
    │   │                   │   ├── Logger.java
    │   │                   │   └── ProgressIndicatorImpl.java
    │   │                   ├── navigation/
    │   │                   │   ├── NavigationService.java
    │   │                   │   └── NavigationTarget.java
    │   │                   ├── scan/
    │   │                   │   ├── ApplicabilityScannerExecutor.java
    │   │                   │   ├── GoScanner.java
    │   │                   │   ├── GradleScanner.java
    │   │                   │   ├── IACScannerExecutor.java
    │   │                   │   ├── MavenScanner.java
    │   │                   │   ├── NpmScanner.java
    │   │                   │   ├── PypiScanner.java
    │   │                   │   ├── SastScannerExecutor.java
    │   │                   │   ├── ScanBinaryExecutor.java
    │   │                   │   ├── ScanManager.java
    │   │                   │   ├── ScannerBase.java
    │   │                   │   ├── ScannerFactory.java
    │   │                   │   ├── SecretsScannerExecutor.java
    │   │                   │   ├── SingleDescriptorScanner.java
    │   │                   │   ├── SourceCodeScannerManager.java
    │   │                   │   ├── YarnScanner.java
    │   │                   │   ├── data/
    │   │                   │   │   ├── AnalyzeSuppression.java
    │   │                   │   │   ├── ArtifactLocation.java
    │   │                   │   │   ├── CodeFlow.java
    │   │                   │   │   ├── Driver.java
    │   │                   │   │   ├── Invocation.java
    │   │                   │   │   ├── Location.java
    │   │                   │   │   ├── Message.java
    │   │                   │   │   ├── NewScanConfig.java
    │   │                   │   │   ├── NewScansConfig.java
    │   │                   │   │   ├── Output.java
    │   │                   │   │   ├── PackageManagerType.java
    │   │                   │   │   ├── PhysicalLocation.java
    │   │                   │   │   ├── Region.java
    │   │                   │   │   ├── Rule.java
    │   │                   │   │   ├── RuleProperties.java
    │   │                   │   │   ├── Run.java
    │   │                   │   │   ├── SarifResult.java
    │   │                   │   │   ├── ScanConfig.java
    │   │                   │   │   ├── ScansConfig.java
    │   │                   │   │   ├── ThreadFlow.java
    │   │                   │   │   ├── ThreadFlowLocation.java
    │   │                   │   │   ├── Tool.java
    │   │                   │   │   ├── WorkingDirectory.java
    │   │                   │   │   └── applications/
    │   │                   │   │       ├── JFrogApplicationsConfig.java
    │   │                   │   │       ├── ModuleConfig.java
    │   │                   │   │       └── ScannerConfig.java
    │   │                   │   └── utils/
    │   │                   │       ├── ImpactTreeBuilder.java
    │   │                   │       └── ScanUtils.java
    │   │                   ├── ui/
    │   │                   │   ├── AbstractJFrogToolWindow.java
    │   │                   │   ├── CiComponentsTree.java
    │   │                   │   ├── ComponentDetails.java
    │   │                   │   ├── ComponentIssueDetails.java
    │   │                   │   ├── ComponentIssuesTable.java
    │   │                   │   ├── ComponentsTree.java
    │   │                   │   ├── ComponentsTreeCellRenderer.java
    │   │                   │   ├── ExpiredComponentsTreeCellRenderer.java
    │   │                   │   ├── IssueDetails.java
    │   │                   │   ├── IssuesTableCellRenderer.java
    │   │                   │   ├── IssuesTableModel.java
    │   │                   │   ├── IssuesTableSelectionListener.java
    │   │                   │   ├── JFrogCiToolWindow.java
    │   │                   │   ├── JFrogFloatingToolbar.java
    │   │                   │   ├── JFrogLocalToolWindow.java
    │   │                   │   ├── JFrogToolWindow.java
    │   │                   │   ├── JFrogToolWindowFactory.java
    │   │                   │   ├── JfrogContextMenuHandler.java
    │   │                   │   ├── LocalComponentsTree.java
    │   │                   │   ├── MoreInfoPanel.java
    │   │                   │   ├── components/
    │   │                   │   │   ├── ConnectionResultsGesture.java
    │   │                   │   │   ├── ImpactPathPane.java
    │   │                   │   │   ├── LinkButton.java
    │   │                   │   │   ├── MenuButton.java
    │   │                   │   │   ├── ReferencesPane.java
    │   │                   │   │   └── TitledPane.java
    │   │                   │   ├── configuration/
    │   │                   │   │   ├── BuildsVerifier.java
    │   │                   │   │   ├── ConfigVerificationUtils.java
    │   │                   │   │   ├── ConnectionRetriesSpinner.java
    │   │                   │   │   ├── ConnectionTimeoutSpinner.java
    │   │                   │   │   ├── JFrogGlobalConfiguration.form
    │   │                   │   │   ├── JFrogGlobalConfiguration.java
    │   │                   │   │   ├── JFrogProjectConfiguration.form
    │   │                   │   │   ├── JFrogProjectConfiguration.java
    │   │                   │   │   └── Utils.java
    │   │                   │   ├── menus/
    │   │                   │   │   ├── MenuCheckbox.java
    │   │                   │   │   ├── SelectAllCheckbox.java
    │   │                   │   │   ├── SelectionCheckbox.java
    │   │                   │   │   ├── ToolbarPopupMenu.java
    │   │                   │   │   ├── builds/
    │   │                   │   │   │   ├── BuildsButton.java
    │   │                   │   │   │   └── BuildsMenu.java
    │   │                   │   │   ├── filtermanager/
    │   │                   │   │   │   ├── CiFilterManager.java
    │   │                   │   │   │   └── ConsistentFilterManager.java
    │   │                   │   │   └── filtermenu/
    │   │                   │   │       ├── CiIssueFilterMenu.java
    │   │                   │   │       ├── CiLicenseFilterMenu.java
    │   │                   │   │       ├── CiScopeFilterMenu.java
    │   │                   │   │       ├── FilterMenu.java
    │   │                   │   │       ├── IssueFilterMenu.java
    │   │                   │   │       ├── LicenseFilterMenu.java
    │   │                   │   │       └── ScopeFilterMenu.java
    │   │                   │   ├── utils/
    │   │                   │   │   ├── ComponentUtils.java
    │   │                   │   │   └── IconUtils.java
    │   │                   │   └── webview/
    │   │                   │       ├── WebviewManager.java
    │   │                   │       ├── WebviewObjectConverter.java
    │   │                   │       ├── WebviewResourceHandler.java
    │   │                   │       ├── WebviewSchemeHandlerFactory.java
    │   │                   │       ├── event/
    │   │                   │       │   ├── EventManager.java
    │   │                   │       │   ├── Receiver.java
    │   │                   │       │   ├── Sender.java
    │   │                   │       │   ├── model/
    │   │                   │       │   │   ├── Event.java
    │   │                   │       │   │   ├── IdeEvent.java
    │   │                   │       │   │   └── WebviewEvent.java
    │   │                   │       │   └── tasks/
    │   │                   │       │       └── JumpToCodeTask.java
    │   │                   │       └── model/
    │   │                   │           ├── ApplicableDetails.java
    │   │                   │           ├── Cve.java
    │   │                   │           ├── DependencyPage.java
    │   │                   │           ├── Evidence.java
    │   │                   │           ├── ExtendedInformation.java
    │   │                   │           ├── Finding.java
    │   │                   │           ├── ImpactGraph.java
    │   │                   │           ├── ImpactGraphNode.java
    │   │                   │           ├── IssuePage.java
    │   │                   │           ├── JfrogResearchSeverityReason.java
    │   │                   │           ├── License.java
    │   │                   │           ├── Location.java
    │   │                   │           ├── Reference.java
    │   │                   │           └── SastIssuePage.java
    │   │                   └── utils/
    │   │                       ├── Descriptor.java
    │   │                       ├── GoUtils.java
    │   │                       └── Utils.java
    │   └── resources/
    │       └── META-INF/
    │           ├── plugin.xml
    │           ├── with-go.xml
    │           ├── with-gradle.xml
    │           ├── with-groovy.xml
    │           ├── with-kotlin.xml
    │           ├── with-maven.xml
    │           ├── with-python-ce.xml
    │           └── with-python.xml
    └── test/
        ├── java/
        │   └── com/
        │       └── jfrog/
        │           └── ide/
        │               └── idea/
        │                   ├── ProgressIndicatorMock.java
        │                   ├── TestUtils.java
        │                   ├── configuration/
        │                   │   ├── ConfigurationTest.java
        │                   │   ├── ConnectionDetailsFromCliTest.java
        │                   │   └── GetProxyConfForTargetUrlTest.java
        │                   ├── exclusion/
        │                   │   └── MavenExclusionTest.java
        │                   ├── inspections/
        │                   │   ├── GoInspectionTest.java
        │                   │   ├── GradleGroovyInspectionTest.java
        │                   │   ├── GradleInspectionTest.java
        │                   │   ├── GradleKotlinInspectionTest.java
        │                   │   ├── InspectionToolsTest.java
        │                   │   ├── InspectionsTestBase.java
        │                   │   ├── MavenInspectionTest.java
        │                   │   └── NpmInspectionTest.java
        │                   ├── integration/
        │                   │   ├── ApplicabilityScannerIntegrationTests.java
        │                   │   ├── BaseIntegrationTest.java
        │                   │   ├── ExternalResourcesRepoIntegrationTests.java
        │                   │   ├── IACScannerIntegrationTests.java
        │                   │   └── SecretsScannerIntegrationTests.java
        │                   ├── scan/
        │                   │   ├── DummyCircularDepPyPkgManager.java
        │                   │   ├── DummyCircularRequirement.java
        │                   │   ├── GradleScannerTest.java
        │                   │   ├── MavenScannerTest.java
        │                   │   ├── PypiScannerTest.java
        │                   │   ├── ScanBinaryExecutorTest.java
        │                   │   ├── ScannerBaseTest.java
        │                   │   ├── SingleDescriptorScannerTest.java
        │                   │   ├── SourceCodeManagerTest.java
        │                   │   ├── YarnScannerTest.java
        │                   │   └── utils/
        │                   │       └── ImpactTreeBuilderTest.java
        │                   └── ui/
        │                       ├── LocalComponentsTreeTest.java
        │                       └── configuration/
        │                           ├── ConfigVerificationUtilsNegativeTest.java
        │                           └── ConfigVerificationUtilsPositiveTest.java
        └── resources/
            ├── exclusion/
            │   └── pom.xml
            ├── gradle/
            │   ├── global/
            │   │   ├── api/
            │   │   │   ├── build.gradle
            │   │   │   └── src/
            │   │   │       └── main/
            │   │   │           └── java/
            │   │   │               └── org/
            │   │   │                   └── gradle/
            │   │   │                       ├── api/
            │   │   │                       │   ├── PersonList.java
            │   │   │                       │   └── package.html
            │   │   │                       └── apiImpl/
            │   │   │                           └── Impl.java
            │   │   ├── build.gradle
            │   │   ├── gradle.properties
            │   │   ├── services/
            │   │   │   ├── build/
            │   │   │   │   └── moduleInfo.json
            │   │   │   └── webservice/
            │   │   │       ├── build.gradle
            │   │   │       └── src/
            │   │   │           ├── main/
            │   │   │           │   └── java/
            │   │   │           │       └── org/
            │   │   │           │           └── gradle/
            │   │   │           │               └── webservice/
            │   │   │           │                   └── TestTest.java
            │   │   │           └── test/
            │   │   │               └── java/
            │   │   │                   └── org/
            │   │   │                       └── gradle/
            │   │   │                           └── webservice/
            │   │   │                               └── TestTestTest.java
            │   │   ├── settings.gradle
            │   │   └── shared/
            │   │       └── src/
            │   │           └── main/
            │   │               ├── java/
            │   │               │   └── org/
            │   │               │       └── gradle/
            │   │               │           └── shared/
            │   │               │               ├── Person.java
            │   │               │               └── package-info.java
            │   │               └── resources/
            │   │                   └── org/
            │   │                       └── gradle/
            │   │                           └── shared/
            │   │                               └── main.properties
            │   └── wrapper/
            │       ├── api/
            │       │   ├── build.gradle
            │       │   └── src/
            │       │       └── main/
            │       │           └── java/
            │       │               └── org/
            │       │                   └── gradle/
            │       │                       ├── api/
            │       │                       │   ├── PersonList.java
            │       │                       │   └── package.html
            │       │                       └── apiImpl/
            │       │                           └── Impl.java
            │       ├── build.gradle
            │       ├── gradle/
            │       │   └── wrapper/
            │       │       ├── gradle-wrapper.jar
            │       │       └── gradle-wrapper.properties
            │       ├── gradle.properties
            │       ├── gradlew
            │       ├── gradlew.bat
            │       ├── services/
            │       │   ├── build/
            │       │   │   └── moduleInfo.json
            │       │   └── webservice/
            │       │       ├── build.gradle
            │       │       └── src/
            │       │           ├── main/
            │       │           │   └── java/
            │       │           │       └── org/
            │       │           │           └── gradle/
            │       │           │               └── webservice/
            │       │           │                   └── TestTest.java
            │       │           └── test/
            │       │               └── java/
            │       │                   └── org/
            │       │                       └── gradle/
            │       │                           └── webservice/
            │       │                               └── TestTestTest.java
            │       ├── settings.gradle
            │       └── shared/
            │           └── src/
            │               └── main/
            │                   ├── java/
            │                   │   └── org/
            │                   │       └── gradle/
            │                   │           └── shared/
            │                   │               ├── Person.java
            │                   │               └── package-info.java
            │                   └── resources/
            │                       └── org/
            │                           └── gradle/
            │                               └── shared/
            │                                   └── main.properties
            ├── iac/
            │   └── testProjects/
            │       └── exposedIac/
            │           ├── hcl/
            │           │   └── applicable/
            │           │       ├── req_sw_terraform_aws_alb_https_only.tf
            │           │       ├── req_sw_terraform_aws_api_gateway_auth.tf
            │           │       ├── req_sw_terraform_aws_api_gateway_encrypt_cache.tf
            │           │       ├── req_sw_terraform_aws_api_gateway_tls_version.tf
            │           │       ├── req_sw_terraform_aws_athena_encrypt.tf
            │           │       ├── req_sw_terraform_aws_athena_encrypt_workgroup.tf
            │           │       ├── req_sw_terraform_aws_batch_no_privileged.tf
            │           │       ├── req_sw_terraform_aws_cloudfront_tls_only.tf
            │           │       ├── req_sw_terraform_aws_cloudfront_tls_version.tf
            │           │       └── req_sw_terraform_aws_cloudtrail_encrypt.tf
            │           └── plan/
            │               ├── applicable/
            │               │   ├── req_sw_terraform_aws_alb_https_only.json
            │               │   ├── req_sw_terraform_aws_api_gateway_auth.json
            │               │   ├── req_sw_terraform_aws_api_gateway_encrypt_cache.json
            │               │   ├── req_sw_terraform_aws_api_gateway_tls_version.json
            │               │   ├── req_sw_terraform_aws_athena_encrypt.json
            │               │   ├── req_sw_terraform_aws_athena_encrypt_workgroup.json
            │               │   ├── req_sw_terraform_aws_batch_no_privileged.json
            │               │   ├── req_sw_terraform_aws_cloudfront_tls_only.json
            │               │   ├── req_sw_terraform_aws_cloudfront_tls_version.json
            │               │   ├── req_sw_terraform_aws_cloudtrail_encrypt.json
            │               │   ├── req_sw_terraform_aws_cloudtrail_logging.json
            │               │   ├── req_sw_terraform_aws_cloudwatch_log_encrypt.json
            │               │   ├── req_sw_terraform_aws_codebuild_encrypt.json
            │               │   ├── req_sw_terraform_aws_dax_encrypt.json
            │               │   ├── req_sw_terraform_aws_docdb_encrypt_cluster.json
            │               │   ├── req_sw_terraform_aws_ebs_encrypt.json
            │               │   ├── req_sw_terraform_aws_ec2_public_ip.json
            │               │   ├── req_sw_terraform_aws_ecr_no_public.json
            │               │   ├── req_sw_terraform_aws_ecs_encrypt_task.json
            │               │   ├── req_sw_terraform_aws_ecs_envvar_pass.json
            │               │   ├── req_sw_terraform_aws_efs_encrypt.json
            │               │   └── req_sw_terraform_aws_eks_encrypt_cluster.json
            │               └── convert_hcl_to_plan.py
            ├── inspections/
            │   ├── build.gradle.kts
            │   ├── build.groovy
            │   ├── go.mod
            │   ├── package.json
            │   └── pom.xml
            ├── projects/
            │   ├── project1/
            │   │   ├── go.mod
            │   │   └── main.go
            │   └── project2/
            │       ├── go.mod
            │       ├── go.sum
            │       ├── main.go
            │       └── subproject/
            │           ├── go.mod
            │           ├── go.sum
            │           └── main.go
            ├── proxy/
            │   └── proxy.pac
            ├── secrets/
            │   └── testProjects/
            │       ├── dummy/
            │       │   ├── ApplicabilityScannerExecutor.java
            │       │   ├── build.gradle
            │       │   ├── index.js
            │       │   └── main.py
            │       └── exposedSecrets/
            │           ├── req.nodejs.hardcoded-secrets/
            │           │   ├── applicable_base64.js
            │           │   ├── applicable_base64.js.approval.json
            │           │   ├── applicable_hex.js
            │           │   ├── applicable_hex.js.approval.json
            │           │   ├── not_applicable_base64.js
            │           │   ├── not_applicable_base64.js.approval.json
            │           │   ├── not_applicable_hex.js
            │           │   └── not_applicable_hex.js.approval.json
            │           ├── req.python.hardcoded-secrets/
            │           │   ├── applicable_base64.py
            │           │   ├── applicable_base64.py.approval.json
            │           │   ├── applicable_hex.py
            │           │   ├── applicable_hex.py.approval.json
            │           │   ├── not_applicable_base64.py
            │           │   ├── not_applicable_base64.py.approval.json
            │           │   ├── not_applicable_hex.py
            │           │   └── not_applicable_hex.py.approval.json
            │           └── req.secret.keys/
            │               ├── applicable
            │               ├── applicable.approval.json
            │               ├── applicable.c
            │               ├── applicable.txt
            │               ├── applicable.txt.approval.json
            │               ├── not_applicable
            │               ├── not_applicable.approval.json
            │               ├── not_applicable.c
            │               ├── not_applicable.txt
            │               └── not_applicable.txt.approval.json
            ├── sourceCode/
            │   ├── applicable_kind_pass_output.sarif
            │   ├── faulty_output.sarif
            │   ├── secrets_with_informational_output.sarif
            │   ├── simple_output.sarif
            │   └── testProjects/
            │       ├── maven/
            │       │   ├── COPYRIGHT.txt
            │       │   ├── LICENSE.txt
            │       │   ├── pom.xml
            │       │   └── src/
            │       │       ├── it/
            │       │       │   └── java/
            │       │       │       └── org/
            │       │       │           └── owasp/
            │       │       │               └── webgoat/
            │       │       │                   ├── AccessControlIntegrationTest.java
            │       │       │                   ├── CSRFIntegrationTest.java
            │       │       │                   ├── ChallengeIntegrationTest.java
            │       │       │                   ├── CryptoIntegrationTest.java
            │       │       │                   ├── DeserializationIntegrationTest.java
            │       │       │                   ├── GeneralLessonIntegrationTest.java
            │       │       │                   ├── IDORIntegrationTest.java
            │       │       │                   ├── IntegrationTest.java
            │       │       │                   ├── JWTLessonIntegrationTest.java
            │       │       │                   ├── LabelAndHintIntegrationTest.java
            │       │       │                   ├── PasswordResetLessonIntegrationTest.java
            │       │       │                   ├── PathTraversalIntegrationTest.java
            │       │       │                   ├── ProgressRaceConditionIntegrationTest.java
            │       │       │                   ├── SSRFIntegrationTest.java
            │       │       │                   ├── SessionManagementIntegrationTest.java
            │       │       │                   ├── SqlInjectionAdvancedIntegrationTest.java
            │       │       │                   ├── SqlInjectionLessonIntegrationTest.java
            │       │       │                   ├── SqlInjectionMitigationIntegrationTest.java
            │       │       │                   ├── WebWolfIntegrationTest.java
            │       │       │                   ├── XSSIntegrationTest.java
            │       │       │                   └── XXEIntegrationTest.java
            │       │       └── main/
            │       │           └── java/
            │       │               └── org/
            │       │                   ├── dummy/
            │       │                   │   └── insecure/
            │       │                   │       └── framework/
            │       │                   │           └── VulnerableTaskHolder.java
            │       │                   └── owasp/
            │       │                       └── webgoat/
            │       │                           ├── container/
            │       │                           │   ├── AjaxAuthenticationEntryPoint.java
            │       │                           │   ├── AsciiDoctorTemplateResolver.java
            │       │                           │   ├── DatabaseConfiguration.java
            │       │                           │   ├── HammerHead.java
            │       │                           │   ├── LessonDataSource.java
            │       │                           │   ├── LessonTemplateResolver.java
            │       │                           │   ├── MvcConfiguration.java
            │       │                           │   ├── WebGoat.java
            │       │                           │   ├── WebSecurityConfig.java
            │       │                           │   ├── WebWolfRedirect.java
            │       │                           │   ├── asciidoc/
            │       │                           │   │   ├── EnvironmentExposure.java
            │       │                           │   │   ├── OperatingSystemMacro.java
            │       │                           │   │   ├── UsernameMacro.java
            │       │                           │   │   ├── WebGoatTmpDirMacro.java
            │       │                           │   │   ├── WebGoatVersionMacro.java
            │       │                           │   │   ├── WebWolfMacro.java
            │       │                           │   │   └── WebWolfRootMacro.java
            │       │                           │   ├── assignments/
            │       │                           │   │   ├── AssignmentEndpoint.java
            │       │                           │   │   ├── AssignmentHints.java
            │       │                           │   │   ├── AssignmentPath.java
            │       │                           │   │   ├── AttackResult.java
            │       │                           │   │   └── LessonTrackerInterceptor.java
            │       │                           │   ├── controller/
            │       │                           │   │   ├── StartLesson.java
            │       │                           │   │   └── Welcome.java
            │       │                           │   ├── i18n/
            │       │                           │   │   ├── Language.java
            │       │                           │   │   ├── Messages.java
            │       │                           │   │   └── PluginMessages.java
            │       │                           │   ├── lessons/
            │       │                           │   │   ├── Assignment.java
            │       │                           │   │   ├── Category.java
            │       │                           │   │   ├── CourseConfiguration.java
            │       │                           │   │   ├── Hint.java
            │       │                           │   │   ├── Initializeable.java
            │       │                           │   │   ├── Lesson.java
            │       │                           │   │   ├── LessonConnectionInvocationHandler.java
            │       │                           │   │   ├── LessonInfoModel.java
            │       │                           │   │   ├── LessonMenuItem.java
            │       │                           │   │   ├── LessonMenuItemType.java
            │       │                           │   │   └── LessonScanner.java
            │       │                           │   ├── service/
            │       │                           │   │   ├── EnvironmentService.java
            │       │                           │   │   ├── HintService.java
            │       │                           │   │   ├── LabelDebugService.java
            │       │                           │   │   ├── LabelService.java
            │       │                           │   │   ├── LessonInfoService.java
            │       │                           │   │   ├── LessonMenuService.java
            │       │                           │   │   ├── LessonProgressService.java
            │       │                           │   │   ├── LessonTitleService.java
            │       │                           │   │   ├── ReportCardService.java
            │       │                           │   │   ├── RestartLessonService.java
            │       │                           │   │   └── SessionService.java
            │       │                           │   ├── session/
            │       │                           │   │   ├── Course.java
            │       │                           │   │   ├── LabelDebugger.java
            │       │                           │   │   ├── UserSessionData.java
            │       │                           │   │   └── WebSession.java
            │       │                           │   └── users/
            │       │                           │       ├── LessonTracker.java
            │       │                           │       ├── RegistrationController.java
            │       │                           │       ├── Scoreboard.java
            │       │                           │       ├── UserForm.java
            │       │                           │       ├── UserRepository.java
            │       │                           │       ├── UserService.java
            │       │                           │       ├── UserSession.java
            │       │                           │       ├── UserTracker.java
            │       │                           │       ├── UserTrackerRepository.java
            │       │                           │       ├── UserValidator.java
            │       │                           │       └── WebGoatUser.java
            │       │                           ├── lessons/
            │       │                           │   ├── authbypass/
            │       │                           │   │   ├── AccountVerificationHelper.java
            │       │                           │   │   ├── AuthBypass.java
            │       │                           │   │   └── VerifyAccount.java
            │       │                           │   ├── bypassrestrictions/
            │       │                           │   │   ├── BypassRestrictions.java
            │       │                           │   │   ├── BypassRestrictionsFieldRestrictions.java
            │       │                           │   │   └── BypassRestrictionsFrontendValidation.java
            │       │                           │   ├── challenges/
            │       │                           │   │   ├── ChallengeIntro.java
            │       │                           │   │   ├── Email.java
            │       │                           │   │   ├── Flag.java
            │       │                           │   │   ├── SolutionConstants.java
            │       │                           │   │   ├── challenge1/
            │       │                           │   │   │   ├── Assignment1.java
            │       │                           │   │   │   ├── Challenge1.java
            │       │                           │   │   │   └── ImageServlet.java
            │       │                           │   │   ├── challenge5/
            │       │                           │   │   │   ├── Assignment5.java
            │       │                           │   │   │   └── Challenge5.java
            │       │                           │   │   ├── challenge7/
            │       │                           │   │   │   ├── Assignment7.java
            │       │                           │   │   │   ├── Challenge7.java
            │       │                           │   │   │   ├── MD5.java
            │       │                           │   │   │   └── PasswordResetLink.java
            │       │                           │   │   └── challenge8/
            │       │                           │   │       ├── Assignment8.java
            │       │                           │   │       └── Challenge8.java
            │       │                           │   ├── chromedevtools/
            │       │                           │   │   ├── ChromeDevTools.java
            │       │                           │   │   ├── NetworkDummy.java
            │       │                           │   │   └── NetworkLesson.java
            │       │                           │   ├── cia/
            │       │                           │   │   ├── CIA.java
            │       │                           │   │   └── CIAQuiz.java
            │       │                           │   ├── clientsidefiltering/
            │       │                           │   │   ├── ClientSideFiltering.java
            │       │                           │   │   ├── ClientSideFilteringAssignment.java
            │       │                           │   │   ├── ClientSideFilteringFreeAssignment.java
            │       │                           │   │   ├── Salaries.java
            │       │                           │   │   └── ShopEndpoint.java
            │       │                           │   ├── cryptography/
            │       │                           │   │   ├── CryptoUtil.java
            │       │                           │   │   ├── Cryptography.java
            │       │                           │   │   ├── EncodingAssignment.java
            │       │                           │   │   ├── HashingAssignment.java
            │       │                           │   │   ├── SecureDefaultsAssignment.java
            │       │                           │   │   ├── SigningAssignment.java
            │       │                           │   │   └── XOREncodingAssignment.java
            │       │                           │   ├── csrf/
            │       │                           │   │   ├── CSRF.java
            │       │                           │   │   ├── CSRFConfirmFlag1.java
            │       │                           │   │   ├── CSRFFeedback.java
            │       │                           │   │   ├── CSRFGetFlag.java
            │       │                           │   │   ├── CSRFLogin.java
            │       │                           │   │   ├── ForgedReviews.java
            │       │                           │   │   └── Review.java
            │       │                           │   ├── deserialization/
            │       │                           │   │   ├── InsecureDeserialization.java
            │       │                           │   │   ├── InsecureDeserializationTask.java
            │       │                           │   │   └── SerializationHelper.java
            │       │                           │   ├── hijacksession/
            │       │                           │   │   ├── HijackSession.java
            │       │                           │   │   ├── HijackSessionAssignment.java
            │       │                           │   │   └── cas/
            │       │                           │   │       ├── Authentication.java
            │       │                           │   │       ├── AuthenticationProvider.java
            │       │                           │   │       └── HijackSessionAuthenticationProvider.java
            │       │                           │   ├── htmltampering/
            │       │                           │   │   ├── HtmlTampering.java
            │       │                           │   │   └── HtmlTamperingTask.java
            │       │                           │   ├── httpbasics/
            │       │                           │   │   ├── HttpBasics.java
            │       │                           │   │   ├── HttpBasicsLesson.java
            │       │                           │   │   └── HttpBasicsQuiz.java
            │       │                           │   ├── httpproxies/
            │       │                           │   │   ├── HttpBasicsInterceptRequest.java
            │       │                           │   │   └── HttpProxies.java
            │       │                           │   ├── idor/
            │       │                           │   │   ├── IDOR.java
            │       │                           │   │   ├── IDORDiffAttributes.java
            │       │                           │   │   ├── IDOREditOtherProfiile.java
            │       │                           │   │   ├── IDORLogin.java
            │       │                           │   │   ├── IDORViewOtherProfile.java
            │       │                           │   │   ├── IDORViewOwnProfile.java
            │       │                           │   │   ├── IDORViewOwnProfileAltUrl.java
            │       │                           │   │   └── UserProfile.java
            │       │                           │   ├── insecurelogin/
            │       │                           │   │   ├── InsecureLogin.java
            │       │                           │   │   └── InsecureLoginTask.java
            │       │                           │   ├── jwt/
            │       │                           │   │   ├── JWT.java
            │       │                           │   │   ├── JWTDecodeEndpoint.java
            │       │                           │   │   ├── JWTFinalEndpoint.java
            │       │                           │   │   ├── JWTQuiz.java
            │       │                           │   │   ├── JWTRefreshEndpoint.java
            │       │                           │   │   ├── JWTSecretKeyEndpoint.java
            │       │                           │   │   ├── JWTVotesEndpoint.java
            │       │                           │   │   └── votes/
            │       │                           │   │       ├── Views.java
            │       │                           │   │       └── Vote.java
            │       │                           │   ├── lessontemplate/
            │       │                           │   │   ├── LessonTemplate.java
            │       │                           │   │   └── SampleAttack.java
            │       │                           │   ├── logging/
            │       │                           │   │   ├── LogBleedingTask.java
            │       │                           │   │   ├── LogSpoofing.java
            │       │                           │   │   └── LogSpoofingTask.java
            │       │                           │   ├── missingac/
            │       │                           │   │   ├── DisplayUser.java
            │       │                           │   │   ├── MissingAccessControlUserRepository.java
            │       │                           │   │   ├── MissingFunctionAC.java
            │       │                           │   │   ├── MissingFunctionACHiddenMenus.java
            │       │                           │   │   ├── MissingFunctionACUsers.java
            │       │                           │   │   ├── MissingFunctionACYourHash.java
            │       │                           │   │   ├── MissingFunctionACYourHashAdmin.java
            │       │                           │   │   └── User.java
            │       │                           │   ├── passwordreset/
            │       │                           │   │   ├── PasswordReset.java
            │       │                           │   │   ├── PasswordResetEmail.java
            │       │                           │   │   ├── QuestionsAssignment.java
            │       │                           │   │   ├── ResetLinkAssignment.java
            │       │                           │   │   ├── ResetLinkAssignmentForgotPassword.java
            │       │                           │   │   ├── SecurityQuestionAssignment.java
            │       │                           │   │   ├── SimpleMailAssignment.java
            │       │                           │   │   ├── TriedQuestions.java
            │       │                           │   │   └── resetlink/
            │       │                           │   │       └── PasswordChangeForm.java
            │       │                           │   ├── pathtraversal/
            │       │                           │   │   ├── PathTraversal.java
            │       │                           │   │   ├── ProfileUpload.java
            │       │                           │   │   ├── ProfileUploadBase.java
            │       │                           │   │   ├── ProfileUploadFix.java
            │       │                           │   │   ├── ProfileUploadRemoveUserInput.java
            │       │                           │   │   ├── ProfileUploadRetrieval.java
            │       │                           │   │   └── ProfileZipSlip.java
            │       │                           │   ├── securepasswords/
            │       │                           │   │   ├── SecurePasswords.java
            │       │                           │   │   └── SecurePasswordsAssignment.java
            │       │                           │   ├── spoofcookie/
            │       │                           │   │   ├── SpoofCookie.java
            │       │                           │   │   ├── SpoofCookieAssignment.java
            │       │                           │   │   └── encoders/
            │       │                           │   │       └── EncDec.java
            │       │                           │   ├── sqlinjection/
            │       │                           │   │   ├── advanced/
            │       │                           │   │   │   ├── SqlInjectionAdvanced.java
            │       │                           │   │   │   ├── SqlInjectionChallenge.java
            │       │                           │   │   │   ├── SqlInjectionChallengeLogin.java
            │       │                           │   │   │   ├── SqlInjectionLesson6a.java
            │       │                           │   │   │   ├── SqlInjectionLesson6b.java
            │       │                           │   │   │   └── SqlInjectionQuiz.java
            │       │                           │   │   ├── introduction/
            │       │                           │   │   │   ├── SqlInjection.java
            │       │                           │   │   │   ├── SqlInjectionLesson10.java
            │       │                           │   │   │   ├── SqlInjectionLesson2.java
            │       │                           │   │   │   ├── SqlInjectionLesson3.java
            │       │                           │   │   │   ├── SqlInjectionLesson4.java
            │       │                           │   │   │   ├── SqlInjectionLesson5.java
            │       │                           │   │   │   ├── SqlInjectionLesson5a.java
            │       │                           │   │   │   ├── SqlInjectionLesson5b.java
            │       │                           │   │   │   ├── SqlInjectionLesson8.java
            │       │                           │   │   │   └── SqlInjectionLesson9.java
            │       │                           │   │   └── mitigation/
            │       │                           │   │       ├── Servers.java
            │       │                           │   │       ├── SqlInjectionLesson10a.java
            │       │                           │   │       ├── SqlInjectionLesson10b.java
            │       │                           │   │       ├── SqlInjectionLesson13.java
            │       │                           │   │       ├── SqlInjectionMitigations.java
            │       │                           │   │       ├── SqlOnlyInputValidation.java
            │       │                           │   │       └── SqlOnlyInputValidationOnKeywords.java
            │       │                           │   ├── ssrf/
            │       │                           │   │   ├── SSRF.java
            │       │                           │   │   ├── SSRFTask1.java
            │       │                           │   │   └── SSRFTask2.java
            │       │                           │   ├── vulnerablecomponents/
            │       │                           │   │   ├── Contact.java
            │       │                           │   │   ├── ContactImpl.java
            │       │                           │   │   ├── VulnerableComponents.java
            │       │                           │   │   └── VulnerableComponentsLesson.java
            │       │                           │   ├── webgoatintroduction/
            │       │                           │   │   └── WebGoatIntroduction.java
            │       │                           │   ├── webwolfintroduction/
            │       │                           │   │   ├── Email.java
            │       │                           │   │   ├── LandingAssignment.java
            │       │                           │   │   ├── MailAssignment.java
            │       │                           │   │   └── WebWolfIntroduction.java
            │       │                           │   ├── xss/
            │       │                           │   │   ├── Comment.java
            │       │                           │   │   ├── CrossSiteScripting.java
            │       │                           │   │   ├── CrossSiteScriptingLesson1.java
            │       │                           │   │   ├── CrossSiteScriptingLesson3.java
            │       │                           │   │   ├── CrossSiteScriptingLesson4.java
            │       │                           │   │   ├── CrossSiteScriptingLesson5a.java
            │       │                           │   │   ├── CrossSiteScriptingLesson6a.java
            │       │                           │   │   ├── CrossSiteScriptingMitigation.java
            │       │                           │   │   ├── CrossSiteScriptingQuiz.java
            │       │                           │   │   ├── DOMCrossSiteScripting.java
            │       │                           │   │   ├── DOMCrossSiteScriptingVerifier.java
            │       │                           │   │   └── stored/
            │       │                           │   │       ├── CrossSiteScriptingStored.java
            │       │                           │   │       ├── StoredCrossSiteScriptingVerifier.java
            │       │                           │   │       └── StoredXssComments.java
            │       │                           │   └── xxe/
            │       │                           │       ├── BlindSendFileAssignment.java
            │       │                           │       ├── Comment.java
            │       │                           │       ├── CommentsCache.java
            │       │                           │       ├── CommentsEndpoint.java
            │       │                           │       ├── ContentTypeAssignment.java
            │       │                           │       ├── Ping.java
            │       │                           │       ├── SimpleXXE.java
            │       │                           │       ├── User.java
            │       │                           │       └── XXE.java
            │       │                           ├── server/
            │       │                           │   ├── ParentConfig.java
            │       │                           │   ├── StartWebGoat.java
            │       │                           │   └── StartupMessage.java
            │       │                           └── webwolf/
            │       │                               ├── FileServer.java
            │       │                               ├── MvcConfiguration.java
            │       │                               ├── WebSecurityConfig.java
            │       │                               ├── WebWolf.java
            │       │                               ├── jwt/
            │       │                               │   ├── JWTController.java
            │       │                               │   └── JWTToken.java
            │       │                               ├── mailbox/
            │       │                               │   ├── Email.java
            │       │                               │   ├── MailboxController.java
            │       │                               │   └── MailboxRepository.java
            │       │                               ├── requests/
            │       │                               │   ├── LandingPage.java
            │       │                               │   ├── Requests.java
            │       │                               │   └── WebWolfTraceRepository.java
            │       │                               └── user/
            │       │                                   ├── UserRepository.java
            │       │                                   ├── UserService.java
            │       │                                   └── WebGoatUser.java
            │       ├── npm/
            │       │   └── index.js
            │       └── python/
            │           └── main.py
            └── yarn/
                ├── exampleYarnMonorepo/
                │   ├── .gitignore
                │   ├── mobile/
                │   │   └── package.json
                │   ├── package.json
                │   └── web/
                │       └── package.json
                └── exampleYarnPackage/
                    ├── .gitignore
                    └── package.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: 🐞 Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Versions**
- JFrog IDEA plugin version:
- Operating system:
- Xray version:

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: ⭐️ Feature request
about: Suggest an idea for this project
title: ''
labels: feature request
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like to see**
A clear and concise description of the new feature.

**Describe alternatives you've considered**
If applicable, a clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: ❓ Question
about: Ask a question
title: ''
labels: question
assignees: ''

---


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
- [ ] All [tests](https://github.com/jfrog/jfrog-idea-plugin/actions/workflows/test.yml) passed. If this feature is not already covered by the tests, I added new tests.
-----


================================================
FILE: .github/release.yml
================================================
changelog:
  exclude:
    labels:
      - ignore for release
  categories:
    - title: Breaking Changes 🚨
      labels:
        - breaking change
    - title: Exciting New Features 🎉
      labels:
        - new feature
    - title: Improvements 🌱
      labels:
        - improvement
    - title: Bug Fixes 🛠
      labels:
        - bug
    - title: Other Changes 📚
      labels:
        - "*"


================================================
FILE: .github/workflows/cla.yml
================================================
name: "CLA Assistant"
on:
  # issue_comment triggers this action on each comment on issues and pull requests
  issue_comment:
    types: [created]
  pull_request_target:
    types: [opened,synchronize]

jobs:
  CLAssistant:
    runs-on: ubuntu-latest
    steps:
      - uses: actions-ecosystem/action-regex-match@v2
        id: sign-or-recheck
        with:
          text: ${{ github.event.comment.body }}
          regex: '\s*(I have read the CLA Document and I hereby sign the CLA)|(recheckcla)\s*'
      
      - name: "CLA Assistant"
        if: ${{ steps.sign-or-recheck.outputs.match != '' || github.event_name == 'pull_request_target' }}
        # Alpha Release
        uses: cla-assistant/github-action@v2.1.1-beta
        env:
          # Generated and maintained by github
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # JFrog organization secret
          PERSONAL_ACCESS_TOKEN : ${{ secrets.CLA_SIGN_TOKEN }}
        with:
          path-to-signatures: 'signed_clas.json'
          path-to-document: 'https://jfrog.com/cla/'
          remote-organization-name: 'jfrog'
          remote-repository-name: 'jfrog-signed-clas'
          # branch should not be protected
          branch: 'master'
          allowlist: bot*


================================================
FILE: .github/workflows/frogbot-scan-pull-request.yml
================================================
name: "Frogbot Scan Pull Request"
on:
  pull_request_target:
    types: [opened, synchronize]
permissions:
  pull-requests: write
  contents: read
jobs:
  scan-pull-request:
    runs-on: ubuntu-latest
    # A pull request needs to be approved, before Frogbot scans it. Any GitHub user who is associated with the
    # "frogbot" GitHub environment can approve the pull request to be scanned.
    environment: frogbot
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          
      - uses: jfrog-fastci/fastci@main  # Use the FastCI optimization action
        with:
          github_token: ${{secrets.GITHUB_TOKEN}}
          fastci_otel_token: ${{ secrets.FASTCI_TOKEN }}

      # Install prerequisites
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          java-version: "11"
          distribution: "temurin"
      - name: Setup Gradle
        uses: gradle/gradle-build-action@v2
        with:
          gradle-version: 7.4.1

      - uses: jfrog/frogbot@v2
        env:
          # [Mandatory]
          # JFrog platform URL (This functionality requires version 3.29.0 or above of Xray)
          JF_URL: ${{ secrets.FROGBOT_URL }}

          # [Mandatory if JF_USER and JF_PASSWORD are not provided]
          # JFrog access token with 'read' permissions on Xray service
          JF_ACCESS_TOKEN: ${{ secrets.FROGBOT_ACCESS_TOKEN }}

          # [Mandatory]
          # The GitHub token automatically generated for the job
          JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/integration-tests.yml
================================================
name: "Integration Tests"

on:
  push:
  # Triggers the workflow on labeled PRs only.
  pull_request_target:
    types: [ labeled ]
  schedule:
    - cron: '0 6 * * *' # Runs every day at 6:00 AM GMT

# Ensures that only the latest commit is running for each PR at a time.
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test:
    if: github.event_name == 'schedule' || github.event_name == 'push' || (github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'safe to test'))
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macOS-latest, macos-13 ]
        include:
          - os: windows-latest
            gradlew_suffix: .bat
    steps:
      - name: Remove 'safe to test' label
        uses: actions-ecosystem/action-remove-labels@v1
        with:
          labels: "safe to test"
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          submodules: true

      - uses: jfrog-fastci/fastci@main  # Use the FastCI optimization action
        with:
          github_token: ${{secrets.GITHUB_TOKEN}}
          fastci_otel_token: ${{ secrets.FASTCI_TOKEN }}

      # Install required tools
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          distribution: "temurin"
          java-version: "17"

      # Run integration tests
      - name: Integration Tests
        env:
          JFROG_IDE_PLATFORM_URL: ${{ secrets.PLATFORM_URL }}
          JFROG_IDE_ACCESS_TOKEN: ${{ secrets.PLATFORM_ADMIN_TOKEN }}
          JFROG_IDE_TEST_EXTERNAL_RESOURCES_REPO: "releases-remote"
        run: ./gradlew${{ matrix.gradlew_suffix }} clean integrationTests


================================================
FILE: .github/workflows/test.yml
================================================
name: Test

on: [ push, pull_request ]

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macOS-latest ]
        testCommand: [ "test", "pythonTests" ]
        include:
          - os: windows-latest
            gradlewSuffix: .bat
          - testCommand: "pythonTests"
            testName: Python
    name: ${{ matrix.testName }} Tests on ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3

      - uses: jfrog-fastci/fastci@main  # Use the FastCI optimization action
        with:
          github_token: ${{secrets.GITHUB_TOKEN}}
          fastci_otel_token: ${{ secrets.FASTCI_TOKEN }}

      # Install required tools
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: Setup Gradle
        uses: gradle/gradle-build-action@v2
        with:
          gradle-version: 7.6
      - name: Setup NodeJS
        uses: actions/setup-node@v3
        with:
          node-version: '20'
          check-latest: true
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11.5'
      # Install JFrog CLI for ConnectionDetailsFromCliTest
      - name: Install JFrog CLI
        run: curl -fL https://install-cli.jfrog.io | sh

      # Run tests
      - name: ${{ matrix.testName }} Tests on ${{ matrix.os }}
        run: ./gradlew${{ matrix.gradlewSuffix }} clean ${{ matrix.testCommand }}


================================================
FILE: .github/workflows/verification.yml
================================================
name: "Compatibility verification"

on: [ push, pull_request ]

jobs:
  test:
    runs-on: macOS-latest
    name: Compatibility verification
    steps:
      - uses: actions/checkout@v3

      - uses: jfrog-fastci/fastci@main  # Use the FastCI optimization action
        with:
          github_token: ${{secrets.GITHUB_TOKEN}}
          fastci_otel_token: ${{ secrets.FASTCI_TOKEN }}

      # Install required tools
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: Setup Gradle
        uses: gradle/gradle-build-action@v2
        with:
          gradle-version: 7.6

      # Run compatibility verification
      - name: Compatibility verification
        run: ./gradlew clean verifyPlugin runPluginVerifier


================================================
FILE: .gitignore
================================================
# Created by .ignore support plugin (hsz.mobi)
### Java template
*.class

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear
*node_modules/

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff:
.idea/tasks.xml

# Sensitive or high-churn files:
.idea/dataSources/
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml

# Gradle:
.idea
.gradle
/out
/build
/*/build
/*/out

# Mongo Explorer plugin:
.idea/mongoSettings.xml

## File-based project format:
*.iws

## Plugin-specific files:

# IntelliJ
/out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

## IOS
.DS_Store

#JFrog
.jfrog

#npm
.npmrc

# Webview
/src/main/resources/jfrog-ide-webview


================================================
FILE: CONTRIBUTING.md
================================================
# Guidelines

- If the existing tests do not already cover your changes, please add tests.

## Building and Testing the Sources

To build the plugin sources, please follow these steps:

1. Clone the code from git.
2. Build and create the JFrog IDEA Plugin zip file by running the following gradle command:

    ```bash
    ./gradlew clean build
    ```

After the build finishes, you'll find the zip file in the *build/distributions* directory, located under the
*jfrog-idea-plugin* directory.
The zip file can be loaded into IntelliJ.

## Additional Tests Suits

1. In order to run the Python tests suite, run the following gradle command:

    ```bash
    ./gradlew clean pythonTests
    ```

2. In order to run the integration tests:
    - Make sure you have JFrog platform Instance with JAS enabled.
    - If you are using JFrog CLI, just make sure the current configured server is the one you want to use.
      Alternatively, you can set JFROG_IDE_PLATFORM_URL and JFROG_IDE_ACCESS_TOKEN environment variables with your JFrog
      Platform URL and access token, respectively.
    - Set the JFROG_IDE_TEST_EXTERNAL_RESOURCES_REPO environment variable to the name of a remote repository in your
      Artifactory instance that proxies https://releases.jfrog.io/.

   Run the following command:

     ```bash
     ./gradlew integrationTests
     ```

## Debugging the Plugin Code

To build and run the plugin following your code changes, follow these steps:

1. From IntelliJ, open the plugin project, by selecting *jfrog-idea-plugin/build.gradle* file.
2. Build the sources and launch the plugin by the following these steps:

- From the *Gradle Projects* window, expand *Idea --> Tasks -->  IntelliJ*
- Debug the *runIdea* task.


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
[![](readme-resources/readme_image.png)](#readme)

<div align="center">

# JFrog IntelliJ IDEA Plugin

![JFrog IntelliJ IDEA Plugin Marketplace Installs](https://img.shields.io/jetbrains/plugin/d/9834-jfrog?label=Marketplace%20installs&color=blue&style=for-the-badge)

[![Scanned by Frogbot](https://raw.github.com/jfrog/frogbot/master/images/frogbot-badge.svg)](https://github.com/jfrog/frogbot#readme)
[![Build status](https://github.com/jfrog/jfrog-idea-plugin/actions/workflows/test.yml/badge.svg)](https://github.com/jfrog/jfrog-idea-plugin/actions/workflows/test.yml)
[![Marketplace](https://img.shields.io/jetbrains/plugin/v/9834-jfrog)](https://plugins.jetbrains.com/plugin/9834-jfrog)

</div>

# 🤖 About this Plugin

The plugin allows developers to find and fix security vulnerabilities in their projects and to see valuable information
about the status of their code by continuously scanning it locally with [JFrog Security](https://jfrog.com/xray/).

### What security capabilities do we provide?
#### Basic
<details>
  <summary>Software Composition Analysis (SCA)</summary>
Scans your project dependencies for security issues and shows you which dependencies are vulnerable. If the vulnerabilities have a fix, you can upgrade to the version with the fix in a click of a button.
</details>

<details>
  <summary>CVE Research and Enrichment</summary>
For selected security issues, get leverage-enhanced CVE data that is provided by our JFrog Security Research team.
Prioritize the CVEs based on:

- **JFrog Severity**: The severity given by the JFrog Security Research team after the manual analysis of the CVE by the team.
CVEs with the highest JFrog security severity are the most likely to be used by real-world attackers.
This means that you should put effort into fixing them as soon as possible.
- **Research Summary**: The summary that is based on JFrog's security analysis of the security issue provides detailed technical information on the specific conditions for the CVE to be applicable.
- **Remediation**: Detailed fix and mitigation options for the CVEs

You can learn more about enriched CVEs [here](https://jfrog.com/help/r/jfrog-security-documentation/jfrog-security-cve-research-and-enrichment).

Check out what our research team is up to and stay updated on newly discovered issues by clicking on this link: <https://research.jfrog.com>
</details>

#### Advanced
*Requires Xray version 3.66.5 or above and Enterprise X / Enterprise+ subscription with [Advanced DevSecOps](https://jfrog.com/xray/#xray-advanced)).*

<details>
  <summary>CVEs Contextual Analysis</summary>
Uses the code context to eliminate false positive reports on vulnerable dependencies that are not applicable to the code. 
CVEs Contextual Analysis is currently supported for Python, Java and JavaScript code.
</details>

<details>
  <summary>Secrets Detection</summary>
Prevents the exposure of keys or credentials that are stored in your source code.
</details>

<details>
  <summary>Infrastructure as Code (IaC) Scan</summary>
Secures your IaC files. Critical to keeping your cloud deployment safe and secure.
</details>

#### Additional Perks

- Security issues are easily visible inline.
- The results show issues with context, impact, and remediation.
- View all security issues in one place, in the JFrog tab.
- For Security issues with an available fixed version, you can upgrade to the fixed version within the plugin.
- Track the status of the code while it is being built, tested, and scanned on the CI server.

In addition to IntelliJ IDEA, the plugin also supports the following IDEs:

- WebStorm
- PyCharm
- Android Studio
- GoLand
- Rider
- CLion

# 📖 Documentation

Read the [documentation](https://docs.jfrog-applications.jfrog.io/jfrog-applications/ide/jetbrains-ides) to get started.

# 🔥 Reporting Issues

Please report issues by opening an issue on [GitHub](https://github.com/jfrog/jfrog-idea-plugin/issues).

# 💻 Contributions

We welcome community contribution through pull requests. To help us improve this project, please read our [Contribution](./CONTRIBUTING.md#guidelines) guide.

# 🥏 Release Notes

The release notes are available [here](https://github.com/jfrog/jfrog-idea-plugin/releases).


================================================
FILE: build.gradle
================================================
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import java.nio.file.Paths

plugins {
    id "org.jetbrains.intellij" version "1.16.0"
    id "java"
    id "maven-publish"
    id "de.undercouch.download" version "5.3.0"
    id "io.freefair.lombok" version "8.0.1"
}

group 'com.jfrog.ide'
version currentVersion

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
def testPython = project.gradle.startParameter.taskNames.contains("pythonTests")
def intellijType = testPython ? "IC" : "IU"

intellij {
    version = sandboxVersion
    type = intellijType
    plugins = ['gradle', 'maven', 'Groovy', 'properties', 'java', 'Kotlin', 'org.jetbrains.plugins.go:223.8617.56', "PythonCore:223.8617.56"]
    pluginName = 'JFrog'
}

runPluginVerifier {
    verifierVersion = '1.400'
}

runIde {
    jvmArgs '-Xmx2G'
}

patchPluginXml {
    sinceBuild = "223.4884.69"
    // Explicitly setting this to an empty string makes the plugin compatible with all IDE versions up to the latest one.
    // Removing this line will limit compatibility to IDE versions up to 'sandboxVersion'.
    untilBuild = ""
}

listProductsReleases {
    doLast {
        // At the end of the build, write the first and last versions of the products to the output file.
        // This will be used by the runPluginVerifier task to validate the compatibility of the plugin against the
        // first and last versions of IntelliJ IDEA.
        def outputFileObj = outputFile.get().asFile
        if (outputFileObj.exists()) {
            def lines = outputFileObj.readLines()
            if (!lines.isEmpty()) {
                def firstVersion = lines.first()
                def lastVersion = lines.last()
                outputFileObj.write("$firstVersion\n$lastVersion")
            }
        }
    }
}

repositories {
    mavenLocal()
    mavenCentral()
    maven {
        url "https://releases.jfrog.io/artifactory/oss-releases"
    }
    maven {
        url "https://releases.jfrog.io/artifactory/oss-snapshots"
    }
    maven {
        url "https://cache-redirector.jetbrains.com/intellij-dependencies"
    }
}

def buildInfoVersion = '2.43.6'
def idePluginsCommonVersion = '2.4.4'
// Updated to 2.17.3 for security fixes - compatible with Java 8+
def jacksonVersion = '2.17.3'

dependencies {
    implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: jacksonVersion
    implementation group: 'org.jfrog.buildinfo', name: 'build-info-extractor', version: buildInfoVersion
    implementation group: 'com.jfrog.ide', name: 'ide-plugins-common', version: idePluginsCommonVersion
    implementation group: 'org.jfrog.buildinfo', name: 'build-info-client', version: buildInfoVersion
    implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion
    implementation group: 'org.jfrog.buildinfo', name: 'build-info-api', version: buildInfoVersion
    implementation group: 'com.jfrog.xray.client', name: 'xray-client-java', version: '0.14.1'
    implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
    implementation group: 'org.jfrog.filespecs', name: 'file-specs-java', version: '1.1.2'
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.11'
    implementation group: 'com.google.guava', name: 'guava', version: '32.0.1-jre'
    implementation group: 'org.codehaus.plexus', name: 'plexus-utils', version: '3.4.1'
    implementation group: 'net.lingala.zip4j', name: 'zip4j', version: '2.11.4'

    annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.20'
    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20'

    testImplementation group: 'org.mockito', name: 'mockito-inline', version: '4.2.0'
    testImplementation group: 'org.mockito', name: 'mockito-core', version: '4.2.0'
}

test {
    scanForTestClasses false
    include "**/*Test.class"
    exclude "**/*IntegrationTest*", "**/*PypiScannerTest*"
    testLogging {
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        minGranularity 0
    }
}

tasks.register('pythonTests', Test) {
    scanForTestClasses false
    include "**/*PypiScannerTest*"
    testLogging {
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        minGranularity 0
    }
}

tasks.register('integrationTests', Test) {
    scanForTestClasses false
    include "**/*IntegrationTests.class"
    testLogging {
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        minGranularity 0
    }
}

def webviewFileName = 'jfrog-ide-webview-' + webviewVersion + '.tgz'
def webviewUrl = 'https://releases.jfrog.io/artifactory/ide-webview-npm/jfrog-ide-webview/-/' + webviewFileName
tasks.register('downloadWebview', Download) {
    src webviewUrl
    dest buildDir
    onlyIfModified true
    finalizedBy('getAndUpdateWebviewChecksum')
}

tasks.register('getAndUpdateWebviewChecksum') {
    finalizedBy('verifyWebview')
    if (System.getenv("CI") != null) {
        println 'CI mode is active - Skipping Webview checksum update'
        ext.checksum = webviewChecksum
        return
    }
    ext.checksum = getWebviewChecksumFromServer(webviewUrl)
    updateWebviewChecksumInPropertiesFile(ext.checksum)
}

tasks.register('verifyWebview', Verify) {
    src new File(buildDir, webviewFileName)
    algorithm 'SHA-256'
    checksum getAndUpdateWebviewChecksum.checksum
    finalizedBy('extractWebview')
}

tasks.register('extractWebview', Copy) {
    from tarTree(new File(buildDir, webviewFileName))
    into Paths.get('src', 'main', 'resources', 'jfrog-ide-webview').toFile()
    include '**/build/**/*'
    eachFile {
        path = path.replace('package/build/', '')
    }
}

tasks.withType(JavaCompile).configureEach {
    options.deprecation = true
    options.encoding = "UTF-8"
}

tasks.withType(ProcessResources).configureEach {
    dependsOn('downloadWebview')
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact buildPlugin
        }
    }
}

publishPlugin {
    token = System.getenv("JETBRAINS_TOKEN")
}

/**
 * Get Webview checksum from releases.jfrog.io
 * @param webviewUrl - Webview URL
 * @return the sha256 of the webview
 */
static String getWebviewChecksumFromServer(String webviewUrl) {
    def headRequest = HttpRequest.newBuilder(new URL(webviewUrl).toURI()).method("HEAD", HttpRequest.BodyPublishers.noBody()).build()
    def checksumResponse = HttpClient.newHttpClient().send(headRequest, HttpResponse.BodyHandlers.ofString())
    return checksumResponse.headers().firstValue("x-checksum-sha256").get()
}

/**
 * Update the Webview checksum in the gradle.properties file
 * @param checksum - Webview checksum to update
 */
static def updateWebviewChecksumInPropertiesFile(String checksum) {
    def gradleProps = new Properties()
    File gradlePropertiesFile = new File("gradle.properties")
    gradlePropertiesFile.withInputStream { gradleProps.load(it) }
    gradleProps.setProperty("webviewChecksum", checksum)
    gradlePropertiesFile.withWriter('UTF-8') { fileWriter ->
        gradleProps.each { key, value -> fileWriter.writeLine "$key=$value" }
    }
}


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
webviewVersion=0.2.14
sandboxVersion=2022.3.2
webviewChecksum=434265d6fa98eabbb4108f3157ce5cdc499c4d9fa294eb7b723e2a4d559ed156
currentVersion=2.8.x-SNAPSHOT


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC3045 
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC3045 
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi

# Collect all arguments for the java command;
#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
#     shell script including quotes and variable substitutions, so put them in
#     double quotes to make sure that they get re-expanded; and
#   * put everything else in single quotes, so that it's not re-expanded.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: release/pipelines.release.yml
================================================
pipelines:
  - name: release_jfrog_idea_plugin
    configuration:
      runtime:
        type: image
        image:
          auto:
            language: java
            versions:
              - "17"
      environmentVariables:
        readOnly:
          NEXT_VERSION: 0.0.0
          NEXT_DEVELOPMENT_VERSION: 0.0.x-SNAPSHOT
          SKIP_AUDIT: "false"

    steps:
      - name: Release
        type: Bash
        configuration:
          inputResources:
            - name: jfrogIdeaPluginReleaseGit
          integrations:
            - name: il_automation
            - name: ecosys_entplus_deployer
            - name: jetbrains
        execution:
          onExecute:
            - cd $res_jfrogIdeaPluginReleaseGit_resourcePath

            # Set env
            - export CI=true
            - export JFROG_BUILD_STATUS=PASS
            - export JFROG_CLI_BUILD_NAME=ecosystem-jfrog-idea-plugin-release
            - export JFROG_CLI_BUILD_NUMBER=$run_number
            - export JFROG_CLI_BUILD_PROJECT=ecosys

            # Configure git
            - if [[ $NEXT_VERSION =~ ^1.* ]]; then BRANCH="v1"; else BRANCH="master"; fi
            - git checkout ${BRANCH}
            - git remote set-url origin https://$int_il_automation_token@github.com/jfrog/jfrog-idea-plugin.git

            # Make sure versions provided
            - echo "Checking variables"
            - test -n "$NEXT_VERSION" -a "$NEXT_VERSION" != "0.0.0"
            - test -n "$NEXT_DEVELOPMENT_VERSION" -a "$NEXT_DEVELOPMENT_VERSION" != "0.0.x-SNAPSHOT"

            # Configure JFrog CLI
            - curl -fL https://install-cli.jfrog.io | sh
            - jf c rm --quiet
            - jf c add internal --url=$int_ecosys_entplus_deployer_url --user=$int_ecosys_entplus_deployer_user --password=$int_ecosys_entplus_deployer_apikey

            # Run audit
            - |
              if [ "$SKIP_AUDIT" != "true" ]; then
                jf audit
              else
                echo "Skipping audit according to environment variable"
              fi

            # Update version
            - sed -i "s/\(currentVersion=\).*\$/\1${NEXT_VERSION}/" gradle.properties
            - git commit -am "[artifactory-release] Release version ${NEXT_VERSION} [skipRun]" --allow-empty
            - git tag ${NEXT_VERSION}

            # Run build and publish
            - jf gradlec --use-wrapper --repo-deploy ecosys-oss-release-local --deploy-maven-desc --deploy-ivy-desc=false
            - >
              env -i PATH=$PATH HOME=$HOME CI=$CI
              JFROG_CLI_BUILD_NAME=$JFROG_CLI_BUILD_NAME
              JFROG_CLI_BUILD_NUMBER=$JFROG_CLI_BUILD_NUMBER
              JFROG_CLI_BUILD_PROJECT=$JFROG_CLI_BUILD_PROJECT
              jf gradle clean buildPlugin -x test artifactoryPublish
            - jf rt bag && jf rt bce
            - jf rt bp

            # Distribute release bundle
            - jf ds rbc ecosystem-jfrog-idea-plugin $NEXT_VERSION --spec=./release/specs/prod-rbc-filespec.json --spec-vars="version=$NEXT_VERSION" --sign
            - jf ds rbd ecosystem-jfrog-idea-plugin $NEXT_VERSION --site="releases.jfrog.io" --sync

            # Upload to Jetbrains marketplace
            - env -i PATH=$PATH HOME=$HOME JAVA_HOME=$JAVA_HOME JETBRAINS_TOKEN=$int_jetbrains_token ./gradlew publishPlugin

            # Update next development version
            - sed -i "s/\(currentVersion=\).*\$/\1${NEXT_DEVELOPMENT_VERSION}/" gradle.properties
            - git commit -am "[jfrog-release] Next development version [skipRun]"
            - git push
            - git push --tags


================================================
FILE: release/pipelines.resources.yml
================================================
resources:
  - name: jfrogIdeaPluginSnapshotGit
    type: GitRepo
    configuration:
      path: jfrog/jfrog-idea-plugin
      gitProvider: il_automation
      buildOn:
        pullRequestCreate: true
        commit: true
      branches:
        include: master
      cancelPendingRunsOn:
        pullRequestUpdate: true

  - name: jfrogIdeaPluginReleaseGit
    type: GitRepo
    configuration:
      path: jfrog/jfrog-idea-plugin
      gitProvider: il_automation
      buildOn:
        commit: false


================================================
FILE: release/pipelines.snapshot.yml
================================================
pipelines:
  - name: build_jfrog_idea_plugin_snapshot
    configuration:
      runtime:
        type: image
        image:
          auto:
            language: java
            versions:
              - "17"

    steps:
      - name: Snapshot
        type: Bash
        configuration:
          inputResources:
            - name: jfrogIdeaPluginSnapshotGit
          integrations:
            - name: entplus_deployer
        execution:
          onStart:
            - restore_cache_files gradle_cache $res_jfrogIdeaPluginSnapshotGit_resourcePath/.gradle
          onExecute:
            - cd $res_jfrogIdeaPluginSnapshotGit_resourcePath

            # Set env
            - export CI=true
            - export JFROG_BUILD_STATUS=PASS
            - export JFROG_CLI_BUILD_NAME=ecosystem-jfrog-idea-plugin-dev
            - export JFROG_CLI_BUILD_NUMBER=$run_number
            - export JFROG_CLI_BUILD_PROJECT=ecosys

            # Configure JFrog CLI
            - curl -fL https://install-cli.jfrog.io | sh
            - jf c rm --quiet
            - jf c add internal --url=$int_entplus_deployer_url --user=$int_entplus_deployer_user --password=$int_entplus_deployer_apikey

            # Run audit
            - jf audit

            # Delete former snapshots to make sure the release bundle will not contain the same artifacts
            - jf rt del "ecosys-oss-snapshot-local/com/jfrog/ide/jfrog-idea-plugin/*" --quiet

            # Run test, build and publish snapshot
            - jf gradlec --use-wrapper --repo-deploy ecosys-oss-snapshot-local --deploy-maven-desc --deploy-ivy-desc=false
            - >
              env -i PATH=$PATH HOME=$HOME CI=$CI
              JFROG_CLI_BUILD_NAME=$JFROG_CLI_BUILD_NAME
              JFROG_CLI_BUILD_NUMBER=$JFROG_CLI_BUILD_NUMBER
              JFROG_CLI_BUILD_PROJECT=$JFROG_CLI_BUILD_PROJECT
              jf gradle clean buildPlugin -x test artifactoryPublish
            - jf rt bag && jf rt bce
            - jf rt bp

            # Distribute release bundle
            - jf ds rbc ecosystem-jfrog-idea-plugin-snapshot $run_number --spec=./release/specs/dev-rbc-filespec.json --sign
            - jf ds rbd ecosystem-jfrog-idea-plugin-snapshot $run_number --site="releases.jfrog.io" --sync

          onComplete:
            # Save gradle cache
            - add_cache_files $res_jfrogIdeaPluginSnapshotGit_resourcePath/.gradle gradle_cache


================================================
FILE: release/specs/dev-rbc-filespec.json
================================================
{
  "files": [
    {
      "pattern": "ecosys-oss-snapshot-local/(com/jfrog/ide/jfrog-idea-plugin/*/jfrog-idea-plugin-*)",
      "target": "oss-snapshot-local/{1}"
    }
  ]
}


================================================
FILE: release/specs/prod-rbc-filespec.json
================================================
{
  "files": [
    {
      "pattern": "ecosys-oss-release-local/(com/jfrog/ide/jfrog-idea-plugin/${version}/jfrog-idea-plugin-*)",
      "target": "oss-release-local/{1}"
    }
  ]
}


================================================
FILE: settings.gradle
================================================
pluginManagement {
    repositories {
        maven {
            url 'https://oss.sonatype.org/content/repositories/snapshots/'
        }
        gradlePluginPortal()
    }
}

rootProject.name = 'jfrog-idea-plugin'


================================================
FILE: src/main/java/com/jfrog/ide/idea/Syncable.java
================================================
package com.jfrog.ide.idea;

import com.intellij.util.messages.Topic;
import com.jfrog.ide.idea.events.ApplicationEvents;

public interface Syncable {
    Topic<ApplicationEvents> getSyncEvent();
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/CollapseAllAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAware;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

/**
 * Collapse all action that calls treeCollapsed() once in the end instead of for each row.
 *
 * Created by Yahav Itzhak on 3 Jan 2018.
 */
public class CollapseAllAction extends AnAction implements DumbAware {

    private JTree myTree;

    @SuppressWarnings("DialogTitleCapitalization")
    private CollapseAllAction() {
        super("Collapse All", "Collapse All", AllIcons.Actions.Collapseall);
    }

    public CollapseAllAction(@NotNull JTree tree) {
        this();
        this.myTree = tree;
    }

    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        for (int i = myTree.getRowCount() - 1; i >= 0; i--) {
            myTree.collapseRow(i);
        }
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/CreateIgnoreRuleAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.icons.AllIcons;
import com.intellij.ide.BrowserUtil;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.ui.awt.RelativePoint;
import com.jfrog.ide.idea.ui.configuration.JFrogGlobalConfiguration;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;

import static com.jfrog.ide.idea.ui.LocalComponentsTree.IGNORE_RULE_TOOL_TIP;
import static javax.swing.event.HyperlinkEvent.EventType.ACTIVATED;
import static org.apache.commons.lang3.StringUtils.isBlank;

/**
 * Create Ignore Rule button in the right-click menu of the issues table.
 *
 * @author yahavi
 **/
public class CreateIgnoreRuleAction extends AbstractAction {
    private final String ignoreRuleUrl;
    private final MouseEvent mouseEvent;

    public CreateIgnoreRuleAction(String ignoreRuleUrl, MouseEvent mouseEvent) {
        super("Create Vulnerability Ignore Rule", AllIcons.RunConfigurations.ShowIgnored);
        this.ignoreRuleUrl = ignoreRuleUrl;
        this.mouseEvent = mouseEvent;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (isBlank(this.ignoreRuleUrl)) {
            Balloon balloon = JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(IGNORE_RULE_TOOL_TIP + "<br><a href=\"Configure it here.\"> Configure it here. </a>", MessageType.ERROR,
                            event -> {
                                if (event.getEventType() != ACTIVATED) {
                                    return;
                                }
                                ShowSettingsUtil.getInstance().showSettingsDialog(null, JFrogGlobalConfiguration.class, JFrogGlobalConfiguration::selectSettingsTab);
                            })
                    .setHideOnAction(true)
                    .setHideOnClickOutside(true)
                    .setHideOnLinkClick(true)
                    .setHideOnKeyOutside(true)
                    .setDialogMode(true)
                    .createBalloon();
            balloon.show(new RelativePoint(mouseEvent), Balloon.Position.above);
        } else {
            BrowserUtil.browse(ignoreRuleUrl);
        }
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/ExpandAllAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAware;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

/**
 * Expand all action that calls treeExpanded() once in the end instead of for each row.
 *
 * Created by Yahav Itzhak on 3 Jan 2018.
 */
public class ExpandAllAction extends AnAction implements DumbAware {

    private JTree myTree;

    @SuppressWarnings("DialogTitleCapitalization")
    private ExpandAllAction() {
        super("Expand All", "Expand All", AllIcons.Actions.Expandall);
    }

    public ExpandAllAction(@NotNull JTree tree) {
        this();
        this.myTree = tree;
    }

    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        for (int i = 0; i < myTree.getRowCount(); i++) {
            myTree.expandRow(i);
        }
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/GoToSettingsAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.jfrog.ide.idea.ui.configuration.JFrogGlobalConfiguration;

/**
 * Created by tala on 9/3/23.
 */
public class GoToSettingsAction extends AnAction {
    public GoToSettingsAction() {
        super("JFrog Global Configuration", "Go to JFrog global configuration", AllIcons.General.Settings);
    }

    @Override
    public void actionPerformed(AnActionEvent e) {
        ShowSettingsUtil.getInstance().showSettingsDialog(null, JFrogGlobalConfiguration.class);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/RefreshBuildsAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.jfrog.ide.idea.ci.CiManager;

/**
 * Created by romang on 3/6/17.
 */
public class RefreshBuildsAction extends AnAction {

    @Override
    public void actionPerformed(AnActionEvent e) {
        if (e.getProject() == null) {
            return;
        }
        CiManager.getInstance(e.getProject()).asyncRefreshBuilds();
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/ScanTimeLabelAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.actionSystem.ex.ToolbarLabelAction;
import com.intellij.openapi.project.Project;
import com.jfrog.ide.idea.scan.ScanManager;
import com.jfrog.ide.idea.ui.LocalComponentsTree;
import org.jetbrains.annotations.NotNull;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;

public class ScanTimeLabelAction extends ToolbarLabelAction {

    @Override
    public void update(@NotNull AnActionEvent e) {
        super.update(e);
        Project project = e.getProject();
        if (project == null) {
            return;
        }
        Long lastScanTime = LocalComponentsTree.getInstance(project).lastScanTime();
        boolean isScanInProgress = ScanManager.getInstance(project).isScanInProgress();
        Presentation presentation = e.getPresentation();
        if (!isScanInProgress && lastScanTime != null) {
            DateTimeFormatter format = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
            LocalDateTime lastScanString = LocalDateTime.ofInstant(Instant.ofEpochMilli(lastScanTime), ZoneId.systemDefault());
            boolean expired = LocalComponentsTree.getInstance(project).isCacheExpired();
            String expiredMessage = expired ? " (outdated)" : "";
            presentation.setText("Last scanned at " + format.format(lastScanString) + expiredMessage);
            presentation.setIcon(expired ? AllIcons.General.Warning : null);
        } else {
            presentation.setText("");
            presentation.setIcon(null);
        }
    }

    @NotNull
    @Override
    public ActionUpdateThread getActionUpdateThread() {
        return ActionUpdateThread.EDT;
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/StartLocalScanAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.jfrog.ide.idea.scan.ScanManager;
import org.jetbrains.annotations.NotNull;

/**
 * Created by romang on 3/6/17.
 */
public class StartLocalScanAction extends AnAction {
    @Override
    public @NotNull ActionUpdateThread getActionUpdateThread() {
        return ActionUpdateThread.BGT;
    }

    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getProject();
        if (project == null) {
            return;
        }
        ScanManager.getInstance(project).startScan();
    }

    @Override
    public void update(@NotNull AnActionEvent e) {
        Project project = e.getProject();
        if (project == null) {
            return;
        }
        boolean isScanInProgress = ScanManager.getInstance(project).isScanInProgress();
        e.getPresentation().setVisible(!isScanInProgress);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/actions/StopLocalScanAction.java
================================================
package com.jfrog.ide.idea.actions;

import com.intellij.openapi.actionSystem.ActionUpdateThread;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.jfrog.ide.idea.scan.ScanManager;
import org.jetbrains.annotations.NotNull;

/**
 * Created by tala on 10/10/23.
 */
public class StopLocalScanAction extends AnAction {
    @Override
    public @NotNull ActionUpdateThread getActionUpdateThread() {
        return ActionUpdateThread.BGT;
    }

    @Override
    public void actionPerformed(AnActionEvent e) {
        Project project = e.getProject();
        if (project == null) {
            return;
        }
        ScanManager.getInstance(project).stopScan();
    }

    @Override
    public void update(@NotNull AnActionEvent e) {
        Project project = e.getProject();
        if (project == null) {
            return;
        }
        boolean isScanInProgress = ScanManager.getInstance(project).isScanInProgress();
        e.getPresentation().setVisible(isScanInProgress);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/ci/CiManager.java
================================================
package com.jfrog.ide.idea.ci;

import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.State;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.util.messages.MessageBus;
import com.intellij.util.messages.MessageBusConnection;
import com.jfrog.ide.common.ci.BuildDependencyTree;
import com.jfrog.ide.common.ci.BuildGeneralInfo;
import com.jfrog.ide.common.ci.CiManagerBase;
import com.jfrog.ide.common.utils.ProjectsMap;
import com.jfrog.ide.idea.configuration.GlobalSettings;
import com.jfrog.ide.idea.events.ApplicationEvents;
import com.jfrog.ide.idea.events.BuildEvents;
import com.jfrog.ide.idea.events.ProjectEvents;
import com.jfrog.ide.idea.log.Logger;
import com.jfrog.ide.idea.log.ProgressIndicatorImpl;
import com.jfrog.ide.idea.ui.CiComponentsTree;
import com.jfrog.ide.idea.ui.menus.filtermanager.CiFilterManager;
import com.jfrog.ide.idea.utils.Utils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jfrog.build.extractor.scan.DependencyTree;

import javax.swing.*;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
import java.util.concurrent.CancellationException;
import java.util.concurrent.atomic.AtomicBoolean;

import static com.jfrog.ide.common.log.Utils.logError;
import static com.jfrog.ide.idea.ui.configuration.JFrogProjectConfiguration.BUILDS_PATTERN_KEY;
import static com.jfrog.ide.idea.utils.Utils.HOME_PATH;

/**
 * @author yahavi
 */
@State(name = "CiState")
public class CiManager extends CiManagerBase implements Disposable {
    private static final String LOAD_BUILD_FAIL_FMT = "Failed to load build '%s/%s'.";

    // Lock to prevent multiple simultaneous scans
    private final AtomicBoolean scanInProgress = new AtomicBoolean(false);
    private final MessageBusConnection projectBusConnection;
    private final PropertiesComponent propertiesComponent;
    private final MessageBusConnection appBusConnection;
    private final Project project;

    private CiManager(@NotNull Project project) throws IOException {
        super(HOME_PATH.resolve("ci-cache"), project.getName(), Logger.getInstance(), GlobalSettings.getInstance().getServerConfig());
        this.propertiesComponent = PropertiesComponent.getInstance(project);
        this.projectBusConnection = project.getMessageBus().connect(this);
        this.appBusConnection = ApplicationManager.getApplication().getMessageBus().connect(this);
        this.project = project;
        registerOnChangeHandlers();
    }

    public static CiManager getInstance(@NotNull Project project) {
        return project.getService(CiManager.class);
    }

    public void asyncRefreshBuilds() {
        if (!scanPreconditionsMet()) {
            return;
        }
        Task.Backgroundable scanAndUpdateTask = new Task.Backgroundable(null, "Downloading builds information...") {
            @Override
            public void run(@NotNull com.intellij.openapi.progress.ProgressIndicator indicator) {
                try {
                    if (project.isDisposed()) {
                        return;
                    }
                    project.getMessageBus().syncPublisher(ApplicationEvents.ON_SCAN_CI_STARTED).update();
                    String buildsPattern = propertiesComponent.getValue(BUILDS_PATTERN_KEY);
                    buildCiTree(buildsPattern, GlobalSettings.getInstance().getServerConfig().getProject(),
                            new ProgressIndicatorImpl(indicator), () -> checkCanceled(indicator));
                    CiFilterManager.getInstance(project).collectBuildsInformation(root);
                    loadFirstBuild();
                    sendUsageReport();
                } catch (NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
                    logError(Logger.getInstance(), "Failed to refresh builds", e, true);
                } finally {
                    scanInProgress.set(false);
                }
            }
        };
        // The progress manager is only good for foreground threads.
        if (SwingUtilities.isEventDispatchThread()) {
            ProgressManager.getInstance().run(scanAndUpdateTask);
        } else {
            // Run the scan task when the thread is in the foreground.
            ApplicationManager.getApplication().invokeLater(() -> ProgressManager.getInstance().run(scanAndUpdateTask));
        }
    }

    /**
     * Check if "cancel" was clicked.
     *
     * @param indicator - The progress indicator
     * @throws CancellationException in case the scan process should be canceled.
     */
    private void checkCanceled(com.intellij.openapi.progress.ProgressIndicator indicator) throws CancellationException {
        try {
            indicator.checkCanceled();
        } catch (ProcessCanceledException ignored) {
            throw new CancellationException();
        }
    }

    /**
     * Load a build from the cache to the UI tree after selecting it in the builds selector.
     * To save RAM, we save only 1 build dependency tree simultaneously.
     *
     * @param buildGeneralInfo - The build general info
     */
    public void loadBuild(BuildGeneralInfo buildGeneralInfo) {
        CiComponentsTree componentsTree = CiComponentsTree.getInstance(project);
        componentsTree.reset();
        ProjectsMap.ProjectKey projectKey = null;
        if (buildGeneralInfo != null) {
            try {
                BuildDependencyTree buildTree = loadBuildTree(buildGeneralInfo);
                CiFilterManager.getInstance(project).collectsFiltersInformation(buildTree);
                componentsTree.addScanResults(project.getName(), buildTree);
                projectKey = ProjectsMap.createKey(project.getName(), buildTree.getGeneralInfo());
            } catch (IOException | ParseException | IllegalArgumentException e) {
                Logger.getInstance().error(String.format(LOAD_BUILD_FAIL_FMT, buildGeneralInfo.getBuildName(), buildGeneralInfo.getBuildNumber()), e);
            }
        }
        MessageBus projectMessageBus = project.getMessageBus();
        projectMessageBus.syncPublisher(ProjectEvents.ON_SCAN_CI_CHANGE).update(projectKey);
    }

    /**
     * Search the build general info in the root tree.
     *
     * @param buildIdentifier - <buildName>/<buildNumber>
     * @return the build general info or null
     */
    public BuildGeneralInfo getBuildGeneralInfo(String buildIdentifier) {
        String buildName = StringUtils.substringBeforeLast(buildIdentifier, "/");
        String buildNumber = StringUtils.substringAfterLast(buildIdentifier, "/");
        return (BuildGeneralInfo) root.getChildren().stream()
                .map(DependencyTree::getGeneralInfo)
                .map(generalInfo -> (BuildGeneralInfo) generalInfo)
                .filter(generalInfo -> StringUtils.equals(buildName, generalInfo.getBuildName()))
                .filter(generalInfo -> StringUtils.equals(buildNumber, generalInfo.getBuildNumber()))
                .findAny().orElse(null);
    }

    /**
     * Load first build. If no builds found, delete all currently displayed build information from the UI.
     */
    private void loadFirstBuild() {
        BuildGeneralInfo generalInfo = null;
        if (!root.isLeaf()) {
            BuildDependencyTree dependencyTree = (BuildDependencyTree) root.getFirstChild();
            generalInfo = (BuildGeneralInfo) dependencyTree.getGeneralInfo();
        }
        project.getMessageBus().syncPublisher(BuildEvents.ON_SELECTED_BUILD).update(generalInfo);
    }

    private boolean scanPreconditionsMet() {
        if (!GlobalSettings.getInstance().areArtifactoryCredentialsSet()) {
            Logger.getInstance().debug("CI integration disabled - Artifactory server is not configured.");
            return false;
        }
        if (StringUtils.isBlank(propertiesComponent.getValue(BUILDS_PATTERN_KEY))) {
            Logger.getInstance().debug("CI integration disabled - build name pattern is not set. " +
                    "Configure it under the JFrog CI Integration page in the configuration.");
            return false;
        }
        if (!scanInProgress.compareAndSet(false, true)) {
            Logger.getInstance().info("Builds scan is already in progress.");
            return false;
        }
        return true;
    }

    private void registerOnChangeHandlers() {
        appBusConnection.subscribe(ApplicationEvents.ON_CONFIGURATION_DETAILS_CHANGE, (ApplicationEvents) this::asyncRefreshBuilds);
        projectBusConnection.subscribe(ApplicationEvents.ON_BUILDS_CONFIGURATION_CHANGE, (ApplicationEvents) this::asyncRefreshBuilds);
        projectBusConnection.subscribe(BuildEvents.ON_SELECTED_BUILD, (BuildEvents) this::loadBuild);
    }

    @Override
    public void dispose() {
        // Disconnect and release resources from the project bus connection
        projectBusConnection.disconnect();
        // Disconnect and release resources from the application bus connection
        appBusConnection.disconnect();
    }

    private void sendUsageReport() {
        Utils.sendUsageReport("ci");
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/configuration/GlobalSettings.java
================================================
/*
 * SonarLint for IntelliJ IDEA
 * Copyright (C) 2015 SonarSource
 * sonarlint@sonarsource.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
 */
package com.jfrog.ide.idea.configuration;

import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.util.messages.MessageBus;
import com.intellij.util.xmlb.XmlSerializerUtil;
import com.jfrog.ide.idea.events.ApplicationEvents;
import com.jfrog.ide.idea.log.Logger;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;

/**
 * @author yahavi
 */
@Getter
@State(name = "GlobalSettings", storages = {@Storage("jfrogConfig.xml")})
public final class GlobalSettings implements PersistentStateComponent<GlobalSettings> {
    private ServerConfigImpl serverConfig;

    @SuppressWarnings("unused")
    GlobalSettings() {
        this.serverConfig = new ServerConfigImpl();
    }

    public static GlobalSettings getInstance() {
        return ApplicationManager.getApplication().getService(GlobalSettings.class);
    }

    /**
     * Produces the state object to persist to file.
     * If configuration loaded from environment-variables, don't persist connection details.
     * Object to persist has null username and password as Password-safe is used for credentials store.
     *
     * @return the state object to persist with clear credentials.
     */
    @Override
    public GlobalSettings getState() {
        ServerConfigImpl serverConfig = new ServerConfigImpl();
        serverConfig.setExcludedPaths(this.serverConfig.getExcludedPaths());
        serverConfig.setPolicyType(this.serverConfig.getPolicyType());
        serverConfig.setProject(this.serverConfig.getProject());
        serverConfig.setWatches(this.serverConfig.getWatches());
        serverConfig.setConnectionRetries(this.serverConfig.getConnectionRetries());
        serverConfig.setConnectionTimeout(this.serverConfig.getConnectionTimeout());
        serverConfig.setExternalResourcesRepo(this.serverConfig.getExternalResourcesRepo());
        serverConfig.setScannerBinaryVersion(this.serverConfig.getScannerBinaryVersion());

        GlobalSettings settings = new GlobalSettings();
        settings.serverConfig = serverConfig;
        settings.serverConfig.setPassword(null);
        settings.serverConfig.setUsername(null);
        settings.serverConfig.setUrl(this.serverConfig.getUrl());
        settings.serverConfig.setXrayUrl(this.serverConfig.getXrayUrl());
        settings.serverConfig.setArtifactoryUrl(this.serverConfig.getArtifactoryUrl());
        return settings;
    }

    @Override
    public void loadState(@NotNull GlobalSettings state) {
        XmlSerializerUtil.copyBean(state, this);
        serverConfig.readMissingConfFromEnv();
    }

    @Override
    public void noStateLoaded() {
        reloadMissingConfiguration();
    }

    /**
     * Method is called by Idea IS for reading the previously saved config file 'jfrogConfig.xml' from the disk.
     * Check if previous configurations contain credentials, perform migration if necessary.
     *
     * @param serverConfig - configurations read from file.
     */
    public void setServerConfig(@NotNull ServerConfigImpl serverConfig) {
        setCommonConfigFields(serverConfig);
        this.serverConfig.setCredentials(serverConfig.getCredentialsFromPasswordSafe());
    }

    /**
     * Update xray configurations with new values.
     *
     * @param serverConfig - the new configurations to update.
     */
    public void updateConfig(ServerConfigImpl serverConfig) {
        if (this.serverConfig.getUrl() != null && !this.serverConfig.getUrl().equals(serverConfig.getUrl())) {
            this.serverConfig.removeCredentialsFromPasswordSafe();
        }
        setCommonConfigFields(serverConfig);
        this.serverConfig.setUsername(serverConfig.getUsername());
        this.serverConfig.setPassword(serverConfig.getPassword());
        this.serverConfig.setAccessToken(serverConfig.getAccessToken());
        this.serverConfig.addCredentialsToPasswordSafe();

        MessageBus messageBus = ApplicationManager.getApplication().getMessageBus();
        messageBus.syncPublisher(ApplicationEvents.ON_CONFIGURATION_DETAILS_CHANGE).update();
    }

    public void setCommonConfigFields(ServerConfigImpl serverConfig) {
        this.serverConfig.setConnectionType(serverConfig.getConnectionType());
        this.serverConfig.setUrl(serverConfig.getUrl());
        this.serverConfig.setXrayUrl(serverConfig.getXrayUrl());
        this.serverConfig.setArtifactoryUrl(serverConfig.getArtifactoryUrl());
        this.serverConfig.setJFrogSettingsCredentialsKey(serverConfig.getJFrogSettingsCredentialsKey());
        setAdvancedSettings(serverConfig);
    }

    private void setAdvancedSettings(ServerConfigImpl serverConfig) {
        this.serverConfig.setExcludedPaths(serverConfig.getExcludedPaths());
        this.serverConfig.setConnectionRetries(serverConfig.getConnectionRetries());
        this.serverConfig.setConnectionTimeout(serverConfig.getConnectionTimeout());
        this.serverConfig.setExternalResourcesRepo(serverConfig.getExternalResourcesRepo());
        this.serverConfig.setScannerBinaryVersion(serverConfig.getScannerBinaryVersion());
        this.serverConfig.setPolicyType(serverConfig.getPolicyType());
        this.serverConfig.setProject(serverConfig.getProject());
        this.serverConfig.setWatches(serverConfig.getWatches());
    }

    /**
     * Reloads missing configuration from the plugin settings, environment variables or JFrog CLI configuration.
     *
     * @return true if credentials exist and Xray is configured, false otherwise.
     */
    public boolean reloadMissingConfiguration() {
        serverConfig.readMissingConfFromEnv();
        if (serverConfig.isXrayConfigured()) {
            return true;
        }
        serverConfig.readConnectionDetailsFromEnv();
        if (serverConfig.isXrayConfigured()) {
            return true;
        }
        loadConnectionDetailsFromJfrogCli();
        return serverConfig.isXrayConfigured();
    }

    public boolean areXrayCredentialsSet() {
        return serverConfig != null && serverConfig.isXrayConfigured();
    }

    public boolean areArtifactoryCredentialsSet() {
        return serverConfig != null && serverConfig.isArtifactoryConfigured();
    }

    /**
     * The plugin supports reading the JFrog connection details from JFrog CLI's configuration.
     * This allows developers who already have JFrog CLI installed and configured,
     * to have IDEA load the config automatically.
     */
    private void loadConnectionDetailsFromJfrogCli() {
        try {
            if (serverConfig.readConnectionDetailsFromJfrogCli()) {
                Logger.getInstance().info("Successfully loaded config connection details from JFrog CLI");
                MessageBus messageBus = ApplicationManager.getApplication().getMessageBus();
                messageBus.syncPublisher(ApplicationEvents.ON_CONFIGURATION_DETAILS_CHANGE).update();
                return;
            }
        } catch (IOException exception) {
            Logger.getInstance().warn(ExceptionUtils.getRootCauseMessage(exception));
        }
        Logger.getInstance().debug("Couldn't load config connection details from JFrog CLI");
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/configuration/ServerConfigImpl.java
================================================
/*
 * SonarLint for IntelliJ IDEA
 * Copyright (C) 2015 SonarSource
 * sonarlint@sonarsource.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
 */
package com.jfrog.ide.idea.configuration;

import com.intellij.credentialStore.Credentials;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.util.EnvironmentUtil;
import com.intellij.util.net.HttpConfigurable;
import com.intellij.util.net.ssl.CertificateManager;
import com.intellij.util.xmlb.annotations.OptionTag;
import com.intellij.util.xmlb.annotations.Tag;
import com.intellij.util.xmlb.annotations.Transient;
import com.jfrog.ide.common.configuration.JfrogCliDriver;
import com.jfrog.ide.common.configuration.JfrogCliServerConfig;
import com.jfrog.ide.common.configuration.ServerConfig;
import com.jfrog.ide.idea.ui.configuration.ConnectionRetriesSpinner;
import com.jfrog.ide.idea.ui.configuration.ConnectionTimeoutSpinner;
import org.apache.commons.collections4.CollectionUtils;
import org.jfrog.build.client.ProxyConfiguration;

import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;

import static com.jfrog.ide.idea.ui.configuration.ConfigVerificationUtils.DEFAULT_EXCLUSIONS;
import static com.jfrog.ide.idea.ui.configuration.Utils.*;
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
import static org.apache.commons.lang3.StringUtils.*;

/**
 * @author yahavi
 */
@Immutable
public class ServerConfigImpl implements ServerConfig {
    public enum ConnectionType {
        SSO, CONNECTION_DETAILS
    }

    private static final String JFROG_SETTINGS_CREDENTIALS_KEY = "credentials";
    public static final String JFROG_SETTINGS_KEY = "com.jfrog.idea";
    static final String PLATFORM_URL_ENV = "JFROG_IDE_PLATFORM_URL";
    static final String ARTIFACTORY_URL_ENV = "JFROG_IDE_ARTIFACTORY_URL";
    static final String XRAY_URL_ENV = "JFROG_IDE_XRAY_URL";
    static final String USERNAME_ENV = "JFROG_IDE_USERNAME";
    static final String PASSWORD_ENV = "JFROG_IDE_PASSWORD";
    static final String ACCESS_TOKEN_ENV = "JFROG_IDE_ACCESS_TOKEN";
    static final String PROJECT_ENV = "JFROG_IDE_PROJECT";
    public static final String EXTERNAL_RESOURCES_REPO_ENV = "JFROG_IDE_RELEASES_REPO";

    @OptionTag
    private ConnectionType connectionType;
    @OptionTag
    private String url;
    @OptionTag
    private String xrayUrl;
    @OptionTag
    private String artifactoryUrl;
    @OptionTag
    private String username;
    @Tag
    private String password;
    @Tag
    private String accessToken;
    @Tag
    private PolicyType policyType;
    // JFrog project key to be used as context to Xray scan.
    @OptionTag
    private String project;
    // A comma separated list of Xray watches to be used as context to Xray scan.
    @OptionTag
    private String watches;
    // Pattern of project paths to exclude from Xray scanning for npm
    @Tag
    private String excludedPaths;
    @Tag
    private Integer connectionRetries;
    @Tag
    private Integer connectionTimeout;
    @Tag
    private String externalResourcesRepo;
    @Tag
    private String scannerBinaryVersion;
    // The subsystem key of the plugin configuration in the PasswordSafe
    @Transient
    private String jfrogSettingsCredentialsKey = JFROG_SETTINGS_KEY;

    ServerConfigImpl() {
    }

    ServerConfigImpl(Builder builder) {
        this.connectionType = builder.connectionType;
        this.url = builder.url;
        this.xrayUrl = builder.xrayUrl;
        this.artifactoryUrl = builder.artifactoryUrl;
        this.username = builder.username;
        this.password = builder.password;
        this.accessToken = builder.accessToken;
        this.policyType = builder.policyType;
        this.project = builder.project;
        this.watches = builder.watches;
        this.excludedPaths = builder.excludedPaths;
        this.connectionRetries = builder.connectionRetries;
        this.connectionTimeout = builder.connectionTimeout;
        this.externalResourcesRepo = builder.externalResourcesRepo;
        this.scannerBinaryVersion = builder.scannerBinaryVersion;
        this.jfrogSettingsCredentialsKey = builder.jfrogSettingsCredentialsKey;
    }

    public boolean isXrayConfigured() {
        return !isAllBlank(url, xrayUrl) && isAuthenticationConfigured();
    }

    public boolean isArtifactoryConfigured() {
        return !isAllBlank(url, xrayUrl) && isAuthenticationConfigured();
    }

    private boolean isAuthenticationConfigured() {
        return isNoneBlank(username, password) || isNotBlank(accessToken);
    }

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof ServerConfigImpl)) {
            return false;
        }
        ServerConfigImpl other = (ServerConfigImpl) o;

        return Objects.equals(getConnectionType(), other.getConnectionType()) &&
                Objects.equals(getUrl(), other.getUrl()) &&
                Objects.equals(getXrayUrl(), other.getXrayUrl()) &&
                Objects.equals(getArtifactoryUrl(), other.getArtifactoryUrl()) &&
                Objects.equals(getPassword(), other.getPassword()) &&
                Objects.equals(getUsername(), other.getUsername()) &&
                Objects.equals(getAccessToken(), other.getAccessToken()) &&
                Objects.equals(getPolicyType(), other.getPolicyType()) &&
                Objects.equals(getProject(), other.getProject()) &&
                Objects.equals(getWatches(), other.getWatches()) &&
                Objects.equals(getExcludedPaths(), other.getExcludedPaths()) &&
                getConnectionRetries() == other.getConnectionRetries() &&
                getConnectionTimeout() == other.getConnectionTimeout() &&
                Objects.equals(getExternalResourcesRepo(), other.getExternalResourcesRepo()) &&
                Objects.equals(getScannerBinaryVersion(), other.getScannerBinaryVersion());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getConnectionType(), getUrl(), getXrayUrl(), getArtifactoryUrl(), getPassword(), getAccessToken(),
                getUsername(), getProject(), getExcludedPaths(), getConnectionRetries(), getConnectionTimeout(), getExternalResourcesRepo(), getScannerBinaryVersion());
    }

    @Override
    public String getUsername() {
        return trimToEmpty(username);
    }

    @Override
    public String getUrl() {
        return trimToEmpty(url);
    }

    @Override
    public String getXrayUrl() {
        return trimToEmpty(xrayUrl);
    }

    @Override
    public String getArtifactoryUrl() {
        return trimToEmpty(artifactoryUrl);
    }

    @Override
    @CheckForNull
    public String getPassword() {
        return password;
    }

    @Override
    public String getAccessToken() {
        return accessToken;
    }

    public void setConnectionType(ConnectionType connectionType) {
        this.connectionType = connectionType;
    }

    public ConnectionType getConnectionType() {
        return connectionType;
    }

    public Credentials getCredentialsFromPasswordSafe() {
        return retrieveCredentialsFromPasswordSafe(jfrogSettingsCredentialsKey, JFROG_SETTINGS_CREDENTIALS_KEY);
    }

    public void addCredentialsToPasswordSafe() {
        // jfrog-ignore
        String password = isNotBlank(accessToken) ? getAccessToken() : getPassword();
        Credentials credentials = new Credentials(getUsername(), password);
        storeCredentialsInPasswordSafe(jfrogSettingsCredentialsKey, JFROG_SETTINGS_CREDENTIALS_KEY, credentials);
    }

    public void removeCredentialsFromPasswordSafe() {
        removeCredentialsInPasswordSafe(jfrogSettingsCredentialsKey, JFROG_SETTINGS_CREDENTIALS_KEY);
    }

    @Override
    public boolean isInsecureTls() {
        return CertificateManager.getInstance().getState().ACCEPT_AUTOMATICALLY;
    }

    public String getExcludedPaths() {
        return defaultIfNull(this.excludedPaths, DEFAULT_EXCLUSIONS);
    }

    @Override
    public PolicyType getPolicyType() {
        return this.policyType;
    }

    @Override
    public String getProject() {
        return trimToEmpty(this.project);
    }

    @Override
    public String getWatches() {
        return trimToEmpty(this.watches);
    }

    @Override
    public SSLContext getSslContext() {
        return CertificateManager.getInstance().getSslContext();
    }

    @Override
    public int getConnectionRetries() {
        return defaultIfNull(this.connectionRetries, ConnectionRetriesSpinner.RANGE.initial);
    }

    @Override
    public int getConnectionTimeout() {
        return defaultIfNull(this.connectionTimeout, ConnectionTimeoutSpinner.RANGE.initial);
    }

    @Override
    public String getExternalResourcesRepo() {
        return this.externalResourcesRepo;
    }

    public String getJFrogSettingsCredentialsKey() {
        return this.jfrogSettingsCredentialsKey;
    }

    void setExcludedPaths(String excludedPaths) {
        this.excludedPaths = excludedPaths;
    }

    void setPolicyType(PolicyType policyType) {
        this.policyType = policyType;
    }

    void setProject(String project) {
        this.project = project;
    }

    void setWatches(String watches) {
        this.watches = watches;
    }

    /**
     * Get proxy configuration as configured under 'Appearance & Behavior' -> 'System Settings' -> 'HTTP Proxy'
     *
     * @param targetUrl - The target URL. The URL is necessary to determine whether to bypass proxy or to pick the relevant
     *                  proxy configuration for the target URL as configured in *.pac file.
     * @return the proxy configuration as configured in IDEA settings.
     */
    @Override
    public ProxyConfiguration getProxyConfForTargetUrl(String targetUrl) {
        HttpConfigurable httpConfigurable = HttpConfigurable.getInstance();
        if (httpConfigurable.USE_PROXY_PAC) {
            // 'Auto-detect proxy settings' option is selected
            return getProxyConfForTargetUrlUsingPac(httpConfigurable, targetUrl);
        }
        if (httpConfigurable.isHttpProxyEnabledForUrl(targetUrl)) {
            // 'Manual proxy configuration' option is selected
            return getProxyConfForTargetUrlUsingManualConf(httpConfigurable);
        }
        // 'No proxy' option is selected
        return null;
    }

    /**
     * Read Proxy config from proxy auto-configuration (PAC) file.
     *
     * @param httpConfigurable - Intellij HTTP details
     * @param xrayUrl          - The Xray URL
     * @return Proxy config
     */
    private ProxyConfiguration getProxyConfForTargetUrlUsingPac(HttpConfigurable httpConfigurable, String xrayUrl) {
        URI xrayUri = VfsUtil.toUri(xrayUrl);
        if (xrayUri == null) {
            // Proxy URL is illegal
            return null;
        }

        List<Proxy> proxies = httpConfigurable.getOnlyBySettingsSelector().select(xrayUri);
        if (CollectionUtils.isEmpty(proxies)) {
            // No proxy found for Xray URL
            return null;
        }
        // Currently only 1 proxy is supported
        Proxy firstProxy = proxies.get(0);
        if (firstProxy.type().equals(Proxy.Type.DIRECT)) {
            // Xray URL is configured with "no proxy"
            return null;
        }
        InetSocketAddress inetSocketAddress = (InetSocketAddress) firstProxy.address();
        ProxyConfiguration proxyConfig = new ProxyConfiguration();
        proxyConfig.host = inetSocketAddress.getHostString();
        proxyConfig.port = inetSocketAddress.getPort();
        if (httpConfigurable.isGenericPasswordCanceled(proxyConfig.host, proxyConfig.port)) {
            // Authentication is disabled
            return proxyConfig;
        }
        PasswordAuthentication passwordAuthentication = httpConfigurable.getGenericPassword(proxyConfig.host, proxyConfig.port);
        if (passwordAuthentication != null) {
            proxyConfig.username = passwordAuthentication.getUserName();
            proxyConfig.password = String.valueOf(passwordAuthentication.getPassword());
        }
        return proxyConfig;
    }

    /**
     * Read Proxy config using manual proxy configuration.
     *
     * @param httpConfigurable - Intellij HTTP details
     * @return Proxy config
     */
    private ProxyConfiguration getProxyConfForTargetUrlUsingManualConf(HttpConfigurable httpConfigurable) {
        ProxyConfiguration proxyConfig = new ProxyConfiguration();
        proxyConfig.host = trimToEmpty(httpConfigurable.PROXY_HOST);
        proxyConfig.port = httpConfigurable.PROXY_PORT;
        if (httpConfigurable.PROXY_AUTHENTICATION) {
            proxyConfig.username = trimToEmpty(httpConfigurable.getProxyLogin());
            proxyConfig.password = httpConfigurable.getPlainProxyPassword();
        }
        return proxyConfig;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public void setXrayUrl(String xrayUrl) {
        this.xrayUrl = xrayUrl;
    }

    public void setArtifactoryUrl(String artifactoryUrl) {
        this.artifactoryUrl = artifactoryUrl;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setAccessToken(String accessToken) {
        // jfrog-ignore
        this.accessToken = accessToken;
    }

    void setCredentials(Credentials credentials) {
        if (credentials == null) {
            return;
        }
        if (isNotBlank(credentials.getUserName())) {
            setUsername(credentials.getUserName());
            setPassword(credentials.getPasswordAsString());
        } else {
            setAccessToken(credentials.getPasswordAsString());
        }
    }

    void setConnectionRetries(int connectionRetries) {
        this.connectionRetries = connectionRetries;
    }

    void setConnectionTimeout(int connectionTimeout) {
        this.connectionTimeout = connectionTimeout;
    }

    void setExternalResourcesRepo(String externalResourcesRepo) {
        this.externalResourcesRepo = externalResourcesRepo;
    }

    public String getScannerBinaryVersion() {
        return this.scannerBinaryVersion;
    }

    void setScannerBinaryVersion(String scannerBinaryVersion) {
        this.scannerBinaryVersion = scannerBinaryVersion;
    }

    public void setJFrogSettingsCredentialsKey(String jfrogSettingsCredentialsKey) {
        this.jfrogSettingsCredentialsKey = jfrogSettingsCredentialsKey;
    }

    /**
     * Read connection details from environment variables.
     * All connection details must be provided from env, otherwise don't use them.
     */
    public void readConnectionDetailsFromEnv() {
        String platformUrlEnv = EnvironmentUtil.getValue(PLATFORM_URL_ENV);
        String xrayUrlEnv = EnvironmentUtil.getValue(XRAY_URL_ENV);
        String artifactoryUrlEnv = EnvironmentUtil.getValue(ARTIFACTORY_URL_ENV);
        String usernameEnv = EnvironmentUtil.getValue(USERNAME_ENV);
        String passwordEnv = EnvironmentUtil.getValue(PASSWORD_ENV);
        String accessTokenEnv = EnvironmentUtil.getValue(ACCESS_TOKEN_ENV);
        String projectEnv = EnvironmentUtil.getValue(PROJECT_ENV);
        if (isAnyBlank(usernameEnv, passwordEnv) || isAllBlank(platformUrlEnv, xrayUrlEnv, artifactoryUrlEnv)) {
            setUrl("");
            setXrayUrl("");
            setArtifactoryUrl("");
            setUsername("");
            setPassword("");
            setAccessToken("");
            return;
        }

        setUrl(platformUrlEnv);
        String platformUrlStr = removeEnd(platformUrlEnv, "/");
        if (isBlank(xrayUrlEnv)) {
            setXrayUrl(platformUrlStr + "/xray");
        } else {
            setXrayUrl(xrayUrlEnv);
        }
        if (isBlank(artifactoryUrlEnv)) {
            setArtifactoryUrl(platformUrlStr + "/artifactory");
        } else {
            setArtifactoryUrl(artifactoryUrlEnv);
        }
        if (isNotBlank(projectEnv)) {
            setProject(projectEnv);
        }
        if (isNotBlank(accessTokenEnv)) {
            setAccessToken(accessTokenEnv);
        } else {
            setUsername(usernameEnv);
            setPassword(passwordEnv);
        }
    }

    /**
     * Read missing configuration from environment variables.
     */
    public void readMissingConfFromEnv() {
        if (isBlank(getExternalResourcesRepo())) {
            setExternalResourcesRepo(EnvironmentUtil.getValue(EXTERNAL_RESOURCES_REPO_ENV));
        }
    }

    /**
     * Read the connection details from JFrog CLI's config. The configuration is read by executing JFrog CLI.
     * If no JFrog CLI server configuration was found or the config
     * file is encrypt, do nothing.
     *
     * @return true if connection details loaded from JFrog CLI default server.
     */
    public boolean readConnectionDetailsFromJfrogCli() throws IOException {
        JfrogCliDriver driver = new JfrogCliDriver(new HashMap<>(EnvironmentUtil.getEnvironmentMap()), null);
        if (!driver.isJfrogCliInstalled()) {
            return false;
        }
        JfrogCliServerConfig cliServerConfig = driver.getServerConfig();
        String platformUrlCli = cliServerConfig.getUrl();
        String xrayUrlCli = cliServerConfig.getXrayUrl();
        String artifactoryUrlCli = cliServerConfig.getArtifactoryUrl();
        String usernameCli = cliServerConfig.getUsername();
        // jfrog-ignore
        String passwordCli = cliServerConfig.getPassword();
        // jfrog-ignore
        String accessToken = cliServerConfig.getAccessToken();

        if ((isAnyBlank(usernameCli, passwordCli) && isBlank(accessToken)) || isAnyBlank(platformUrlCli, xrayUrlCli, artifactoryUrlCli)) {
            return false;
        }
        setUrl(platformUrlCli);
        setXrayUrl(xrayUrlCli);
        setArtifactoryUrl(artifactoryUrlCli);
        setUsername(usernameCli);
        setPassword(passwordCli);
        setAccessToken(accessToken);
        return true;
    }

    @Override
    public String toString() {
        return url;
    }

    public static class Builder {
        private ConnectionType connectionType;
        private String jfrogSettingsCredentialsKey = JFROG_SETTINGS_KEY;
        private String url;
        private String xrayUrl;
        private String artifactoryUrl;
        private String username;
        private String password;
        private String accessToken;
        private String excludedPaths;
        private PolicyType policyType;
        private String project;
        private String watches;
        private int connectionRetries;
        private int connectionTimeout;
        private String externalResourcesRepo;
        private String scannerBinaryVersion;

        public ServerConfigImpl build() {
            return new ServerConfigImpl(this);
        }

        public Builder setConnectionType(ConnectionType connectionType) {
            this.connectionType = connectionType;
            return this;
        }

        public Builder setUrl(String url) {
            this.url = url;
            return this;
        }

        public Builder setXrayUrl(String xrayUrl) {
            this.xrayUrl = xrayUrl;
            return this;
        }

        public Builder setArtifactoryUrl(String artifactoryUrl) {
            this.artifactoryUrl = artifactoryUrl;
            return this;
        }

        public Builder setUsername(@Nullable String username) {
            this.username = username;
            return this;
        }

        public Builder setPassword(@Nullable String password) {
            // jfrog-ignore
            this.password = defaultString(password);
            return this;
        }

        public Builder setAccessToken(@Nullable String accessToken) {
            // jfrog-ignore
            this.accessToken = accessToken;
            return this;
        }

        public Builder setExcludedPaths(@Nullable String excludedPaths) {
            this.excludedPaths = excludedPaths;
            return this;
        }

        public Builder setPolicyType(PolicyType policyType) {
            this.policyType = policyType;
            return this;
        }

        public Builder setProject(@Nullable String project) {
            this.project = project;
            return this;
        }

        public Builder setWatches(@Nullable String watches) {
            this.watches = watches;
            return this;
        }

        public Builder setConnectionRetries(int connectionRetries) {
            this.connectionRetries = connectionRetries;
            return this;
        }

        public Builder setConnectionTimeout(int connectionTimeout) {
            this.connectionTimeout = connectionTimeout;
            return this;
        }

        public Builder setExternalResourcesRepo(String externalResourcesRepo) {
            this.externalResourcesRepo = externalResourcesRepo;
            return this;
        }

        public Builder setScannerBinaryVersion(String scannerBinaryVersion) {
            this.scannerBinaryVersion = scannerBinaryVersion;
            return this;
        }

        public Builder setJFrogSettingsCredentialsKey(String jfrogSettingsCredentialsKey) {
            this.jfrogSettingsCredentialsKey = jfrogSettingsCredentialsKey;
            return this;
        }
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/events/AnnotationEvents.java
================================================
package com.jfrog.ide.idea.events;

import com.intellij.util.messages.Topic;

public interface AnnotationEvents {
    // Results expiry
    Topic<AnnotationEvents> ON_IRRELEVANT_RESULT = Topic.create("Source code changed", AnnotationEvents.class);

    /**
     * Called when the selected file is modified.
     */
    void update(String filePath);
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/events/ApplicationEvents.java
================================================
package com.jfrog.ide.idea.events;

import com.intellij.util.messages.Topic;

/**
 * Application based events.
 * <p>
 * Created by romang on 3/5/17.
 */
public interface ApplicationEvents {
    // Scan started
    Topic<ApplicationEvents> ON_SCAN_LOCAL_STARTED = Topic.create("Local scan started", ApplicationEvents.class);
    Topic<ApplicationEvents> ON_SCAN_LOCAL_CANCELED = Topic.create("Local scan canceled", ApplicationEvents.class);
    Topic<ApplicationEvents> ON_SCAN_CI_STARTED = Topic.create("CI scan started", ApplicationEvents.class);

    // Configuration changed
    Topic<ApplicationEvents> ON_CONFIGURATION_DETAILS_CHANGE = Topic.create("Configuration details changed", ApplicationEvents.class);
    Topic<ApplicationEvents> ON_BUILDS_CONFIGURATION_CHANGE = Topic.create("Builds configuration changed", ApplicationEvents.class);

    // Filter changed
    Topic<ApplicationEvents> ON_CI_FILTER_CHANGE = Topic.create("CI issues changed", ApplicationEvents.class);

    /**
     * Called when a scan started, a configuration changed or a filter changed.
     */
    void update();

}


================================================
FILE: src/main/java/com/jfrog/ide/idea/events/BuildEvents.java
================================================
package com.jfrog.ide.idea.events;

import com.intellij.util.messages.Topic;
import com.jfrog.ide.common.ci.BuildGeneralInfo;

/**
 * Project based events.
 *
 * @author yahavi
 */
public interface BuildEvents {
    Topic<BuildEvents> ON_SELECTED_BUILD = Topic.create("Build selected", BuildEvents.class);

    /**
     * Called when the selected build is modified.
     */
    void update(BuildGeneralInfo generalInfo);
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/events/ProjectEvents.java
================================================
package com.jfrog.ide.idea.events;

import com.intellij.util.messages.Topic;
import com.jfrog.ide.common.utils.ProjectsMap;

/**
 * Project based events.
 *
 * @author yahavi
 */
public interface ProjectEvents {
    Topic<ProjectEvents> ON_SCAN_CI_CHANGE = Topic.create("CI changed", ProjectEvents.class);

    /**
     * Called when the store of issues in changed files is modified. It is modified only as a result of a user action to analyse all changed files.
     */
    void update(ProjectsMap.ProjectKey projectKey);
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/exclusion/Excludable.java
================================================
package com.jfrog.ide.idea.exclusion;

import com.intellij.openapi.project.Project;

/**
 * Created by Bar Belity on 28/05/2020.
 */
public interface Excludable {

    /**
     * Exclude from project-descriptor.
     */
    void exclude(Project project);

}


================================================
FILE: src/main/java/com/jfrog/ide/idea/exclusion/ExclusionUtils.java
================================================
package com.jfrog.ide.idea.exclusion;

import com.jfrog.ide.idea.navigation.NavigationTarget;
import org.jfrog.build.extractor.scan.DependencyTree;

/**
 * Created by Bar Belity on 28/05/2020.
 */
public class ExclusionUtils {

    /**
     * Check if a specific node from the Dependencies-tree can be excluded from project-descriptor.
     *
     * @param nodeToExclude - The node in tree to exclude.
     * @param affectedNode  - Direct dependency's node in tree which will be affected by the exclusion.
     * @return true if the provided nodeToExclude can be excluded from project-descriptor.
     */
    public static boolean isExcludable(DependencyTree nodeToExclude, DependencyTree affectedNode) {
        return MavenExclusion.isExcludable(nodeToExclude, affectedNode);
    }

    /**
     * Get the corresponding Excludable object for the node to exclude.
     *
     * @param nodeToExclude    - The node in tree to exclude.
     * @param navigationTarget - The navigation-target of the node to exclude.
     * @return the corresponding Excludable object, Null if exclusion is not supported for this node.
     */
    public static Excludable getExcludable(DependencyTree nodeToExclude, DependencyTree affectedNode, NavigationTarget navigationTarget) {
        if (MavenExclusion.isExcludable(nodeToExclude, affectedNode)) {
            return new MavenExclusion(nodeToExclude, navigationTarget);
        }
        return null;
    }

    /**
     * Find node's root project node.
     * In single project tree - the root's parent is null.
     * In multi project tree - the root-parent's general info is null.
     * @param node - DependencyTree node to find its project's root.
     * @return the project root node.
     */
    public static DependencyTree getProjectRoot(DependencyTree node) {
        if (node == null) {
            return null;
        }
        while (node.getParent() != null && ((DependencyTree) node.getParent()).getGeneralInfo() != null) {
            node = (DependencyTree) node.getParent();
        }
        return node;
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/exclusion/MavenExclusion.java
================================================
package com.jfrog.ide.idea.exclusion;

import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.jfrog.ide.idea.inspections.MavenInspection;
import com.jfrog.ide.idea.navigation.NavigationTarget;
import org.jfrog.build.extractor.scan.DependencyTree;

/**
 * Created by Bar Belity on 28/05/2020.
 */
public class MavenExclusion implements Excludable {

    public static final String MAVEN_EXCLUSIONS_TAG = "exclusions";
    public static final String MAVEN_EXCLUSION_TAG = "exclusion";
    private final DependencyTree nodeToExclude;
    private final NavigationTarget navigationTarget;

    public MavenExclusion(DependencyTree nodeToExclude, NavigationTarget navigationTarget) {
        this.nodeToExclude = nodeToExclude;
        this.navigationTarget = navigationTarget;
    }

    /**
     * Walk up the dependencies-tree to validate that the project's root is of type 'Maven'.
     * This is required as dependency nodes in 'Gradle' projects are also of type 'Maven', and dependency nodes
     * can have type 'null'.
     * @param nodeToExclude - The node in tree to exclude.
     * @param affectedNode - Direct dependency's node in tree which will be affected by the exclusion.
     * @return true if nodeToExclude is a valid Maven node which can be excluded.
     */
    public static boolean isExcludable(DependencyTree nodeToExclude, DependencyTree affectedNode) {
        if (nodeToExclude == null || nodeToExclude.equals(affectedNode)) {
             return false;
        }
        return isMavenPackageType(ExclusionUtils.getProjectRoot(nodeToExclude));
    }

    public static boolean isMavenPackageType(DependencyTree node) {
        return node != null && node.getGeneralInfo() != null && "maven".equals(node.getGeneralInfo().getPkgType());
    }

    @Override
    public void exclude(Project project) {
        PsiFile psiFile = PsiManager.getInstance(project).findFile(navigationTarget.getElement().getContainingFile().getVirtualFile());
        if (!(psiFile instanceof XmlFile)) {
            return;
        }
        XmlFile file = (XmlFile) psiFile;

        WriteCommandAction.writeCommandAction(project, file).run(() -> {
            String groupId = nodeToExclude.getGeneralInfo().getGroupId();
            String artifactId = nodeToExclude.getGeneralInfo().getArtifactId();
            if (!(navigationTarget.getElement() instanceof XmlTag)) {
                return;
            }
            XmlTag xmlElement = (XmlTag) navigationTarget.getElement();
            navigateToElement(xmlElement);
            XmlTag exclusionsTag = xmlElement.findFirstSubTag(MAVEN_EXCLUSIONS_TAG);
            if (exclusionsTag == null) {
                exclusionsTag = xmlElement.createChildTag(MAVEN_EXCLUSIONS_TAG, "", "", false);
                createAndAddExclusionTags(exclusionsTag, groupId, artifactId);
                xmlElement.addSubTag(exclusionsTag, false);
                return;
            }

            XmlTag[] allExclusions = exclusionsTag.findSubTags(MAVEN_EXCLUSION_TAG);
            if (exclusionExists(allExclusions, groupId, artifactId)) {
                // Don't create exclusion tag.
                return;
            }
            createAndAddExclusionTags(exclusionsTag, groupId, artifactId);
        });
    }

    boolean exclusionExists(XmlTag[] allExclusions, String groupId, String artifactId) {
        for (XmlTag exclusionTag : allExclusions) {
            XmlTag groupIdTag = exclusionTag.findFirstSubTag(MavenInspection.MAVEN_GROUP_ID_TAG);
            if (groupIdTag == null || !groupId.equals(groupIdTag.getValue().getText())) {
                continue;
            }
            XmlTag artifactIdTag = exclusionTag.findFirstSubTag(MavenInspection.MAVEN_ARTIFACT_ID_TAG);
            if (artifactIdTag != null && artifactId.equals(artifactIdTag.getValue().getText())) {
                return true;
            }
        }
        return false;
    }

    void createAndAddExclusionTags(XmlTag exclusionsTag, String groupId, String artifactId) {
        XmlTag exclusionTag = exclusionsTag.createChildTag(MAVEN_EXCLUSION_TAG, "", "", false);
        XmlTag groupIdTag = exclusionTag.createChildTag(MavenInspection.MAVEN_GROUP_ID_TAG, "", groupId, false);
        XmlTag artifactIdTag = exclusionTag.createChildTag(MavenInspection.MAVEN_ARTIFACT_ID_TAG, "", artifactId, false);
        exclusionTag.addSubTag(groupIdTag, true);
        exclusionTag.addSubTag(artifactIdTag, false);
        exclusionsTag.addSubTag(exclusionTag, false);
    }

    private void navigateToElement(XmlTag xmlElement) {
        PsiElement navigationTarget = xmlElement.getNavigationElement();
        if (!(navigationTarget instanceof Navigatable)) {
            return;
        }
        Navigatable navigatable = (Navigatable) navigationTarget;
        if (navigatable.canNavigate()) {
            navigatable.navigate(true);
        }
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/AbstractInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.Annotator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.PsiElement;
import com.jfrog.ide.common.nodes.DependencyNode;
import com.jfrog.ide.common.nodes.DescriptorFileTreeNode;
import com.jfrog.ide.common.nodes.SortableChildrenTreeNode;
import com.jfrog.ide.common.nodes.VulnerabilityNode;
import com.jfrog.ide.common.nodes.subentities.ImpactTree;
import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.navigation.NavigationService;
import com.jfrog.ide.idea.scan.ScannerBase;
import com.jfrog.ide.idea.ui.ComponentsTree;
import com.jfrog.ide.idea.ui.LocalComponentsTree;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;

import javax.swing.tree.TreeNode;
import java.util.*;
import java.util.stream.Collectors;

/**
 * Parent class of all inspections and annotations.
 * The inspections are the "Show in JFrog plugin" action.
 * The annotations are the "Top issue" and "Licenses" labels.
 *
 * @author yahavi
 */
public abstract class AbstractInspection extends LocalInspectionTool implements Annotator {

    private final String packageDescriptorName;
    // True if the code inspection was automatically triggered after an Xray scan using InspectionEngine.runInspectionOnFile(...).
    private boolean afterScan;

    AbstractInspection(Descriptor descriptor) {
        this.packageDescriptorName = descriptor.getFileName();
    }

    public void setAfterScan(boolean afterScan) {
        this.afterScan = afterScan;
    }

    /**
     * Get Psi element and decide whether to add "Show in JFrog plugin" option, and register a corresponding
     * navigation from item in tree to item in project-descriptor.
     *
     * @param problemsHolder - The "Show in JFrog plugin" option will be registered in this container.
     * @param element        - The Psi element in the package descriptor
     * @param isOnTheFly     - True if the inspection was triggered by opening a package descriptor file.
     *                       False if the inspection was triggered manually by clicking on "Code | Inspect Code".
     */
    void visitElement(ProblemsHolder problemsHolder, PsiElement element, boolean isOnTheFly) {
        if (!afterScan && !isOnTheFly) {
            // Code inspection was triggered manually by clicking on "Code | Inspect Code".
            return;
        }
        String componentName = createComponentName(element);
        if (StringUtils.isBlank(componentName)) {
            return; // Failed creating the component name
        }
        List<DependencyNode> dependencies = getDependencies(element, componentName);
        if (CollectionUtils.isEmpty(dependencies)) {
            return;
        }
        NavigationService navigationService = NavigationService.getInstance(element.getProject());
        for (DependencyNode dependency : dependencies) {
            if (isOnTheFly) {
                registerProblem(problemsHolder, dependency, element, componentName);
            }
            navigationService.addNavigation(dependency, element, componentName);
        }
    }

    /**
     * Get Psi element and decide whether to add licenses and top issue annotations.
     *
     * @param annotationHolder - The annotations will be registered in this container
     * @param element          - The Psi element in the package descriptor
     */
    void visitElement(AnnotationHolder annotationHolder, PsiElement element) {
        String componentName = createComponentName(element);
        if (componentName == null) {
            return; // Failed creating the component name
        }
        List<DependencyNode> dependencies = getDependencies(element, componentName);
        if (CollectionUtils.isNotEmpty(dependencies)) {
            AnnotationUtils.registerAnnotation(annotationHolder, dependencies.get(0), element, showAnnotationIcon(element));
        }
    }

    /**
     * Get the relevant scan manager according to the project type and path.
     *
     * @param project - The Project
     * @param path    - Path to project
     * @return ScanManager
     */
    abstract ScannerBase getScanner(Project project, String path);

    /**
     * Return true if and only if the Psi element is a dependency.
     *
     * @param element - The Psi element in the package descriptor.
     * @return true if and only if the Psi element is a dependency
     */
    abstract boolean isDependency(PsiElement element);

    /**
     * Create a component name from the Psi element. Called when isDependency(element) == true.
     *
     * @param element - The Psi element in the package descriptor
     * @return GeneralInfo
     */
    abstract String createComponentName(PsiElement element);

    /**
     * Get the file descriptors nodes that containing the dependency in the Psi element.
     *
     * @param element - The Psi element in the package descriptor
     * @return Set of file nodes containing the dependency or null if not found
     */
    Set<DescriptorFileTreeNode> getFileDescriptors(PsiElement element) {
        Project project = element.getProject();
        ComponentsTree componentsTree = LocalComponentsTree.getInstance(project);
        if (componentsTree == null || componentsTree.getModel() == null) {
            return null;
        }
        Set<DescriptorFileTreeNode> fileDescriptors = new HashSet<>();
        Enumeration<TreeNode> roots = ((SortableChildrenTreeNode) componentsTree.getModel().getRoot()).children();
        for (TreeNode root : Collections.list(roots)) {
            if (root instanceof DescriptorFileTreeNode fileNode) {
                if (fileNode.getFilePath().equals(element.getContainingFile().getVirtualFile().getPath())) {
                    fileDescriptors.add(fileNode);
                }
            }
        }
        return fileDescriptors;

    }

    /**
     * Override this method to determine whether to display multiple annotation icons in the same line.
     *
     * @param element - The Psi element in the package descriptor
     * @return true if it should show annotation icon.
     */
    boolean showAnnotationIcon(PsiElement element) {
        return true;
    }

    /**
     * Determine whether to apply the inspection on the Psi element.
     *
     * @param element - The Psi element in the package descriptor
     * @return true if and only if the element is a dependency and the plugin is ready to show inspection for it
     */
    boolean isShowInspection(PsiElement element) {
        Project project = element.getProject();

        ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow("JFrog");
        if (toolWindow == null) {
            return false; // Tool window not yet activated
        }

        VirtualFile editorFile = element.getContainingFile().getVirtualFile();
        if (editorFile == null || editorFile.getParent() == null || !editorFile.getPath().endsWith(packageDescriptorName)) {
            return false; // File is not a package descriptor file
        }


        ScannerBase scanner = getScanner(project, editorFile.getParent().getPath());
        if (scanner == null) {
            return false; // Scan manager for this project not yet created
        }
        return isDependency(element);
    }

    /**
     * Get all dependencies in the tree that relevant to the element.
     *
     * @param element - The Psi element in the package descriptor
     * @return all dependencies in the dependency tree that relevant to the element
     */
    List<DependencyNode> getDependencies(PsiElement element, String componentName) {
        if (!isShowInspection(element)) {
            return null; // Inspection is not needed for this element
        }
        Set<DescriptorFileTreeNode> filesNodes = getFileDescriptors(element);
        if (filesNodes == null) {
            return null; // No files descriptors found for this element
        }
        return filesNodes.stream()
                .map(descriptorFile -> getMatchDependencies(descriptorFile, componentName))
                .flatMap(Collection::stream)
                .collect(Collectors.toList());
    }

    /**
     * Get the dependencies that match to the input componentName.
     *
     * @param file          - The Descriptor file node in the tree
     * @param componentName - Component name representing a dependency without version
     * @return the dependencies node that match to the input general info
     */
    private List<DependencyNode> getMatchDependencies(DescriptorFileTreeNode file, String componentName) {
        List<DependencyNode> dependencies = new ArrayList<>();
        for (DependencyNode dependency : file.getDependencies()) {
            if (isNodeMatch(dependency, componentName)) {
                dependencies.add(dependency);
            }
        }
        return dependencies;
    }

    /**
     * Compare the component name from the Psi element and the dependency node from the Dependency tree.
     *
     * @param node          - the dependency node from the dependency tree
     * @param componentName - Component name representing a dependency without version
     * @return true if the node matches the component name
     */
    boolean isNodeMatch(DependencyNode node, String componentName) {
        String artifactID = node.getComponentIdWithoutPrefix();
        ImpactTree impactTree = node.getImpactTree();
        String versionPrefix = ":";
        return StringUtils.equals(extractArtifactIdWithoutVersion(artifactID), componentName) || impactTree.contains(componentName+versionPrefix);
    }

    abstract UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issues, String descriptorPath);

    void registerProblem(ProblemsHolder problemsHolder, DependencyNode dependency, PsiElement element, String componentName) {
        boolean isTransitive = dependency.isIndirect() || !StringUtils.contains(dependency.getTitle(), componentName);
        String dependencyDescription = getDependencyDescription(dependency.getTitle(), isTransitive);
        List<LocalQuickFix> quickFixes = new ArrayList<>();
        quickFixes.add(new ShowInDependencyTree(dependency, dependencyDescription));

        if (!isTransitive) {
            Multimap<String, String> fixVersionToCves = ArrayListMultimap.create();
            dependency.children().asIterator().forEachRemaining(issueNode -> {
                List<String> fixVersionStrings = ListUtils.emptyIfNull(((VulnerabilityNode) issueNode).getFixedVersions());
                for (String fixVersionString : fixVersionStrings) {
                    String fixVersion = convertFixVersionStringToMinFixVersion(fixVersionString);
                    fixVersionToCves.put(fixVersion, issueNode.toString());
                }
            });

            String descriptorPath = element.getContainingFile().getVirtualFile().getPath();
            fixVersionToCves.asMap().forEach((fixedVersion, issues) -> {
                UpgradeVersion upgradeVersion = getUpgradeVersion(dependency.getArtifactId(), fixedVersion, issues, descriptorPath);
                quickFixes.add(upgradeVersion);
            });
        }

        problemsHolder.registerProblem(
                element,
                "JFrog: " + dependencyDescription + " has security vulnerabilities",
                ProblemHighlightType.WARNING,
                quickFixes.toArray(LocalQuickFix[]::new)
        );
    }

    private String getDependencyDescription(String depComponent, boolean isTransitive) {
        String description = "dependency <" + depComponent + ">";
        if (isTransitive) {
            description = "transitive " + description;
        }
        return description;
    }

    protected static String convertFixVersionStringToMinFixVersion(String fixVersionString) {
        // Possible fix version string formats:
        // 1.0        >> 1.0
        // (,1.0]     >> N/A
        // (,1.0)     >> N/A
        // [1.0]      >> 1.0
        // (1.0,)     >> N/A
        // (1.0, 2.0) >> N/A
        // [1.0, 2.0] >> 1.0
        String fixVersion = fixVersionString.trim().split(",")[0];
        if (fixVersion.charAt(0) == '(') {
            // If first character is '(' then we can't tell what's the minimal fix version
            return "";
        }
        fixVersion = StringUtils.strip(fixVersion, "[");
        fixVersion = StringUtils.strip(fixVersion, "]");
        return fixVersion;
    }


    private String extractArtifactIdWithoutVersion(String artifact) {
        int versionIndex = artifact.lastIndexOf(':');

        if (versionIndex != -1) {
           return artifact.substring(0, versionIndex);
        } else {
            return artifact;
        }
    }
    }

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/AnnotationIconRenderer.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.project.Project;
import com.intellij.util.ui.tree.TreeUtil;
import com.jfrog.ide.common.nodes.subentities.Severity;
import com.jfrog.ide.idea.ui.LocalComponentsTree;
import com.jfrog.ide.idea.ui.utils.IconUtils;
import com.jfrog.ide.idea.utils.Utils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import java.util.Objects;

/**
 * Represents the icon near the dependencies in the package descriptor file.
 *
 * @author yahavi
 **/
public class AnnotationIconRenderer extends GutterIconRenderer {
    private final DefaultMutableTreeNode node;
    private final String tooltipText;
    private final Icon icon;
    private Project project;

    public AnnotationIconRenderer(DefaultMutableTreeNode node, Severity severity, String tooltipText) {
        this.node = node;
        this.tooltipText = tooltipText;
        this.icon = IconUtils.load(StringUtils.lowerCase(severity.toString()));
    }

    public void setProject(Project project) {
        this.project = project;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof AnnotationIconRenderer)) {
            return false;
        }
        return Objects.equals(icon, ((AnnotationIconRenderer) obj).getIcon());
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(icon);
    }

    @Override
    public @NotNull Icon getIcon() {
        return icon;
    }

    @Override
    public @Nullable String getTooltipText() {
        return tooltipText;
    }

    @Override
    public @Nullable AnAction getClickAction() {
        return new AnAction() {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e) {
                Utils.focusJFrogToolWindow(project);
                TreeUtil.selectInTree(project, node, true, LocalComponentsTree.getInstance(project), true);
            }
        };
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/AnnotationUtils.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.lang.annotation.AnnotationBuilder;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.psi.PsiElement;
import com.jfrog.ide.common.nodes.DependencyNode;
import com.jfrog.ide.common.nodes.subentities.License;

import java.util.List;
import java.util.stream.Collectors;

import static com.intellij.lang.annotation.HighlightSeverity.INFORMATION;

/**
 * @author yahavi
 */
public class AnnotationUtils {

    /**
     * Register "Top issue" and "Licenses" annotations.
     *
     * @param annotationHolder - The annotations will be registered in this container
     * @param dependency       - The dependency tree node correlated to the element
     * @param element          - The element to apply the annotations
     * @param showIcon         - True if should add annotation icon
     */
    static void registerAnnotation(AnnotationHolder annotationHolder, DependencyNode dependency, PsiElement element, boolean showIcon) {
        String licensesString = getLicensesString(dependency);
        String topIssue = getTopIssueString(dependency);
        AnnotationIconRenderer iconRenderer = showIcon ? new AnnotationIconRenderer(dependency, dependency.getSeverity(), topIssue) : null;
        try {
            AnnotationBuilder builder = annotationHolder.newAnnotation(INFORMATION, topIssue).range(element);
            if (showIcon) {
                iconRenderer.setProject(element.getProject());
                builder = builder.gutterIconRenderer(iconRenderer);
            }
            builder.create();
            annotationHolder.newAnnotation(INFORMATION, licensesString).range(element).create();
        } catch (IllegalArgumentException e) {
            // Exception is thrown when the element we register the annotation for is out of bound of the
            // containing element exists in the provided annotationHolder.
            // This scenario may occur during a gradle-inspections.
        }
    }

    /**
     * Get the top issue string.
     *
     * @param node - The dependency tree node
     * @return the top issue string
     */
    private static String getTopIssueString(DependencyNode node) {
        return "Top issue severity: " + node.getSeverity();
    }

    /**
     * Get licenses string
     *
     * @param node - The dependency tree node
     * @return licenses string
     */
    private static String getLicensesString(DependencyNode node) {
        String results = "Licenses: ";
        List<String> licensesStrings = node.getLicenses().stream().map(License::getName).collect(Collectors.toList());
        if (licensesStrings.isEmpty()) {
            return results + "Unknown";
        }
        return results + String.join(", ", licensesStrings);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/GoInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.goide.vgo.mod.psi.VgoModuleSpec;
import com.goide.vgo.mod.psi.VgoRequireDirective;
import com.goide.vgo.mod.psi.VgoVisitor;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.jfrog.ide.idea.inspections.upgradeversion.GoUpgradeVersion;
import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.scan.ScanManager;
import com.jfrog.ide.idea.scan.ScannerBase;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

import java.util.Collection;

/**
 * Created by Bar Belity on 17/02/2020.
 */

public class GoInspection extends AbstractInspection {

    public GoInspection() {
        super(Descriptor.GO);
    }

    @NotNull
    @Override
    public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
        return new VgoVisitor() {
            @Override
            public void visitModuleSpec(@NotNull VgoModuleSpec element) {
                super.visitPsiElement(element);
                GoInspection.this.visitElement(holder, element, isOnTheFly);
            }
        };
    }

    @Override
    public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
        if (element instanceof VgoModuleSpec) {
            GoInspection.this.visitElement(holder, element);
        }
    }

    @Override
    boolean isDependency(PsiElement element) {
        PsiElement parentElement = element.getParent();
        return parentElement instanceof VgoRequireDirective;
    }

    @Override
    ScannerBase getScanner(Project project, String path) {
        return ScanManager.getScanners(project).stream()
                .filter(manager -> StringUtils.equals(manager.getProjectPath(), path))
                .findAny()
                .orElse(null);
    }

    @Override
    String createComponentName(PsiElement element) {
        VgoModuleSpec goElement = ((VgoModuleSpec) element);
        if (goElement.getModuleVersion() != null) {
            String version = goElement.getModuleVersion().getText();
            // String leading "v" from version
            version = StringUtils.strip(version, "v");
            return String.join(":", goElement.getIdentifier().getText(), version);
        }
        return "";
    }

    @Override
    UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        return new GoUpgradeVersion(componentName, fixVersion, issue, descriptorPath);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/GradleGroovyInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.jfrog.ide.idea.inspections.upgradeversion.GradleGroovyUpgradeVersion;
import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementVisitor;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrNamedArgumentsOwner;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

/**
 * @author yahavi
 */
public class GradleGroovyInspection extends GradleInspection {

    public static final String GRADLE_GROUP_KEY = "group";
    public static final String GRADLE_NAME_KEY = "name";
    public static final String GRADLE_VERSION_KEY = "version";

    public GradleGroovyInspection() {
        super(Descriptor.GRADLE_GROOVY);
    }

    /**
     * Get the string value of the groovy literal.
     *
     * @param literal - The groovy literal
     * @return the value of the literal
     */
    public static String getLiteralValue(GrLiteral literal) {
        String artifact = Objects.toString((literal).getValue(), "");
        int versionIndex = artifact.lastIndexOf(':');
        if (versionIndex == -1) {
            return artifact;
        }
        return artifact.substring(0, versionIndex);
    }

    public static boolean isNamedArgumentComponent(PsiElement element) {
        return (element instanceof GrNamedArgumentsOwner && ((GrNamedArgumentsOwner) element).getNamedArguments().length >= 3);
    }

    @NotNull
    @Override
    public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
        return new GroovyPsiElementVisitor(new GroovyElementVisitor() {
            @Override
            public void visitArgumentList(@NotNull GrArgumentList list) {
                super.visitArgumentList(list);
                List<GroovyPsiElement> elementsToVisit = parseComponentElements(list);
                for (GroovyPsiElement elementToVisit : elementsToVisit) {
                    GradleGroovyInspection.this.visitElement(holder, elementToVisit, isOnTheFly);
                }
            }
        });
    }

    @Override
    boolean isDependency(PsiElement element) {
        PsiElement parent = element.getParent();
        for (int i = 0; i < 6; i++, parent = parent.getParent()) {
            if (StringUtils.startsWith(parent.getText(), "dependencies")) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
        if (element instanceof GrArgumentList) {
            List<GroovyPsiElement> elementsToVisit = parseComponentElements((GrArgumentList) element);
            for (GroovyPsiElement elementToVisit : elementsToVisit) {
                GradleGroovyInspection.this.visitElement(holder, elementToVisit);
            }
        }
    }

    List<GroovyPsiElement> parseComponentElements(GrArgumentList element) {
        List<GroovyPsiElement> elementsToVisit = new ArrayList<>();
        if (isNamedArgumentComponent(element)) {
            // Example: implementation group: 'j', name: 'k', version: 'l'
            elementsToVisit.add(element);
        } else {
            // Example:
            // implementation([group: 'net.lingala.zip4j', name: 'zip4j', version: '2.3.0'],
            //                [group: 'org.codehaus.groovy', name: 'groovy-all', version: '3.0.5'])
            // OR
            // implementation("org.codehaus.groovy:groovy-all:3.0.5")
            // OR
            // implementation 'net.lingala.zip4j:zip4j:2.3.0',
            //                'org.codehaus.groovy:groovy-all:3.0.5'
            for (GroovyPsiElement subElement : element.getAllArguments()) {
                if (isNamedArgumentComponent(subElement) || (subElement instanceof GrLiteral)) {
                    elementsToVisit.add(subElement);
                } else if (subElement.getChildren().length > 0 && subElement.getChildren()[0] instanceof GrLiteral) {
                    elementsToVisit.add((GrLiteral) subElement.getChildren()[0]);
                }
            }
        }
        return elementsToVisit;
    }

    @Override
    String createComponentName(PsiElement element) {
        if (isNamedArgumentComponent(element)) {
            // implementation group: 'j', name: 'k', version: 'l'
            return String.join(":",
                    extractExpression(element, GRADLE_GROUP_KEY),
                    extractExpression(element, GRADLE_NAME_KEY));
        }
        if (element instanceof GrLiteral) {
            //  implementation 'g:h:i'
            return getLiteralValue((GrLiteral) element);
        }
        return "";
    }

    /**
     * Extract expression from groovy arguments.
     *
     * @param argumentList - The arguments list
     * @param name         - The name of the argument to extract
     * @return the value of the argument
     */
    private String extractExpression(PsiElement argumentList, String name) {
        GrNamedArgument argument = ((GrNamedArgumentsOwner) argumentList).findNamedArgument(name);
        if (argument == null) {
            return "";
        }
        GrExpression grExpression = argument.getExpression();
        if (grExpression == null) {
            return "";
        }
        if (!(grExpression instanceof GrLiteral)) {
            return "";
        }
        return getLiteralValue((GrLiteral) grExpression);
    }

    @Override
    UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        return new GradleGroovyUpgradeVersion(componentName, fixVersion, issue);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/GradleInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.jfrog.ide.idea.scan.GradleScanner;
import com.jfrog.ide.idea.scan.ScanManager;
import com.jfrog.ide.idea.scan.ScannerBase;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.lang3.StringUtils;

/**
 * @author yahavi
 */
public abstract class GradleInspection extends AbstractInspection {
    private int lastAnnotatedLine;

    public GradleInspection(Descriptor descriptor) {
        super(descriptor);
    }

    @Override
    ScannerBase getScanner(Project project, String path) {
        return ScanManager.getScanners(project).stream()
                .filter(GradleScanner.class::isInstance)
                .findAny()
                .orElse(null);
    }


    @Override
    boolean showAnnotationIcon(PsiElement element) {
        Document document = element.getContainingFile().getViewProvider().getDocument();
        boolean showAnnotationIcon = true;
        if (document != null) {
            int currentLine = document.getLineNumber(element.getTextOffset());
            showAnnotationIcon = currentLine != lastAnnotatedLine;
            lastAnnotatedLine = currentLine;
        }
        return showAnnotationIcon;
    }

    public static String stripVersion(String componentId) {
        if (StringUtils.countMatches(componentId, ":") >= 2) {
            // implementation('a:b:c')
            String[] splitComponent = componentId.split(":");
            componentId = splitComponent[0] + ":" + splitComponent[1];
        }
        return componentId;
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/GradleKotlinInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.jfrog.ide.idea.inspections.upgradeversion.GradleKotlinUpgradeVersion;
import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.psi.*;

import java.util.Collection;
import java.util.List;

/**
 * Each dependency in Gradle-Kotlin is a function call with at least one argument.
 * Examples:
 * compile("a:b:c")
 * testCompile("d", "e", "f")
 * implementation(project(":project")) // Subproject dependencies start with ":"
 *
 * @author yahavi
 */
public class GradleKotlinInspection extends GradleInspection {

    public GradleKotlinInspection() {
        super(Descriptor.GRADLE_KOTLIN);
    }

    @NotNull
    @Override
    public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
        return new KtVisitorVoid() {
            @Override
            public void visitValueArgumentList(@NotNull KtValueArgumentList list) {
                // Verify that the visited file is a build.gradle.kts file
                if (((KtFile) list.getContainingFile()).isScript()) {
                    GradleKotlinInspection.this.visitElement(holder, list, isOnTheFly);
                }
            }
        };
    }

    @Override
    public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
        if (element instanceof KtValueArgumentList && ((KtFile) element.getContainingFile()).isScript()) {
            GradleKotlinInspection.this.visitElement(holder, element);
        }
    }

    @Override
    boolean isDependency(PsiElement element) {
        List<KtValueArgument> argumentList = ((KtValueArgumentList) element).getArguments();
        if (argumentList.isEmpty() || !(argumentList.get(0).getArgumentExpression() instanceof KtStringTemplateExpression)) {
            return false;
        }
        // Make sure the element is under "dependencies" scope
        for (PsiElement parent = element.getParent(); parent != null; parent = parent.getParent()) {
            if (!(parent instanceof KtCallExpression)) {
                continue;
            }
            KtExpression expression = ((KtCallExpression) parent).getCalleeExpression();
            if (expression != null && "dependencies".equals(expression.getText())) {
                return true;
            }
        }
        return false;
    }

    @Override
    String createComponentName(PsiElement element) {
        if (!(element instanceof KtValueArgumentList)) {
            return "";
        }
        List<KtValueArgument> argumentList = ((KtValueArgumentList) element).getArguments();
        if (argumentList.size() == 1) {
            // "commons-collections:commons-collections:3.2.2"
            String artifactId = extractArgument(argumentList.get(0));
            return StringUtils.substringBeforeLast(artifactId, ":");
        }
        if (argumentList.size() >= 3) {
            // "commons-collections", "commons-collections"
            return String.join(":",
                    extractArgument(argumentList.get(0)),
                    extractArgument(argumentList.get(1))
                    );
        }
        return "";
    }

    /**
     * Extract argument text from Kotlin argument.
     *
     * @param ktValueArgument - The arguments list
     * @return the value of the argument
     */
    private String extractArgument(KtValueArgument ktValueArgument) {
        // Remove quotes
        String value = ktValueArgument.getText().replaceAll("\"", "");

        // Remove '@' suffix, for example commons-lang:commons-lang:2.4@jar
        return StringUtils.substringBefore(value, "@");
    }

    @Override
    UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        return new GradleKotlinUpgradeVersion(componentName, fixVersion, issue);
    }

}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/JFrogSecurityAnnotator.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.ExternalAnnotator;
import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.jfrog.ide.common.nodes.FileIssueNode;
import com.jfrog.ide.common.nodes.FileTreeNode;
import com.jfrog.ide.common.nodes.SortableChildrenTreeNode;
import com.jfrog.ide.idea.events.AnnotationEvents;
import com.jfrog.ide.idea.ui.ComponentsTree;
import com.jfrog.ide.idea.ui.LocalComponentsTree;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.tree.TreeNode;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Objects;

/**
 * General Annotator for JFrog security source code issues (for Example: applicable CVE)
 * The annotator receives the JFrogSecurityWarning data from the most recent scan.
 *
 * @author Tal Arian
 */
public class JFrogSecurityAnnotator extends ExternalAnnotator<PsiFile, List<FileIssueNode>> {

    @NotNull
    private static final HighlightSeverity HIGHLIGHT_TYPE = HighlightSeverity.WARNING;

    @Nullable
    @Override
    public PsiFile collectInformation(@NotNull PsiFile file, @NotNull Editor editor, boolean hasErrors) {
        return file;
    }

    @Nullable
    @Override
    public List<FileIssueNode> doAnnotate(PsiFile file) {
        List<FileIssueNode> issues = new ArrayList<>();
        ComponentsTree componentsTree = LocalComponentsTree.getInstance(file.getProject());
        if (componentsTree == null || componentsTree.getModel() == null) {
            return null;
        }
        Enumeration<TreeNode> roots = ((SortableChildrenTreeNode) componentsTree.getModel().getRoot()).children();
        roots.asIterator().forEachRemaining(root -> {
            FileTreeNode fileNode = (FileTreeNode) root;
            if (fileNode.getFilePath().equals(file.getContainingFile().getVirtualFile().getPath())) {
                fileNode.children().asIterator().forEachRemaining(issueNode -> {
                            if (issueNode instanceof FileIssueNode) {
                                issues.add((FileIssueNode) issueNode);
                            }
                        }
                );
            }
        });
        return issues;
    }

    @Override
    public void apply(@NotNull PsiFile file, List<FileIssueNode> warnings, @NotNull AnnotationHolder holder) {
        Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file);
        if (document == null) {
            return;
        }
        warnings.stream().filter(Objects::nonNull).forEach(warning -> {
            int startOffset = StringUtil.lineColToOffset(file.getText(), warning.getRowStart(), warning.getColStart());
            int endOffset = StringUtil.lineColToOffset(file.getText(), warning.getRowEnd(), warning.getColEnd());
            AnnotationIconRenderer iconRenderer = new AnnotationIconRenderer(warning, warning.getSeverity(), "");
            iconRenderer.setProject(file.getProject());

            TextRange range = new TextRange(startOffset, endOffset);
            String lineText = document.getText(range);
            // If the file has been update after the scan and the relevant line is affected,
            // no annotation will be added.
            if (lineText.contains(warning.getLineSnippet())) {
                holder.newAnnotation(HIGHLIGHT_TYPE, "\uD83D\uDC38 JFrog [" + warning.getTitle() + "]: " + warning.getReason())
                        .range(range)
                        .gutterIconRenderer(iconRenderer)
                        .create();
            }
            // Notify outdated scan result
            else {
                file.getProject().getMessageBus().syncPublisher(AnnotationEvents.ON_IRRELEVANT_RESULT).update(warning.getFilePath());
            }
        });
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/JFrogSecurityWarning.java
================================================
package com.jfrog.ide.idea.inspections;

import com.jfrog.ide.common.nodes.subentities.FindingInfo;
import com.jfrog.ide.common.nodes.subentities.Severity;
import com.jfrog.ide.common.nodes.subentities.SourceCodeScanType;
import com.jfrog.ide.idea.scan.data.*;
import lombok.Getter;

import java.net.URI;
import java.nio.file.Paths;
import java.util.List;

@Getter
public class JFrogSecurityWarning {
    private final int lineStart;
    private final int colStart;
    private final int lineEnd;
    private final int colEnd;
    private final String reason;
    private final String filePath;
    private final String lineSnippet;
    private String scannerSearchTarget;
    private final String ruleID;
    private final SourceCodeScanType reporter;
    private final Severity severity;
    private final FindingInfo[][] codeFlows;
    private final boolean isApplicable;

    public JFrogSecurityWarning(
            int lineStart,
            int colStart, int lineEnd,
            int colEnd, String reason,
            String filePath,
            String ruleID,
            String lineSnippet,
            SourceCodeScanType reporter,
            boolean isApplicable,
            Severity severity,
            FindingInfo[][] codeFlows
    ) {
        this.lineStart = lineStart;
        this.colStart = colStart;
        this.lineEnd = lineEnd;
        this.colEnd = colEnd;
        this.reason = reason;
        this.filePath = filePath;
        this.ruleID = ruleID;
        this.lineSnippet = lineSnippet;
        this.reporter = reporter;
        this.isApplicable = isApplicable;
        this.severity = severity;
        this.codeFlows = codeFlows;
    }

    public JFrogSecurityWarning(SarifResult result, SourceCodeScanType reporter, Rule rule) {
        this(getFirstRegion(result).getStartLine() - 1,
                getFirstRegion(result).getStartColumn() - 1,
                getFirstRegion(result).getEndLine() - 1,
                getFirstRegion(result).getEndColumn() - 1,
                determineReason(result.getMessage().getText(), rule.getShortDescription().getText(), reporter),
                getFilePath(result),
                result.getRuleId(),
                getFirstRegion(result).getSnippet().getText(),
                reporter,
                isWarningApplicable(result, rule),
                Severity.fromSarif(result.getSeverity()),
                convertCodeFlowsToFindingInfo(result.getCodeFlows())
        );
    }

    private static boolean isWarningApplicable(SarifResult result, Rule rule) {
        return !result.getKind().equals("pass") && (rule.getRuleProperties().map(properties -> properties.getApplicability().equals("applicable")).orElse(true));
    }

    private static String getFilePath(SarifResult result) {
        return !result.getLocations().isEmpty() ? uriToPath(result.getLocations().get(0).getPhysicalLocation().getArtifactLocation().getUri()) : "";
    }

    private static FindingInfo[][] convertCodeFlowsToFindingInfo(List<CodeFlow> codeFlows) {
        if (codeFlows == null || codeFlows.isEmpty()) {
            return null;
        }
        List<ThreadFlow> flows = codeFlows.get(0).getThreadFlows();
        if (flows == null || flows.isEmpty()) {
            return null;
        }
        FindingInfo[][] results = new FindingInfo[flows.size()][];
        for (int i = 0; i < flows.size(); i++) {
            ThreadFlow flow = flows.get(i);
            List<ThreadFlowLocation> locations = flow.getLocations();
            results[i] = new FindingInfo[locations.size()];
            for (int j = 0; j < locations.size(); j++) {
                PhysicalLocation location = locations.get(j).getLocation().getPhysicalLocation();
                results[i][j] = new FindingInfo(
                        uriToPath(location.getArtifactLocation().getUri()),
                        location.getRegion().getStartLine(),
                        location.getRegion().getStartColumn(),
                        location.getRegion().getEndLine(),
                        location.getRegion().getEndColumn(),
                        location.getRegion().getSnippet().getText()
                );
            }
        }
        return results;
    }

    public static JFrogSecurityWarning notApplicable(String ruleId, SourceCodeScanType reporter) {
        return new JFrogSecurityWarning(0, 0, 0, 0, "", "", ruleId, "", reporter, false, Severity.Unknown, null);
    }

    public boolean isApplicable() {
        return this.isApplicable;
    }

    private static Region getFirstRegion(SarifResult result) {
        Region emptyRegion = new Region();
        emptyRegion.setSnippet(new Message());
        return !result.getLocations().isEmpty() ? result.getLocations().get(0).getPhysicalLocation().getRegion() : emptyRegion;
    }

    public void setScannerSearchTarget(String scannerSearchTarget) {
        this.scannerSearchTarget = scannerSearchTarget;
    }

    private static String uriToPath(String path) {
        return Paths.get(URI.create(path)).toString();
    }

    private static String determineReason(String resultMessage, String ruleMessage, SourceCodeScanType scannerType) {
        return scannerType.equals(SourceCodeScanType.SAST) ? ruleMessage : resultMessage;
    }
}



================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/JumpToCode.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ScrollType;
import com.intellij.openapi.editor.SelectionModel;
import com.intellij.openapi.editor.markup.HighlighterTargetArea;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiUtilBase;
import org.jetbrains.annotations.NotNull;

/**
 * The JumpToCode class is responsible for navigating to a specific location in a code file
 * and highlighting the corresponding code.
 */
public class JumpToCode {
    Project project;
    FileEditorManager fileEditorManager;

    /**
     * Constructs a new {@code JumpToCode} with the provided project.
     *
     * @param project The current project.
     */
    private JumpToCode(@NotNull Project project) {
        this.project = project;
        fileEditorManager = FileEditorManager.getInstance(project);
    }

    public static JumpToCode getInstance(@NotNull Project project) {
        return project.getService(JumpToCode.class);
    }

    /**
     * Executes the jump to code operation by opening the file in the editor and highlighting the specified code range.
     *
     * @param filePath    The path of the file to navigate to.
     * @param startRow    The starting row of the code range.
     * @param endRow      The ending row of the code range.
     * @param startColumn The starting column of the code range.
     * @param endColumn   The ending column of the code range.
     */
    public void execute(String filePath, int startRow, int endRow, int startColumn, int endColumn) {
        if (this.project == null || this.fileEditorManager == null) return;
        VirtualFile file = getVirtualFile(filePath);
        if (file == null) return;
        ApplicationManager.getApplication().invokeLater(() -> {
            openFileInEditor(file);
            highlightCode(startRow, endRow, startColumn, endColumn);
        });
    }

    private void openFileInEditor(VirtualFile file) {
        fileEditorManager.openFile(file, true);
    }

    private void highlightCode(int startRow, int endRow, int startColumn, int endColumn) {
        Editor editor = fileEditorManager.getSelectedTextEditor();
        if (editor == null) return;
        Document document = getDocument(editor);
        if (document == null) return;
        int startOffset = getOffset(document, startRow, startColumn);
        int endOffset = getOffset(document, endRow, endColumn);
        highlightCode(editor, startOffset, endOffset);
        scrollToHighlightedCode(editor, startOffset);
    }

    private VirtualFile getVirtualFile(String path) {
        return LocalFileSystem.getInstance().findFileByPath(path);
    }

    private Document getDocument(Editor editor) {
        PsiFile psiFile = PsiUtilBase.getPsiFileInEditor(editor, project);
        if (psiFile == null) return null;
        return psiFile.getViewProvider().getDocument();
    }

    private int getOffset(Document document, int row, int column) {
        return StringUtil.lineColToOffset(document.getText(), row, column);
    }

    private void highlightCode(Editor editor, int startOffset, int endOffset) {
        SelectionModel selectionModel = editor.getSelectionModel();
        selectionModel.setSelection(startOffset, endOffset);
        editor.getMarkupModel().addRangeHighlighter(startOffset, endOffset, 0, null, HighlighterTargetArea.EXACT_RANGE);
    }

    private void scrollToHighlightedCode(Editor editor, int startOffset) {
        editor.getCaretModel().moveToOffset(startOffset);
        editor.getScrollingModel().scrollToCaret(ScrollType.CENTER);
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/MavenInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.XmlElementVisitor;
import com.intellij.psi.impl.source.xml.XmlTagImpl;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomManager;
import com.jfrog.ide.idea.inspections.upgradeversion.MavenUpgradeVersion;
import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.scan.MavenScanner;
import com.jfrog.ide.idea.scan.ScanManager;
import com.jfrog.ide.idea.scan.ScannerBase;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.dom.model.MavenDomArtifactCoordinates;
import java.util.Collection;
/**
 * @author yahavi
 */
public class MavenInspection extends AbstractInspection {

    public static final String MAVEN_DEPENDENCY_MANAGEMENT = "dependencyManagement";
    public static final String MAVEN_DEPENDENCIES_TAG = "dependencies";
    public static final String MAVEN_PLUGINS_TAG = "plugins";
    public static final String MAVEN_DEPENDENCY_TAG = "dependency";
    public static final String MAVEN_PLUGIN_TAG = "plugin";
    public static final String MAVEN_ARTIFACT_ID_TAG = "artifactId";
    public static final String MAVEN_GROUP_ID_TAG = "groupId";

    public MavenInspection() {
        super(Descriptor.MAVEN);
    }

    @NotNull
    @Override
    public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
        return new XmlElementVisitor() {
            @Override
            public void visitXmlTag(@NotNull XmlTag element) {
                if (isDependencyOrPlugin(element)) {
                    MavenInspection.this.visitElement(holder, element, isOnTheFly);
                }
            }
        };
    }

    @Override
    public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
        if (element instanceof XmlTag && isDependencyOrPlugin((XmlTag) element)) {
            MavenInspection.this.visitElement(holder, element);
        }
    }

    boolean isDependencyOrPlugin(XmlTag xmlTag) {
        return StringUtils.equalsAny(xmlTag.getName(), MAVEN_DEPENDENCY_TAG, MAVEN_PLUGIN_TAG);
    }

    @Override
    boolean isDependency(PsiElement element) {
        PsiElement parentElement = element.getParent();
        if ((parentElement instanceof XmlTag) &&
                StringUtils.equalsAny(((XmlTag) parentElement).getName(), MAVEN_DEPENDENCIES_TAG, MAVEN_PLUGINS_TAG)) {
            return true;
        }
        PsiElement grandParentElement = parentElement.getParent();
        return (grandParentElement instanceof XmlTag &&
                StringUtils.equals(((XmlTag) grandParentElement).getName(), MAVEN_DEPENDENCY_MANAGEMENT));
    }

    @Override
    ScannerBase getScanner(Project project, String path) {
        return ScanManager.getScanners(project).stream()
                .filter(MavenScanner.class::isInstance)
                .findAny()
                .orElse(null);
    }

    @Override
    String createComponentName(PsiElement element) {
        XmlTag groupId = ((XmlTagImpl) element).findFirstSubTag(MAVEN_GROUP_ID_TAG);
        XmlTag artifactId = ((XmlTagImpl) element).findFirstSubTag(MAVEN_ARTIFACT_ID_TAG);
        if (groupId == null || artifactId == null) {
            return null;
        }
        DomElement domElement = DomManager.getDomManager(element.getProject()).getDomElement((XmlTag) element);
        if (domElement instanceof MavenDomArtifactCoordinates) {
            return String.join(":", groupId.getValue().getText(), artifactId.getValue().getText());
        }
        return null;
    }

    @Override
    UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        return new MavenUpgradeVersion(componentName, fixVersion, issue);
    }

}



================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/NpmInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.json.psi.JsonElementVisitor;
import com.intellij.json.psi.JsonProperty;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.jfrog.ide.idea.inspections.upgradeversion.NpmUpgradeVersion;
import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.scan.NpmScanner;
import com.jfrog.ide.idea.scan.ScanManager;
import com.jfrog.ide.idea.scan.ScannerBase;
import com.jfrog.ide.idea.utils.Descriptor;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

import java.util.Collection;

/**
 * @author yahavi
 */
public class NpmInspection extends AbstractInspection {

    public NpmInspection() {
        super(Descriptor.NPM);
    }

    @NotNull
    @Override
    public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
        return new JsonElementVisitor() {
            @Override
            public void visitProperty(@NotNull JsonProperty element) {
                super.visitProperty(element);
                NpmInspection.this.visitElement(holder, element, isOnTheFly);
            }
        };
    }

    @Override
    public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
        if (element instanceof JsonProperty) {
            NpmInspection.this.visitElement(holder, element);
        }
    }

    @Override
    boolean isDependency(PsiElement element) {
        PsiElement parentElement = element.getParent().getParent();
        return parentElement != null && StringUtils.equalsAny(parentElement.getFirstChild().getText(), "\"dependencies\"", "\"devDependencies\"");
    }

    @Override
    ScannerBase getScanner(Project project, String path) {
        return ScanManager.getScanners(project).stream()
                .filter(manager -> StringUtils.equals(manager.getProjectPath(), path))
                .filter(this::isMatchingScanner)
                .findAny()
                .orElse(null);
    }

    boolean isMatchingScanner(ScannerBase scanner) {
        return scanner instanceof NpmScanner;
    }

    @Override
    String createComponentName(PsiElement element) {
        return StringUtils.unwrap(element.getFirstChild().getText(), "\"");
    }

    @Override
    UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        return new NpmUpgradeVersion(componentName, fixVersion, issue, descriptorPath);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/ShowInDependencyTree.java
================================================
package com.jfrog.ide.idea.inspections;

import com.intellij.codeInsight.intention.HighPriorityAction;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Iconable;
import com.intellij.util.ui.tree.TreeUtil;
import com.jfrog.ide.common.nodes.DependencyNode;
import com.jfrog.ide.idea.ui.LocalComponentsTree;
import com.jfrog.ide.idea.ui.utils.IconUtils;
import com.jfrog.ide.idea.utils.Utils;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

/**
 * Adds the yellow bulb action - "Show in JFrog plugin".
 *
 * @author yahavi
 */
public class ShowInDependencyTree implements LocalQuickFix, Iconable, HighPriorityAction {

    final static String SHOW_IN_TREE_MESSAGE = "Show vulnerability info in JFrog plugin";
    private final DependencyNode node;
    private final String dependencyDescription;

    public ShowInDependencyTree(DependencyNode node, String dependencyDescription) {
        this.node = node;
        this.dependencyDescription = dependencyDescription;
    }

    @Override
    public Icon getIcon(int flags) {
        return IconUtils.load("jfrog_icon");
    }

    @NotNull
    @Override
    public String getFamilyName() {
        return SHOW_IN_TREE_MESSAGE + " - " + dependencyDescription;
    }

    @Override
    public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
        Utils.focusJFrogToolWindow(project);
        TreeUtil.selectInTree(project, node, true, LocalComponentsTree.getInstance(project), true);
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/YarnInspection.java
================================================
package com.jfrog.ide.idea.inspections;

import com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;
import com.jfrog.ide.idea.inspections.upgradeversion.YarnUpgradeVersion;
import com.jfrog.ide.idea.scan.ScannerBase;
import com.jfrog.ide.idea.scan.YarnScanner;

import java.util.Collection;


/**
 * @author michaels
 */
public class YarnInspection extends NpmInspection {
    @Override
    boolean isMatchingScanner(ScannerBase scanner) {
        return scanner instanceof YarnScanner;
    }

    @Override
    UpgradeVersion getUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        return new YarnUpgradeVersion(componentName, fixVersion, issue, descriptorPath);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GoUpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.jfrog.ide.common.go.GoComponentUpdater;
import com.jfrog.ide.idea.utils.GoUtils;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;

/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public class GoUpgradeVersion extends UpgradeVersion {
    private final String descriptorPath;

    public GoUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        super(componentName, fixVersion, issue);
        this.descriptorPath = descriptorPath;
    }

    @Override
    public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) throws IOException {
        Path modulePath = Paths.get(descriptorPath).getParent();
        String goExec = GoUtils.getGoExeAndSetEnv(env, project);
        GoComponentUpdater goComponentUpdater = new GoComponentUpdater(modulePath, this.log, this.env, goExec);
        goComponentUpdater.run(componentName, fixVersion);
    }
}


================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GradleGroovyUpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArgument;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral;
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrNamedArgumentsOwner;

import java.util.Collection;

import static com.jfrog.ide.idea.inspections.GradleGroovyInspection.GRADLE_VERSION_KEY;
import static com.jfrog.ide.idea.inspections.GradleGroovyInspection.getLiteralValue;
import static com.jfrog.ide.idea.inspections.GradleInspection.stripVersion;


/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public class GradleGroovyUpgradeVersion extends UpgradeVersion {

    public GradleGroovyUpgradeVersion(String componentName, String fixVersion, Collection<String> issue) {
        super(componentName, fixVersion, issue);
    }

    @Override
    public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
        PsiElement element = descriptor.getPsiElement();
        GroovyPsiElementFactory psiFactory = GroovyPsiElementFactory.getInstance(project);

        if (element instanceof GrNamedArgumentsOwner) {
            // group: 'com', name: 'guava', version: '1.1.1' >> group: 'com', name: 'guava', version: '2.2.2'
            GrNamedArgument versionArg = ((GrNamedArgumentsOwner) element).findNamedArgument(GRADLE_VERSION_KEY);
            if (versionArg != null && versionArg.getExpression() != null) {
                versionArg.getExpression().replace(psiFactory.createExpressionFromText(StringUtils.wrap(fixVersion, "'")));
                return;
            }
        }

        if (element instanceof GrLiteral) {
            // 'com:guava:1.1.1' >> 'com:guava:2.2.2'
            String componentString = getLiteralValue((GrLiteral) element);
            String fixedComponentString = String.join(":", stripVersion(componentString), fixVersion);
            element.replace(psiFactory.createExpressionFromText(StringUtils.wrap(fixedComponentString, "'")));
        }
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GradleKotlinUpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.psi.KtExpression;
import org.jetbrains.kotlin.psi.KtStringTemplateExpression;
import org.jetbrains.kotlin.psi.KtValueArgument;
import org.jetbrains.kotlin.psi.KtValueArgumentList;

import java.util.Collection;
import java.util.List;

import static com.jfrog.ide.idea.inspections.GradleInspection.stripVersion;

/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public class GradleKotlinUpgradeVersion extends UpgradeVersion {

    public GradleKotlinUpgradeVersion(String componentName, String fixVersion, Collection<String> issue) {
        super(componentName, fixVersion, issue);
    }

    @Override
    public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
        List<KtValueArgument> argumentList = ((KtValueArgumentList) descriptor.getPsiElement()).getArguments();
        String updateText = "";
        KtExpression expressionToUpdate = null;

        if (argumentList.size() == 1) {
            // "commons-collections:commons-collections:3.2.2"
            expressionToUpdate = argumentList.get(0).getArgumentExpression();
            if (expressionToUpdate != null) {
                String stripQuotes = StringUtils.unwrap(expressionToUpdate.getText(), "\"");
                updateText = stripVersion(stripQuotes) + ":" + fixVersion;
            }
        } else if (argumentList.size() >= 3) {
            // "commons-collections", "commons-collections", "3.2.2"
            expressionToUpdate = argumentList.get(2).getArgumentExpression();
            updateText = fixVersion;
        }

        if (expressionToUpdate instanceof KtStringTemplateExpression) {
            ((KtStringTemplateExpression) expressionToUpdate).updateText(StringUtils.wrap(updateText, "\""));
        }
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/MavenUpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.impl.source.xml.XmlTagImpl;
import com.intellij.psi.xml.XmlTag;
import com.intellij.psi.xml.XmlTagValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.dom.MavenDomUtil;
import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;

import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static org.jetbrains.idea.maven.dom.MavenDomProjectProcessorUtils.findProperty;

/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public class MavenUpgradeVersion extends UpgradeVersion {

    private static final Pattern POM_PROPERTY_REGEX = Pattern.compile("^\\$\\{(.*)}");

    public MavenUpgradeVersion(String componentName, String fixVersion, Collection<String> issue) {
        super(componentName, fixVersion, issue);
    }

    @Override
    public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
        final XmlTag[] versions = ((XmlTagImpl) descriptor.getPsiElement()).findSubTags("version");
        XmlTagValue versionTagValue = versions[0].getValue();
        Matcher propMatcher = POM_PROPERTY_REGEX.matcher(versionTagValue.getText());
        if (!propMatcher.find()) {
            // Simple version tag. (example: '<version>1.2.3</version>')
            versionTagValue.setText(fixVersion);
        } else {
            // Property version tag. (example: '<version>${my.ver}</version>')
            MavenDomProjectModel domModel = MavenDomUtil.getMavenDomProjectModel(project, descriptor.getPsiElement().getContainingFile().getVirtualFile());
            if (domModel != null) {
                XmlTag prop = findProperty(domModel.getProperties(), propMatcher.group(1));
                if (prop != null) {
                    prop.getValue().setText(fixVersion);
                }
            }
        }
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/NpmUpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.jfrog.ide.common.npm.NpmComponentUpdater;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;

/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public class NpmUpgradeVersion extends UpgradeVersion {
    private final String descriptorPath;

    public NpmUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        super(componentName, fixVersion, issue);
        this.descriptorPath = descriptorPath;
    }

    @Override
    public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) throws IOException {
        Path modulePath = Paths.get(descriptorPath).getParent();
        NpmComponentUpdater npmComponentUpdater = new NpmComponentUpdater(modulePath, this.log, this.env);
        npmComponentUpdater.run(componentName, fixVersion);
    }

}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/UpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInsight.intention.HighPriorityAction;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Iconable;
import com.intellij.util.EnvironmentUtil;
import com.jfrog.ide.idea.log.Logger;
import com.jfrog.ide.idea.ui.utils.IconUtils;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public abstract class UpgradeVersion implements LocalQuickFix, Iconable, HighPriorityAction {
    protected String componentName;
    protected String fixVersion;
    protected String issue;
    protected Logger log;
    protected Map<String, String> env;

    public UpgradeVersion(String componentName, String fixVersion, Collection<String> issue) {
        this.componentName = componentName;
        this.fixVersion = fixVersion;
        this.issue = issue.toString();
        this.log = Logger.getInstance();
        this.env = new HashMap<>(EnvironmentUtil.getEnvironmentMap());
    }

    @Override
    public Icon getIcon(int flags) {
        return IconUtils.load("jfrog_icon");
    }

    @NotNull
    @Override
    public String getFamilyName() {
        return "Upgrade version to " + fixVersion + " to fix " + issue;
    }

    @Override
    public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
        Task.Backgroundable scanAndUpdateTask = new Task.Backgroundable(project, "Upgrading dependency...") {
            @Override
            public void run(@NotNull com.intellij.openapi.progress.ProgressIndicator indicator) {
                ApplicationManager.getApplication().invokeAndWait(() -> {
                        WriteCommandAction.runWriteCommandAction(project, () -> {
                            try {
                                upgradeComponentVersion(project, descriptor);
                                log.info("Upgraded " + componentName + " to version " + fixVersion + " successfully.");
                            } catch (IOException e) {
                                log.error("Failed while trying to upgrade component " + componentName + " to version " + fixVersion + ". Error: " + e);
                            }
                        });
                    descriptor.getPsiElement().getContainingFile().getVirtualFile().refresh(false, false);
                });
            }
        };
        ProgressManager.getInstance().run(scanAndUpdateTask);
    }

    abstract public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) throws IOException;
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/YarnUpgradeVersion.java
================================================
package com.jfrog.ide.idea.inspections.upgradeversion;

import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.openapi.project.Project;
import com.jfrog.ide.common.yarn.YarnComponentUpdater;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;

/**
 * Adds the yellow bulb action - "Upgrade Version".
 *
 * @author michaels
 */
public class YarnUpgradeVersion extends UpgradeVersion {
    private final String descriptorPath;

    public YarnUpgradeVersion(String componentName, String fixVersion, Collection<String> issue, String descriptorPath) {
        super(componentName, fixVersion, issue);
        this.descriptorPath = descriptorPath;
    }

    @Override
    public void upgradeComponentVersion(@NotNull Project project, @NotNull ProblemDescriptor descriptor) throws IOException {
        Path modulePath = Paths.get(descriptorPath).getParent();
        YarnComponentUpdater yarnComponentUpdater = new YarnComponentUpdater(modulePath, this.log, this.env);
        yarnComponentUpdater.run(componentName, fixVersion);
    }
}

================================================
FILE: src/main/java/com/jfrog/ide/idea/log/Logger.java
================================================
package com.jfrog.ide.idea.log;

import com.intellij.notification.*;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.wm.StatusBar;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.ui.JBColor;
import com.intellij.ui.awt.RelativePoint;
import com.jfrog.ide.idea.ui.utils.IconUtils;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.plexus.util.ExceptionUtils;
import org.jetbrains.annotations.NotNull;
import org.jfrog.build.api.util.Log;

import static javax.swing.event.HyperlinkEvent.EventType.ACTIVATED;

/**
 * @author yahavi
 */
public class Logger implements Log {
    private static final long serialVersionUID = 1L;

    private static final NotificationGroup EVENT_LOG_NOTIFIER = NotificationGroupManager.getInstance().getNotificationGroup("JFrog Log");
    private static final NotificationGroup BALLOON_NOTIFIER = NotificationGroupManager.getInstance().getNotificationGroup("JFrog Errors");
    private static final com.intellij.openapi.diagnostic.Logger ideaLogger = com.intellij.openapi.diagnostic.Logger.getInstance(Logger.class);
    private static Notification lastNotification;

    private static final String INFORMATION_TITLE = "JFrog";
    private static final String ERROR_TITLE = "JFrog scan failed";

    public static Logger getInstance() {
        return ApplicationManager.getApplication().getService(Logger.class);
    }

    private Logger() {
    }

    @Override
    public void debug(String message) {
        ideaLogger.debug(message);
    }

    @Override
    public void info(String message) {
        ideaLogger.info(message);
        NotificationType notificationType = NotificationType.INFORMATION;
        log(INFORMATION_TITLE, message, notificationType);
    }

    @Override
    public void warn(String message) {
        ideaLogger.warn(message);
        NotificationType notificationType = NotificationType.WARNING;
        log(INFORMATION_TITLE, message, notificationType);
    }

    /**
     * Log an error.
     * Notice - For the best user experience, make sure that only interactive actions should call this method.
     *
     * @param message - The message to log
     */
    @Override
    public void error(String message) {
        // We log to IntelliJ log in "warn" log level to avoid popup annoying fatal errors
        ideaLogger.warn(message);
        NotificationType notificationType = NotificationType.ERROR;
        popupBalloon(message, notificationType);
        log(ERROR_TITLE, message, notificationType);
    }

    /**
     * Log an error.
     * Notice - For the best user experience, make sure that only interactive actions should call this method.
     *
     * @param message - The message to log
     * @param t       - The exception raised
     */
    @Override
    public void error(String message, Throwable t) {
        // We log to IntelliJ log in "warn" log level to avoid popup annoying fatal errors
        ideaLogger.warn(message, t);
        NotificationType notificationType = NotificationType.ERROR;
        popupBalloon(message, notificationType);
        String title = StringUtils.defaultIfBlank(t.getMessage(), ERROR_TITLE);
        log(title, message + System.lineSeparator() + ExceptionUtils.getStackTrace(t), notificationType);
    }

    private static void log(String title, String details, NotificationType notificationType) {
        if (StringUtils.isBlank(details)) {
            details = title;
        }
        Notifications.Bus.notify(EVENT_LOG_NOTIFIER.createNotification(title, prependPrefix(details, notificationType), notificationType));
    }

    private static void popupBalloon(String content, NotificationType notificationType) {
        if (lastNotification != null) {
            lastNotification.hideBalloon();
        }
        if (StringUtils.isBlank(content)) {
            content = ERROR_TITLE;
        }
        Notification notification = BALLOON_NOTIFIER.createNotification(ERROR_TITLE, content, notificationType);
        lastNotification = notification;
        Notifications.Bus.notify(notification);
    }

    private static String prependPrefix(String message, NotificationType notificationType) {
        return switch (notificationType) {
            case WARNING -> "[WARN] " + message;
            case ERROR -> "[ERROR] " + message;
            default -> "[INFO] " + message;
        };
    }

    /**
     * Add a log message with an open settings link.
     * Usage example:
     * Logger.openSettings("It looks like Gradle home was not properly set in your project.
     * Click <a href=\"#settings\">here</a> to set Gradle home.", project, GradleConfigurable.class);
     *
     * @param details      - The log message
     * @param project      - IDEA project
     * @param configurable - IDEA settings to open
     */
    public static void addOpenSettingsLink(String details, Project project, Class<? extends Configurable> configurable) {
        EVENT_LOG_NOTIFIER.createNotification(INFORMATION_TITLE, prependPrefix(details, NotificationType.INFORMATION), NotificationType.INFORMATION)
                .addAction(new AnAction() {
                    @Override
                    public void actionPerformed(@NotNull AnActionEvent e) {
                        ShowSettingsUtil.getInstance().showSettingsDialog(project, configurable);
                    }
                })
                .notify(project);
    }

    /**
     * Popup a balloon with an actionable link.
     * Usage example:
     * Logger.showActionableBalloon(project,
     * "The scan results have expired. Click <a href=\"here\">here</a> to trigger a scan.",
     * () -> ScanManager.getInstance(project).startScan());
     *
     * @param project     - IDEA project
     * @param htmlContent - The log message
     * @param action      - The action to perform
     */
    public static void showActionableBalloon(Project project, String htmlContent, Runnable action) {
        StatusBar statusBar = WindowManager.getInstance().getStatusBar(project);
        JBPopupFactory.getInstance().createHtmlTextBalloonBuilder(htmlContent,
                        IconUtils.load("jfrog_icon"),
                        JBColor.foreground(),
                        JBColor.backgr
Download .txt
gitextract_05909tqq/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── feature_request.md
│   │   └── question.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── release.yml
│   └── workflows/
│       ├── cla.yml
│       ├── frogbot-scan-pull-request.yml
│       ├── integration-tests.yml
│       ├── test.yml
│       └── verification.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── release/
│   ├── pipelines.release.yml
│   ├── pipelines.resources.yml
│   ├── pipelines.snapshot.yml
│   └── specs/
│       ├── dev-rbc-filespec.json
│       └── prod-rbc-filespec.json
├── settings.gradle
└── src/
    ├── main/
    │   ├── java/
    │   │   └── com/
    │   │       └── jfrog/
    │   │           └── ide/
    │   │               └── idea/
    │   │                   ├── Syncable.java
    │   │                   ├── actions/
    │   │                   │   ├── CollapseAllAction.java
    │   │                   │   ├── CreateIgnoreRuleAction.java
    │   │                   │   ├── ExpandAllAction.java
    │   │                   │   ├── GoToSettingsAction.java
    │   │                   │   ├── RefreshBuildsAction.java
    │   │                   │   ├── ScanTimeLabelAction.java
    │   │                   │   ├── StartLocalScanAction.java
    │   │                   │   └── StopLocalScanAction.java
    │   │                   ├── ci/
    │   │                   │   └── CiManager.java
    │   │                   ├── configuration/
    │   │                   │   ├── GlobalSettings.java
    │   │                   │   └── ServerConfigImpl.java
    │   │                   ├── events/
    │   │                   │   ├── AnnotationEvents.java
    │   │                   │   ├── ApplicationEvents.java
    │   │                   │   ├── BuildEvents.java
    │   │                   │   └── ProjectEvents.java
    │   │                   ├── exclusion/
    │   │                   │   ├── Excludable.java
    │   │                   │   ├── ExclusionUtils.java
    │   │                   │   └── MavenExclusion.java
    │   │                   ├── inspections/
    │   │                   │   ├── AbstractInspection.java
    │   │                   │   ├── AnnotationIconRenderer.java
    │   │                   │   ├── AnnotationUtils.java
    │   │                   │   ├── GoInspection.java
    │   │                   │   ├── GradleGroovyInspection.java
    │   │                   │   ├── GradleInspection.java
    │   │                   │   ├── GradleKotlinInspection.java
    │   │                   │   ├── JFrogSecurityAnnotator.java
    │   │                   │   ├── JFrogSecurityWarning.java
    │   │                   │   ├── JumpToCode.java
    │   │                   │   ├── MavenInspection.java
    │   │                   │   ├── NpmInspection.java
    │   │                   │   ├── ShowInDependencyTree.java
    │   │                   │   ├── YarnInspection.java
    │   │                   │   └── upgradeversion/
    │   │                   │       ├── GoUpgradeVersion.java
    │   │                   │       ├── GradleGroovyUpgradeVersion.java
    │   │                   │       ├── GradleKotlinUpgradeVersion.java
    │   │                   │       ├── MavenUpgradeVersion.java
    │   │                   │       ├── NpmUpgradeVersion.java
    │   │                   │       ├── UpgradeVersion.java
    │   │                   │       └── YarnUpgradeVersion.java
    │   │                   ├── log/
    │   │                   │   ├── Logger.java
    │   │                   │   └── ProgressIndicatorImpl.java
    │   │                   ├── navigation/
    │   │                   │   ├── NavigationService.java
    │   │                   │   └── NavigationTarget.java
    │   │                   ├── scan/
    │   │                   │   ├── ApplicabilityScannerExecutor.java
    │   │                   │   ├── GoScanner.java
    │   │                   │   ├── GradleScanner.java
    │   │                   │   ├── IACScannerExecutor.java
    │   │                   │   ├── MavenScanner.java
    │   │                   │   ├── NpmScanner.java
    │   │                   │   ├── PypiScanner.java
    │   │                   │   ├── SastScannerExecutor.java
    │   │                   │   ├── ScanBinaryExecutor.java
    │   │                   │   ├── ScanManager.java
    │   │                   │   ├── ScannerBase.java
    │   │                   │   ├── ScannerFactory.java
    │   │                   │   ├── SecretsScannerExecutor.java
    │   │                   │   ├── SingleDescriptorScanner.java
    │   │                   │   ├── SourceCodeScannerManager.java
    │   │                   │   ├── YarnScanner.java
    │   │                   │   ├── data/
    │   │                   │   │   ├── AnalyzeSuppression.java
    │   │                   │   │   ├── ArtifactLocation.java
    │   │                   │   │   ├── CodeFlow.java
    │   │                   │   │   ├── Driver.java
    │   │                   │   │   ├── Invocation.java
    │   │                   │   │   ├── Location.java
    │   │                   │   │   ├── Message.java
    │   │                   │   │   ├── NewScanConfig.java
    │   │                   │   │   ├── NewScansConfig.java
    │   │                   │   │   ├── Output.java
    │   │                   │   │   ├── PackageManagerType.java
    │   │                   │   │   ├── PhysicalLocation.java
    │   │                   │   │   ├── Region.java
    │   │                   │   │   ├── Rule.java
    │   │                   │   │   ├── RuleProperties.java
    │   │                   │   │   ├── Run.java
    │   │                   │   │   ├── SarifResult.java
    │   │                   │   │   ├── ScanConfig.java
    │   │                   │   │   ├── ScansConfig.java
    │   │                   │   │   ├── ThreadFlow.java
    │   │                   │   │   ├── ThreadFlowLocation.java
    │   │                   │   │   ├── Tool.java
    │   │                   │   │   ├── WorkingDirectory.java
    │   │                   │   │   └── applications/
    │   │                   │   │       ├── JFrogApplicationsConfig.java
    │   │                   │   │       ├── ModuleConfig.java
    │   │                   │   │       └── ScannerConfig.java
    │   │                   │   └── utils/
    │   │                   │       ├── ImpactTreeBuilder.java
    │   │                   │       └── ScanUtils.java
    │   │                   ├── ui/
    │   │                   │   ├── AbstractJFrogToolWindow.java
    │   │                   │   ├── CiComponentsTree.java
    │   │                   │   ├── ComponentDetails.java
    │   │                   │   ├── ComponentIssueDetails.java
    │   │                   │   ├── ComponentIssuesTable.java
    │   │                   │   ├── ComponentsTree.java
    │   │                   │   ├── ComponentsTreeCellRenderer.java
    │   │                   │   ├── ExpiredComponentsTreeCellRenderer.java
    │   │                   │   ├── IssueDetails.java
    │   │                   │   ├── IssuesTableCellRenderer.java
    │   │                   │   ├── IssuesTableModel.java
    │   │                   │   ├── IssuesTableSelectionListener.java
    │   │                   │   ├── JFrogCiToolWindow.java
    │   │                   │   ├── JFrogFloatingToolbar.java
    │   │                   │   ├── JFrogLocalToolWindow.java
    │   │                   │   ├── JFrogToolWindow.java
    │   │                   │   ├── JFrogToolWindowFactory.java
    │   │                   │   ├── JfrogContextMenuHandler.java
    │   │                   │   ├── LocalComponentsTree.java
    │   │                   │   ├── MoreInfoPanel.java
    │   │                   │   ├── components/
    │   │                   │   │   ├── ConnectionResultsGesture.java
    │   │                   │   │   ├── ImpactPathPane.java
    │   │                   │   │   ├── LinkButton.java
    │   │                   │   │   ├── MenuButton.java
    │   │                   │   │   ├── ReferencesPane.java
    │   │                   │   │   └── TitledPane.java
    │   │                   │   ├── configuration/
    │   │                   │   │   ├── BuildsVerifier.java
    │   │                   │   │   ├── ConfigVerificationUtils.java
    │   │                   │   │   ├── ConnectionRetriesSpinner.java
    │   │                   │   │   ├── ConnectionTimeoutSpinner.java
    │   │                   │   │   ├── JFrogGlobalConfiguration.form
    │   │                   │   │   ├── JFrogGlobalConfiguration.java
    │   │                   │   │   ├── JFrogProjectConfiguration.form
    │   │                   │   │   ├── JFrogProjectConfiguration.java
    │   │                   │   │   └── Utils.java
    │   │                   │   ├── menus/
    │   │                   │   │   ├── MenuCheckbox.java
    │   │                   │   │   ├── SelectAllCheckbox.java
    │   │                   │   │   ├── SelectionCheckbox.java
    │   │                   │   │   ├── ToolbarPopupMenu.java
    │   │                   │   │   ├── builds/
    │   │                   │   │   │   ├── BuildsButton.java
    │   │                   │   │   │   └── BuildsMenu.java
    │   │                   │   │   ├── filtermanager/
    │   │                   │   │   │   ├── CiFilterManager.java
    │   │                   │   │   │   └── ConsistentFilterManager.java
    │   │                   │   │   └── filtermenu/
    │   │                   │   │       ├── CiIssueFilterMenu.java
    │   │                   │   │       ├── CiLicenseFilterMenu.java
    │   │                   │   │       ├── CiScopeFilterMenu.java
    │   │                   │   │       ├── FilterMenu.java
    │   │                   │   │       ├── IssueFilterMenu.java
    │   │                   │   │       ├── LicenseFilterMenu.java
    │   │                   │   │       └── ScopeFilterMenu.java
    │   │                   │   ├── utils/
    │   │                   │   │   ├── ComponentUtils.java
    │   │                   │   │   └── IconUtils.java
    │   │                   │   └── webview/
    │   │                   │       ├── WebviewManager.java
    │   │                   │       ├── WebviewObjectConverter.java
    │   │                   │       ├── WebviewResourceHandler.java
    │   │                   │       ├── WebviewSchemeHandlerFactory.java
    │   │                   │       ├── event/
    │   │                   │       │   ├── EventManager.java
    │   │                   │       │   ├── Receiver.java
    │   │                   │       │   ├── Sender.java
    │   │                   │       │   ├── model/
    │   │                   │       │   │   ├── Event.java
    │   │                   │       │   │   ├── IdeEvent.java
    │   │                   │       │   │   └── WebviewEvent.java
    │   │                   │       │   └── tasks/
    │   │                   │       │       └── JumpToCodeTask.java
    │   │                   │       └── model/
    │   │                   │           ├── ApplicableDetails.java
    │   │                   │           ├── Cve.java
    │   │                   │           ├── DependencyPage.java
    │   │                   │           ├── Evidence.java
    │   │                   │           ├── ExtendedInformation.java
    │   │                   │           ├── Finding.java
    │   │                   │           ├── ImpactGraph.java
    │   │                   │           ├── ImpactGraphNode.java
    │   │                   │           ├── IssuePage.java
    │   │                   │           ├── JfrogResearchSeverityReason.java
    │   │                   │           ├── License.java
    │   │                   │           ├── Location.java
    │   │                   │           ├── Reference.java
    │   │                   │           └── SastIssuePage.java
    │   │                   └── utils/
    │   │                       ├── Descriptor.java
    │   │                       ├── GoUtils.java
    │   │                       └── Utils.java
    │   └── resources/
    │       └── META-INF/
    │           ├── plugin.xml
    │           ├── with-go.xml
    │           ├── with-gradle.xml
    │           ├── with-groovy.xml
    │           ├── with-kotlin.xml
    │           ├── with-maven.xml
    │           ├── with-python-ce.xml
    │           └── with-python.xml
    └── test/
        ├── java/
        │   └── com/
        │       └── jfrog/
        │           └── ide/
        │               └── idea/
        │                   ├── ProgressIndicatorMock.java
        │                   ├── TestUtils.java
        │                   ├── configuration/
        │                   │   ├── ConfigurationTest.java
        │                   │   ├── ConnectionDetailsFromCliTest.java
        │                   │   └── GetProxyConfForTargetUrlTest.java
        │                   ├── exclusion/
        │                   │   └── MavenExclusionTest.java
        │                   ├── inspections/
        │                   │   ├── GoInspectionTest.java
        │                   │   ├── GradleGroovyInspectionTest.java
        │                   │   ├── GradleInspectionTest.java
        │                   │   ├── GradleKotlinInspectionTest.java
        │                   │   ├── InspectionToolsTest.java
        │                   │   ├── InspectionsTestBase.java
        │                   │   ├── MavenInspectionTest.java
        │                   │   └── NpmInspectionTest.java
        │                   ├── integration/
        │                   │   ├── ApplicabilityScannerIntegrationTests.java
        │                   │   ├── BaseIntegrationTest.java
        │                   │   ├── ExternalResourcesRepoIntegrationTests.java
        │                   │   ├── IACScannerIntegrationTests.java
        │                   │   └── SecretsScannerIntegrationTests.java
        │                   ├── scan/
        │                   │   ├── DummyCircularDepPyPkgManager.java
        │                   │   ├── DummyCircularRequirement.java
        │                   │   ├── GradleScannerTest.java
        │                   │   ├── MavenScannerTest.java
        │                   │   ├── PypiScannerTest.java
        │                   │   ├── ScanBinaryExecutorTest.java
        │                   │   ├── ScannerBaseTest.java
        │                   │   ├── SingleDescriptorScannerTest.java
        │                   │   ├── SourceCodeManagerTest.java
        │                   │   ├── YarnScannerTest.java
        │                   │   └── utils/
        │                   │       └── ImpactTreeBuilderTest.java
        │                   └── ui/
        │                       ├── LocalComponentsTreeTest.java
        │                       └── configuration/
        │                           ├── ConfigVerificationUtilsNegativeTest.java
        │                           └── ConfigVerificationUtilsPositiveTest.java
        └── resources/
            ├── exclusion/
            │   └── pom.xml
            ├── gradle/
            │   ├── global/
            │   │   ├── api/
            │   │   │   ├── build.gradle
            │   │   │   └── src/
            │   │   │       └── main/
            │   │   │           └── java/
            │   │   │               └── org/
            │   │   │                   └── gradle/
            │   │   │                       ├── api/
            │   │   │                       │   ├── PersonList.java
            │   │   │                       │   └── package.html
            │   │   │                       └── apiImpl/
            │   │   │                           └── Impl.java
            │   │   ├── build.gradle
            │   │   ├── gradle.properties
            │   │   ├── services/
            │   │   │   ├── build/
            │   │   │   │   └── moduleInfo.json
            │   │   │   └── webservice/
            │   │   │       ├── build.gradle
            │   │   │       └── src/
            │   │   │           ├── main/
            │   │   │           │   └── java/
            │   │   │           │       └── org/
            │   │   │           │           └── gradle/
            │   │   │           │               └── webservice/
            │   │   │           │                   └── TestTest.java
            │   │   │           └── test/
            │   │   │               └── java/
            │   │   │                   └── org/
            │   │   │                       └── gradle/
            │   │   │                           └── webservice/
            │   │   │                               └── TestTestTest.java
            │   │   ├── settings.gradle
            │   │   └── shared/
            │   │       └── src/
            │   │           └── main/
            │   │               ├── java/
            │   │               │   └── org/
            │   │               │       └── gradle/
            │   │               │           └── shared/
            │   │               │               ├── Person.java
            │   │               │               └── package-info.java
            │   │               └── resources/
            │   │                   └── org/
            │   │                       └── gradle/
            │   │                           └── shared/
            │   │                               └── main.properties
            │   └── wrapper/
            │       ├── api/
            │       │   ├── build.gradle
            │       │   └── src/
            │       │       └── main/
            │       │           └── java/
            │       │               └── org/
            │       │                   └── gradle/
            │       │                       ├── api/
            │       │                       │   ├── PersonList.java
            │       │                       │   └── package.html
            │       │                       └── apiImpl/
            │       │                           └── Impl.java
            │       ├── build.gradle
            │       ├── gradle/
            │       │   └── wrapper/
            │       │       ├── gradle-wrapper.jar
            │       │       └── gradle-wrapper.properties
            │       ├── gradle.properties
            │       ├── gradlew
            │       ├── gradlew.bat
            │       ├── services/
            │       │   ├── build/
            │       │   │   └── moduleInfo.json
            │       │   └── webservice/
            │       │       ├── build.gradle
            │       │       └── src/
            │       │           ├── main/
            │       │           │   └── java/
            │       │           │       └── org/
            │       │           │           └── gradle/
            │       │           │               └── webservice/
            │       │           │                   └── TestTest.java
            │       │           └── test/
            │       │               └── java/
            │       │                   └── org/
            │       │                       └── gradle/
            │       │                           └── webservice/
            │       │                               └── TestTestTest.java
            │       ├── settings.gradle
            │       └── shared/
            │           └── src/
            │               └── main/
            │                   ├── java/
            │                   │   └── org/
            │                   │       └── gradle/
            │                   │           └── shared/
            │                   │               ├── Person.java
            │                   │               └── package-info.java
            │                   └── resources/
            │                       └── org/
            │                           └── gradle/
            │                               └── shared/
            │                                   └── main.properties
            ├── iac/
            │   └── testProjects/
            │       └── exposedIac/
            │           ├── hcl/
            │           │   └── applicable/
            │           │       ├── req_sw_terraform_aws_alb_https_only.tf
            │           │       ├── req_sw_terraform_aws_api_gateway_auth.tf
            │           │       ├── req_sw_terraform_aws_api_gateway_encrypt_cache.tf
            │           │       ├── req_sw_terraform_aws_api_gateway_tls_version.tf
            │           │       ├── req_sw_terraform_aws_athena_encrypt.tf
            │           │       ├── req_sw_terraform_aws_athena_encrypt_workgroup.tf
            │           │       ├── req_sw_terraform_aws_batch_no_privileged.tf
            │           │       ├── req_sw_terraform_aws_cloudfront_tls_only.tf
            │           │       ├── req_sw_terraform_aws_cloudfront_tls_version.tf
            │           │       └── req_sw_terraform_aws_cloudtrail_encrypt.tf
            │           └── plan/
            │               ├── applicable/
            │               │   ├── req_sw_terraform_aws_alb_https_only.json
            │               │   ├── req_sw_terraform_aws_api_gateway_auth.json
            │               │   ├── req_sw_terraform_aws_api_gateway_encrypt_cache.json
            │               │   ├── req_sw_terraform_aws_api_gateway_tls_version.json
            │               │   ├── req_sw_terraform_aws_athena_encrypt.json
            │               │   ├── req_sw_terraform_aws_athena_encrypt_workgroup.json
            │               │   ├── req_sw_terraform_aws_batch_no_privileged.json
            │               │   ├── req_sw_terraform_aws_cloudfront_tls_only.json
            │               │   ├── req_sw_terraform_aws_cloudfront_tls_version.json
            │               │   ├── req_sw_terraform_aws_cloudtrail_encrypt.json
            │               │   ├── req_sw_terraform_aws_cloudtrail_logging.json
            │               │   ├── req_sw_terraform_aws_cloudwatch_log_encrypt.json
            │               │   ├── req_sw_terraform_aws_codebuild_encrypt.json
            │               │   ├── req_sw_terraform_aws_dax_encrypt.json
            │               │   ├── req_sw_terraform_aws_docdb_encrypt_cluster.json
            │               │   ├── req_sw_terraform_aws_ebs_encrypt.json
            │               │   ├── req_sw_terraform_aws_ec2_public_ip.json
            │               │   ├── req_sw_terraform_aws_ecr_no_public.json
            │               │   ├── req_sw_terraform_aws_ecs_encrypt_task.json
            │               │   ├── req_sw_terraform_aws_ecs_envvar_pass.json
            │               │   ├── req_sw_terraform_aws_efs_encrypt.json
            │               │   └── req_sw_terraform_aws_eks_encrypt_cluster.json
            │               └── convert_hcl_to_plan.py
            ├── inspections/
            │   ├── build.gradle.kts
            │   ├── build.groovy
            │   ├── go.mod
            │   ├── package.json
            │   └── pom.xml
            ├── projects/
            │   ├── project1/
            │   │   ├── go.mod
            │   │   └── main.go
            │   └── project2/
            │       ├── go.mod
            │       ├── go.sum
            │       ├── main.go
            │       └── subproject/
            │           ├── go.mod
            │           ├── go.sum
            │           └── main.go
            ├── proxy/
            │   └── proxy.pac
            ├── secrets/
            │   └── testProjects/
            │       ├── dummy/
            │       │   ├── ApplicabilityScannerExecutor.java
            │       │   ├── build.gradle
            │       │   ├── index.js
            │       │   └── main.py
            │       └── exposedSecrets/
            │           ├── req.nodejs.hardcoded-secrets/
            │           │   ├── applicable_base64.js
            │           │   ├── applicable_base64.js.approval.json
            │           │   ├── applicable_hex.js
            │           │   ├── applicable_hex.js.approval.json
            │           │   ├── not_applicable_base64.js
            │           │   ├── not_applicable_base64.js.approval.json
            │           │   ├── not_applicable_hex.js
            │           │   └── not_applicable_hex.js.approval.json
            │           ├── req.python.hardcoded-secrets/
            │           │   ├── applicable_base64.py
            │           │   ├── applicable_base64.py.approval.json
            │           │   ├── applicable_hex.py
            │           │   ├── applicable_hex.py.approval.json
            │           │   ├── not_applicable_base64.py
            │           │   ├── not_applicable_base64.py.approval.json
            │           │   ├── not_applicable_hex.py
            │           │   └── not_applicable_hex.py.approval.json
            │           └── req.secret.keys/
            │               ├── applicable
            │               ├── applicable.approval.json
            │               ├── applicable.c
            │               ├── applicable.txt
            │               ├── applicable.txt.approval.json
            │               ├── not_applicable
            │               ├── not_applicable.approval.json
            │               ├── not_applicable.c
            │               ├── not_applicable.txt
            │               └── not_applicable.txt.approval.json
            ├── sourceCode/
            │   ├── applicable_kind_pass_output.sarif
            │   ├── faulty_output.sarif
            │   ├── secrets_with_informational_output.sarif
            │   ├── simple_output.sarif
            │   └── testProjects/
            │       ├── maven/
            │       │   ├── COPYRIGHT.txt
            │       │   ├── LICENSE.txt
            │       │   ├── pom.xml
            │       │   └── src/
            │       │       ├── it/
            │       │       │   └── java/
            │       │       │       └── org/
            │       │       │           └── owasp/
            │       │       │               └── webgoat/
            │       │       │                   ├── AccessControlIntegrationTest.java
            │       │       │                   ├── CSRFIntegrationTest.java
            │       │       │                   ├── ChallengeIntegrationTest.java
            │       │       │                   ├── CryptoIntegrationTest.java
            │       │       │                   ├── DeserializationIntegrationTest.java
            │       │       │                   ├── GeneralLessonIntegrationTest.java
            │       │       │                   ├── IDORIntegrationTest.java
            │       │       │                   ├── IntegrationTest.java
            │       │       │                   ├── JWTLessonIntegrationTest.java
            │       │       │                   ├── LabelAndHintIntegrationTest.java
            │       │       │                   ├── PasswordResetLessonIntegrationTest.java
            │       │       │                   ├── PathTraversalIntegrationTest.java
            │       │       │                   ├── ProgressRaceConditionIntegrationTest.java
            │       │       │                   ├── SSRFIntegrationTest.java
            │       │       │                   ├── SessionManagementIntegrationTest.java
            │       │       │                   ├── SqlInjectionAdvancedIntegrationTest.java
            │       │       │                   ├── SqlInjectionLessonIntegrationTest.java
            │       │       │                   ├── SqlInjectionMitigationIntegrationTest.java
            │       │       │                   ├── WebWolfIntegrationTest.java
            │       │       │                   ├── XSSIntegrationTest.java
            │       │       │                   └── XXEIntegrationTest.java
            │       │       └── main/
            │       │           └── java/
            │       │               └── org/
            │       │                   ├── dummy/
            │       │                   │   └── insecure/
            │       │                   │       └── framework/
            │       │                   │           └── VulnerableTaskHolder.java
            │       │                   └── owasp/
            │       │                       └── webgoat/
            │       │                           ├── container/
            │       │                           │   ├── AjaxAuthenticationEntryPoint.java
            │       │                           │   ├── AsciiDoctorTemplateResolver.java
            │       │                           │   ├── DatabaseConfiguration.java
            │       │                           │   ├── HammerHead.java
            │       │                           │   ├── LessonDataSource.java
            │       │                           │   ├── LessonTemplateResolver.java
            │       │                           │   ├── MvcConfiguration.java
            │       │                           │   ├── WebGoat.java
            │       │                           │   ├── WebSecurityConfig.java
            │       │                           │   ├── WebWolfRedirect.java
            │       │                           │   ├── asciidoc/
            │       │                           │   │   ├── EnvironmentExposure.java
            │       │                           │   │   ├── OperatingSystemMacro.java
            │       │                           │   │   ├── UsernameMacro.java
            │       │                           │   │   ├── WebGoatTmpDirMacro.java
            │       │                           │   │   ├── WebGoatVersionMacro.java
            │       │                           │   │   ├── WebWolfMacro.java
            │       │                           │   │   └── WebWolfRootMacro.java
            │       │                           │   ├── assignments/
            │       │                           │   │   ├── AssignmentEndpoint.java
            │       │                           │   │   ├── AssignmentHints.java
            │       │                           │   │   ├── AssignmentPath.java
            │       │                           │   │   ├── AttackResult.java
            │       │                           │   │   └── LessonTrackerInterceptor.java
            │       │                           │   ├── controller/
            │       │                           │   │   ├── StartLesson.java
            │       │                           │   │   └── Welcome.java
            │       │                           │   ├── i18n/
            │       │                           │   │   ├── Language.java
            │       │                           │   │   ├── Messages.java
            │       │                           │   │   └── PluginMessages.java
            │       │                           │   ├── lessons/
            │       │                           │   │   ├── Assignment.java
            │       │                           │   │   ├── Category.java
            │       │                           │   │   ├── CourseConfiguration.java
            │       │                           │   │   ├── Hint.java
            │       │                           │   │   ├── Initializeable.java
            │       │                           │   │   ├── Lesson.java
            │       │                           │   │   ├── LessonConnectionInvocationHandler.java
            │       │                           │   │   ├── LessonInfoModel.java
            │       │                           │   │   ├── LessonMenuItem.java
            │       │                           │   │   ├── LessonMenuItemType.java
            │       │                           │   │   └── LessonScanner.java
            │       │                           │   ├── service/
            │       │                           │   │   ├── EnvironmentService.java
            │       │                           │   │   ├── HintService.java
            │       │                           │   │   ├── LabelDebugService.java
            │       │                           │   │   ├── LabelService.java
            │       │                           │   │   ├── LessonInfoService.java
            │       │                           │   │   ├── LessonMenuService.java
            │       │                           │   │   ├── LessonProgressService.java
            │       │                           │   │   ├── LessonTitleService.java
            │       │                           │   │   ├── ReportCardService.java
            │       │                           │   │   ├── RestartLessonService.java
            │       │                           │   │   └── SessionService.java
            │       │                           │   ├── session/
            │       │                           │   │   ├── Course.java
            │       │                           │   │   ├── LabelDebugger.java
            │       │                           │   │   ├── UserSessionData.java
            │       │                           │   │   └── WebSession.java
            │       │                           │   └── users/
            │       │                           │       ├── LessonTracker.java
            │       │                           │       ├── RegistrationController.java
            │       │                           │       ├── Scoreboard.java
            │       │                           │       ├── UserForm.java
            │       │                           │       ├── UserRepository.java
            │       │                           │       ├── UserService.java
            │       │                           │       ├── UserSession.java
            │       │                           │       ├── UserTracker.java
            │       │                           │       ├── UserTrackerRepository.java
            │       │                           │       ├── UserValidator.java
            │       │                           │       └── WebGoatUser.java
            │       │                           ├── lessons/
            │       │                           │   ├── authbypass/
            │       │                           │   │   ├── AccountVerificationHelper.java
            │       │                           │   │   ├── AuthBypass.java
            │       │                           │   │   └── VerifyAccount.java
            │       │                           │   ├── bypassrestrictions/
            │       │                           │   │   ├── BypassRestrictions.java
            │       │                           │   │   ├── BypassRestrictionsFieldRestrictions.java
            │       │                           │   │   └── BypassRestrictionsFrontendValidation.java
            │       │                           │   ├── challenges/
            │       │                           │   │   ├── ChallengeIntro.java
            │       │                           │   │   ├── Email.java
            │       │                           │   │   ├── Flag.java
            │       │                           │   │   ├── SolutionConstants.java
            │       │                           │   │   ├── challenge1/
            │       │                           │   │   │   ├── Assignment1.java
            │       │                           │   │   │   ├── Challenge1.java
            │       │                           │   │   │   └── ImageServlet.java
            │       │                           │   │   ├── challenge5/
            │       │                           │   │   │   ├── Assignment5.java
            │       │                           │   │   │   └── Challenge5.java
            │       │                           │   │   ├── challenge7/
            │       │                           │   │   │   ├── Assignment7.java
            │       │                           │   │   │   ├── Challenge7.java
            │       │                           │   │   │   ├── MD5.java
            │       │                           │   │   │   └── PasswordResetLink.java
            │       │                           │   │   └── challenge8/
            │       │                           │   │       ├── Assignment8.java
            │       │                           │   │       └── Challenge8.java
            │       │                           │   ├── chromedevtools/
            │       │                           │   │   ├── ChromeDevTools.java
            │       │                           │   │   ├── NetworkDummy.java
            │       │                           │   │   └── NetworkLesson.java
            │       │                           │   ├── cia/
            │       │                           │   │   ├── CIA.java
            │       │                           │   │   └── CIAQuiz.java
            │       │                           │   ├── clientsidefiltering/
            │       │                           │   │   ├── ClientSideFiltering.java
            │       │                           │   │   ├── ClientSideFilteringAssignment.java
            │       │                           │   │   ├── ClientSideFilteringFreeAssignment.java
            │       │                           │   │   ├── Salaries.java
            │       │                           │   │   └── ShopEndpoint.java
            │       │                           │   ├── cryptography/
            │       │                           │   │   ├── CryptoUtil.java
            │       │                           │   │   ├── Cryptography.java
            │       │                           │   │   ├── EncodingAssignment.java
            │       │                           │   │   ├── HashingAssignment.java
            │       │                           │   │   ├── SecureDefaultsAssignment.java
            │       │                           │   │   ├── SigningAssignment.java
            │       │                           │   │   └── XOREncodingAssignment.java
            │       │                           │   ├── csrf/
            │       │                           │   │   ├── CSRF.java
            │       │                           │   │   ├── CSRFConfirmFlag1.java
            │       │                           │   │   ├── CSRFFeedback.java
            │       │                           │   │   ├── CSRFGetFlag.java
            │       │                           │   │   ├── CSRFLogin.java
            │       │                           │   │   ├── ForgedReviews.java
            │       │                           │   │   └── Review.java
            │       │                           │   ├── deserialization/
            │       │                           │   │   ├── InsecureDeserialization.java
            │       │                           │   │   ├── InsecureDeserializationTask.java
            │       │                           │   │   └── SerializationHelper.java
            │       │                           │   ├── hijacksession/
            │       │                           │   │   ├── HijackSession.java
            │       │                           │   │   ├── HijackSessionAssignment.java
            │       │                           │   │   └── cas/
            │       │                           │   │       ├── Authentication.java
            │       │                           │   │       ├── AuthenticationProvider.java
            │       │                           │   │       └── HijackSessionAuthenticationProvider.java
            │       │                           │   ├── htmltampering/
            │       │                           │   │   ├── HtmlTampering.java
            │       │                           │   │   └── HtmlTamperingTask.java
            │       │                           │   ├── httpbasics/
            │       │                           │   │   ├── HttpBasics.java
            │       │                           │   │   ├── HttpBasicsLesson.java
            │       │                           │   │   └── HttpBasicsQuiz.java
            │       │                           │   ├── httpproxies/
            │       │                           │   │   ├── HttpBasicsInterceptRequest.java
            │       │                           │   │   └── HttpProxies.java
            │       │                           │   ├── idor/
            │       │                           │   │   ├── IDOR.java
            │       │                           │   │   ├── IDORDiffAttributes.java
            │       │                           │   │   ├── IDOREditOtherProfiile.java
            │       │                           │   │   ├── IDORLogin.java
            │       │                           │   │   ├── IDORViewOtherProfile.java
            │       │                           │   │   ├── IDORViewOwnProfile.java
            │       │                           │   │   ├── IDORViewOwnProfileAltUrl.java
            │       │                           │   │   └── UserProfile.java
            │       │                           │   ├── insecurelogin/
            │       │                           │   │   ├── InsecureLogin.java
            │       │                           │   │   └── InsecureLoginTask.java
            │       │                           │   ├── jwt/
            │       │                           │   │   ├── JWT.java
            │       │                           │   │   ├── JWTDecodeEndpoint.java
            │       │                           │   │   ├── JWTFinalEndpoint.java
            │       │                           │   │   ├── JWTQuiz.java
            │       │                           │   │   ├── JWTRefreshEndpoint.java
            │       │                           │   │   ├── JWTSecretKeyEndpoint.java
            │       │                           │   │   ├── JWTVotesEndpoint.java
            │       │                           │   │   └── votes/
            │       │                           │   │       ├── Views.java
            │       │                           │   │       └── Vote.java
            │       │                           │   ├── lessontemplate/
            │       │                           │   │   ├── LessonTemplate.java
            │       │                           │   │   └── SampleAttack.java
            │       │                           │   ├── logging/
            │       │                           │   │   ├── LogBleedingTask.java
            │       │                           │   │   ├── LogSpoofing.java
            │       │                           │   │   └── LogSpoofingTask.java
            │       │                           │   ├── missingac/
            │       │                           │   │   ├── DisplayUser.java
            │       │                           │   │   ├── MissingAccessControlUserRepository.java
            │       │                           │   │   ├── MissingFunctionAC.java
            │       │                           │   │   ├── MissingFunctionACHiddenMenus.java
            │       │                           │   │   ├── MissingFunctionACUsers.java
            │       │                           │   │   ├── MissingFunctionACYourHash.java
            │       │                           │   │   ├── MissingFunctionACYourHashAdmin.java
            │       │                           │   │   └── User.java
            │       │                           │   ├── passwordreset/
            │       │                           │   │   ├── PasswordReset.java
            │       │                           │   │   ├── PasswordResetEmail.java
            │       │                           │   │   ├── QuestionsAssignment.java
            │       │                           │   │   ├── ResetLinkAssignment.java
            │       │                           │   │   ├── ResetLinkAssignmentForgotPassword.java
            │       │                           │   │   ├── SecurityQuestionAssignment.java
            │       │                           │   │   ├── SimpleMailAssignment.java
            │       │                           │   │   ├── TriedQuestions.java
            │       │                           │   │   └── resetlink/
            │       │                           │   │       └── PasswordChangeForm.java
            │       │                           │   ├── pathtraversal/
            │       │                           │   │   ├── PathTraversal.java
            │       │                           │   │   ├── ProfileUpload.java
            │       │                           │   │   ├── ProfileUploadBase.java
            │       │                           │   │   ├── ProfileUploadFix.java
            │       │                           │   │   ├── ProfileUploadRemoveUserInput.java
            │       │                           │   │   ├── ProfileUploadRetrieval.java
            │       │                           │   │   └── ProfileZipSlip.java
            │       │                           │   ├── securepasswords/
            │       │                           │   │   ├── SecurePasswords.java
            │       │                           │   │   └── SecurePasswordsAssignment.java
            │       │                           │   ├── spoofcookie/
            │       │                           │   │   ├── SpoofCookie.java
            │       │                           │   │   ├── SpoofCookieAssignment.java
            │       │                           │   │   └── encoders/
            │       │                           │   │       └── EncDec.java
            │       │                           │   ├── sqlinjection/
            │       │                           │   │   ├── advanced/
            │       │                           │   │   │   ├── SqlInjectionAdvanced.java
            │       │                           │   │   │   ├── SqlInjectionChallenge.java
            │       │                           │   │   │   ├── SqlInjectionChallengeLogin.java
            │       │                           │   │   │   ├── SqlInjectionLesson6a.java
            │       │                           │   │   │   ├── SqlInjectionLesson6b.java
            │       │                           │   │   │   └── SqlInjectionQuiz.java
            │       │                           │   │   ├── introduction/
            │       │                           │   │   │   ├── SqlInjection.java
            │       │                           │   │   │   ├── SqlInjectionLesson10.java
            │       │                           │   │   │   ├── SqlInjectionLesson2.java
            │       │                           │   │   │   ├── SqlInjectionLesson3.java
            │       │                           │   │   │   ├── SqlInjectionLesson4.java
            │       │                           │   │   │   ├── SqlInjectionLesson5.java
            │       │                           │   │   │   ├── SqlInjectionLesson5a.java
            │       │                           │   │   │   ├── SqlInjectionLesson5b.java
            │       │                           │   │   │   ├── SqlInjectionLesson8.java
            │       │                           │   │   │   └── SqlInjectionLesson9.java
            │       │                           │   │   └── mitigation/
            │       │                           │   │       ├── Servers.java
            │       │                           │   │       ├── SqlInjectionLesson10a.java
            │       │                           │   │       ├── SqlInjectionLesson10b.java
            │       │                           │   │       ├── SqlInjectionLesson13.java
            │       │                           │   │       ├── SqlInjectionMitigations.java
            │       │                           │   │       ├── SqlOnlyInputValidation.java
            │       │                           │   │       └── SqlOnlyInputValidationOnKeywords.java
            │       │                           │   ├── ssrf/
            │       │                           │   │   ├── SSRF.java
            │       │                           │   │   ├── SSRFTask1.java
            │       │                           │   │   └── SSRFTask2.java
            │       │                           │   ├── vulnerablecomponents/
            │       │                           │   │   ├── Contact.java
            │       │                           │   │   ├── ContactImpl.java
            │       │                           │   │   ├── VulnerableComponents.java
            │       │                           │   │   └── VulnerableComponentsLesson.java
            │       │                           │   ├── webgoatintroduction/
            │       │                           │   │   └── WebGoatIntroduction.java
            │       │                           │   ├── webwolfintroduction/
            │       │                           │   │   ├── Email.java
            │       │                           │   │   ├── LandingAssignment.java
            │       │                           │   │   ├── MailAssignment.java
            │       │                           │   │   └── WebWolfIntroduction.java
            │       │                           │   ├── xss/
            │       │                           │   │   ├── Comment.java
            │       │                           │   │   ├── CrossSiteScripting.java
            │       │                           │   │   ├── CrossSiteScriptingLesson1.java
            │       │                           │   │   ├── CrossSiteScriptingLesson3.java
            │       │                           │   │   ├── CrossSiteScriptingLesson4.java
            │       │                           │   │   ├── CrossSiteScriptingLesson5a.java
            │       │                           │   │   ├── CrossSiteScriptingLesson6a.java
            │       │                           │   │   ├── CrossSiteScriptingMitigation.java
            │       │                           │   │   ├── CrossSiteScriptingQuiz.java
            │       │                           │   │   ├── DOMCrossSiteScripting.java
            │       │                           │   │   ├── DOMCrossSiteScriptingVerifier.java
            │       │                           │   │   └── stored/
            │       │                           │   │       ├── CrossSiteScriptingStored.java
            │       │                           │   │       ├── StoredCrossSiteScriptingVerifier.java
            │       │                           │   │       └── StoredXssComments.java
            │       │                           │   └── xxe/
            │       │                           │       ├── BlindSendFileAssignment.java
            │       │                           │       ├── Comment.java
            │       │                           │       ├── CommentsCache.java
            │       │                           │       ├── CommentsEndpoint.java
            │       │                           │       ├── ContentTypeAssignment.java
            │       │                           │       ├── Ping.java
            │       │                           │       ├── SimpleXXE.java
            │       │                           │       ├── User.java
            │       │                           │       └── XXE.java
            │       │                           ├── server/
            │       │                           │   ├── ParentConfig.java
            │       │                           │   ├── StartWebGoat.java
            │       │                           │   └── StartupMessage.java
            │       │                           └── webwolf/
            │       │                               ├── FileServer.java
            │       │                               ├── MvcConfiguration.java
            │       │                               ├── WebSecurityConfig.java
            │       │                               ├── WebWolf.java
            │       │                               ├── jwt/
            │       │                               │   ├── JWTController.java
            │       │                               │   └── JWTToken.java
            │       │                               ├── mailbox/
            │       │                               │   ├── Email.java
            │       │                               │   ├── MailboxController.java
            │       │                               │   └── MailboxRepository.java
            │       │                               ├── requests/
            │       │                               │   ├── LandingPage.java
            │       │                               │   ├── Requests.java
            │       │                               │   └── WebWolfTraceRepository.java
            │       │                               └── user/
            │       │                                   ├── UserRepository.java
            │       │                                   ├── UserService.java
            │       │                                   └── WebGoatUser.java
            │       ├── npm/
            │       │   └── index.js
            │       └── python/
            │           └── main.py
            └── yarn/
                ├── exampleYarnMonorepo/
                │   ├── .gitignore
                │   ├── mobile/
                │   │   └── package.json
                │   ├── package.json
                │   └── web/
                │       └── package.json
                └── exampleYarnPackage/
                    ├── .gitignore
                    └── package.json
Download .txt
Showing preview only (246K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2574 symbols across 491 files)

FILE: src/main/java/com/jfrog/ide/idea/Syncable.java
  type Syncable (line 6) | public interface Syncable {
    method getSyncEvent (line 7) | Topic<ApplicationEvents> getSyncEvent();

FILE: src/main/java/com/jfrog/ide/idea/actions/CollapseAllAction.java
  class CollapseAllAction (line 16) | public class CollapseAllAction extends AnAction implements DumbAware {
    method CollapseAllAction (line 20) | @SuppressWarnings("DialogTitleCapitalization")
    method CollapseAllAction (line 25) | public CollapseAllAction(@NotNull JTree tree) {
    method actionPerformed (line 30) | @Override

FILE: src/main/java/com/jfrog/ide/idea/actions/CreateIgnoreRuleAction.java
  class CreateIgnoreRuleAction (line 25) | public class CreateIgnoreRuleAction extends AbstractAction {
    method CreateIgnoreRuleAction (line 29) | public CreateIgnoreRuleAction(String ignoreRuleUrl, MouseEvent mouseEv...
    method actionPerformed (line 35) | @Override

FILE: src/main/java/com/jfrog/ide/idea/actions/ExpandAllAction.java
  class ExpandAllAction (line 16) | public class ExpandAllAction extends AnAction implements DumbAware {
    method ExpandAllAction (line 20) | @SuppressWarnings("DialogTitleCapitalization")
    method ExpandAllAction (line 25) | public ExpandAllAction(@NotNull JTree tree) {
    method actionPerformed (line 30) | @Override

FILE: src/main/java/com/jfrog/ide/idea/actions/GoToSettingsAction.java
  class GoToSettingsAction (line 12) | public class GoToSettingsAction extends AnAction {
    method GoToSettingsAction (line 13) | public GoToSettingsAction() {
    method actionPerformed (line 17) | @Override

FILE: src/main/java/com/jfrog/ide/idea/actions/RefreshBuildsAction.java
  class RefreshBuildsAction (line 10) | public class RefreshBuildsAction extends AnAction {
    method actionPerformed (line 12) | @Override

FILE: src/main/java/com/jfrog/ide/idea/actions/ScanTimeLabelAction.java
  class ScanTimeLabelAction (line 19) | public class ScanTimeLabelAction extends ToolbarLabelAction {
    method update (line 21) | @Override
    method getActionUpdateThread (line 44) | @NotNull

FILE: src/main/java/com/jfrog/ide/idea/actions/StartLocalScanAction.java
  class StartLocalScanAction (line 13) | public class StartLocalScanAction extends AnAction {
    method getActionUpdateThread (line 14) | @Override
    method actionPerformed (line 19) | @Override
    method update (line 28) | @Override

FILE: src/main/java/com/jfrog/ide/idea/actions/StopLocalScanAction.java
  class StopLocalScanAction (line 13) | public class StopLocalScanAction extends AnAction {
    method getActionUpdateThread (line 14) | @Override
    method actionPerformed (line 19) | @Override
    method update (line 28) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ci/CiManager.java
  class CiManager (line 46) | @State(name = "CiState")
    method CiManager (line 57) | private CiManager(@NotNull Project project) throws IOException {
    method getInstance (line 66) | public static CiManager getInstance(@NotNull Project project) {
    method asyncRefreshBuilds (line 70) | public void asyncRefreshBuilds() {
    method checkCanceled (line 110) | private void checkCanceled(com.intellij.openapi.progress.ProgressIndic...
    method loadBuild (line 124) | public void loadBuild(BuildGeneralInfo buildGeneralInfo) {
    method getBuildGeneralInfo (line 148) | public BuildGeneralInfo getBuildGeneralInfo(String buildIdentifier) {
    method loadFirstBuild (line 162) | private void loadFirstBuild() {
    method scanPreconditionsMet (line 171) | private boolean scanPreconditionsMet() {
    method registerOnChangeHandlers (line 188) | private void registerOnChangeHandlers() {
    method dispose (line 194) | @Override
    method sendUsageReport (line 202) | private void sendUsageReport() {

FILE: src/main/java/com/jfrog/ide/idea/configuration/GlobalSettings.java
  class GlobalSettings (line 40) | @Getter
    method GlobalSettings (line 45) | @SuppressWarnings("unused")
    method getInstance (line 50) | public static GlobalSettings getInstance() {
    method getState (line 61) | @Override
    method loadState (line 83) | @Override
    method noStateLoaded (line 89) | @Override
    method setServerConfig (line 100) | public void setServerConfig(@NotNull ServerConfigImpl serverConfig) {
    method updateConfig (line 110) | public void updateConfig(ServerConfigImpl serverConfig) {
    method setCommonConfigFields (line 124) | public void setCommonConfigFields(ServerConfigImpl serverConfig) {
    method setAdvancedSettings (line 133) | private void setAdvancedSettings(ServerConfigImpl serverConfig) {
    method reloadMissingConfiguration (line 149) | public boolean reloadMissingConfiguration() {
    method areXrayCredentialsSet (line 162) | public boolean areXrayCredentialsSet() {
    method areArtifactoryCredentialsSet (line 166) | public boolean areArtifactoryCredentialsSet() {
    method loadConnectionDetailsFromJfrogCli (line 175) | private void loadConnectionDetailsFromJfrogCli() {

FILE: src/main/java/com/jfrog/ide/idea/configuration/ServerConfigImpl.java
  class ServerConfigImpl (line 59) | @Immutable
    type ConnectionType (line 61) | public enum ConnectionType {
    method ServerConfigImpl (line 113) | ServerConfigImpl() {
    method ServerConfigImpl (line 116) | ServerConfigImpl(Builder builder) {
    method isXrayConfigured (line 135) | public boolean isXrayConfigured() {
    method isArtifactoryConfigured (line 139) | public boolean isArtifactoryConfigured() {
    method isAuthenticationConfigured (line 143) | private boolean isAuthenticationConfigured() {
    method equals (line 147) | @Override
    method hashCode (line 171) | @Override
    method getUsername (line 177) | @Override
    method getUrl (line 182) | @Override
    method getXrayUrl (line 187) | @Override
    method getArtifactoryUrl (line 192) | @Override
    method getPassword (line 197) | @Override
    method getAccessToken (line 203) | @Override
    method setConnectionType (line 208) | public void setConnectionType(ConnectionType connectionType) {
    method getConnectionType (line 212) | public ConnectionType getConnectionType() {
    method getCredentialsFromPasswordSafe (line 216) | public Credentials getCredentialsFromPasswordSafe() {
    method addCredentialsToPasswordSafe (line 220) | public void addCredentialsToPasswordSafe() {
    method removeCredentialsFromPasswordSafe (line 227) | public void removeCredentialsFromPasswordSafe() {
    method isInsecureTls (line 231) | @Override
    method getExcludedPaths (line 236) | public String getExcludedPaths() {
    method getPolicyType (line 240) | @Override
    method getProject (line 245) | @Override
    method getWatches (line 250) | @Override
    method getSslContext (line 255) | @Override
    method getConnectionRetries (line 260) | @Override
    method getConnectionTimeout (line 265) | @Override
    method getExternalResourcesRepo (line 270) | @Override
    method getJFrogSettingsCredentialsKey (line 275) | public String getJFrogSettingsCredentialsKey() {
    method setExcludedPaths (line 279) | void setExcludedPaths(String excludedPaths) {
    method setPolicyType (line 283) | void setPolicyType(PolicyType policyType) {
    method setProject (line 287) | void setProject(String project) {
    method setWatches (line 291) | void setWatches(String watches) {
    method getProxyConfForTargetUrl (line 302) | @Override
    method getProxyConfForTargetUrlUsingPac (line 324) | private ProxyConfiguration getProxyConfForTargetUrlUsingPac(HttpConfig...
    method getProxyConfForTargetUrlUsingManualConf (line 364) | private ProxyConfiguration getProxyConfForTargetUrlUsingManualConf(Htt...
    method setUrl (line 375) | public void setUrl(String url) {
    method setXrayUrl (line 379) | public void setXrayUrl(String xrayUrl) {
    method setArtifactoryUrl (line 383) | public void setArtifactoryUrl(String artifactoryUrl) {
    method setUsername (line 387) | public void setUsername(String username) {
    method setPassword (line 391) | public void setPassword(String password) {
    method setAccessToken (line 395) | public void setAccessToken(String accessToken) {
    method setCredentials (line 400) | void setCredentials(Credentials credentials) {
    method setConnectionRetries (line 412) | void setConnectionRetries(int connectionRetries) {
    method setConnectionTimeout (line 416) | void setConnectionTimeout(int connectionTimeout) {
    method setExternalResourcesRepo (line 420) | void setExternalResourcesRepo(String externalResourcesRepo) {
    method getScannerBinaryVersion (line 424) | public String getScannerBinaryVersion() {
    method setScannerBinaryVersion (line 428) | void setScannerBinaryVersion(String scannerBinaryVersion) {
    method setJFrogSettingsCredentialsKey (line 432) | public void setJFrogSettingsCredentialsKey(String jfrogSettingsCredent...
    method readConnectionDetailsFromEnv (line 440) | public void readConnectionDetailsFromEnv() {
    method readMissingConfFromEnv (line 484) | public void readMissingConfFromEnv() {
    method readConnectionDetailsFromJfrogCli (line 497) | public boolean readConnectionDetailsFromJfrogCli() throws IOException {
    method toString (line 524) | @Override
    class Builder (line 529) | public static class Builder {
      method build (line 547) | public ServerConfigImpl build() {
      method setConnectionType (line 551) | public Builder setConnectionType(ConnectionType connectionType) {
      method setUrl (line 556) | public Builder setUrl(String url) {
      method setXrayUrl (line 561) | public Builder setXrayUrl(String xrayUrl) {
      method setArtifactoryUrl (line 566) | public Builder setArtifactoryUrl(String artifactoryUrl) {
      method setUsername (line 571) | public Builder setUsername(@Nullable String username) {
      method setPassword (line 576) | public Builder setPassword(@Nullable String password) {
      method setAccessToken (line 582) | public Builder setAccessToken(@Nullable String accessToken) {
      method setExcludedPaths (line 588) | public Builder setExcludedPaths(@Nullable String excludedPaths) {
      method setPolicyType (line 593) | public Builder setPolicyType(PolicyType policyType) {
      method setProject (line 598) | public Builder setProject(@Nullable String project) {
      method setWatches (line 603) | public Builder setWatches(@Nullable String watches) {
      method setConnectionRetries (line 608) | public Builder setConnectionRetries(int connectionRetries) {
      method setConnectionTimeout (line 613) | public Builder setConnectionTimeout(int connectionTimeout) {
      method setExternalResourcesRepo (line 618) | public Builder setExternalResourcesRepo(String externalResourcesRepo) {
      method setScannerBinaryVersion (line 623) | public Builder setScannerBinaryVersion(String scannerBinaryVersion) {
      method setJFrogSettingsCredentialsKey (line 628) | public Builder setJFrogSettingsCredentialsKey(String jfrogSettingsCr...

FILE: src/main/java/com/jfrog/ide/idea/events/AnnotationEvents.java
  type AnnotationEvents (line 5) | public interface AnnotationEvents {
    method update (line 12) | void update(String filePath);

FILE: src/main/java/com/jfrog/ide/idea/events/ApplicationEvents.java
  type ApplicationEvents (line 10) | public interface ApplicationEvents {
    method update (line 26) | void update();

FILE: src/main/java/com/jfrog/ide/idea/events/BuildEvents.java
  type BuildEvents (line 11) | public interface BuildEvents {
    method update (line 17) | void update(BuildGeneralInfo generalInfo);

FILE: src/main/java/com/jfrog/ide/idea/events/ProjectEvents.java
  type ProjectEvents (line 11) | public interface ProjectEvents {
    method update (line 17) | void update(ProjectsMap.ProjectKey projectKey);

FILE: src/main/java/com/jfrog/ide/idea/exclusion/Excludable.java
  type Excludable (line 8) | public interface Excludable {
    method exclude (line 13) | void exclude(Project project);

FILE: src/main/java/com/jfrog/ide/idea/exclusion/ExclusionUtils.java
  class ExclusionUtils (line 9) | public class ExclusionUtils {
    method isExcludable (line 18) | public static boolean isExcludable(DependencyTree nodeToExclude, Depen...
    method getExcludable (line 29) | public static Excludable getExcludable(DependencyTree nodeToExclude, D...
    method getProjectRoot (line 43) | public static DependencyTree getProjectRoot(DependencyTree node) {

FILE: src/main/java/com/jfrog/ide/idea/exclusion/MavenExclusion.java
  class MavenExclusion (line 18) | public class MavenExclusion implements Excludable {
    method MavenExclusion (line 25) | public MavenExclusion(DependencyTree nodeToExclude, NavigationTarget n...
    method isExcludable (line 38) | public static boolean isExcludable(DependencyTree nodeToExclude, Depen...
    method isMavenPackageType (line 45) | public static boolean isMavenPackageType(DependencyTree node) {
    method exclude (line 49) | @Override
    method exclusionExists (line 82) | boolean exclusionExists(XmlTag[] allExclusions, String groupId, String...
    method createAndAddExclusionTags (line 96) | void createAndAddExclusionTags(XmlTag exclusionsTag, String groupId, S...
    method navigateToElement (line 105) | private void navigateToElement(XmlTag xmlElement) {

FILE: src/main/java/com/jfrog/ide/idea/inspections/AbstractInspection.java
  class AbstractInspection (line 42) | public abstract class AbstractInspection extends LocalInspectionTool imp...
    method AbstractInspection (line 48) | AbstractInspection(Descriptor descriptor) {
    method setAfterScan (line 52) | public void setAfterScan(boolean afterScan) {
    method visitElement (line 65) | void visitElement(ProblemsHolder problemsHolder, PsiElement element, b...
    method visitElement (line 93) | void visitElement(AnnotationHolder annotationHolder, PsiElement elemen...
    method getScanner (line 111) | abstract ScannerBase getScanner(Project project, String path);
    method isDependency (line 119) | abstract boolean isDependency(PsiElement element);
    method createComponentName (line 127) | abstract String createComponentName(PsiElement element);
    method getFileDescriptors (line 135) | Set<DescriptorFileTreeNode> getFileDescriptors(PsiElement element) {
    method showAnnotationIcon (line 160) | boolean showAnnotationIcon(PsiElement element) {
    method isShowInspection (line 170) | boolean isShowInspection(PsiElement element) {
    method getDependencies (line 197) | List<DependencyNode> getDependencies(PsiElement element, String compon...
    method getMatchDependencies (line 218) | private List<DependencyNode> getMatchDependencies(DescriptorFileTreeNo...
    method isNodeMatch (line 235) | boolean isNodeMatch(DependencyNode node, String componentName) {
    method getUpgradeVersion (line 242) | abstract UpgradeVersion getUpgradeVersion(String componentName, String...
    method registerProblem (line 244) | void registerProblem(ProblemsHolder problemsHolder, DependencyNode dep...
    method getDependencyDescription (line 275) | private String getDependencyDescription(String depComponent, boolean i...
    method convertFixVersionStringToMinFixVersion (line 283) | protected static String convertFixVersionStringToMinFixVersion(String ...
    method extractArtifactIdWithoutVersion (line 303) | private String extractArtifactIdWithoutVersion(String artifact) {

FILE: src/main/java/com/jfrog/ide/idea/inspections/AnnotationIconRenderer.java
  class AnnotationIconRenderer (line 25) | public class AnnotationIconRenderer extends GutterIconRenderer {
    method AnnotationIconRenderer (line 31) | public AnnotationIconRenderer(DefaultMutableTreeNode node, Severity se...
    method setProject (line 37) | public void setProject(Project project) {
    method equals (line 41) | @Override
    method hashCode (line 49) | @Override
    method getIcon (line 54) | @Override
    method getTooltipText (line 59) | @Override
    method getClickAction (line 64) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/AnnotationUtils.java
  class AnnotationUtils (line 17) | public class AnnotationUtils {
    method registerAnnotation (line 27) | static void registerAnnotation(AnnotationHolder annotationHolder, Depe...
    method getTopIssueString (line 52) | private static String getTopIssueString(DependencyNode node) {
    method getLicensesString (line 62) | private static String getLicensesString(DependencyNode node) {

FILE: src/main/java/com/jfrog/ide/idea/inspections/GoInspection.java
  class GoInspection (line 25) | public class GoInspection extends AbstractInspection {
    method GoInspection (line 27) | public GoInspection() {
    method buildVisitor (line 31) | @NotNull
    method annotate (line 43) | @Override
    method isDependency (line 50) | @Override
    method getScanner (line 56) | @Override
    method createComponentName (line 64) | @Override
    method getUpgradeVersion (line 76) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/GradleGroovyInspection.java
  class GradleGroovyInspection (line 29) | public class GradleGroovyInspection extends GradleInspection {
    method GradleGroovyInspection (line 35) | public GradleGroovyInspection() {
    method getLiteralValue (line 45) | public static String getLiteralValue(GrLiteral literal) {
    method isNamedArgumentComponent (line 54) | public static boolean isNamedArgumentComponent(PsiElement element) {
    method buildVisitor (line 58) | @NotNull
    method isDependency (line 73) | @Override
    method annotate (line 84) | @Override
    method parseComponentElements (line 94) | List<GroovyPsiElement> parseComponentElements(GrArgumentList element) {
    method createComponentName (line 119) | @Override
    method extractExpression (line 141) | private String extractExpression(PsiElement argumentList, String name) {
    method getUpgradeVersion (line 156) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/GradleInspection.java
  class GradleInspection (line 15) | public abstract class GradleInspection extends AbstractInspection {
    method GradleInspection (line 18) | public GradleInspection(Descriptor descriptor) {
    method getScanner (line 22) | @Override
    method showAnnotationIcon (line 31) | @Override
    method stripVersion (line 43) | public static String stripVersion(String componentId) {

FILE: src/main/java/com/jfrog/ide/idea/inspections/GradleKotlinInspection.java
  class GradleKotlinInspection (line 26) | public class GradleKotlinInspection extends GradleInspection {
    method GradleKotlinInspection (line 28) | public GradleKotlinInspection() {
    method buildVisitor (line 32) | @NotNull
    method annotate (line 46) | @Override
    method isDependency (line 53) | @Override
    method createComponentName (line 72) | @Override
    method extractArgument (line 99) | private String extractArgument(KtValueArgument ktValueArgument) {
    method getUpgradeVersion (line 107) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/JFrogSecurityAnnotator.java
  class JFrogSecurityAnnotator (line 33) | public class JFrogSecurityAnnotator extends ExternalAnnotator<PsiFile, L...
    method collectInformation (line 38) | @Nullable
    method doAnnotate (line 44) | @Nullable
    method apply (line 67) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/JFrogSecurityWarning.java
  class JFrogSecurityWarning (line 13) | @Getter
    method JFrogSecurityWarning (line 29) | public JFrogSecurityWarning(
    method JFrogSecurityWarning (line 55) | public JFrogSecurityWarning(SarifResult result, SourceCodeScanType rep...
    method isWarningApplicable (line 71) | private static boolean isWarningApplicable(SarifResult result, Rule ru...
    method getFilePath (line 75) | private static String getFilePath(SarifResult result) {
    method convertCodeFlowsToFindingInfo (line 79) | private static FindingInfo[][] convertCodeFlowsToFindingInfo(List<Code...
    method notApplicable (line 107) | public static JFrogSecurityWarning notApplicable(String ruleId, Source...
    method isApplicable (line 111) | public boolean isApplicable() {
    method getFirstRegion (line 115) | private static Region getFirstRegion(SarifResult result) {
    method setScannerSearchTarget (line 121) | public void setScannerSearchTarget(String scannerSearchTarget) {
    method uriToPath (line 125) | private static String uriToPath(String path) {
    method determineReason (line 129) | private static String determineReason(String resultMessage, String rul...

FILE: src/main/java/com/jfrog/ide/idea/inspections/JumpToCode.java
  class JumpToCode (line 22) | public class JumpToCode {
    method JumpToCode (line 31) | private JumpToCode(@NotNull Project project) {
    method getInstance (line 36) | public static JumpToCode getInstance(@NotNull Project project) {
    method execute (line 49) | public void execute(String filePath, int startRow, int endRow, int sta...
    method openFileInEditor (line 59) | private void openFileInEditor(VirtualFile file) {
    method highlightCode (line 63) | private void highlightCode(int startRow, int endRow, int startColumn, ...
    method getVirtualFile (line 74) | private VirtualFile getVirtualFile(String path) {
    method getDocument (line 78) | private Document getDocument(Editor editor) {
    method getOffset (line 84) | private int getOffset(Document document, int row, int column) {
    method highlightCode (line 88) | private void highlightCode(Editor editor, int startOffset, int endOffs...
    method scrollToHighlightedCode (line 94) | private void scrollToHighlightedCode(Editor editor, int startOffset) {

FILE: src/main/java/com/jfrog/ide/idea/inspections/MavenInspection.java
  class MavenInspection (line 26) | public class MavenInspection extends AbstractInspection {
    method MavenInspection (line 36) | public MavenInspection() {
    method buildVisitor (line 40) | @NotNull
    method annotate (line 53) | @Override
    method isDependencyOrPlugin (line 60) | boolean isDependencyOrPlugin(XmlTag xmlTag) {
    method isDependency (line 64) | @Override
    method getScanner (line 76) | @Override
    method createComponentName (line 84) | @Override
    method getUpgradeVersion (line 98) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/NpmInspection.java
  class NpmInspection (line 24) | public class NpmInspection extends AbstractInspection {
    method NpmInspection (line 26) | public NpmInspection() {
    method buildVisitor (line 30) | @NotNull
    method annotate (line 42) | @Override
    method isDependency (line 49) | @Override
    method getScanner (line 55) | @Override
    method isMatchingScanner (line 64) | boolean isMatchingScanner(ScannerBase scanner) {
    method createComponentName (line 68) | @Override
    method getUpgradeVersion (line 73) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/ShowInDependencyTree.java
  class ShowInDependencyTree (line 22) | public class ShowInDependencyTree implements LocalQuickFix, Iconable, Hi...
    method ShowInDependencyTree (line 28) | public ShowInDependencyTree(DependencyNode node, String dependencyDesc...
    method getIcon (line 33) | @Override
    method getFamilyName (line 38) | @NotNull
    method applyFix (line 44) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/YarnInspection.java
  class YarnInspection (line 14) | public class YarnInspection extends NpmInspection {
    method isMatchingScanner (line 15) | @Override
    method getUpgradeVersion (line 20) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GoUpgradeVersion.java
  class GoUpgradeVersion (line 19) | public class GoUpgradeVersion extends UpgradeVersion {
    method GoUpgradeVersion (line 22) | public GoUpgradeVersion(String componentName, String fixVersion, Colle...
    method upgradeComponentVersion (line 27) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GradleGroovyUpgradeVersion.java
  class GradleGroovyUpgradeVersion (line 25) | public class GradleGroovyUpgradeVersion extends UpgradeVersion {
    method GradleGroovyUpgradeVersion (line 27) | public GradleGroovyUpgradeVersion(String componentName, String fixVers...
    method upgradeComponentVersion (line 31) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GradleKotlinUpgradeVersion.java
  class GradleKotlinUpgradeVersion (line 22) | public class GradleKotlinUpgradeVersion extends UpgradeVersion {
    method GradleKotlinUpgradeVersion (line 24) | public GradleKotlinUpgradeVersion(String componentName, String fixVers...
    method upgradeComponentVersion (line 28) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/MavenUpgradeVersion.java
  class MavenUpgradeVersion (line 23) | public class MavenUpgradeVersion extends UpgradeVersion {
    method MavenUpgradeVersion (line 27) | public MavenUpgradeVersion(String componentName, String fixVersion, Co...
    method upgradeComponentVersion (line 31) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/NpmUpgradeVersion.java
  class NpmUpgradeVersion (line 18) | public class NpmUpgradeVersion extends UpgradeVersion {
    method NpmUpgradeVersion (line 21) | public NpmUpgradeVersion(String componentName, String fixVersion, Coll...
    method upgradeComponentVersion (line 26) | @Override

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/UpgradeVersion.java
  class UpgradeVersion (line 28) | public abstract class UpgradeVersion implements LocalQuickFix, Iconable,...
    method UpgradeVersion (line 35) | public UpgradeVersion(String componentName, String fixVersion, Collect...
    method getIcon (line 43) | @Override
    method getFamilyName (line 48) | @NotNull
    method applyFix (line 54) | @Override
    method upgradeComponentVersion (line 75) | abstract public void upgradeComponentVersion(@NotNull Project project,...

FILE: src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/YarnUpgradeVersion.java
  class YarnUpgradeVersion (line 18) | public class YarnUpgradeVersion extends UpgradeVersion {
    method YarnUpgradeVersion (line 21) | public YarnUpgradeVersion(String componentName, String fixVersion, Col...
    method upgradeComponentVersion (line 26) | @Override

FILE: src/main/java/com/jfrog/ide/idea/log/Logger.java
  class Logger (line 27) | public class Logger implements Log {
    method getInstance (line 38) | public static Logger getInstance() {
    method Logger (line 42) | private Logger() {
    method debug (line 45) | @Override
    method info (line 50) | @Override
    method warn (line 57) | @Override
    method error (line 70) | @Override
    method error (line 86) | @Override
    method log (line 96) | private static void log(String title, String details, NotificationType...
    method popupBalloon (line 103) | private static void popupBalloon(String content, NotificationType noti...
    method prependPrefix (line 115) | private static String prependPrefix(String message, NotificationType n...
    method addOpenSettingsLink (line 133) | public static void addOpenSettingsLink(String details, Project project...
    method showActionableBalloon (line 155) | public static void showActionableBalloon(Project project, String htmlC...

FILE: src/main/java/com/jfrog/ide/idea/log/ProgressIndicatorImpl.java
  class ProgressIndicatorImpl (line 9) | public class ProgressIndicatorImpl implements com.jfrog.ide.common.log.P...
    method ProgressIndicatorImpl (line 13) | public ProgressIndicatorImpl(ProgressIndicator indicator) {
    method setFraction (line 17) | @Override
    method setIndeterminate (line 23) | @Override
    method setText (line 28) | @Override

FILE: src/main/java/com/jfrog/ide/idea/navigation/NavigationService.java
  class NavigationService (line 21) | public class NavigationService {
    method getInstance (line 25) | public static NavigationService getInstance(@NotNull Project project) {
    method clearNavigationMap (line 32) | public static void clearNavigationMap(@NotNull Project project) {
    method addNavigation (line 43) | public void addNavigation(DependencyNode treeNode, PsiElement navigati...
    method getNavigation (line 67) | public Set<NavigationTarget> getNavigation(DependencyNode treeNode) {

FILE: src/main/java/com/jfrog/ide/idea/navigation/NavigationTarget.java
  class NavigationTarget (line 10) | public class NavigationTarget {
    method NavigationTarget (line 17) | NavigationTarget(PsiElement element, int lineNumber, String componentN...
    method getElement (line 23) | public PsiElement getElement() {
    method getLineNumber (line 27) | public int getLineNumber() {
    method getComponentName (line 31) | public String getComponentName() {
    method equals (line 35) | @Override
    method hashCode (line 45) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/ApplicabilityScannerExecutor.java
  class ApplicabilityScannerExecutor (line 22) | public class ApplicabilityScannerExecutor extends ScanBinaryExecutor {
    method ApplicabilityScannerExecutor (line 26) | public ApplicabilityScannerExecutor(Log log) {
    method execute (line 31) | public List<JFrogSecurityWarning> execute(ScanConfig.Builder inputFile...
    method parseOutputSarif (line 35) | @Override
    method getUniqueRules (line 71) | private List<Rule> getUniqueRules(List<Rule> rules) {
    method createSpecificFileIssueNodes (line 90) | @Override
    method createSpecificFileIssueNodes (line 95) | List<FileTreeNode> createSpecificFileIssueNodes(List<JFrogSecurityWarn...
    method getScannerFeatureName (line 129) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/GoScanner.java
  class GoScanner (line 31) | public class GoScanner extends SingleDescriptorScanner {
    method GoScanner (line 41) | GoScanner(Project project, String basePath, ExecutorService executor, ...
    method buildTree (line 54) | @Override
    method getProjectDescriptors (line 59) | @Override
    method getInspectionTool (line 69) | @Override
    method getPackageManagerType (line 81) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/GradleScanner.java
  class GradleScanner (line 45) | public class GradleScanner extends SingleDescriptorScanner {
    method GradleScanner (line 56) | GradleScanner(Project project, String basePath, ExecutorService execut...
    method getProjectDescriptors (line 72) | @Override
    method getInspectionTool (line 88) | @Override
    method getPackageManagerType (line 93) | @Override
    method buildTree (line 98) | @Override
    method getGradleExeAndJdk (line 109) | String getGradleExeAndJdk(Map<String, String> env) {
    method resolveGradleAndSetJavaHome (line 126) | private File resolveGradleAndSetJavaHome(Map<String, String> env) {
    method isMisconfigurationError (line 163) | private boolean isMisconfigurationError(String linkedProjectPath) {

FILE: src/main/java/com/jfrog/ide/idea/scan/IACScannerExecutor.java
  class IACScannerExecutor (line 21) | public class IACScannerExecutor extends ScanBinaryExecutor {
    method IACScannerExecutor (line 25) | public IACScannerExecutor(Log log) {
    method execute (line 29) | public List<JFrogSecurityWarning> execute(ScanConfig.Builder inputFile...
    method createSpecificFileIssueNodes (line 33) | @Override
    method getScannerFeatureName (line 52) | @Override
    method isPackageTypeSupported (line 57) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/MavenScanner.java
  class MavenScanner (line 43) | public class MavenScanner extends ScannerBase {
    method MavenScanner (line 51) | MavenScanner(Project project, ExecutorService executor, ScanLogic scan...
    method isApplicable (line 56) | static boolean isApplicable(@NotNull Project project) {
    method getProjectPaths (line 66) | public Set<Path> getProjectPaths() {
    method buildTree (line 73) | @Override
    method getProjectDescriptors (line 86) | @Override
    method getInspectionTool (line 95) | @Override
    method getPackageManagerType (line 100) | @Override
    method populateMavenModule (line 112) | private void populateMavenModule(Map<String, DepTreeNode> nodes, DepTr...
    method getModuleByVirtualFile (line 124) | private MavenProject getModuleByVirtualFile(VirtualFile virtualFile) {
    method addMavenProjectDependencies (line 132) | private void addMavenProjectDependencies(Map<String, DepTreeNode> node...
    method getOrCreateMavenModuleNode (line 139) | private DepTreeNode getOrCreateMavenModuleNode(Map<String, DepTreeNode...
    method updateChildrenNodes (line 146) | private void updateChildrenNodes(Map<String, DepTreeNode> nodes, DepTr...
    method groupDependenciesToDescriptorNodes (line 175) | @Override
    method getDependentModules (line 205) | Set<String> getDependentModules(String compId, DepTree depTree, Map<St...

FILE: src/main/java/com/jfrog/ide/idea/scan/NpmScanner.java
  class NpmScanner (line 26) | public class NpmScanner extends SingleDescriptorScanner {
    method NpmScanner (line 36) | NpmScanner(Project project, String basePath, ExecutorService executor,...
    method buildTree (line 42) | @Override
    method getProjectDescriptors (line 47) | @Override
    method getInspectionTool (line 57) | @Override
    method getPackageManagerType (line 62) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/PypiScanner.java
  class PypiScanner (line 29) | public class PypiScanner extends SingleDescriptorScanner {
    method PypiScanner (line 39) | PypiScanner(Project project, Sdk pythonSdk, ExecutorService executor, ...
    method buildTree (line 45) | @Override
    method createSdkDependencyTree (line 60) | private DepTree createSdkDependencyTree(Sdk pythonSdk) throws Executio...
    method getProjectDescriptors (line 99) | @Override
    method getInspectionTool (line 104) | @Override
    method getPackageManagerType (line 109) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/SastScannerExecutor.java
  class SastScannerExecutor (line 22) | public class SastScannerExecutor extends ScanBinaryExecutor {
    method SastScannerExecutor (line 30) | public SastScannerExecutor(Log log) {
    method execute (line 34) | public List<JFrogSecurityWarning> execute(ScanConfig.Builder inputFile...
    method createSpecificFileIssueNodes (line 38) | @Override
    method getScannerFeatureName (line 57) | @Override
    method isPackageTypeSupported (line 63) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/ScanBinaryExecutor.java
  class ScanBinaryExecutor (line 55) | public abstract class ScanBinaryExecutor {
    method ScanBinaryExecutor (line 83) | ScanBinaryExecutor(SourceCodeScanType scanType, Log log) {
    method createManagerBuilder (line 92) | private ArtifactoryManagerBuilder createManagerBuilder(boolean useJFro...
    method setOsDistribution (line 105) | protected void setOsDistribution() {
    method getBinaryDownloadURL (line 114) | String getBinaryDownloadURL(String externalResourcesRepo) {
    method getEffectiveScannerVersion (line 123) | String getEffectiveScannerVersion() {
    method getScannerFeatureName (line 135) | abstract Feature getScannerFeatureName();
    method execute (line 137) | abstract List<JFrogSecurityWarning> execute(ScanConfig.Builder inputFi...
    method execute (line 139) | protected List<JFrogSecurityWarning> execute(ScanConfig.Builder inputF...
    method execute (line 143) | protected List<JFrogSecurityWarning> execute(ScanConfig.Builder inputF...
    method createSpecificFileIssueNodes (line 206) | abstract List<FileTreeNode> createSpecificFileIssueNodes(List<JFrogSec...
    method updateBinaryIfNeeded (line 208) | private void updateBinaryIfNeeded() throws IOException {
    method getFileChecksumFromServer (line 242) | public String getFileChecksumFromServer(ArtifactoryManager artifactory...
    method shouldExecute (line 254) | protected boolean shouldExecute() {
    method isPackageTypeSupported (line 272) | protected boolean isPackageTypeSupported(PackageManagerType type) {
    method parseOutputSarif (line 276) | protected List<JFrogSecurityWarning> parseOutputSarif(Path outputFile)...
    method getOutputObj (line 297) | protected Output getOutputObj(Path outputFile) throws IOException {
    method downloadBinary (line 302) | protected void downloadBinary(ArtifactoryManager artifactoryManager, S...
    method createTempRunInputFile (line 325) | Path createTempRunInputFile(Object scanInput) throws IOException {
    method createEnvWithCredentials (line 333) | private Map<String, String> createEnvWithCredentials() {

FILE: src/main/java/com/jfrog/ide/idea/scan/ScanManager.java
  class ScanManager (line 33) | public class ScanManager {
    method ScanManager (line 40) | private ScanManager(@NotNull Project project) {
    method getInstance (line 46) | public static ScanManager getInstance(@NotNull Project project) {
    method getScanners (line 50) | public static Set<ScannerBase> getScanners(@NotNull Project project) {
    method runInspections (line 55) | public void runInspections(Project project) {
    method startScan (line 67) | public void startScan() {
    method stopScan (line 124) | public void stopScan() {
    method handleJfrogInactiveEnvironment (line 135) | private void handleJfrogInactiveEnvironment(String reactivationUrl) {
    method refreshScanners (line 143) | public void refreshScanners(ScanLogic scanLogic, @Nullable ExecutorSer...
    method isScanInProgress (line 147) | public boolean isScanInProgress() {
    method createScanLogic (line 156) | private ScanLogic createScanLogic() throws IOException {

FILE: src/main/java/com/jfrog/ide/idea/scan/ScannerBase.java
  class ScannerBase (line 60) | public abstract class ScannerBase {
    method ScannerBase (line 85) | ScannerBase(@NotNull Project project, String basePath, ComponentPrefix...
    method setExecutor (line 96) | void setExecutor(ExecutorService executor) {
    method setScanLogic (line 100) | void setScanLogic(ScanLogic logic) {
    method buildTree (line 108) | protected abstract DepTree buildTree() throws IOException;
    method getProjectDescriptors (line 115) | protected abstract PsiFile[] getProjectDescriptors();
    method getInspectionTool (line 123) | @Nullable
    method sendUsageReport (line 126) | protected void sendUsageReport() {
    method getPackageManagerType (line 130) | protected abstract PackageManagerType getPackageManagerType();
    method groupDependenciesToDescriptorNodes (line 142) | protected abstract List<FileTreeNode> groupDependenciesToDescriptorNod...
    method scanAndUpdate (line 149) | private void scanAndUpdate(ProgressIndicator indicator) {
    method buildImpactGraph (line 188) | protected List<FileTreeNode> buildImpactGraph(Map<String, DependencyNo...
    method getParents (line 201) | static Map<String, Set<String>> getParents(DepTree depTree) {
    method asyncScanAndUpdateResults (line 216) | void asyncScanAndUpdateResults() {
    method stopScan (line 257) | void stopScan() {
    method getTaskTitle (line 268) | private String getTaskTitle() {
    method createRunnable (line 289) | public static Runnable createRunnable(Task.Backgroundable task, CountD...
    method getProjectPaths (line 317) | public Set<Path> getProjectPaths() {
    method runInspections (line 323) | void runInspections() {
    method addScanResults (line 347) | private void addScanResults(List<FileTreeNode> fileTreeNodes) {
    method checkCanceled (line 355) | protected void checkCanceled() {
    method isScanInProgress (line 363) | boolean isScanInProgress() {
    method isScanErrorOccurred (line 367) | boolean isScanErrorOccurred() {
    method isScanCanceled (line 371) | boolean isScanCanceled() {
    method getProjectPath (line 375) | public String getProjectPath() {

FILE: src/main/java/com/jfrog/ide/idea/scan/ScannerFactory.java
  class ScannerFactory (line 29) | public class ScannerFactory {
    method ScannerFactory (line 32) | public ScannerFactory(Project project) {
    method getModuleIdentifier (line 36) | public static int getModuleIdentifier(String name, String path) {
    method refreshScanners (line 44) | public Map<Integer, ScannerBase> refreshScanners(Map<Integer, ScannerB...
    method refreshGenericScanners (line 64) | private void refreshGenericScanners(Map<Integer, ScannerBase> newScann...
    method refreshMavenScanner (line 95) | private void refreshMavenScanner(Map<Integer, ScannerBase> newScanners...
    method refreshPypiScanners (line 128) | private void refreshPypiScanners(Map<Integer, ScannerBase> newScanners...
    method refreshGenericScannersByType (line 150) | private void refreshGenericScannersByType(Set<String> packageDirs, Map...
    method createGenericScanner (line 175) | private ScannerBase createGenericScanner(GenericScannerType type, Stri...
    type GenericScannerType (line 193) | private enum GenericScannerType {

FILE: src/main/java/com/jfrog/ide/idea/scan/SecretsScannerExecutor.java
  class SecretsScannerExecutor (line 21) | public class SecretsScannerExecutor extends ScanBinaryExecutor {
    method SecretsScannerExecutor (line 25) | public SecretsScannerExecutor(Log log) {
    method execute (line 29) | public List<JFrogSecurityWarning> execute(ScanConfig.Builder inputFile...
    method createSpecificFileIssueNodes (line 33) | @Override
    method getScannerFeatureName (line 52) | @Override
    method isPackageTypeSupported (line 57) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/SingleDescriptorScanner.java
  class SingleDescriptorScanner (line 20) | public abstract class SingleDescriptorScanner extends ScannerBase {
    method SingleDescriptorScanner (line 32) | SingleDescriptorScanner(@NotNull Project project, String basePath, Com...
    method SingleDescriptorScanner (line 46) | SingleDescriptorScanner(@NotNull Project project, String basePath, Com...
    method groupDependenciesToDescriptorNodes (line 60) | @Override
    method isDirectDependency (line 70) | private boolean isDirectDependency(DependencyNode dependency, DepTree ...

FILE: src/main/java/com/jfrog/ide/idea/scan/SourceCodeScannerManager.java
  class SourceCodeScannerManager (line 57) | public class SourceCodeScannerManager {
    method SourceCodeScannerManager (line 67) | public SourceCodeScannerManager(Project project) {
    method SourceCodeScannerManager (line 72) | public SourceCodeScannerManager(Project project, PackageManagerType pa...
    method applicabilityScan (line 84) | public List<FileTreeNode> applicabilityScan(ProgressIndicator indicato...
    method asyncScanAndUpdateResults (line 120) | void asyncScanAndUpdateResults(ExecutorService executor, Logger log) {
    method stopScan (line 162) | public void stopScan() {
    method sourceCodeScanAndUpdate (line 168) | private void sourceCodeScanAndUpdate(ProgressIndicator indicator, Runn...
    method scan (line 177) | private void scan(ModuleConfig moduleConfig, ProgressIndicator indicat...
    method parseJFrogApplicationsConfig (line 205) | private JFrogApplicationsConfig parseJFrogApplicationsConfig() throws ...
    method addSourceCodeScanResults (line 214) | private void addSourceCodeScanResults(List<FileTreeNode> fileTreeNodes) {
    method createBasicScannerInput (line 222) | private ScanConfig.Builder createBasicScannerInput() {
    method createBasicScannerInput (line 227) | private ScanConfig.Builder createBasicScannerInput(ModuleConfig config...
    method convertToSkippedFolders (line 274) | public static List<String> convertToSkippedFolders(String excludePatte...
    method mapDirectIssuesByCve (line 297) | private Map<String, List<VulnerabilityNode>> mapDirectIssuesByCve(Coll...
    method initScannersCollection (line 323) | private Map<SourceCodeScanType, ScanBinaryExecutor> initScannersCollec...
    method isScanInProgress (line 331) | public boolean isScanInProgress() {

FILE: src/main/java/com/jfrog/ide/idea/scan/YarnScanner.java
  class YarnScanner (line 34) | public class YarnScanner extends SingleDescriptorScanner {
    method YarnScanner (line 45) | YarnScanner(Project project, String basePath, ExecutorService executor...
    method buildTree (line 51) | @Override
    method getProjectDescriptors (line 56) | @Override
    method getInspectionTool (line 66) | @Override
    method getPackageManagerType (line 71) | @Override
    method getPackageNameToVersionsMap (line 82) | Map<String, Set<String>> getPackageNameToVersionsMap(Set<String> packa...
    method buildImpactGraphFromPaths (line 98) | private void buildImpactGraphFromPaths(DescriptorFileTreeNode descript...
    method buildImpactGraph (line 125) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/AnalyzeSuppression.java
  class AnalyzeSuppression (line 7) | @Getter

FILE: src/main/java/com/jfrog/ide/idea/scan/data/ArtifactLocation.java
  class ArtifactLocation (line 7) | public class ArtifactLocation {
    method getUri (line 12) | public String getUri() {
    method setUri (line 16) | @SuppressWarnings("unused")
    method hashCode (line 21) | @Override
    method equals (line 26) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/CodeFlow.java
  class CodeFlow (line 10) | public class CodeFlow {
    method getThreadFlows (line 15) | @SuppressWarnings("unused")
    method setThreadFlows (line 20) | @SuppressWarnings("unused")
    method hashCode (line 25) | @Override
    method equals (line 30) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Driver.java
  class Driver (line 9) | public class Driver {
    method getName (line 17) | public String getName() {
    method setName (line 21) | public void setName(String name) {
    method getRules (line 24) | @SuppressWarnings({"unused"})
    method setLocations (line 29) | @SuppressWarnings({"unused"})
    method hashCode (line 34) | @Override
    method equals (line 39) | @Override
    method getRuleById (line 51) | public Rule getRuleById(String ruleId) throws IndexOutOfBoundsException {

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Invocation.java
  class Invocation (line 11) | @JsonPropertyOrder({"executionSuccessful", "arguments", "workingDirector...
    method getExecutionSuccessful (line 21) | @SuppressWarnings("unused")
    method setExecutionSuccessful (line 26) | @SuppressWarnings("unused")
    method getArguments (line 31) | @SuppressWarnings("unused")
    method setArguments (line 36) | @SuppressWarnings("unused")
    method getWorkingDirectory (line 41) | @SuppressWarnings("unused")
    method setWorkingDirectory (line 46) | @SuppressWarnings("unused")
    method hashCode (line 51) | @Override
    method equals (line 56) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Location.java
  class Location (line 7) | public class Location {
    method getPhysicalLocation (line 12) | public PhysicalLocation getPhysicalLocation() {
    method setPhysicalLocation (line 16) | @SuppressWarnings("unused")
    method hashCode (line 21) | @Override
    method equals (line 26) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Message.java
  class Message (line 7) | public class Message {
    method getText (line 15) | public String getText() {
    method setText (line 19) | public void setText(String text) {
    method hashCode (line 23) | @Override
    method equals (line 28) | @Override
    method getMarkdown (line 40) | @SuppressWarnings({"unused"})
    method setMarkdown (line 45) | @SuppressWarnings({"unused"})

FILE: src/main/java/com/jfrog/ide/idea/scan/data/NewScanConfig.java
  class NewScanConfig (line 11) | @Getter
    method NewScanConfig (line 28) | public NewScanConfig(ScanConfig inputParams) {

FILE: src/main/java/com/jfrog/ide/idea/scan/data/NewScansConfig.java
  class NewScansConfig (line 9) | @Getter
    method NewScansConfig (line 15) | public NewScansConfig(NewScanConfig scan) {

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Output.java
  class Output (line 10) | public class Output {
    method getRuns (line 17) | public List<Run> getRuns() {
    method setRuns (line 20) | @SuppressWarnings("unused")
    method getVersion (line 25) | public String getVersion() {
    method setVersion (line 29) | public void setVersion(String version) {
    method hashCode (line 33) | @Override
    method equals (line 38) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/PackageManagerType.java
  type PackageManagerType (line 5) | @Getter
    method PackageManagerType (line 16) | PackageManagerType(String name) {

FILE: src/main/java/com/jfrog/ide/idea/scan/data/PhysicalLocation.java
  class PhysicalLocation (line 6) | public class PhysicalLocation {
    method getArtifactLocation (line 13) | public ArtifactLocation getArtifactLocation() {
    method setArtifactLocation (line 17) | @SuppressWarnings("unused")
    method getRegion (line 22) | public Region getRegion() {
    method setRegion (line 26) | @SuppressWarnings("unused")
    method hashCode (line 31) | @Override
    method equals (line 36) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Region.java
  class Region (line 7) | public class Region {
    method getEndColumn (line 21) | public int getEndColumn() {
    method setEndColumn (line 25) | @SuppressWarnings("unused")
    method getEndLine (line 30) | public int getEndLine() {
    method setEndLine (line 34) | @SuppressWarnings("unused")
    method getStartColumn (line 39) | public int getStartColumn() {
    method setStartColumn (line 43) | @SuppressWarnings("unused")
    method getStartLine (line 48) | public int getStartLine() {
    method setStartLine (line 52) | @SuppressWarnings("unused")
    method getSnippet (line 57) | public Message getSnippet() {
    method setSnippet (line 61) | @SuppressWarnings("unused")
    method hashCode (line 66) | @Override
    method equals (line 71) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Rule.java
  class Rule (line 7) | public class Rule {
    method getId (line 24) | public String getId() {
    method setId (line 28) | public void setId(String id) {
    method getShortDescription (line 32) | @SuppressWarnings({"unused"})
    method setShortDescription (line 37) | @SuppressWarnings({"unused"})
    method getFullDescription (line 42) | @SuppressWarnings({"unused"})
    method setFullDescription (line 47) | @SuppressWarnings({"unused"})
    method getRuleProperties (line 52) | public Optional<RuleProperties> getRuleProperties() {
    method hashCode (line 56) | @Override
    method equals (line 62) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/RuleProperties.java
  class RuleProperties (line 6) | @Getter

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Run.java
  class Run (line 10) | public class Run {
    method getTool (line 19) | public Tool getTool() {
    method setTool (line 23) | @SuppressWarnings({"unused"})
    method getInvocations (line 28) | @SuppressWarnings({"unused"})
    method setInvocations (line 33) | @SuppressWarnings({"unused"})
    method getResults (line 38) | public List<SarifResult> getResults() {
    method getRuleFromRunById (line 42) | public Rule getRuleFromRunById(String ruleId) {
    method setResults (line 46) | public void setResults(List<SarifResult> results) {
    method hashCode (line 50) | @Override
    method equals (line 55) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/SarifResult.java
  class SarifResult (line 13) | @Getter
    method setKind (line 30) | public void setKind(String kind) {
    method setSeverity (line 34) | public void setSeverity(String severity) {
    method setSuppressions (line 38) | public void setSuppressions(AnalyzeSuppression[] suppressions) {
    method getKind (line 42) | public String getKind() {
    method getSeverity (line 46) | public String getSeverity() {
    method setMessage (line 50) | public void setMessage(Message message) {
    method setLocations (line 54) | @SuppressWarnings({"unused"})
    method setRuleId (line 59) | @SuppressWarnings({"unused"})
    method getCodeFlows (line 64) | @SuppressWarnings({"unused"})
    method setCodeFlows (line 69) | @SuppressWarnings({"unused"})
    method hashCode (line 74) | @Override
    method equals (line 79) | @Override
    method isNotSuppressed (line 91) | public boolean isNotSuppressed() {

FILE: src/main/java/com/jfrog/ide/idea/scan/data/ScanConfig.java
  class ScanConfig (line 11) | @Getter
    method ScanConfig (line 31) | @SuppressWarnings("unused")
    method ScanConfig (line 35) | ScanConfig(Builder builder) {
    method getScanType (line 46) | @SuppressWarnings("unused")
    method setScanType (line 51) | @SuppressWarnings("unused")
    method setLanguage (line 56) | public void setLanguage(String language) {
    method setRoots (line 60) | @SuppressWarnings("unused")
    method setOutput (line 65) | @SuppressWarnings("unused")
    method getGrepDisable (line 70) | @SuppressWarnings("unused")
    method setGrepDisable (line 75) | @SuppressWarnings("unused")
    method getCves (line 80) | @SuppressWarnings("unused")
    method setCves (line 85) | @SuppressWarnings("unused")
    method getSkippedFolders (line 90) | @SuppressWarnings("unused")
    method setSkippedFolders (line 95) | @SuppressWarnings("unused")
    class Builder (line 100) | public static class Builder {
      method Builder (line 110) | public Builder() {
      method scanType (line 117) | @SuppressWarnings("UnusedReturnValue")
      method language (line 123) | public Builder language(String language) {
      method roots (line 128) | public Builder roots(List<String> roots) {
      method output (line 133) | @SuppressWarnings("UnusedReturnValue")
      method grepDisable (line 139) | @SuppressWarnings("unused")
      method cves (line 145) | public Builder cves(List<String> cves) {
      method skippedFolders (line 150) | @SuppressWarnings("unused")
      method excludedRules (line 156) | @SuppressWarnings("unused")
      method Build (line 162) | public ScanConfig Build() {

FILE: src/main/java/com/jfrog/ide/idea/scan/data/ScansConfig.java
  class ScansConfig (line 8) | @Getter
    method ScansConfig (line 13) | @SuppressWarnings("unused")
    method ScansConfig (line 17) | public ScansConfig(List<ScanConfig> scans) {
    method setScans (line 21) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/scan/data/ThreadFlow.java
  class ThreadFlow (line 10) | public class ThreadFlow {
    method getLocations (line 15) | @SuppressWarnings({"unused"})
    method setLocations (line 20) | @SuppressWarnings("unused")
    method hashCode (line 25) | @Override
    method equals (line 30) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/ThreadFlowLocation.java
  class ThreadFlowLocation (line 7) | public class ThreadFlowLocation {
    method getLocation (line 12) | @SuppressWarnings("unused")
    method setLocation (line 17) | @SuppressWarnings("unused")
    method hashCode (line 22) | @Override
    method equals (line 27) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/Tool.java
  class Tool (line 7) | public class Tool {
    method getDriver (line 12) | @SuppressWarnings("unused")
    method setDriver (line 17) | @SuppressWarnings("unused")
    method hashCode (line 22) | @Override
    method equals (line 27) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/WorkingDirectory.java
  class WorkingDirectory (line 7) | public class WorkingDirectory {
    method getUri (line 12) | @SuppressWarnings("unused")
    method setUri (line 17) | @SuppressWarnings("unused")
    method hashCode (line 22) | @Override
    method equals (line 27) | @Override

FILE: src/main/java/com/jfrog/ide/idea/scan/data/applications/JFrogApplicationsConfig.java
  class JFrogApplicationsConfig (line 17) | @Getter
    method createApplicationConfigWithDefaultModule (line 25) | public static JFrogApplicationsConfig createApplicationConfigWithDefau...

FILE: src/main/java/com/jfrog/ide/idea/scan/data/applications/ModuleConfig.java
  class ModuleConfig (line 10) | @Getter

FILE: src/main/java/com/jfrog/ide/idea/scan/data/applications/ScannerConfig.java
  class ScannerConfig (line 9) | @Getter

FILE: src/main/java/com/jfrog/ide/idea/scan/utils/ImpactTreeBuilder.java
  class ImpactTreeBuilder (line 11) | public class ImpactTreeBuilder {
    method populateImpactTrees (line 20) | public static void populateImpactTrees(Map<String, DependencyNode> vul...
    method walkParents (line 34) | private static void walkParents(DependencyNode depNode, Map<String, Se...
    method addImpactPathToDependencyNode (line 54) | public static void addImpactPathToDependencyNode(DependencyNode depend...

FILE: src/main/java/com/jfrog/ide/idea/scan/utils/ScanUtils.java
  class ScanUtils (line 21) | public class ScanUtils {
    method createScanPaths (line 28) | public static Set<Path> createScanPaths(Project project) {
    method getOSAndArc (line 42) | public static String getOSAndArc() throws IOException {

FILE: src/main/java/com/jfrog/ide/idea/ui/AbstractJFrogToolWindow.java
  class AbstractJFrogToolWindow (line 18) | public abstract class AbstractJFrogToolWindow extends SimpleToolWindowPa...
    method AbstractJFrogToolWindow (line 26) | public AbstractJFrogToolWindow(@NotNull Project project) {
    method createActionToolbar (line 38) | abstract JPanel createActionToolbar();
    method resetViews (line 43) | abstract void resetViews();
    method createJFrogToolbar (line 45) | JPanel createJFrogToolbar(ActionGroup actionGroup) {
    method onConfigurationChange (line 56) | public void onConfigurationChange() {
    method dispose (line 60) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/CiComponentsTree.java
  class CiComponentsTree (line 24) | public class CiComponentsTree extends ComponentsTree {
    method CiComponentsTree (line 28) | public CiComponentsTree(@NotNull Project project) {
    method getInstance (line 32) | public static CiComponentsTree getInstance(@NotNull Project project) {
    method setBuildsMenu (line 36) | public void setBuildsMenu(BuildsMenu buildsMenu) {
    method populateTree (line 40) | private void populateTree(DependencyTree root) {
    method addOnProjectChangeListener (line 49) | public void addOnProjectChangeListener(MessageBusConnection busConnect...
    method appendProjectWhenReady (line 53) | private void appendProjectWhenReady(DependencyTree filteredRoot) {
    method applyFilters (line 68) | public void applyFilters(ProjectsMap.ProjectKey projectKey) {
    method reset (line 85) | @Override
    method applyFiltersForAllProjects (line 91) | public void applyFiltersForAllProjects() {
    method addScanResults (line 98) | public void addScanResults(String projectName, DependencyTree dependen...
    method appendProject (line 102) | private void appendProject(DependencyTree filteredRoot) {
    method addOrReplace (line 128) | private void addOrReplace(DependencyTree root, DependencyTree filtered...
    method searchNode (line 136) | private int searchNode(DependencyTree root, DependencyTree filteredRoo...

FILE: src/main/java/com/jfrog/ide/idea/ui/ComponentDetails.java
  class ComponentDetails (line 24) | public class ComponentDetails extends MoreInfoPanel {
    method ComponentDetails (line 25) | public ComponentDetails(DependencyTree node) {
    method addScopes (line 43) | private void addScopes(Set<Scope> scopes) {
    method addLicenses (line 51) | private void addLicenses(Set<License> licenses) {

FILE: src/main/java/com/jfrog/ide/idea/ui/ComponentIssueDetails.java
  class ComponentIssueDetails (line 15) | public class ComponentIssueDetails extends ComponentDetails {
    method ComponentIssueDetails (line 17) | private ComponentIssueDetails(DependencyTree node) {
    method createIssuesDetailsView (line 23) | static void createIssuesDetailsView(JPanel panel, DependencyTree node) {

FILE: src/main/java/com/jfrog/ide/idea/ui/ComponentIssuesTable.java
  class ComponentIssuesTable (line 22) | public class ComponentIssuesTable extends JBTable {
    method ComponentIssuesTable (line 30) | ComponentIssuesTable() {
    method reset (line 39) | public void reset() {
    method updateIssuesTable (line 43) | public void updateIssuesTable(Set<Issue> selectedIssue, List<Dependenc...
    method addTableSelectionListener (line 59) | public void addTableSelectionListener(JPanel moreInfoPanel) {
    method createTableRowSorter (line 74) | private TableRowSorter<TableModel> createTableRowSorter(TableModel mod...
    method resizeTableColumns (line 85) | private void resizeTableColumns() {
    method getSelectedNodes (line 99) | public List<DependencyTree> getSelectedNodes() {
    method getIssueAt (line 109) | Issue getIssueAt(int row) {

FILE: src/main/java/com/jfrog/ide/idea/ui/ComponentsTree.java
  class ComponentsTree (line 31) | public abstract class ComponentsTree extends Tree {
    method ComponentsTree (line 37) | public ComponentsTree(@NotNull Project project) {
    method reset (line 44) | protected void reset() {
    method addFilterMenu (line 48) | public void addFilterMenu(ToolbarPopupMenu filterMenu) {
    method getRelativizedDescriptorPath (line 52) | private String getRelativizedDescriptorPath(NavigationTarget navigatio...
    method addNodeExclusion (line 71) | @SuppressWarnings("unused")
    method addMultiExclusion (line 80) | private void addMultiExclusion(DependencyTree nodeToExclude, Dependenc...
    method addSingleExclusion (line 99) | private void addSingleExclusion(DependencyTree nodeToExclude, Dependen...
    method createExcludeMenuItem (line 107) | private JBMenuItem createExcludeMenuItem(Excludable excludable, String...

FILE: src/main/java/com/jfrog/ide/idea/ui/ComponentsTreeCellRenderer.java
  class ComponentsTreeCellRenderer (line 19) | public class ComponentsTreeCellRenderer extends HighlightableCellRenderer {
    method getTreeCellRendererComponent (line 29) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/ExpiredComponentsTreeCellRenderer.java
  class ExpiredComponentsTreeCellRenderer (line 10) | public class ExpiredComponentsTreeCellRenderer extends ComponentsTreeCel...
    method getTreeCellRendererComponent (line 12) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/IssueDetails.java
  class IssueDetails (line 17) | public class IssueDetails extends MoreInfoPanel {
    method IssueDetails (line 18) | public IssueDetails(Issue issue, DependencyTree impactedNode) {
    method getCves (line 33) | private String getCves(Issue issue) {
    method addReferences (line 46) | private void addReferences(List<String> list) {
    method addImpactPath (line 59) | private void addImpactPath(DependencyTree impactedNode, Severity sever...

FILE: src/main/java/com/jfrog/ide/idea/ui/IssuesTableCellRenderer.java
  class IssuesTableCellRenderer (line 13) | public class IssuesTableCellRenderer extends DefaultTableCellRenderer {
    method getTableCellRendererComponent (line 15) | @Override
    method editSeverityColumn (line 36) | private static void editSeverityColumn(DefaultTableCellRenderer cellRe...
    method boldIfDirectIssue (line 44) | private static void boldIfDirectIssue(DefaultTableCellRenderer cellRen...

FILE: src/main/java/com/jfrog/ide/idea/ui/IssuesTableModel.java
  class IssuesTableModel (line 17) | public class IssuesTableModel extends AbstractTableModel {
    method IssuesTableModel (line 22) | IssuesTableModel() {
    method IssuesTableModel (line 26) | IssuesTableModel(@NotNull Set<Issue> issues, @NotNull Set<String> comp...
    type IssueColumn (line 33) | public enum IssueColumn {
      method IssueColumn (line 40) | IssueColumn(String name) {
      method getName (line 44) | public String getName() {
    method getComponents (line 49) | public Set<String> getComponents() {
    method getColumnCount (line 53) | @Override
    method getRowCount (line 58) | @Override
    method getColumnName (line 63) | @Override
    method getValueAt (line 71) | @Override
    method getIssueAt (line 93) | Issue getIssueAt(int row) {

FILE: src/main/java/com/jfrog/ide/idea/ui/IssuesTableSelectionListener.java
  class IssuesTableSelectionListener (line 24) | class IssuesTableSelectionListener extends MouseAdapter implements ListS...
    method IssuesTableSelectionListener (line 28) | IssuesTableSelectionListener(JPanel detailsPanel, ComponentIssuesTable...
    method mousePressed (line 38) | @Override
    method valueChanged (line 61) | @Override
    method getSelectedRow (line 84) | private int getSelectedRow(MouseEvent event) {
    method getImpactedNode (line 98) | private DependencyTree getImpactedNode(int selectedRow) {
    method doRightClickButtonEvent (line 113) | private void doRightClickButtonEvent(MouseEvent mouseEvent, Issue sele...

FILE: src/main/java/com/jfrog/ide/idea/ui/JFrogCiToolWindow.java
  class JFrogCiToolWindow (line 52) | public class JFrogCiToolWindow extends AbstractJFrogToolWindow {
    method JFrogCiToolWindow (line 67) | public JFrogCiToolWindow(@NotNull Project project, boolean buildsConfi...
    method getComponentsTreeTitle (line 88) | private String getComponentsTreeTitle() {
    method createIssueFilterMenu (line 97) | IssueFilterMenu createIssueFilterMenu() {
    method createLicenseFilterMenu (line 106) | LicenseFilterMenu createLicenseFilterMenu() {
    method createScopeFilterMenu (line 115) | ScopeFilterMenu createScopeFilterMenu() {
    method createMoreInfoView (line 126) | @SuppressWarnings("DialogTitleCapitalization")
    method createActionToolbar (line 140) | @Override
    method createComponentsTreePanel (line 159) | private JPanel createComponentsTreePanel() {
    method getIssuesToDisplay (line 187) | private Set<Issue> getIssuesToDisplay(List<DependencyTree> selectedNod...
    method registerListeners (line 191) | public void registerListeners() {
    method createBuildStatusPanel (line 223) | private JPanel createBuildStatusPanel() {
    method setBuildDetails (line 243) | private void setBuildDetails(BuildGeneralInfo buildGeneralInfo) {
    method setBuildStarted (line 251) | private void setBuildStarted(BuildGeneralInfo buildGeneralInfo) {
    method setBuildStatus (line 256) | private void setBuildStatus(BuildGeneralInfo buildGeneralInfo) {
    method setSeeMore (line 268) | private void setSeeMore(BuildGeneralInfo buildGeneralInfo) {
    method setVcsInformation (line 278) | private void setVcsInformation(BuildGeneralInfo buildGeneralInfo) {
    method setBuildLogLink (line 289) | private void setBuildLogLink(BuildGeneralInfo buildGeneralInfo) {
    method createAndAddLabelWithTooltip (line 294) | private JLabel createAndAddLabelWithTooltip(String tooltip, JPanel bui...
    method setTextAndIcon (line 301) | private void setTextAndIcon(JLabel label, String message, Icon icon) {
    method onConfigurationChange (line 314) | @Override
    method createComponentsTreeView (line 326) | private JComponent createComponentsTreeView() {
    method getSelectedNodes (line 344) | List<DependencyTree> getSelectedNodes() {
    method updateIssuesTable (line 361) | public void updateIssuesTable() {
    method createComponentsIssueDetailView (line 371) | private JComponent createComponentsIssueDetailView() {
    method resetViews (line 380) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/JFrogFloatingToolbar.java
  class JFrogFloatingToolbar (line 24) | public class JFrogFloatingToolbar extends AbstractFloatingToolbarProvide...
    method JFrogFloatingToolbar (line 30) | public JFrogFloatingToolbar() {
    method getAutoHideable (line 36) | @Override
    method register (line 41) | @Override
    method registerOnChangeHandlers (line 71) | private void registerOnChangeHandlers() {
    method clear (line 76) | private void clear() {
    method updateFileChanged (line 82) | private void updateFileChanged(String filePath) {
    method dispose (line 90) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/JFrogLocalToolWindow.java
  class JFrogLocalToolWindow (line 45) | public class JFrogLocalToolWindow extends AbstractJFrogToolWindow {
    method JFrogLocalToolWindow (line 57) | public JFrogLocalToolWindow(@NotNull Project project) {
    method createActionToolbar (line 92) | @Override
    method registerListeners (line 105) | public void registerListeners(JComponent browserComponent) {
    method alertIfCacheExpired (line 135) | private void alertIfCacheExpired() {
    method refreshView (line 143) | private void refreshView(boolean reloadCredentials) {
    method createReadyEnvView (line 157) | private JComponent createReadyEnvView() {
    method createJcefNotSupportedView (line 175) | private JComponent createJcefNotSupportedView() {
    method createLoadErrorView (line 203) | private JComponent createLoadErrorView() {
    method setLeftPanelContent (line 220) | private void setLeftPanelContent(JComponent component) {
    method initVulnerabilityInfoBrowser (line 225) | private JBCefBrowser initVulnerabilityInfoBrowser(@NotNull Project pro...
    method createComponentsTreeView (line 238) | private JComponent createComponentsTreeView() {
    method updateIssueOrLicenseInWebview (line 249) | private void updateIssueOrLicenseInWebview(IssueNode issueNode) {
    method navigateToFile (line 266) | private void navigateToFile(FileIssueNode node) {
    method resetViews (line 273) | void resetViews() {
    method onConfigurationChange (line 282) | @Override
    method updateUI (line 295) | @Override
    method initialView (line 303) | public void initialView() {

FILE: src/main/java/com/jfrog/ide/idea/ui/JFrogToolWindow.java
  class JFrogToolWindow (line 14) | public class JFrogToolWindow {
    method initToolWindow (line 20) | void initToolWindow(@NotNull ToolWindow toolWindow, @NotNull Project p...
    method addContent (line 27) | private void addContent(ContentManager contentManager, JFrogLocalToolW...

FILE: src/main/java/com/jfrog/ide/idea/ui/JFrogToolWindowFactory.java
  class JFrogToolWindowFactory (line 17) | public class JFrogToolWindowFactory implements ToolWindowFactory {
    method createToolWindowContent (line 19) | @Override
    method isBuildsConfigured (line 28) | private boolean isBuildsConfigured(Project project) {

FILE: src/main/java/com/jfrog/ide/idea/ui/JfrogContextMenuHandler.java
  class JfrogContextMenuHandler (line 12) | public class JfrogContextMenuHandler implements CefContextMenuHandler {
    method onBeforeContextMenu (line 15) | @Override
    method onContextMenuCommand (line 21) | @Override
    method openDevTools (line 30) | private void openDevTools(CefBrowser browser) {
    method onContextMenuDismissed (line 41) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/LocalComponentsTree.java
  class LocalComponentsTree (line 37) | public class LocalComponentsTree extends ComponentsTree {
    method LocalComponentsTree (line 48) | public LocalComponentsTree(@NotNull Project project) throws IOException {
    method getInstance (line 58) | public static LocalComponentsTree getInstance(@NotNull Project project) {
    method addScanResults (line 62) | public void addScanResults(List<FileTreeNode> fileTreeNodes) {
    method doAddScanResults (line 73) | void doAddScanResults(List<FileTreeNode> fileTreeNodes) {
    method populateTree (line 90) | private void populateTree(DefaultMutableTreeNode root) {
    method addRightClickListener (line 97) | public void addRightClickListener() {
    method handleContextMenu (line 107) | private void handleContextMenu(ComponentsTree tree, MouseEvent e) {
    method createIgnoreRuleOption (line 135) | private void createIgnoreRuleOption(VulnerabilityNode selectedIssue, M...
    method createNodePopupMenu (line 143) | private void createNodePopupMenu(DependencyNode selectedNode, String d...
    method addNodeNavigation (line 159) | private void addNodeNavigation(Set<NavigationTarget> navigationCandida...
    method addSingleNavigation (line 170) | private void addSingleNavigation(NavigationTarget navigationTarget) {
    method addMultiNavigation (line 174) | private void addMultiNavigation(Set<NavigationTarget> navigationCandid...
    method createNavigationMenuItem (line 183) | private JMenuItem createNavigationMenuItem(NavigationTarget navigation...
    method cacheTree (line 197) | public void cacheTree() throws IOException {
    method deleteCachedTree (line 207) | public void deleteCachedTree() throws IOException {
    method setNodesFromCache (line 211) | private void setNodesFromCache() {
    method isCacheEmpty (line 239) | public boolean isCacheEmpty() {
    method isCacheExpired (line 243) | public boolean isCacheExpired() {
    method lastScanTime (line 247) | public Long lastScanTime() {
    method setScanningEmptyText (line 258) | public void setScanningEmptyText() {
    method setNoIssuesEmptyText (line 266) | public void setNoIssuesEmptyText() {
    method setScanErrorEmptyText (line 273) | public void setScanErrorEmptyText() {

FILE: src/main/java/com/jfrog/ide/idea/ui/MoreInfoPanel.java
  class MoreInfoPanel (line 19) | public class MoreInfoPanel extends JPanel {
    method MoreInfoPanel (line 22) | public MoreInfoPanel() {
    method addComponent (line 27) | protected void addComponent(String header, JComponent component) {
    method addText (line 38) | protected void addText(String header, String text) {
    method createHeaderLabel (line 44) | protected JLabel createHeaderLabel(String title) {
    method createGridBagConstraints (line 52) | protected GridBagConstraints createGridBagConstraints() {
    method createComponentInfoNotAvailablePanel (line 62) | protected static void createComponentInfoNotAvailablePanel(JPanel pane...

FILE: src/main/java/com/jfrog/ide/idea/ui/components/ConnectionResultsGesture.java
  class ConnectionResultsGesture (line 17) | public class ConnectionResultsGesture extends MouseAdapter {
    method ConnectionResultsGesture (line 24) | public ConnectionResultsGesture(JLabel connectionResults) {
    method setSuccess (line 31) | public void setSuccess() {
    method setFailure (line 40) | public void setFailure(String message) {
    method setValue (line 50) | private void setValue(String message, String unicodeIcon) {
    method mouseClicked (line 61) | @Override
    method mouseEntered (line 66) | @Override
    method mouseExited (line 71) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/components/ImpactPathPane.java
  class ImpactPathPane (line 21) | public class ImpactPathPane extends JComponent {
    method ImpactPathPane (line 22) | public ImpactPathPane(DependencyTree impactedNode, Severity severity) {
    method extractImpactedPath (line 35) | private Stack<String> extractImpactedPath(DependencyTree impactedNode) {
    method addContent (line 51) | private void addContent(Stack<String> impactPath, Severity severity) {
    method createConstraints (line 73) | private GridBagConstraints createConstraints() {
    method createArrowLabel (line 83) | private JLabel createArrowLabel(Color borderColor) {
    method createComponentLabel (line 92) | private JLabel createComponentLabel(Color borderColor, String componen...
    method getBorderColor (line 101) | @SuppressWarnings("UseJBColor")
    class ImpactedComponentBorder (line 121) | private static class ImpactedComponentBorder implements Border {
      method ImpactedComponentBorder (line 125) | private ImpactedComponentBorder(Color borderColor) {
      method getBorderInsets (line 129) | @Override
      method isBorderOpaque (line 134) | @Override
      method paintBorder (line 139) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/components/LinkButton.java
  class LinkButton (line 20) | public class LinkButton extends JBLabel {
    method LinkButton (line 23) | public LinkButton(String tooltip) {
    method init (line 28) | public void init(Project project, String text, String link) {
    class BuildLogMouseAdapter (line 41) | private class BuildLogMouseAdapter extends MouseAdapter {
      method BuildLogMouseAdapter (line 45) | private BuildLogMouseAdapter(Project project, String link) {
      method mouseClicked (line 50) | @Override
      method mouseEntered (line 55) | @Override
      method mouseExited (line 61) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/components/MenuButton.java
  class MenuButton (line 25) | public class MenuButton extends JPanel {
    method MenuButton (line 32) | public MenuButton(JBPopupMenu filterMenu, String myName, String toolTi...
    method initUi (line 39) | private void initUi(String toolTip) {
    method indicateFilterEnable (line 62) | public void indicateFilterEnable(boolean filterEnabled) {
    method indicateFocusing (line 74) | private void indicateFocusing() {
    method showPopupMenuOnClick (line 88) | private void showPopupMenuOnClick() {
    method indicateHovering (line 98) | private void indicateHovering() {
    method showPopupMenu (line 116) | private void showPopupMenu() {
    method createFocusedBorder (line 120) | private static Border createFocusedBorder() {
    method createUnfocusedBorder (line 124) | private static Border createUnfocusedBorder() {

FILE: src/main/java/com/jfrog/ide/idea/ui/components/ReferencesPane.java
  class ReferencesPane (line 20) | public class ReferencesPane extends JPanel {
    method ReferencesPane (line 23) | public ReferencesPane(List<String> references) {
    method createConstraints (line 38) | private GridBagConstraints createConstraints() {
    method initReferences (line 50) | @SuppressWarnings("UnstableApiUsage")
    method initButton (line 70) | private void initButton(GridBagConstraints constraints) {

FILE: src/main/java/com/jfrog/ide/idea/ui/components/TitledPane.java
  class TitledPane (line 11) | public class TitledPane extends JSplitPane {
    method TitledPane (line 21) | public TitledPane(int orientation, int location, Component title, Comp...
    method getDividerLocation (line 31) | @Override
    method getLastDividerLocation (line 36) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/BuildsVerifier.java
  class BuildsVerifier (line 13) | public class BuildsVerifier extends InputVerifier {
    method BuildsVerifier (line 16) | public BuildsVerifier(JTextField buildsPattern) {
    method shouldYieldFocus (line 21) | @SuppressWarnings("deprecation")
    method shouldYieldFocus (line 27) | public boolean shouldYieldFocus(JComponent input, JComponent ignore) {
    method verify (line 35) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/ConfigVerificationUtils.java
  class ConfigVerificationUtils (line 18) | public class ConfigVerificationUtils {
    method validateGlobalConfig (line 34) | static void validateGlobalConfig(String excludedPaths, ServerConfig.Po...
    method validateExcludedPaths (line 53) | private static void validateExcludedPaths(String excludedPaths) throws...
    method validateProject (line 75) | private static void validateProject(String project) throws Configurati...
    method validateWatches (line 81) | private static void validateWatches(String watches) throws Configurati...
    method illegalCharactersExist (line 98) | private static boolean illegalCharactersExist(String str) {

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/ConnectionRetriesSpinner.java
  class ConnectionRetriesSpinner (line 9) | public class ConnectionRetriesSpinner extends JBIntSpinner {
    method ConnectionRetriesSpinner (line 13) | public ConnectionRetriesSpinner() {

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/ConnectionTimeoutSpinner.java
  class ConnectionTimeoutSpinner (line 9) | public class ConnectionTimeoutSpinner extends JBIntSpinner {
    method ConnectionTimeoutSpinner (line 13) | public ConnectionTimeoutSpinner() {

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/JFrogGlobalConfiguration.java
  class JFrogGlobalConfiguration (line 60) | public class JFrogGlobalConfiguration implements Configurable, Configura...
    method JFrogGlobalConfiguration (line 140) | public JFrogGlobalConfiguration() {
    method createComponent (line 163) | @Nullable
    method selectSettingsTab (line 174) | public void selectSettingsTab() {
    method getDisplayName (line 178) | @Nls
    method getHelpTopic (line 184) | @Nullable
    method isModified (line 190) | @Override
    method apply (line 195) | @Override
    method reset (line 202) | @Override
    method initEnabledComponentSets (line 210) | private void initEnabledComponentSets() {
    method createServerConfig (line 229) | private ServerConfigImpl createServerConfig() {
    method getPolicyType (line 259) | private ServerConfig.PolicyType getPolicyType() {
    method getConnectionType (line 273) | private ServerConfigImpl.ConnectionType getConnectionType() {
    method loadConfig (line 282) | private void loadConfig() {
    method initTestConnection (line 325) | private void initTestConnection() {
    method checkXrayConnection (line 344) | private String checkXrayConnection() {
    method checkArtifactoryConnection (line 385) | private String checkArtifactoryConnection() {
    method getLoginErrorMessage (line 411) | private String getLoginErrorMessage(Exception e) {
    method createXrayClient (line 425) | private Xray createXrayClient(String xrayUrl) {
    method createArtifactoryManagerBuilder (line 445) | private ArtifactoryManagerBuilder createArtifactoryManagerBuilder(Stri...
    method setConnectionResults (line 461) | private void setConnectionResults(String results) {
    method initAdvancedExpandButton (line 472) | private void initAdvancedExpandButton() {
    method initLoginViaBrowserButton (line 484) | private void initLoginViaBrowserButton() {
    method doSsoLogin (line 500) | private void doSsoLogin() {
    method initCredentialsTypeSelection (line 555) | private void initCredentialsTypeSelection() {
    method enableAndShowFields (line 570) | private void enableAndShowFields(ItemEvent event, Set<JComponent> enab...
    method initAuthenticationMethod (line 581) | private void initAuthenticationMethod() {
    method initAuthMethodSelection (line 604) | private void initAuthMethodSelection() {
    method updateConnectionDetailsTextFields (line 616) | void updateConnectionDetailsTextFields() {
    method loadConnectionType (line 633) | void loadConnectionType() {
    method initLinks (line 648) | private void initLinks() {
    method initPolicy (line 657) | private void initPolicy() {
    method updatePolicyTextFields (line 671) | void updatePolicyTextFields() {
    method initConnectionOptionsRestoreDefaultsActionLink (line 692) | private void initConnectionOptionsRestoreDefaultsActionLink() {
    method initScanOptionsRestoreDefaultsActionLink (line 702) | private void initScanOptionsRestoreDefaultsActionLink() {
    method initPluginResourcesComponents (line 711) | private void initPluginResourcesComponents() {
    method updateExternalRepositoryFields (line 724) | private void updateExternalRepositoryFields() {

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/JFrogProjectConfiguration.java
  class JFrogProjectConfiguration (line 20) | public class JFrogProjectConfiguration implements Configurable, Configur...
    method JFrogProjectConfiguration (line 26) | public JFrogProjectConfiguration(Project project) {
    method getDisplayName (line 30) | @Override
    method createComponent (line 35) | @Override
    method isModified (line 41) | @Override
    method apply (line 47) | @Override
    method reset (line 55) | @Override
    method loadConfig (line 60) | private void loadConfig() {

FILE: src/main/java/com/jfrog/ide/idea/ui/configuration/Utils.java
  class Utils (line 25) | public class Utils {
    method setActiveForegroundColor (line 32) | public static void setActiveForegroundColor(JLabel label) {
    method setInactiveForegroundColor (line 41) | public static void setInactiveForegroundColor(JLabel label) {
    method clearText (line 50) | public static void clearText(JTextField... textFields) {
    method retrieveCredentialsFromPasswordSafe (line 61) | public static Credentials retrieveCredentialsFromPasswordSafe(String s...
    method storeCredentialsInPasswordSafe (line 79) | public static void storeCredentialsInPasswordSafe(String subsystem, St...
    method removeCredentialsInPasswordSafe (line 92) | public static void removeCredentialsInPasswordSafe(String subsystem, S...
    method createCredentialAttributes (line 103) | public static CredentialAttributes createCredentialAttributes(String s...
    method initHyperlinkLabel (line 114) | @SuppressWarnings("UnstableApiUsage")
    method createConnectionResultsBalloon (line 127) | public static void createConnectionResultsBalloon(String message, JCom...
    method addRedBorder (line 142) | public static void addRedBorder(JTextComponent component) {

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/MenuCheckbox.java
  class MenuCheckbox (line 10) | public class MenuCheckbox extends JBCheckBoxMenuItem {
    method processMouseEvent (line 11) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/SelectAllCheckbox.java
  class SelectAllCheckbox (line 17) | public class SelectAllCheckbox<FilterType> extends MenuCheckbox {
    method SelectAllCheckbox (line 23) | public SelectAllCheckbox(Topic<ApplicationEvents> syncEvent) {
    method setListeners (line 29) | public void setListeners(@NotNull Map<FilterType, Boolean> selectionMa...
    method setChecked (line 53) | public void setChecked(boolean checked) {
    method removeListeners (line 59) | private void removeListeners() {

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/SelectionCheckbox.java
  class SelectionCheckbox (line 14) | public class SelectionCheckbox<FilterType> extends MenuCheckbox {
    method SelectionCheckbox (line 15) | public SelectionCheckbox(@NotNull Map<FilterType, Boolean> selectionMa...

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/ToolbarPopupMenu.java
  class ToolbarPopupMenu (line 15) | public abstract class ToolbarPopupMenu extends JBPopupMenu {
    method ToolbarPopupMenu (line 19) | public ToolbarPopupMenu(@NotNull Project project, String name, String ...
    method getMenuButton (line 24) | public MenuButton getMenuButton() {
    method refresh (line 31) | public abstract void refresh();

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/builds/BuildsButton.java
  class BuildsButton (line 24) | public class BuildsButton extends JComboBox<String> implements Syncable,...
    method BuildsButton (line 29) | public BuildsButton(Project project) {
    method getSyncEvent (line 34) | @Override
    method setOnSelectBuildListener (line 39) | public void setOnSelectBuildListener() {
    method removeOnSelectBuildListener (line 44) | public void removeOnSelectBuildListener() {
    class OnSelectBuildListener (line 50) | private class OnSelectBuildListener implements ItemListener {
      method itemStateChanged (line 51) | @Override
    class BuildsCellRenderer (line 70) | private static class BuildsCellRenderer extends DefaultListCellRenderer {
      method setIcon (line 71) | @Override
    method dispose (line 77) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/builds/BuildsMenu.java
  class BuildsMenu (line 11) | public class BuildsMenu extends JBPopupMenu {
    method BuildsMenu (line 16) | public BuildsMenu(Project project) {
    method refresh (line 21) | public void refresh() {
    method getBuildButton (line 39) | public BuildsButton getBuildButton() {

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermanager/CiFilterManager.java
  class CiFilterManager (line 15) | @State(name = "CiFilterState")
    method CiFilterManager (line 18) | public CiFilterManager(Project project) {
    method getInstance (line 22) | public static CiFilterManager getInstance(@NotNull Project project) {
    method collectBuildsInformation (line 26) | public void collectBuildsInformation(DependencyTree root) {
    method getSyncEvent (line 34) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermanager/ConsistentFilterManager.java
  class ConsistentFilterManager (line 18) | public abstract class ConsistentFilterManager extends FilterManager impl...
    method ConsistentFilterManager (line 23) | public ConsistentFilterManager(Project project) {
    method getSelectedLicenses (line 33) | public Map<License, Boolean> getSelectedLicenses() {
    method getSelectedScopes (line 61) | @Override
    class FiltersState (line 84) | static class FiltersState {
    method getState (line 90) | @Override
    method loadState (line 106) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/CiIssueFilterMenu.java
  class CiIssueFilterMenu (line 12) | public class CiIssueFilterMenu extends IssueFilterMenu {
    method CiIssueFilterMenu (line 14) | public CiIssueFilterMenu(@NotNull Project project) {
    method getSyncEvent (line 18) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/CiLicenseFilterMenu.java
  class CiLicenseFilterMenu (line 16) | public class CiLicenseFilterMenu extends LicenseFilterMenu {
    method CiLicenseFilterMenu (line 18) | public CiLicenseFilterMenu(@NotNull Project project) {
    method refresh (line 22) | @Override
    method getSyncEvent (line 32) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/CiScopeFilterMenu.java
  class CiScopeFilterMenu (line 16) | public class CiScopeFilterMenu extends ScopeFilterMenu {
    method CiScopeFilterMenu (line 18) | public CiScopeFilterMenu(@NotNull Project project) {
    method refresh (line 22) | @Override
    method getSyncEvent (line 45) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/FilterMenu.java
  class FilterMenu (line 24) | public abstract class FilterMenu<FilterType> extends ToolbarPopupMenu im...
    method FilterMenu (line 29) | protected FilterMenu(@NotNull Project project, String name, String too...
    method refresh (line 33) | @Override
    method getFilterButton (line 38) | public MenuButton getFilterButton() {
    method addComponents (line 48) | protected void addComponents(@NotNull Map<FilterType, Boolean> selecti...
    method setSelectAllCheckbox (line 60) | private void setSelectAllCheckbox(Map<FilterType, Boolean> selectionMa...
    method setListeners (line 64) | private void setListeners(Map<FilterType, Boolean> selectionMap) {
    method addCheckboxes (line 74) | private void addCheckboxes(boolean putUnknownLast) {
    method isCheckboxNew (line 95) | private boolean isCheckboxNew(MenuCheckbox checkBoxMenuItem) {

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/IssueFilterMenu.java
  class IssueFilterMenu (line 13) | public abstract class IssueFilterMenu extends FilterMenu<Severity> {
    method IssueFilterMenu (line 17) | public IssueFilterMenu(@NotNull Project project, FilterManager filterM...

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/LicenseFilterMenu.java
  class LicenseFilterMenu (line 10) | public abstract class LicenseFilterMenu extends FilterMenu<License> {
    method LicenseFilterMenu (line 15) | public LicenseFilterMenu(@NotNull Project project) {

FILE: src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/ScopeFilterMenu.java
  class ScopeFilterMenu (line 10) | public abstract class ScopeFilterMenu extends FilterMenu<Scope> {
    method ScopeFilterMenu (line 15) | public ScopeFilterMenu(@NotNull Project project) {

FILE: src/main/java/com/jfrog/ide/idea/ui/utils/ComponentUtils.java
  class ComponentUtils (line 19) | public class ComponentUtils {
    method createJTextArea (line 20) | public static JTextArea createJTextArea(String text, boolean lineWrap) {
    method createDisabledTextLabel (line 31) | public static JLabel createDisabledTextLabel(String text) {
    method createNoCredentialsView (line 38) | public static JComponent createNoCredentialsView() {
    method addCenteredComponent (line 74) | public static void addCenteredComponent(JPanel panel, JComponent compo...
    method createNoBuildsView (line 80) | public static JComponent createNoBuildsView() {
    method createUnsupportedPanel (line 87) | public static JPanel createUnsupportedPanel(Component label) {
    method getPathSearchString (line 97) | public static String getPathSearchString(TreePath path) {
    method replaceAndUpdateUI (line 101) | public static void replaceAndUpdateUI(JPanel panel, JComponent compone...

FILE: src/main/java/com/jfrog/ide/idea/ui/utils/IconUtils.java
  class IconUtils (line 12) | public class IconUtils {
    method load (line 16) | public static Icon load(String icon) {
    method getIcon (line 27) | private static Icon getIcon(String icon) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/WebviewManager.java
  class WebviewManager (line 19) | public class WebviewManager implements Disposable {
    method WebviewManager (line 24) | public WebviewManager(@NotNull Project project, Runnable onLoadEnd) {
    method getBrowser (line 36) | public JBCefBrowser getBrowser() {
    method handleLoadEvent (line 40) | private void handleLoadEvent(Runnable onLoadEnd) {
    method streamConsoleMessagesToLog (line 64) | private void streamConsoleMessagesToLog() {
    method sendMessage (line 78) | public void sendMessage(WebviewEvent.Type type, Object data) {
    method loadPageIfNeeded (line 83) | private void loadPageIfNeeded() {
    method dispose (line 93) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/WebviewObjectConverter.java
  class WebviewObjectConverter (line 17) | public class WebviewObjectConverter {
    method convertIssueToDepPage (line 18) | public static DependencyPage convertIssueToDepPage(VulnerabilityNode v...
    method convertFileIssueToIssuePage (line 53) | public static IssuePage convertFileIssueToIssuePage(FileIssueNode file...
    method convertSastIssueToSastIssuePage (line 62) | public static IssuePage convertSastIssueToSastIssuePage(SastIssueNode ...
    method convertCodeFlowsToLocations (line 68) | private static Location[] convertCodeFlowsToLocations(FindingInfo[][] ...
    method ConvertPageType (line 87) | private static String ConvertPageType(SourceCodeScanType reporterType) {
    method convertFileLocation (line 96) | private static Location convertFileLocation(FileIssueNode fileIssueNod...
    method convertApplicableDetails (line 107) | private static ApplicableDetails convertApplicableDetails(ApplicableIn...
    method convertLicenseToDepPage (line 127) | public static DependencyPage convertLicenseToDepPage(LicenseViolationN...
    method convertImpactGraph (line 145) | private static ImpactGraph convertImpactGraph(ImpactTree impactTree) {
    method convertImpactGraphNode (line 149) | private static ImpactGraphNode convertImpactGraphNode(ImpactTreeNode i...
    method convertCve (line 154) | private static Cve convertCve(com.jfrog.ide.common.nodes.subentities.C...
    method convertVersionRanges (line 166) | private static String[] convertVersionRanges(List<String> xrayVerRange...
    method convertVersionRange (line 173) | private static String convertVersionRange(String xrayVerRange) {
    method convertReferences (line 259) | private static Reference[] convertReferences(List<String> xrayReferenc...
    method getPackageTypeName (line 275) | private static String getPackageTypeName(String componentId) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/WebviewResourceHandler.java
  class WebviewResourceHandler (line 20) | public class WebviewResourceHandler implements CefResourceHandler {
    method processRequest (line 26) | @Override
    method getResponseHeaders (line 47) | @Override
    method readResponse (line 81) | @Override
    method cancel (line 100) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/WebviewSchemeHandlerFactory.java
  class WebviewSchemeHandlerFactory (line 9) | public class WebviewSchemeHandlerFactory implements CefSchemeHandlerFact...
    method create (line 10) | @Override

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/EventManager.java
  class EventManager (line 12) | public class EventManager {
    method EventManager (line 24) | public EventManager(JBCefBrowser jbBrowser, @NotNull Project project) {
    method onWebviewLoadEnd (line 36) | public void onWebviewLoadEnd(Runnable onLoadEnd) {
    method send (line 50) | public void send(WebviewEvent.Type type, Object data) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/Receiver.java
  class Receiver (line 24) | public class Receiver {
    method Receiver (line 33) | public Receiver(JBCefBrowser jbBrowser, @NotNull Project project) {
    method unpack (line 56) | public static IdeEvent unpack(String raw) throws JsonProcessingExcepti...
    method createIdeSendFuncBody (line 67) | public String createIdeSendFuncBody(String ideSendFunctionName) {
    method handler (line 76) | private void handler(IdeEvent event) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/Sender.java
  class Sender (line 16) | public class Sender {
    method Sender (line 22) | public Sender(CefBrowser browser) {
    method pack (line 34) | public static String pack(WebviewEvent.Type type, Object data) throws ...
    method sendIdeSendFunc (line 45) | public void sendIdeSendFunc(String ideSendFuncName, String ideSendFunc...
    method sendEvent (line 59) | public void sendEvent(WebviewEvent.Type type, Object data) {
    method send (line 74) | public void send(String event) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/model/Event.java
  class Event (line 9) | public abstract class Event implements Serializable {
    method Event (line 12) | public Event(Object data) {
    method getData (line 16) | public Object getData() {
    method setData (line 20) | public void setData(Object data) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/model/IdeEvent.java
  class IdeEvent (line 6) | public class IdeEvent extends Event {
    method IdeEvent (line 9) | public IdeEvent() {
    method getType (line 13) | public Type getType() {
    method setType (line 17) | public void setType(Type type) {
    type Type (line 21) | public enum Type {JUMP_TO_CODE, LOGIN, WEBVIEW_LOADED}

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/model/WebviewEvent.java
  class WebviewEvent (line 6) | public class WebviewEvent extends Event {
    method WebviewEvent (line 9) | @SuppressWarnings("unused")
    method WebviewEvent (line 14) | public WebviewEvent(Type type, Object data) {
    method getType (line 19) | public Type getType() {
    method setType (line 23) | public void setType(Type type) {
    type Type (line 27) | public enum Type {SET_EMITTER, SHOW_PAGE}

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/event/tasks/JumpToCodeTask.java
  class JumpToCodeTask (line 12) | public class JumpToCodeTask {
    method JumpToCodeTask (line 15) | public JumpToCodeTask(@NotNull Project project) {
    method execute (line 19) | public void execute(Location location) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/ApplicableDetails.java
  class ApplicableDetails (line 3) | public class ApplicableDetails {
    method ApplicableDetails (line 8) | public ApplicableDetails(boolean isApplicable, Evidence[] evidence, St...
    method getIsApplicable (line 14) | @SuppressWarnings("unused")
    method getEvidence (line 19) | @SuppressWarnings("unused")
    method getSearchTarget (line 24) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/Cve.java
  class Cve (line 3) | public class Cve {
    method Cve (line 11) | public Cve(String id, String cvssV2Score, String cvssV2Vector, String ...
    method getId (line 20) | @SuppressWarnings("unused")
    method getCvssV2Vector (line 25) | @SuppressWarnings("unused")
    method getCvssV2Score (line 30) | @SuppressWarnings("unused")
    method getCvssV3Score (line 35) | @SuppressWarnings("unused")
    method getCvssV3Vector (line 40) | @SuppressWarnings("unused")
    method getApplicableData (line 45) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/DependencyPage.java
  class DependencyPage (line 3) | public class DependencyPage {
    method DependencyPage (line 21) | public DependencyPage() {
    method getId (line 24) | @SuppressWarnings("unused")
    method id (line 29) | public DependencyPage id(String id) {
    method getComponent (line 34) | @SuppressWarnings("unused")
    method component (line 39) | public DependencyPage component(String component) {
    method getPageType (line 44) | @SuppressWarnings("unused")
    method getComponentType (line 49) | @SuppressWarnings("unused")
    method componentType (line 54) | public DependencyPage componentType(String componentType) {
    method getVersion (line 59) | @SuppressWarnings("unused")
    method version (line 64) | public DependencyPage version(String version) {
    method getSeverity (line 69) | @SuppressWarnings("unused")
    method severity (line 74) | public DependencyPage severity(String severity) {
    method getLicense (line 79) | @SuppressWarnings("unused")
    method license (line 84) | public DependencyPage license(License[] license) {
    method getSummary (line 89) | @SuppressWarnings("unused")
    method summary (line 94) | public DependencyPage summary(String summary) {
    method getFixedVersion (line 99) | @SuppressWarnings("unused")
    method fixedVersion (line 104) | public DependencyPage fixedVersion(String[] fixedVersion) {
    method getInfectedVersion (line 109) | @SuppressWarnings("unused")
    method infectedVersion (line 114) | public DependencyPage infectedVersion(String[] infectedVersion) {
    method getReferences (line 119) | @SuppressWarnings("unused")
    method references (line 124) | public DependencyPage references(Reference[] references) {
    method getCve (line 129) | @SuppressWarnings("unused")
    method cve (line 134) | public DependencyPage cve(Cve cve) {
    method getImpactGraph (line 139) | @SuppressWarnings("unused")
    method impactGraph (line 144) | public DependencyPage impactGraph(ImpactGraph impactGraph) {
    method getWatchName (line 149) | @SuppressWarnings("unused")
    method watchName (line 154) | public DependencyPage watchName(String[] watchName) {
    method getEdited (line 159) | @SuppressWarnings("unused")
    method edited (line 164) | public DependencyPage edited(String edited) {
    method getExtendedInformation (line 169) | @SuppressWarnings("unused")
    method extendedInformation (line 174) | public DependencyPage extendedInformation(ExtendedInformation extended...

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/Evidence.java
  class Evidence (line 3) | public class Evidence {
    method Evidence (line 8) | public Evidence(String reason, String filePathEvidence, String codeEvi...
    method getReason (line 14) | @SuppressWarnings("unused")
    method getFilePathEvidence (line 19) | @SuppressWarnings("unused")
    method getCodeEvidence (line 24) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/ExtendedInformation.java
  class ExtendedInformation (line 3) | public class ExtendedInformation {
    method ExtendedInformation (line 10) | public ExtendedInformation(String shortDescription, String fullDescrip...
    method getShortDescription (line 18) | @SuppressWarnings("unused")
    method getFullDescription (line 23) | @SuppressWarnings("unused")
    method getJfrogResearchSeverity (line 28) | @SuppressWarnings("unused")
    method getRemediation (line 33) | @SuppressWarnings("unused")
    method getJfrogResearchSeverityReason (line 38) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/Finding.java
  class Finding (line 3) | public class Finding {
    method Finding (line 9) | public Finding(String happen, String meaning, String snippet, String d...
    method Finding (line 16) | public Finding(Finding other) {
    method getHappen (line 20) | @SuppressWarnings("unused")
    method getMeaning (line 25) | @SuppressWarnings("unused")
    method getSnippet (line 30) | @SuppressWarnings("unused")
    method getDoes (line 35) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/ImpactGraph.java
  class ImpactGraph (line 3) | public class ImpactGraph {
    method ImpactGraph (line 7) | public ImpactGraph(ImpactGraphNode root, int pathsLimit) {
    method getRoot (line 12) | @SuppressWarnings("unused")
    method getPathsLimit (line 17) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/ImpactGraphNode.java
  class ImpactGraphNode (line 3) | public class ImpactGraphNode {
    method ImpactGraphNode (line 7) | public ImpactGraphNode(String name, ImpactGraphNode[] children) {
    method getName (line 12) | @SuppressWarnings("unused")
    method getChildren (line 17) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/IssuePage.java
  class IssuePage (line 3) | public class IssuePage {
    method IssuePage (line 12) | public IssuePage() {
    method IssuePage (line 15) | public IssuePage(IssuePage other) {
    method getHeader (line 28) | @SuppressWarnings("unused")
    method header (line 33) | public IssuePage header(String header) {
    method getAbbreviation (line 38) | @SuppressWarnings("unused")
    method abbreviation (line 43) | public IssuePage abbreviation(String abbreviation) {
    method getPageType (line 48) | @SuppressWarnings("unused")
    method type (line 53) | public IssuePage type(String type) {
    method getDescription (line 58) | @SuppressWarnings("unused")
    method description (line 63) | public IssuePage description(String description) {
    method getLocation (line 68) | @SuppressWarnings("unused")
    method location (line 73) | public IssuePage location(Location location) {
    method getSeverity (line 78) | @SuppressWarnings("unused")
    method severity (line 83) | public IssuePage severity(String severity) {
    method getFinding (line 88) | @SuppressWarnings("unused")
    method finding (line 93) | public IssuePage finding(Finding finding) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/JfrogResearchSeverityReason.java
  class JfrogResearchSeverityReason (line 3) | public class JfrogResearchSeverityReason {
    method JfrogResearchSeverityReason (line 8) | public JfrogResearchSeverityReason(String name, String description, bo...
    method getName (line 14) | @SuppressWarnings("unused")
    method getDescription (line 19) | @SuppressWarnings("unused")
    method getIsPositive (line 24) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/License.java
  class License (line 3) | public class License {
    method License (line 7) | public License(String name, String link) {
    method getName (line 12) | @SuppressWarnings("unused")
    method getLink (line 17) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/Location.java
  class Location (line 5) | public class Location implements Serializable {
    method Location (line 14) | public Location() {
    method Location (line 24) | public Location(String file, String fileName, int startRow, int startC...
    method Location (line 34) | public Location(Location other) {
    method getFile (line 38) | @SuppressWarnings("unused")
    method getFileName (line 43) | @SuppressWarnings("unused")
    method getSnippet (line 48) | @SuppressWarnings("unused")
    method getStartRow (line 53) | public int getStartRow() {
    method getStartColumn (line 57) | public int getStartColumn() {
    method getEndRow (line 61) | public int getEndRow() {
    method getEndColumn (line 65) | public int getEndColumn() {
    method setSnippet (line 69) | public void setSnippet(String snippet) {
    method setFile (line 73) | public void setFile(String file) {
    method setFileName (line 77) | public void setFileName(String fileName) {
    method setStartRow (line 81) | public void setStartRow(int startRow) {
    method setStartColumn (line 85) | public void setStartColumn(int startColumn) {
    method setEndRow (line 89) | public void setEndRow(int endRow) {
    method setEndColumn (line 93) | public void setEndColumn(int endColumn) {

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/Reference.java
  class Reference (line 3) | public class Reference {
    method Reference (line 7) | public Reference(String url, String text) {
    method getUrl (line 12) | @SuppressWarnings("unused")
    method getText (line 17) | @SuppressWarnings("unused")

FILE: src/main/java/com/jfrog/ide/idea/ui/webview/model/SastIssuePage.java
  class SastIssuePage (line 6) | @Getter
    method SastIssuePage (line 12) | @SuppressWarnings("unused")
    method SastIssuePage (line 16) | public SastIssuePage(IssuePage issuePage) {
    method setAnalysisSteps (line 20) | public SastIssuePage setAnalysisSteps(Location[] analysisSteps) {
    method setRuleID (line 25) | public SastIssuePage setRuleID(String ruleID) {

FILE: src/main/java/com/jfrog/ide/idea/utils/Descriptor.java
  type Descriptor (line 8) | public enum Descriptor {
    method Descriptor (line 13) | Descriptor(String fileName) {
    method fromFileName (line 17) | public static Descriptor fromFileName(String fileName) {
    method getFileName (line 26) | public String getFileName() {

FILE: src/main/java/com/jfrog/ide/idea/utils/GoUtils.java
  class GoUtils (line 18) | public class GoUtils {
    method getGoExeAndSetEnv (line 31) | public static String getGoExeAndSetEnv(Map<String, String> env, Projec...

FILE: src/main/java/com/jfrog/ide/idea/utils/Utils.java
  class Utils (line 39) | public class Utils {
    method getProjectBasePath (line 45) | public static Path getProjectBasePath(Project project) {
    method areRootNodesEqual (line 49) | public static boolean areRootNodesEqual(DependencyTree lhs, Dependency...
    method focusJFrogToolWindow (line 57) | public static void focusJFrogToolWindow(Project project) {
    method sendUsageReport (line 64) | public static void sendUsageReport(String techName) {
    method isValidUrl (line 98) | public static boolean isValidUrl(String urlStr) {
    method extractFromResources (line 115) | public static void extractFromResources(String resourceName, Path targ...

FILE: src/test/java/com/jfrog/ide/idea/ProgressIndicatorMock.java
  class ProgressIndicatorMock (line 4) | public class ProgressIndicatorMock implements com.jfrog.ide.common.log.P...
    method setFraction (line 6) | @Override
    method setIndeterminate (line 11) | @Override
    method setText (line 16) | @Override

FILE: src/test/java/com/jfrog/ide/idea/TestUtils.java
  class TestUtils (line 12) | public class TestUtils {
    method getNonLeafElement (line 14) | public static PsiElement getNonLeafElement(PsiFile fileDescriptor, Cla...
    method getAndAssertChild (line 31) | public static DepTreeNode getAndAssertChild(DepTree depTree, DepTreeNo...

FILE: src/test/java/com/jfrog/ide/idea/configuration/ConfigurationTest.java
  class ConfigurationTest (line 14) | public class ConfigurationTest extends LightJavaCodeInsightFixtureTestCa...
    method setUp (line 29) | @Override
    method tearDown (line 35) | @Override
    method testStoreCredentials (line 44) | public void testStoreCredentials() {
    method testSetServerConfig (line 64) | public void testSetServerConfig() {
    method testPolicyType (line 94) | public void testPolicyType() {
    method testSetServerConfigFromEnv (line 119) | public void testSetServerConfigFromEnv() {
    method testReadMissingConfFromEnv (line 153) | public void testReadMissingConfFromEnv() {
    method createServerConfig (line 176) | ServerConfigImpl createServerConfig(boolean xrayUrl, boolean artifacto...
    method cleanUp (line 196) | private void cleanUp() {

FILE: src/test/java/com/jfrog/ide/idea/configuration/ConnectionDetailsFromCliTest.java
  class ConnectionDetailsFromCliTest (line 23) | @RunWith(Parameterized.class)
    method ConnectionDetailsFromCliTest (line 30) | public ConnectionDetailsFromCliTest(String[] cliParameters, Exception ...
    method dataProvider (line 36) | @Parameterized.Parameters
    method testReadConnectionDetailsFromJfrogCli (line 61) | @Test

FILE: src/test/java/com/jfrog/ide/idea/configuration/GetProxyConfForTargetUrlTest.java
  class GetProxyConfForTargetUrlTest (line 15) | public class GetProxyConfForTargetUrlTest extends LightJavaCodeInsightFi...
    method setUp (line 20) | @Override
    method testProxyNotConfigured (line 39) | public void testProxyNotConfigured() {
    method testManuallyConfiguredProxy (line 47) | public void testManuallyConfiguredProxy() {
    method testPacConfiguredProxy (line 71) | public void testPacConfiguredProxy() {
    method testPacConfiguredNoProxy (line 92) | public void testPacConfiguredNoProxy() {

FILE: src/test/java/com/jfrog/ide/idea/exclusion/MavenExclusionTest.java
  class MavenExclusionTest (line 19) | public class MavenExclusionTest extends LightJavaCodeInsightFixtureTestC...
    method setUp (line 24) | @Override
    method getTestDataPath (line 31) | @Override
    method initTestingTree (line 36) | private void initTestingTree() {
    method testIsMavenPackageType (line 50) | public void testIsMavenPackageType() {
    method testIsExcludable (line 70) | public void testIsExcludable() {
    method testExclusionExists (line 81) | public void testExclusionExists() {
    method testCreateAndAddExclusionTags (line 106) | public void testCreateAndAddExclusionTags() {
    method createDependencyTreeNode (line 135) | DependencyTree createDependencyTreeNode(String nodeValue, String pkgTy...
    class ExclusionTestCase (line 142) | static class ExclusionTestCase {
      method ExclusionTestCase (line 152) | ExclusionTestCase(int offset, String groupId, String artifactId) {

FILE: src/test/java/com/jfrog/ide/idea/inspections/GoInspectionTest.java
  class GoInspectionTest (line 8) | public class GoInspectionTest extends InspectionsTestBase {
    method setUp (line 19) | @SuppressWarnings("MethodDoesntCallSuperMethod")
    method testDependencies (line 25) | public void testDependencies() {
    method testNonDependencies (line 29) | public void testNonDependencies() {
    method testCreateGeneralInfo (line 33) | public void testCreateGeneralInfo() {

FILE: src/test/java/com/jfrog/ide/idea/inspections/GradleGroovyInspectionTest.java
  class GradleGroovyInspectionTest (line 14) | public class GradleGroovyInspectionTest extends InspectionsTestBase {
    method setUp (line 29) | @SuppressWarnings("MethodDoesntCallSuperMethod")
    method testCreateGeneralInfo (line 35) | public void testCreateGeneralInfo() {

FILE: src/test/java/com/jfrog/ide/idea/inspections/GradleInspectionTest.java
  class GradleInspectionTest (line 16) | @RunWith(Parameterized.class)
    method data (line 21) | @Parameterized.Parameters
    method GradleInspectionTest (line 31) | public GradleInspectionTest(String componentId, String expectedCompone...
    method testStripVersion (line 36) | @Test

FILE: src/test/java/com/jfrog/ide/idea/inspections/GradleKotlinInspectionTest.java
  class GradleKotlinInspectionTest (line 8) | public class GradleKotlinInspectionTest extends InspectionsTestBase {
    method setUp (line 20) | @SuppressWarnings("MethodDoesntCallSuperMethod")
    method testDependencies (line 26) | public void testDependencies() {
    method testNonDependencies (line 30) | public void testNonDependencies() {
    method testCreateGeneralInfo (line 34) | public void testCreateGeneralInfo() {

FILE: src/test/java/com/jfrog/ide/idea/inspections/InspectionToolsTest.java
  class InspectionToolsTest (line 9) | public class InspectionToolsTest extends LightJavaCodeInsightFixtureTest...
    method testConvertFixVersionStringToMinFixVersion (line 11) | public void testConvertFixVersionStringToMinFixVersion() {

FILE: src/test/java/com/jfrog/ide/idea/inspections/InspectionsTestBase.java
  class InspectionsTestBase (line 13) | public abstract class InspectionsTestBase extends LightJavaCodeInsightFi...
    method setUp (line 19) | public void setUp(AbstractInspection inspection, String packageDescrip...
    method getTestDataPath (line 26) | @Override
    method isDependencyTest (line 31) | public void isDependencyTest(InspectionTestDependency[] dependencies) {
    method isNonDependencyTest (line 39) | public void isNonDependencyTest(int[] nonDependenciesOffsets) {
    method createComponentNameTest (line 46) | public void createComponentNameTest(InspectionTestDependency[] depende...
    class InspectionTestDependency (line 61) | static class InspectionTestDependency {
      method InspectionTestDependency (line 66) | public InspectionTestDependency(int offset, String groupId, String a...
      method InspectionTestDependency (line 72) | public InspectionTestDependency(int offset, String artifactId) {

FILE: src/test/java/com/jfrog/ide/idea/inspections/MavenInspectionTest.java
  class MavenInspectionTest (line 8) | public class MavenInspectionTest extends InspectionsTestBase {
    method setUp (line 19) | @SuppressWarnings("MethodDoesntCallSuperMethod")
    method testDependencies (line 25) | public void testDependencies() {
    method testNonDependencies (line 29) | public void testNonDependencies() {
    method testCreateGeneralInfo (line 33) | public void testCreateGeneralInfo() {

FILE: src/test/java/com/jfrog/ide/idea/inspections/NpmInspectionTest.java
  class NpmInspectionTest (line 8) | public class NpmInspectionTest extends InspectionsTestBase {
    method setUp (line 19) | @SuppressWarnings("MethodDoesntCallSuperMethod")
    method testDependencies (line 25) | public void testDependencies() {
    method testNonDependencies (line 29) | public void testNonDependencies() {
    method testCreateGeneralInfo (line 33) | public void testCreateGeneralInfo() {

FILE: src/test/java/com/jfrog/ide/idea/integration/ApplicabilityScannerIntegrationTests.java
  class ApplicabilityScannerIntegrationTests (line 15) | public class ApplicabilityScannerIntegrationTests extends BaseIntegratio...
    method setUp (line 19) | @Override
    method testApplicabilityScannerJsProjectNotApplicable (line 25) | public void testApplicabilityScannerJsProjectNotApplicable() throws IO...
    method testApplicabilityScannerJsProject (line 35) | public void testApplicabilityScannerJsProject() throws IOException, In...
    method testApplicabilityScannerPythonProjectNotApplicable (line 54) | public void testApplicabilityScannerPythonProjectNotApplicable() throw...
    method testApplicabilityScannerPythonProject (line 64) | public void testApplicabilityScannerPythonProject() throws IOException...
    method testApplicabilityScannerJavaProject (line 81) | public void testApplicabilityScannerJavaProject() throws IOException, ...
    method createTempProjectDir (line 98) | @Override

FILE: src/test/java/com/jfrog/ide/idea/integration/BaseIntegrationTest.java
  class BaseIntegrationTest (line 19) | public abstract class BaseIntegrationTest extends HeavyPlatformTestCase {
    method setUp (line 25) | @Override
    method createServerConfigFromEnv (line 40) | private ServerConfigImpl createServerConfigFromEnv() {
    method createServerConfig (line 49) | private ServerConfigImpl createServerConfig(String platformUrl, String...
    method addSlashIfNeeded (line 62) | private String addSlashIfNeeded(String paramValue) {
    method failSetup (line 66) | private void failSetup() {
    method createTempProjectDir (line 71) | protected String createTempProjectDir(String projectName) throws IOExc...
    method dummyCheckCanceled (line 77) | protected void dummyCheckCanceled() {

FILE: src/test/java/com/jfrog/ide/idea/integration/ExternalResourcesRepoIntegrationTests.java
  class ExternalResourcesRepoIntegrationTests (line 22) | public class ExternalResourcesRepoIntegrationTests extends BaseIntegrati...
    method setUp (line 28) | @Override
    method testDownloadScannersFromExternalRepo (line 34) | public void testDownloadScannersFromExternalRepo() throws IOException,...
    method testDownloadScannersFromExternalRepoNotExist (line 57) | public void testDownloadScannersFromExternalRepoNotExist() throws IOEx...
    method createTempProjectDir (line 75) | @Override
    method deleteScannersDir (line 80) | private void deleteScannersDir() throws IOException {

FILE: src/test/java/com/jfrog/ide/idea/integration/IACScannerIntegrationTests.java
  class IACScannerIntegrationTests (line 16) | public class IACScannerIntegrationTests extends BaseIntegrationTest {
    method setUp (line 21) | @Override
    method testIACScanner (line 27) | public void testIACScanner() throws IOException, InterruptedException {
    method createTempProjectDir (line 46) | @Override

FILE: src/test/java/com/jfrog/ide/idea/integration/SecretsScannerIntegrationTests.java
  class SecretsScannerIntegrationTests (line 16) | public class SecretsScannerIntegrationTests extends BaseIntegrationTest {
    method setUp (line 21) | @Override
    method testSecretsScanner (line 27) | public void testSecretsScanner() throws IOException, InterruptedExcept...
    method testSecretsScannerNoSecrets (line 47) | public void testSecretsScannerNoSecrets() throws IOException, Interrup...
    method createTempProjectDir (line 56) | @Override

FILE: src/test/java/com/jfrog/ide/idea/scan/DummyCircularDepPyPkgManager.java
  class DummyCircularDepPyPkgManager (line 17) | public class DummyCircularDepPyPkgManager extends PyPackageManager {
    method DummyCircularDepPyPkgManager (line 24) | public DummyCircularDepPyPkgManager(@NotNull Sdk sdk) {
    method installManagement (line 28) | @Override
    method hasManagement (line 33) | @Override
    method install (line 38) | @Override
    method install (line 43) | @Override
    method uninstall (line 48) | @Override
    method refresh (line 53) | @Override
    method createVirtualEnv (line 58) | @Override
    method getPackages (line 63) | @Override
    method refreshAndGetPackages (line 68) | @Override
    method getRequirements (line 97) | @Override
    method parseRequirement (line 102) | @Override
    method parseRequirements (line 107) | @Override
    method parseRequirements (line 112) | @Override
    method getDependents (line 117) | @Override

FILE: src/test/java/com/jfrog/ide/idea/scan/DummyCircularRequirement.java
  class DummyCircularRequirement (line 12) | public class DummyCircularRequirement implements com.jetbrains.python.pa...
    method DummyCircularRequirement (line 15) | DummyCircularRequirement(String name) {
    method getName (line 19) | @Override
    method getVersionSpecs (line 24) | @Override
    method getInstallOptions (line 29) | @Override
    method getExtras (line 34) | @Override
    method match (line 39) | @Override

FILE: src/test/java/com/jfrog/ide/idea/scan/GradleScannerTest.java
  class GradleScannerTest (line 28) | public class GradleScannerTest extends HeavyPlatformTestCase {
    method setUp (line 34) | @Override
    method tearDown (line 47) | @Override
    method createTempProjectDir (line 53) | private String createTempProjectDir(String projectName) throws IOExcep...
    method testGetGradleWrapperExeAndJdk (line 59) | public void testGetGradleWrapperExeAndJdk() throws IOException {
    method testGetGradleGlobalExeAndJdk (line 69) | public void testGetGradleGlobalExeAndJdk() throws IOException {
    method testBuildTree (line 78) | public void testBuildTree() throws IOException {

FILE: src/test/java/com/jfrog/ide/idea/scan/MavenScannerTest.java
  class MavenScannerTest (line 14) | public class MavenScannerTest extends BasePlatformTestCase {
    method testGroupDependenciesToDescriptorNodes (line 15) | public void testGroupDependenciesToDescriptorNodes() {

FILE: src/test/java/com/jfrog/ide/idea/scan/PypiScannerTest.java
  class PypiScannerTest (line 41) | public class PypiScannerTest extends LightJavaCodeInsightFixtureTestCase {
    method setUp (line 51) | @Override
    method tearDown (line 59) | @Override
    method getProjectDescriptor (line 69) | @Override
    method createVirtualEnv (line 74) | private void createVirtualEnv() throws IOException, InterruptedExcepti...
    method resolvePythonSdk (line 88) | private void resolvePythonSdk() {
    method installDependencyOnVirtualEnv (line 94) | private void installDependencyOnVirtualEnv() {
    method testBuildTree (line 108) | public void testBuildTree() throws IOException {
    method testBuildTreeCircularDependency (line 132) | public void testBuildTreeCircularDependency() throws IOException {

FILE: src/test/java/com/jfrog/ide/idea/scan/ScanBinaryExecutorTest.java
  class ScanBinaryExecutorTest (line 23) | public class ScanBinaryExecutorTest extends TestCase {
    method testInputBuilder (line 30) | public void testInputBuilder() throws IOException {
    method testSarifParser (line 56) | public void testSarifParser() throws IOException {
    method testSarifParserWithMissingRole (line 76) | public void testSarifParserWithMissingRole() throws IndexOutOfBoundsEx...
    method testSarifParserApplicResultsWithRulesBasedParsing (line 80) | public void testSarifParserApplicResultsWithRulesBasedParsing() throws...
    method testSarifParserSkipsInformationalResults (line 92) | public void testSarifParserSkipsInformationalResults() throws IOExcept...
    method testGetBinaryDownloadURL (line 99) | public void testGetBinaryDownloadURL() {
    method readScansConfigYAML (line 110) | private ScansConfig readScansConfigYAML(Path inputPath) throws IOExcep...

FILE: src/test/java/com/jfrog/ide/idea/scan/ScannerBaseTest.java
  class ScannerBaseTest (line 13) | public class ScannerBaseTest {
    method testGetParents (line 14) | @Test

FILE: src/test/java/com/jfrog/ide/idea/scan/SingleDescriptorScannerTest.java
  class SingleDescriptorScannerTest (line 15) | public class SingleDescriptorScannerTest extends BasePlatformTestCase {
    method testGroupDependenciesToDescriptorNodes (line 16) | public void testGroupDependenciesToDescriptorNodes() {

FILE: src/test/java/com/jfrog/ide/idea/scan/SourceCodeManagerTest.java
  class SourceCodeManagerTest (line 13) | @RunWith(Parameterized.class)
    method data (line 16) | @Parameterized.Parameters
    method SourceCodeManagerTest (line 29) | public SourceCodeManagerTest(String excludedPaths, String[] skipFolder...
    method testConvertToSkippedFolders (line 34) | @Test

FILE: src/test/java/com/jfrog/ide/idea/scan/YarnScannerTest.java
  class YarnScannerTest (line 20) | public class YarnScannerTest extends HeavyPlatformTestCase {
    type Project (line 25) | public enum Project {
      method Project (line 31) | Project(String name) {
    method setUp (line 36) | @Override
    method tearDown (line 43) | @Override
    method createTempProjectDir (line 53) | private String createTempProjectDir(String projectName) throws IOExcep...
    method testGetPackageNameToVersionsMap (line 60) | public void testGetPackageNameToVersionsMap() throws IOException {
    method vulnerableDependenciesMapInit (line 75) | private Map<String, DependencyNode> vulnerableDependenciesMapInit(Stri...
    method walkDepTreeCommonTest (line 85) | private void walkDepTreeCommonTest(String projectName, String rootId, ...
    method testWalkDepTree (line 141) | public void testWalkDepTree() throws IOException {
    method testWalkDepTreeMonorepo (line 145) | public void testWalkDepTreeMonorepo() throws IOException {

FILE: src/test/java/com/jfrog/ide/idea/scan/utils/ImpactTreeBuilderTest.java
  class ImpactTreeBuilderTest (line 16) | public class ImpactTreeBuilderTest {
    method testBuildImpactTrees (line 66) | @Test
    method testAddImpactPathToDependencyNode (line 82) | @Test
    method assertImpactTree (line 92) | private static void assertImpactTree(ImpactTree expected, ImpactTree a...
    method assertImpactTreeNode (line 96) | private static void assertImpactTreeNode(ImpactTreeNode expected, Impa...

FILE: src/test/java/com/jfrog/ide/idea/ui/LocalComponentsTreeTest.java
  class LocalComponentsTreeTest (line 13) | public class LocalComponentsTreeTest extends HeavyPlatformTestCase {
    method testAddScanResults (line 14) | public void testAddScanResults() {
    method createFileTreeNodeWithIssue (line 34) | private FileTreeNode createFileTreeNodeWithIssue(String filePath, Stri...
    method getTreeFileNodes (line 43) | private List<FileTreeNode> getTreeFileNodes(LocalComponentsTree tree) {

FILE: src/test/java/com/jfrog/ide/idea/ui/configuration/ConfigVerificationUtilsNegativeTest.java
  class ConfigVerificationUtilsNegativeTest (line 17) | @RunWith(Parameterized.class)
    method data (line 20) | @Parameterized.Parameters
    method ConfigVerificationUtilsNegativeTest (line 46) | public ConfigVerificationUtilsNegativeTest(String excludedPaths, Serve...
    method testValidateGlobalConfig (line 53) | @Test(expected = ConfigurationException.class)

FILE: src/test/java/com/jfrog/ide/idea/ui/configuration/ConfigVerificationUtilsPositiveTest.java
  class ConfigVerificationUtilsPositiveTest (line 17) | @RunWith(Parameterized.class)
    method data (line 20) | @Parameterized.Parameters
    method ConfigVerificationUtilsPositiveTest (line 38) | public ConfigVerificationUtilsPositiveTest(String excludedPaths, Serve...
    method testValidateGlobalConfig (line 45) | @Test

FILE: src/test/resources/gradle/global/api/src/main/java/org/gradle/api/PersonList.java
  class PersonList (line 25) | public class PersonList {
    method doSomethingWithImpl (line 28) | public void doSomethingWithImpl() {

FILE: src/test/resources/gradle/global/api/src/main/java/org/gradle/apiImpl/Impl.java
  class Impl (line 20) | public class Impl {
    method implMethod (line 22) | public void implMethod() {

FILE: src/test/resources/gradle/global/services/webservice/src/main/java/org/gradle/webservice/TestTest.java
  class TestTest (line 25) | public class TestTest {
    method method (line 28) | public void method() {

FILE: src/test/resources/gradle/global/services/webservice/src/test/java/org/gradle/webservice/TestTestTest.java
  class TestTestTest (line 23) | public class TestTestTest extends TestCase {
    method testClasspath (line 24) | public void testClasspath() {
    method testApiCompileClasspath (line 28) | public void testApiCompileClasspath() {

FILE: src/test/resources/gradle/global/shared/src/main/java/org/gradle/shared/Person.java
  class Person (line 22) | public class Person {
    method Person (line 25) | public Person(String name) {
    method getName (line 29) | public String getName() {
    method setName (line 33) | public void setName(String name) {
    method readProperty (line 37) | public String readProperty() throws IOException {

FILE: src/test/resources/gradle/wrapper/api/src/main/java/org/gradle/api/PersonList.java
  class PersonList (line 25) | public class PersonList {
    method doSomethingWithImpl (line 28) | public void doSomethingWithImpl() {

FILE: src/test/resources/gradle/wrapper/api/src/main/java/org/gradle/apiImpl/Impl.java
  class Impl (line 20) | public class Impl {
    method implMethod (line 22) | public void implMethod() {

FILE: src/test/resources/gradle/wrapper/services/webservice/src/main/java/org/gradle/webservice/TestTest.java
  class TestTest (line 25) | public class TestTest {
    method method (line 28) | public void method() {

FILE: src/test/resources/gradle/wrapper/services/webservice/src/test/java/org/gradle/webservice/TestTestTest.java
  class TestTestTest (line 23) | public class TestTestTest extends TestCase {
    method testClasspath (line 24) | public void testClasspath() {
    method testApiCompileClasspath (line 28) | public void testApiCompileClasspath() {

FILE: src/test/resources/gradle/wrapper/shared/src/main/java/org/gradle/shared/Person.java
  class Person (line 22) | public class Person {
    method Person (line 25) | public Person(String name) {
    method getName (line 29) | public String getName() {
    method setName (line 33) | public void setName(String name) {
    method readProperty (line 37) | public String readProperty() throws IOException {

FILE: src/test/resources/iac/testProjects/exposedIac/plan/convert_hcl_to_plan.py
  function handle_hcl_file (line 16) | def handle_hcl_file(hcl_filepath: str, plan_filepath: str):
  function main (line 48) | def main(hcl_dirpath: str, plan_dirpath: str):

FILE: src/test/resources/projects/project1/main.go
  function main (line 8) | func main() {

FILE: src/test/resources/projects/project2/main.go
  function main (line 5) | func main() {

FILE: src/test/resources/projects/project2/subproject/main.go
  function main (line 9) | func main() {
  function PrintHello (line 13) | func PrintHello() {

FILE: src/test/resources/secrets/testProjects/dummy/ApplicabilityScannerExecutor.java
  class ApplicabilityScannerExecutor (line 17) | public class ApplicabilityScannerExecutor extends ScanBinaryExecutor {
    method ApplicabilityScannerExecutor (line 22) | public ApplicabilityScannerExecutor(Log log, ServerConfig serverConfig) {
    method ApplicabilityScannerExecutor (line 26) | public ApplicabilityScannerExecutor(Log log, ServerConfig serverConfig...
    method execute (line 31) | public List<JFrogSecurityWarning> execute(ScanConfig.Builder inputFile...
    method getScannerFeatureName (line 35) | @Override

FILE: src/test/resources/secrets/testProjects/dummy/main.py
  function py_files (line 6) | def py_files(members):
  function get_name (line 12) | def get_name():

FILE: src/test/resources/secrets/testProjects/exposedSecrets/req.secret.keys/applicable.c
  function main (line 1) | int main() {

FILE: src/test/resources/secrets/testProjects/exposedSecrets/req.secret.keys/not_applicable.c
  function main (line 1) | int main() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/AccessControlIntegrationTest.java
  class AccessControlIntegrationTest (line 11) | class AccessControlIntegrationTest extends IntegrationTest {
    method testLesson (line 13) | @Test
    method assignment3 (line 23) | private void assignment3() {
    method assignment2 (line 65) | private void assignment2() {
    method assignment1 (line 82) | private void assignment1() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/CSRFIntegrationTest.java
  class CSRFIntegrationTest (line 26) | public class CSRFIntegrationTest extends IntegrationTest {
    method init (line 56) | @BeforeEach
    method testCSRFLesson (line 67) | @TestFactory
    method shutdown (line 77) | @AfterEach
    method uploadTrickHtml (line 85) | private void uploadTrickHtml(String htmlName, String htmlContent) thro...
    method callTrickHtml (line 104) | private String callTrickHtml(String htmlName) {
    method checkAssignment3 (line 119) | private void checkAssignment3(String goatURL) {
    method checkAssignment4 (line 135) | private void checkAssignment4(String goatURL) {
    method checkAssignment7 (line 156) | private void checkAssignment7(String goatURL) {
    method checkAssignment8 (line 179) | private void checkAssignment8(String goatURL) {
    class Overview (line 237) | @Data
    method registerCSRFUser (line 246) | private void registerCSRFUser() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/ChallengeIntegrationTest.java
  class ChallengeIntegrationTest (line 15) | public class ChallengeIntegrationTest extends IntegrationTest {
    method testChallenge1 (line 17) | @Test
    method testChallenge5 (line 71) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/CryptoIntegrationTest.java
  class CryptoIntegrationTest (line 22) | public class CryptoIntegrationTest extends IntegrationTest {
    method runTests (line 24) | @Test
    method checkAssignment2 (line 52) | private void checkAssignment2() {
    method checkAssignment3 (line 68) | private void checkAssignment3() {
    method checkAssignment4 (line 76) | private void checkAssignment4() throws NoSuchAlgorithmException {
    method checkAssignmentSigning (line 102) | private void checkAssignmentSigning() throws NoSuchAlgorithmException,...
    method checkAssignmentDefaults (line 123) | private void checkAssignmentDefaults() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/DeserializationIntegrationTest.java
  class DeserializationIntegrationTest (line 11) | public class DeserializationIntegrationTest extends IntegrationTest {
    method runTests (line 15) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/GeneralLessonIntegrationTest.java
  class GeneralLessonIntegrationTest (line 12) | public class GeneralLessonIntegrationTest extends IntegrationTest {
    method httpBasics (line 14) | @Test
    method httpProxies (line 37) | @Test
    method cia (line 57) | @Test
    method vulnerableComponents (line 78) | @Test
    method insecureLogin (line 102) | @Test
    method securePasswords (line 113) | @Test
    method chrome (line 150) | @Test
    method authByPass (line 186) | @Test
    method lessonTemplate (line 200) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/IDORIntegrationTest.java
  class IDORIntegrationTest (line 22) | public class IDORIntegrationTest extends IntegrationTest {
    method init (line 24) | @BeforeEach
    method testIDORLesson (line 30) | @TestFactory
    method shutdown (line 38) | @AfterEach
    method loginIDOR (line 43) | private void loginIDOR() throws IOException {
    method profile (line 55) | private void profile() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/IntegrationTest.java
  class IntegrationTest (line 16) | public abstract class IntegrationTest {
    method url (line 31) | protected String url(String url) {
    method webWolfUrl (line 38) | protected String webWolfUrl(String url) {
    method login (line 45) | @BeforeEach
    method logout (line 95) | @AfterEach
    method startLesson (line 105) | public void startLesson(String lessonName) {
    method startLesson (line 109) | public void startLesson(String lessonName, boolean restart) {
    method checkAssignment (line 129) | public void checkAssignment(String url, Map<String, ?> params, boolean...
    method checkAssignmentWithPUT (line 142) | public void checkAssignmentWithPUT(String url, Map<String, ?> params, ...
    method checkResults (line 156) | public void checkResults(String prefix) {
    method checkResults (line 169) | public void checkResults() {
    method checkAssignment (line 181) | public void checkAssignment(String url, ContentType contentType, Strin...
    method checkAssignmentWithGet (line 195) | public void checkAssignmentWithGet(String url, Map<String, ?> params, ...
    method getWebWolfFileServerLocation (line 208) | public String getWebWolfFileServerLocation() {
    method webGoatServerDirectory (line 220) | public String webGoatServerDirectory() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/JWTLessonIntegrationTest.java
  class JWTLessonIntegrationTest (line 32) | public class JWTLessonIntegrationTest extends IntegrationTest {
    method solveAssignment (line 34) | @Test
    method generateToken (line 53) | private String generateToken(String key) {
    method getSecretToken (line 67) | private String getSecretToken(String token) {
    method decodingToken (line 79) | private void decodingToken() {
    method findPassword (line 93) | private void findPassword() throws IOException, NoSuchAlgorithmExcepti...
    method resetVotes (line 118) | private void resetVotes() throws IOException {
    method buyAsTom (line 157) | private void buyAsTom() throws IOException {
    method deleteTom (line 182) | private void deleteTom() {
    method quiz (line 208) | private void quiz() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/LabelAndHintIntegrationTest.java
  class LabelAndHintIntegrationTest (line 14) | public class LabelAndHintIntegrationTest extends IntegrationTest {
    method testSingleLabel (line 18) | @Test
    method testHints (line 72) | @Test
    method testLabels (line 94) | @Test
    method getProperties (line 110) | private Properties getProperties(String lang) {
    method checkLang (line 124) | private void checkLang(Properties propsDefault, String lang) {
    method getLabels (line 143) | private JsonPath getLabels(String lang) {
    method getHints (line 157) | private List<String> getHints() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/PasswordResetLessonIntegrationTest.java
  class PasswordResetLessonIntegrationTest (line 18) | public class PasswordResetLessonIntegrationTest extends IntegrationTest {
    method init (line 20) | @BeforeEach
    method passwordResetLesson (line 26) | @TestFactory
    method assignment2 (line 36) | public void assignment2() {
    method assignment4 (line 41) | public void assignment4() {
    method assignment5 (line 45) | public void assignment5() {
    method solveAssignment (line 51) | public void solveAssignment() {
    method sendEmailShouldBeAvailableInWebWolf (line 63) | public void sendEmailShouldBeAvailableInWebWolf() {
    method shutdown (line 77) | @AfterEach
    method changePassword (line 83) | private void changePassword(String link) {
    method getPasswordResetLinkFromLandingPage (line 94) | private String getPasswordResetLinkFromLandingPage() {
    method clickForgotEmailLink (line 107) | private void clickForgotEmailLink(String user) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/PathTraversalIntegrationTest.java
  class PathTraversalIT (line 27) | class PathTraversalIT extends IntegrationTest {
    method init (line 34) | @BeforeEach
    method testPathTraversal (line 42) | @TestFactory
    method assignment1 (line 53) | private void assignment1() throws IOException {
    method assignment2 (line 67) | private void assignment2() throws IOException {
    method assignment3 (line 81) | private void assignment3() throws IOException {
    method assignment4 (line 94) | private void assignment4() throws IOException {
    method assignment5 (line 109) | private void assignment5() throws IOException {
    method shutdown (line 132) | @AfterEach

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/ProgressRaceConditionIntegrationTest.java
  class ProgressRaceConditionIntegrationTest (line 18) | public class ProgressRaceConditionIntegrationTest extends IntegrationTest {
    method runTests (line 20) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/SSRFIntegrationTest.java
  class SSRFIntegrationTest (line 9) | public class SSRFIntegrationTest extends IntegrationTest {
    method runTests (line 11) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/SessionManagementIntegrationTest.java
  class SessionManagementIT (line 36) | class SessionManagementIT extends IntegrationTest {
    method hijackSessionTest (line 41) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/SqlInjectionAdvancedIntegrationTest.java
  class SqlInjectionAdvancedIntegrationTest (line 8) | public class SqlInjectionAdvancedIntegrationTest extends IntegrationTest {
    method runTests (line 10) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/SqlInjectionLessonIntegrationTest.java
  class SqlInjectionLessonIntegrationTest (line 8) | public class SqlInjectionLessonIntegrationTest extends IntegrationTest {
    method runTests (line 29) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/SqlInjectionMitigationIntegrationTest.java
  class SqlInjectionMitigationIntegrationTest (line 13) | public class SqlInjectionMitigationIntegrationTest extends IntegrationTe...
    method runTests (line 15) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/WebWolfIntegrationTest.java
  class WebWolfIntegrationTest (line 13) | public class WebWolfIntegrationTest extends IntegrationTest {
    method runTests (line 15) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/XSSIntegrationTest.java
  class XSSIntegrationTest (line 10) | public class XSSIntegrationTest extends IntegrationTest {
    method crossSiteScriptingAssignments (line 13) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/it/java/org/owasp/webgoat/XXEIntegrationTest.java
  class XXEIntegrationTest (line 12) | public class XXEIntegrationTest extends IntegrationTest {
    method xxeSecure (line 29) | @Test
    method getSecret (line 52) | private String getSecret() throws IOException {
    method runTests (line 89) | @Test

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/dummy/insecure/framework/VulnerableTaskHolder.java
  class VulnerableTaskHolder (line 11) | @Slf4j
    method VulnerableTaskHolder (line 21) | public VulnerableTaskHolder(String taskName, String taskAction) {
    method toString (line 28) | @Override
    method readObject (line 44) | private void readObject(ObjectInputStream stream) throws Exception {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/AjaxAuthenticationEntryPoint.java
  class AjaxAuthenticationEntryPoint (line 42) | public class AjaxAuthenticationEntryPoint extends LoginUrlAuthentication...
    method AjaxAuthenticationEntryPoint (line 43) | public AjaxAuthenticationEntryPoint(String loginFormUrl) {
    method commence (line 47) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/AsciiDoctorTemplateResolver.java
  class AsciiDoctorTemplateResolver (line 66) | @Slf4j
    method AsciiDoctorTemplateResolver (line 75) | public AsciiDoctorTemplateResolver(Language language, ResourceLoader r...
    method computeTemplateResource (line 81) | @Override
    method getInputStream (line 109) | private InputStream getInputStream(String templateName) throws IOExcep...
    method computeResourceName (line 124) | private String computeResourceName(String resourceName, String languag...
    method createAttributes (line 138) | private Map<String, Object> createAttributes() {
    method determineLanguage (line 151) | private String determineLanguage() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/DatabaseConfiguration.java
  class DatabaseConfiguration (line 17) | @Configuration
    method dataSource (line 25) | @Bean
    method flyWayContainer (line 42) | @Bean(initMethod = "migrate")
    method flywayLessons (line 52) | @Bean
    method lessonDataSource (line 63) | @Bean

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/HammerHead.java
  class HammerHead (line 43) | @Controller
    method attack (line 50) | @RequestMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/LessonDataSource.java
  class LessonDataSource (line 13) | public class LessonDataSource implements DataSource {
    method LessonDataSource (line 17) | public LessonDataSource(DataSource dataSource) {
    method getConnection (line 21) | @Override
    method getConnection (line 31) | @Override
    method getLogWriter (line 36) | @Override
    method setLogWriter (line 41) | @Override
    method setLoginTimeout (line 46) | @Override
    method getLoginTimeout (line 51) | @Override
    method getParentLogger (line 56) | @Override
    method unwrap (line 61) | @Override
    method isWrapperFor (line 66) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/LessonTemplateResolver.java
  class LessonTemplateResolver (line 54) | @Slf4j
    method LessonTemplateResolver (line 61) | public LessonTemplateResolver(ResourceLoader resourceLoader) {
    method computeTemplateResource (line 66) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/MvcConfiguration.java
  class MvcConfiguration (line 70) | @Configuration
    method addViewControllers (line 79) | @Override
    method viewResolver (line 87) | @Bean
    method lessonThymeleafTemplateResolver (line 100) | @Bean
    method springThymeleafTemplateResolver (line 126) | @Bean
    method lessonTemplateResolver (line 139) | @Bean
    method asciiDoctorTemplateResolver (line 149) | @Bean
    method thymeleafTemplateEngine (line 161) | @Bean
    method addResourceHandlers (line 179) | @Override
    method pluginMessages (line 214) | @Bean
    method language (line 224) | @Bean
    method localeResolver (line 229) | @Bean
    method localeChangeInterceptor (line 235) | @Bean
    method addInterceptors (line 242) | @Override
    method messageSource (line 247) | @Bean
    method labelDebugger (line 256) | @Bean

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/WebGoat.java
  class WebGoat (line 47) | @Configuration
    method pluginTargetDirectory (line 53) | @Bean(name = "pluginTargetDirectory")
    method webSession (line 58) | @Bean
    method userSessionData (line 64) | @Bean
    method restTemplate (line 70) | @Bean

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/WebSecurityConfig.java
  class WebSecurityConfig (line 48) | @Configuration
    method configure (line 55) | @Override
    method configureGlobal (line 86) | @Autowired
    method userDetailsServiceBean (line 91) | @Bean
    method authenticationManager (line 97) | @Override
    method passwordEncoder (line 103) | @SuppressWarnings("deprecation")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/WebWolfRedirect.java
  class WebWolfRedirect (line 9) | @Controller
    method openWebWolf (line 15) | @GetMapping("/WebWolf")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/EnvironmentExposure.java
  class EnvironmentExposure (line 13) | @Component
    method getEnv (line 18) | public static Environment getEnv() {
    method setApplicationContext (line 22) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/OperatingSystemMacro.java
  class OperatingSystemMacro (line 7) | public class OperatingSystemMacro extends InlineMacroProcessor {
    method OperatingSystemMacro (line 9) | public OperatingSystemMacro(String macroName) {
    method OperatingSystemMacro (line 13) | public OperatingSystemMacro(String macroName, Map<String, Object> conf...
    method process (line 17) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/UsernameMacro.java
  class UsernameMacro (line 9) | public class UsernameMacro extends InlineMacroProcessor {
    method UsernameMacro (line 11) | public UsernameMacro(String macroName) {
    method UsernameMacro (line 15) | public UsernameMacro(String macroName, Map<String, Object> config) {
    method process (line 19) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatTmpDirMacro.java
  class WebGoatTmpDirMacro (line 7) | public class WebGoatTmpDirMacro extends InlineMacroProcessor {
    method WebGoatTmpDirMacro (line 9) | public WebGoatTmpDirMacro(String macroName) {
    method WebGoatTmpDirMacro (line 13) | public WebGoatTmpDirMacro(String macroName, Map<String, Object> config) {
    method process (line 17) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/WebGoatVersionMacro.java
  class WebGoatVersionMacro (line 7) | public class WebGoatVersionMacro extends InlineMacroProcessor {
    method WebGoatVersionMacro (line 9) | public WebGoatVersionMacro(String macroName) {
    method WebGoatVersionMacro (line 13) | public WebGoatVersionMacro(String macroName, Map<String, Object> confi...
    method process (line 17) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfMacro.java
  class WebWolfMacro (line 16) | public class WebWolfMacro extends InlineMacroProcessor {
    method WebWolfMacro (line 18) | public WebWolfMacro(String macroName) {
    method WebWolfMacro (line 22) | public WebWolfMacro(String macroName, Map<String, Object> config) {
    method process (line 26) | @Override
    method displayCompleteLinkNoFormatting (line 45) | private boolean displayCompleteLinkNoFormatting(Map<String, Object> at...
    method determineHost (line 56) | private String determineHost(String port) {
    method includeWebWolfContext (line 70) | protected boolean includeWebWolfContext() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/asciidoc/WebWolfRootMacro.java
  class WebWolfRootMacro (line 11) | public class WebWolfRootMacro extends WebWolfMacro {
    method WebWolfRootMacro (line 13) | public WebWolfRootMacro(String macroName) {
    method WebWolfRootMacro (line 17) | public WebWolfRootMacro(String macroName, Map<String, Object> config) {
    method includeWebWolfContext (line 21) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/assignments/AssignmentEndpoint.java
  class AssignmentEndpoint (line 36) | public abstract class AssignmentEndpoint implements Initializeable {
    method getWebSession (line 42) | protected WebSession getWebSession() {
    method getUserSessionData (line 46) | protected UserSessionData getUserSessionData() {
    method success (line 60) | protected AttackResult.AttackResultBuilder success(AssignmentEndpoint ...
    method failed (line 78) | protected AttackResult.AttackResultBuilder failed(AssignmentEndpoint a...
    method informationMessage (line 86) | protected AttackResult.AttackResultBuilder informationMessage(Assignme...
    method initialize (line 90) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/assignments/AttackResult.java
  class AttackResult (line 33) | public class AttackResult {
    class AttackResultBuilder (line 35) | public static class AttackResultBuilder {
      method AttackResultBuilder (line 46) | public AttackResultBuilder(PluginMessages messages) {
      method lessonCompleted (line 50) | public AttackResultBuilder lessonCompleted(boolean lessonCompleted) {
      method lessonCompleted (line 56) | public AttackResultBuilder lessonCompleted(boolean lessonCompleted, ...
      method feedbackArgs (line 62) | public AttackResultBuilder feedbackArgs(Object... args) {
      method feedback (line 67) | public AttackResultBuilder feedback(String resourceBundleKey) {
      method output (line 72) | public AttackResultBuilder output(String output) {
      method outputArgs (line 77) | public AttackResultBuilder outputArgs(Object... args) {
      method attemptWasMade (line 82) | public AttackResultBuilder attemptWasMade() {
      method build (line 87) | public AttackResult build() {
      method assignment (line 96) | public AttackResultBuilder assignment(AssignmentEndpoint assignment) {
    method AttackResult (line 108) | public AttackResult(
    method builder (line 121) | public static AttackResultBuilder builder(PluginMessages messages) {
    method assignmentSolved (line 125) | public boolean assignmentSolved() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/assignments/LessonTrackerInterceptor.java
  class LessonTrackerInterceptor (line 36) | @RestControllerAdvice
    method LessonTrackerInterceptor (line 42) | public LessonTrackerInterceptor(
    method supports (line 48) | @Override
    method beforeBodyWrite (line 54) | @Override
    method trackProgress (line 68) | protected AttackResult trackProgress(AttackResult attackResult) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/controller/StartLesson.java
  class StartLesson (line 42) | @Controller
    method StartLesson (line 48) | public StartLesson(WebSession ws, Course course) {
    method start (line 58) | @RequestMapping(
    method lessonPage (line 71) | @RequestMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/controller/Welcome.java
  class Welcome (line 44) | @Controller
    method welcome (line 55) | @GetMapping(path = {"welcome.mvc"})

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/i18n/Language.java
  class Language (line 41) | @AllArgsConstructor
    method getLocale (line 46) | public Locale getLocale() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/i18n/Messages.java
  class Messages (line 38) | @AllArgsConstructor
    method getMessages (line 48) | public Properties getMessages() {
    method getMessage (line 52) | public String getMessage(String code, Object... args) {
    method getMessage (line 56) | public String getMessage(String code, String defaultValue, Object... a...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/i18n/PluginMessages.java
  class PluginMessages (line 39) | public class PluginMessages extends ReloadableResourceBundleMessageSource {
    method PluginMessages (line 45) | public PluginMessages(
    method refreshProperties (line 53) | @Override
    method getMessages (line 74) | public Properties getMessages() {
    method getMessage (line 78) | public String getMessage(String code, Object... args) {
    method getMessage (line 82) | public String getMessage(String code, String defaultValue, Object... a...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/Assignment.java
  class Assignment (line 38) | @Getter
    method Assignment (line 52) | private Assignment() {
    method Assignment (line 56) | public Assignment(String name) {
    method Assignment (line 60) | public Assignment(String name, String path, List<String> hints) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/Category.java
  type Category (line 36) | public enum Category {
    method Category (line 58) | Category(String name, Integer ranking) {
    method toString (line 63) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/CourseConfiguration.java
  class CourseConfiguration (line 44) | @Slf4j
    method CourseConfiguration (line 52) | public CourseConfiguration(List<Lesson> lessons, List<AssignmentEndpoi...
    method course (line 59) | @Bean
    method createAssignment (line 65) | private List<Assignment> createAssignment(Lesson lesson) {
    method getPath (line 79) | private String getPath(Class<? extends AssignmentEndpoint> e) {
    method methodReturnTypeIsOfTypeAttackResult (line 95) | private boolean methodReturnTypeIsOfTypeAttackResult(Method m) {
    method getMapping (line 107) | private String getMapping(Method m) {
    method getHints (line 137) | private List<String> getHints(Class<? extends AssignmentEndpoint> e) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/Hint.java
  class Hint (line 38) | @Value

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/Initializeable.java
  type Initializeable (line 9) | public interface Initializeable {
    method initialize (line 11) | void initialize(WebGoatUser webGoatUser);

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/Lesson.java
  class Lesson (line 29) | @Getter
    method Lesson (line 38) | protected Lesson() {
    method getName (line 47) | public String getName() {
    method getCategory (line 57) | public Category getCategory() {
    method getDefaultCategory (line 66) | protected abstract Category getDefaultCategory();
    method getTitle (line 73) | public abstract String getTitle();
    method getPath (line 88) | protected String getPath() {
    method getLink (line 102) | public String getLink() {
    method toString (line 111) | public String toString() {
    method getId (line 115) | public final String getId() {
    method getPackage (line 119) | public final String getPackage() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/LessonConnectionInvocationHandler.java
  class LessonConnectionInvocationHandler (line 15) | @Slf4j
    method LessonConnectionInvocationHandler (line 20) | public LessonConnectionInvocationHandler(Connection targetConnection) {
    method invoke (line 24) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/LessonInfoModel.java
  class LessonInfoModel (line 12) | @Getter

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/LessonMenuItem.java
  class LessonMenuItem (line 39) | public class LessonMenuItem {
    method getName (line 53) | public String getName() {
    method setName (line 62) | public void setName(String name) {
    method getChildren (line 71) | public List<LessonMenuItem> getChildren() {
    method setChildren (line 80) | public void setChildren(List<LessonMenuItem> children) {
    method getType (line 89) | public LessonMenuItemType getType() {
    method setType (line 98) | public void setType(LessonMenuItemType type) {
    method addChild (line 107) | public void addChild(LessonMenuItem child) {
    method toString (line 111) | @Override
    method isComplete (line 124) | public boolean isComplete() {
    method setComplete (line 133) | public void setComplete(boolean complete) {
    method getLink (line 142) | public String getLink() {
    method setLink (line 151) | public void setLink(String link) {
    method setRanking (line 155) | public void setRanking(int ranking) {
    method getRanking (line 159) | public int getRanking() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/LessonMenuItemType.java
  type LessonMenuItemType (line 36) | public enum LessonMenuItemType {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/lessons/LessonScanner.java
  class LessonScanner (line 13) | @Component
    method LessonScanner (line 21) | public LessonScanner(ResourcePatternResolver resourcePatternResolver) {
    method applyPattern (line 39) | public List<String> applyPattern(String pattern) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/EnvironmentService.java
  class EnvironmentService (line 8) | @RestController("/environment")
    method homeDirectory (line 14) | @GetMapping("/server-directory")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/HintService.java
  class HintService (line 25) | @RestController
    method HintService (line 31) | public HintService(WebSession webSession) {
    method getHints (line 40) | @GetMapping(path = URL_HINTS_MVC, produces = "application/json")
    method createAssignmentHints (line 47) | private List<Hint> createAssignmentHints(Lesson l) {
    method createHint (line 54) | private List<Hint> createHint(Assignment a) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/LabelDebugService.java
  class LabelDebugService (line 48) | @Controller
    method checkDebuggingStatus (line 64) | @RequestMapping(path = URL_DEBUG_LABELS_MVC, produces = MediaType.APPL...
    method setDebuggingStatus (line 77) | @RequestMapping(
    method createResponse (line 93) | private Map<String, Object> createResponse(Boolean enabled) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/LabelService.java
  class LabelService (line 47) | @RestController
    method fetchLabels (line 59) | @GetMapping(path = URL_LABELS_MVC, produces = MediaType.APPLICATION_JS...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/LessonInfoService.java
  class LessonInfoService (line 17) | @RestController
    method getLessonInfo (line 28) | @RequestMapping(path = "/service/lessoninfo.mvc", produces = "applicat...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/LessonMenuService.java
  class LessonMenuService (line 56) | @Controller
    method showLeftNav (line 76) | @RequestMapping(path = URL_LESSONMENU_MVC, produces = "application/json")
    method lessonCompleted (line 111) | private boolean lessonCompleted(Map<Assignment, Boolean> map, Lesson c...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/LessonProgressService.java
  class LessonProgressService (line 19) | @Controller
    method lessonOverview (line 32) | @RequestMapping(value = "/service/lessonoverview.mvc", produces = "app...
    class LessonOverview (line 47) | @AllArgsConstructor

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/LessonTitleService.java
  class LessonTitleService (line 15) | @Controller
    method LessonTitleService (line 20) | public LessonTitleService(final WebSession webSession) {
    method showPlan (line 29) | @RequestMapping(path = "/service/lessontitle.mvc", produces = "applica...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/ReportCardService.java
  class ReportCardService (line 52) | @Controller
    method reportCard (line 65) | @GetMapping(path = "/service/reportcard.mvc", produces = "application/...
    class ReportCard (line 86) | @Getter
    class LessonStatistics (line 98) | @Setter

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/RestartLessonService.java
  class RestartLessonService (line 42) | @Controller
    method restartLesson (line 52) | @RequestMapping(path = "/service/restartlesson.mvc", produces = "text/...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/service/SessionService.java
  class SessionService (line 16) | @Controller
    method applySecurity (line 24) | @RequestMapping(path = "/service/enable-security.mvc", produces = "app...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/session/Course.java
  class Course (line 39) | @Slf4j
    method Course (line 44) | public Course(List<Lesson> lessons) {
    method getCategories (line 53) | public List<Category> getCategories() {
    method getFirstLesson (line 62) | public Lesson getFirstLesson() {
    method getLessons (line 73) | public List<Lesson> getLessons() {
    method getLessons (line 83) | public List<Lesson> getLessons(Category category) {
    method setLessons (line 87) | public void setLessons(List<Lesson> lessons) {
    method getTotalOfLessons (line 91) | public int getTotalOfLessons() {
    method getTotalOfAssignments (line 95) | public int getTotalOfAssignments() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/session/LabelDebugger.java
  class LabelDebugger (line 11) | public class LabelDebugger implements Serializable {
    method isEnabled (line 20) | public boolean isEnabled() {
    method enable (line 25) | public void enable() {
    method disable (line 30) | public void disable() {
    method setEnabled (line 39) | public void setEnabled(boolean enabled) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/session/UserSessionData.java
  class UserSessionData (line 6) | public class UserSessionData {
    method UserSessionData (line 10) | public UserSessionData() {}
    method UserSessionData (line 12) | public UserSessionData(String key, String value) {
    method getValue (line 17) | public Object getValue(String key) {
    method setValue (line 25) | public void setValue(String key, Object value) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/session/WebSession.java
  class WebSession (line 40) | public class WebSession implements Serializable {
    method WebSession (line 47) | public WebSession() {
    method setCurrentLesson (line 57) | public void setCurrentLesson(Lesson lesson) {
    method getCurrentLesson (line 66) | public Lesson getCurrentLesson() {
    method getUserName (line 75) | public String getUserName() {
    method getUser (line 79) | public WebGoatUser getUser() {
    method toggleSecurity (line 83) | public void toggleSecurity() {
    method isSecurityEnabled (line 87) | public boolean isSecurityEnabled() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/LessonTracker.java
  class LessonTracker (line 41) | @Entity
    method LessonTracker (line 59) | private LessonTracker() {
    method LessonTracker (line 63) | public LessonTracker(Lesson lesson) {
    method getAssignment (line 68) | public Optional<Assignment> getAssignment(String name) {
    method assignmentSolved (line 77) | public void assignmentSolved(String solvedAssignment) {
    method isLessonSolved (line 84) | public boolean isLessonSolved() {
    method incrementAttempts (line 89) | public void incrementAttempts() {
    method reset (line 94) | void reset() {
    method getLessonOverview (line 101) | public Map<Assignment, Boolean> getLessonOverview() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/RegistrationController.java
  class RegistrationController (line 19) | @Controller
    method showForm (line 28) | @GetMapping("/registration")
    method registration (line 33) | @PostMapping("/register.mvc")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/Scoreboard.java
  class Scoreboard (line 20) | @RestController
    class Ranking (line 29) | @AllArgsConstructor
    method getRankings (line 36) | @GetMapping("/scoreboard-data")
    method challengesSolved (line 53) | private List<String> challengesSolved(UserTracker userTracker) {
    method toLessonTitle (line 74) | private String toLessonTitle(String id) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserForm.java
  class UserForm (line 13) | @Getter

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserRepository.java
  type UserRepository (line 10) | public interface UserRepository extends JpaRepository<WebGoatUser, Strin...
    method findByUsername (line 12) | WebGoatUser findByUsername(String username);
    method findAll (line 14) | List<WebGoatUser> findAll();
    method existsByUsername (line 16) | boolean existsByUsername(String username);

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserService.java
  class UserService (line 17) | @Service
    method loadUserByUsername (line 27) | @Override
    method addUser (line 39) | public void addUser(String username, String password) {
    method createLessonsForUser (line 51) | private void createLessonsForUser(WebGoatUser webGoatUser) {
    method getAllUsers (line 56) | public List<WebGoatUser> getAllUsers() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserSession.java
  class UserSession (line 13) | @Getter

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserTracker.java
  class UserTracker (line 44) | @Slf4j
    method UserTracker (line 58) | private UserTracker() {}
    method UserTracker (line 60) | public UserTracker(final String user) {
    method getLessonTracker (line 70) | public LessonTracker getLessonTracker(Lesson lesson) {
    method getLessonTracker (line 88) | public Optional<LessonTracker> getLessonTracker(String id) {
    method assignmentSolved (line 92) | public void assignmentSolved(Lesson lesson, String assignmentName) {
    method assignmentFailed (line 98) | public void assignmentFailed(Lesson lesson) {
    method reset (line 103) | public void reset(Lesson al) {
    method numberOfLessonsSolved (line 108) | public int numberOfLessonsSolved() {
    method numberOfAssignmentsSolved (line 118) | public int numberOfAssignmentsSolved() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserTrackerRepository.java
  type UserTrackerRepository (line 9) | public interface UserTrackerRepository extends JpaRepository<UserTracker...
    method findByUser (line 11) | UserTracker findByUser(String user);

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/UserValidator.java
  class UserValidator (line 12) | @Component
    method supports (line 18) | @Override
    method validate (line 23) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/container/users/WebGoatUser.java
  class WebGoatUser (line 18) | @Getter
    method WebGoatUser (line 30) | protected WebGoatUser() {}
    method WebGoatUser (line 32) | public WebGoatUser(String username, String password) {
    method WebGoatUser (line 36) | public WebGoatUser(String username, String password, String role) {
    method createUser (line 43) | public void createUser() {
    method getAuthorities (line 47) | public Collection<? extends GrantedAuthority> getAuthorities() {
    method getRole (line 51) | public String getRole() {
    method getUsername (line 55) | public String getUsername() {
    method getPassword (line 59) | public String getPassword() {
    method isAccountNonExpired (line 63) | @Override
    method isAccountNonLocked (line 68) | @Override
    method isCredentialsNonExpired (line 73) | @Override
    method isEnabled (line 78) | @Override
    method equals (line 83) | public boolean equals(Object obj) {
    method hashCode (line 87) | public int hashCode() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/authbypass/AccountVerificationHelper.java
  class AccountVerificationHelper (line 29) | public class AccountVerificationHelper {
    method didUserLikelylCheat (line 49) | public boolean didUserLikelylCheat(HashMap<String, String> submittedAn...
    method verifyAccount (line 73) | public boolean verifyAccount(Integer userId, HashMap<String, String> s...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/authbypass/AuthBypass.java
  class AuthBypass (line 29) | @Component
    method getDefaultCategory (line 32) | @Override
    method getTitle (line 37) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/authbypass/VerifyAccount.java
  class VerifyAccount (line 44) | @RestController
    method completed (line 57) | @PostMapping(
    method parseSecQuestions (line 82) | private HashMap<String, String> parseSecQuestions(HttpServletRequest r...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/bypassrestrictions/BypassRestrictions.java
  class BypassRestrictions (line 29) | @Component
    method getDefaultCategory (line 31) | @Override
    method getTitle (line 36) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/bypassrestrictions/BypassRestrictionsFieldRestrictions.java
  class BypassRestrictionsFieldRestrictions (line 32) | @RestController
    method completed (line 35) | @PostMapping("/BypassRestrictions/FieldRestrictions")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/bypassrestrictions/BypassRestrictionsFrontendValidation.java
  class BypassRestrictionsFrontendValidation (line 32) | @RestController
    method completed (line 35) | @PostMapping("/BypassRestrictions/frontendValidation")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/ChallengeIntro.java
  class ChallengeIntro (line 10) | public class ChallengeIntro extends Lesson {
    method getDefaultCategory (line 12) | @Override
    method getTitle (line 17) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/Email.java
  class Email (line 34) | @Builder

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/Flag.java
  class Flag (line 49) | @RestController
    class FlagPosted (line 56) | @AllArgsConstructor
    method initFlags (line 61) | @PostConstruct
    method postFlag (line 66) | @RequestMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/SolutionConstants.java
  type SolutionConstants (line 31) | public interface SolutionConstants {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge1/Assignment1.java
  class Assignment1 (line 45) | @RestController
    method completed (line 48) | @PostMapping("/challenge/1")
    method containsHeader (line 66) | public static boolean containsHeader(HttpServletRequest request) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge1/Challenge1.java
  class Challenge1 (line 11) | @Component
    method getDefaultCategory (line 14) | @Override
    method getTitle (line 19) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge1/ImageServlet.java
  class ImageServlet (line 15) | @RestController
    method logo (line 21) | @RequestMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge5/Assignment5.java
  class Assignment5 (line 38) | @RestController
    method Assignment5 (line 44) | public Assignment5(LessonDataSource dataSource) {
    method login (line 48) | @PostMapping("/challenge/5")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge5/Challenge5.java
  class Challenge5 (line 33) | @Component
    method getDefaultCategory (line 36) | @Override
    method getTitle (line 41) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/Assignment7.java
  class Assignment7 (line 32) | @RestController
    method resetPassword (line 52) | @GetMapping("/challenge/7/reset-password/{link}")
    method sendPasswordResetLink (line 68) | @PostMapping("/challenge/7")
    method git (line 94) | @GetMapping(value = "/challenge/7/.git", produces = MediaType.APPLICAT...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/Challenge7.java
  class Challenge7 (line 11) | @Component
    method getDefaultCategory (line 14) | @Override
    method getTitle (line 19) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/MD5.java
  class MD5 (line 26) | public class MD5 {
    method MD5 (line 33) | public MD5() {
    method main (line 43) | public static void main(String[] args) {
    method getHash (line 63) | public byte[] getHash() {
    method getHashString (line 87) | public String getHashString() {
    method getHash (line 98) | public static byte[] getHash(byte[] b) {
    method getHashString (line 111) | public static String getHashString(byte[] b) {
    method getHash (line 125) | public static byte[] getHash(InputStream in) throws IOException {
    method getHashString (line 143) | public static String getHashString(InputStream in) throws IOException {
    method getHash (line 161) | public static byte[] getHash(File f) throws IOException {
    method getHashString (line 177) | public static String getHashString(File f) throws IOException {
    method getHash (line 193) | public static byte[] getHash(String s) {
    method getHashString (line 207) | public static String getHashString(String s) {
    method getHash (line 222) | public static byte[] getHash(String s, String enc) throws UnsupportedE...
    method getHashString (line 237) | public static String getHashString(String s, String enc) throws Unsupp...
    method reset (line 248) | public void reset() {
    method toString (line 259) | @Override
    method update (line 278) | private void update(MD5State state, byte buffer[], int offset, int len...
    method update (line 325) | public void update(byte buffer[], int offset, int length) {
    method update (line 338) | public void update(byte buffer[], int length) {
    method update (line 348) | public void update(byte buffer[]) {
    method update (line 358) | public void update(byte b) {
    method update (line 371) | public void update(String s) {
    method update (line 383) | public void update(String s, String enc) throws UnsupportedEncodingExc...
    class MD5State (line 486) | private class MD5State {
      method reset (line 500) | private void reset() {
      method MD5State (line 530) | private MD5State() {
      method copy (line 540) | private void copy(MD5State from) {
    method toHex (line 555) | private static String toHex(byte hash[]) {
    method FF (line 569) | private static int FF(int a, int b, int c, int d, int x, int s, int ac) {
    method GG (line 578) | private static int GG(int a, int b, int c, int d, int x, int s, int ac) {
    method HH (line 587) | private static int HH(int a, int b, int c, int d, int x, int s, int ac) {
    method II (line 596) | private static int II(int a, int b, int c, int d, int x, int s, int ac) {
    method encode (line 605) | private static byte[] encode(long l) {
    method encode (line 618) | private static byte[] encode(int input[], int len) {
    method decode (line 630) | private int[] decode(byte buffer[], int len, int offset) {
    method transform (line 642) | private static void transform(MD5State state, int[] x) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge7/PasswordResetLink.java
  class PasswordResetLink (line 11) | public class PasswordResetLink {
    method createPasswordReset (line 13) | public String createPasswordReset(String username, String key) {
    method scramble (line 22) | public static String scramble(Random random, String inputString) {
    method main (line 33) | public static void main(String[] args) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge8/Assignment8.java
  class Assignment8 (line 22) | @RestController
    method vote (line 36) | @GetMapping(value = "/challenge/8/vote/{stars}", produces = MediaType....
    method getVotes (line 54) | @GetMapping("/challenge/8/votes/")
    method average (line 61) | @GetMapping("/challenge/8/votes/average")
    method notUsed (line 72) | @GetMapping("/challenge/8/notUsed")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/challenges/challenge8/Challenge8.java
  class Challenge8 (line 11) | @Component
    method getDefaultCategory (line 14) | @Override
    method getTitle (line 19) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/chromedevtools/ChromeDevTools.java
  class ChromeDevTools (line 33) | @Component
    method getDefaultCategory (line 36) | @Override
    method getTitle (line 41) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/chromedevtools/NetworkDummy.java
  class NetworkDummy (line 39) | @RestController
    method completed (line 42) | @PostMapping("/ChromeDevTools/dummy")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/chromedevtools/NetworkLesson.java
  class NetworkLesson (line 41) | @RestController
    method completed (line 45) | @PostMapping(
    method ok (line 57) | @PostMapping(path = "/ChromeDevTools/network", params = "networkNum")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cia/CIA.java
  class CIA (line 11) | @Component
    method getDefaultCategory (line 14) | @Override
    method getTitle (line 19) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cia/CIAQuiz.java
  class CIAQuiz (line 11) | @RestController
    method completed (line 17) | @PostMapping("/cia/quiz")
    method getResults (line 48) | @GetMapping("/cia/quiz")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/ClientSideFiltering.java
  class ClientSideFiltering (line 37) | @Component
    method getDefaultCategory (line 40) | @Override
    method getTitle (line 45) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/ClientSideFilteringAssignment.java
  class ClientSideFilteringAssignment (line 33) | @RestController
    method completed (line 42) | @PostMapping("/clientSideFiltering/attack1")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/ClientSideFilteringFreeAssignment.java
  class ClientSideFilteringFreeAssignment (line 37) | @RestController
    method completed (line 47) | @PostMapping("/clientSideFiltering/getItForFree")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/Salaries.java
  class Salaries (line 50) | @RestController
    method copyFiles (line 57) | @PostConstruct
    method invoke (line 73) | @GetMapping("clientSideFiltering/salaries")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/clientsidefiltering/ShopEndpoint.java
  class ShopEndpoint (line 40) | @RestController
    class CheckoutCodes (line 44) | @AllArgsConstructor
      method get (line 49) | public Optional<CheckoutCode> get(String code) {
    class CheckoutCode (line 54) | @AllArgsConstructor
    method ShopEndpoint (line 63) | public ShopEndpoint() {
    method getDiscountCode (line 71) | @GetMapping(value = "/coupons/{code}", produces = MediaType.APPLICATIO...
    method all (line 79) | @GetMapping(value = "/coupons", produces = MediaType.APPLICATION_JSON_...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/CryptoUtil.java
  class CryptoUtil (line 22) | @Slf4j
    method generateKeyPair (line 33) | public static KeyPair generateKeyPair()
    method getPrivateKeyInPEM (line 44) | public static String getPrivateKeyInPEM(KeyPair keyPair) {
    method signMessage (line 56) | public static String signMessage(String message, PrivateKey privateKey) {
    method verifyMessage (line 79) | public static boolean verifyMessage(
    method verifyAssignment (line 108) | public static boolean verifyAssignment(String modulus, String signatur...
    method getPrivateKeyFromPEM (line 131) | public static PrivateKey getPrivateKeyFromPEM(String privateKeyPem)

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/Cryptography.java
  class Cryptography (line 29) | @Component
    method getDefaultCategory (line 31) | @Override
    method getTitle (line 36) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/EncodingAssignment.java
  class EncodingAssignment (line 37) | @RestController
    method getBasicAuth (line 40) | public static String getBasicAuth(String username, String password) {
    method getBasicAuth (line 44) | @GetMapping(path = "/crypto/encoding/basic", produces = MediaType.TEXT...
    method completed (line 59) | @PostMapping("/crypto/encoding/basic-auth")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/HashingAssignment.java
  class HashingAssignment (line 40) | @RestController
    method getMd5 (line 46) | @RequestMapping(path = "/crypto/hashing/md5", produces = MediaType.TEX...
    method getSha256 (line 65) | @RequestMapping(path = "/crypto/hashing/sha256", produces = MediaType....
    method completed (line 79) | @PostMapping("/crypto/hashing")
    method getHash (line 99) | public static String getHash(String secret, String algorithm) throws N...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/SecureDefaultsAssignment.java
  class SecureDefaultsAssignment (line 34) | @RestController
    method completed (line 42) | @PostMapping("/crypto/secure/defaults")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/SigningAssignment.java
  class SigningAssignment (line 42) | @RestController
    method getPrivateKey (line 52) | @RequestMapping(path = "/crypto/signing/getprivate", produces = MediaT...
    method completed (line 67) | @PostMapping("/crypto/signing/verify")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/cryptography/XOREncodingAssignment.java
  class XOREncodingAssignment (line 33) | @RestController
    method completed (line 37) | @PostMapping("/crypto/encoding/xor")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/CSRF.java
  class CSRF (line 30) | @Component
    method getDefaultCategory (line 32) | @Override
    method getTitle (line 37) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFConfirmFlag1.java
  class CSRFConfirmFlag1 (line 35) | @RestController
    method completed (line 41) | @PostMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFFeedback.java
  class CSRFFeedback (line 49) | @RestController
    method completed (line 56) | @PostMapping(
    method flag (line 84) | @PostMapping(path = "/csrf/feedback", produces = "application/json")
    method hostOrRefererDifferentHost (line 94) | private boolean hostOrRefererDifferentHost(HttpServletRequest request) {
    method requestContainsWebGoatCookie (line 104) | private boolean requestContainsWebGoatCookie(Cookie[] cookies) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFGetFlag.java
  class CSRFGetFlag (line 38) | @RestController
    method invoke (line 44) | @RequestMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/CSRFLogin.java
  class CSRFLogin (line 39) | @RestController
    method CSRFLogin (line 45) | public CSRFLogin(UserTrackerRepository userTrackerRepository) {
    method completed (line 49) | @PostMapping(
    method markAssignmentSolvedWithRealUser (line 62) | private void markAssignmentSolvedWithRealUser(String username) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/ForgedReviews.java
  class ForgedReviews (line 47) | @RestController
    method retrieveReviews (line 71) | @GetMapping(
    method createNewReview (line 88) | @PostMapping("/csrf/review")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/csrf/Review.java
  class Review (line 35) | @Getter

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/deserialization/InsecureDeserialization.java
  class InsecureDeserialization (line 37) | @Component
    method getDefaultCategory (line 39) | @Override
    method getTitle (line 44) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/deserialization/InsecureDeserializationTask.java
  class InsecureDeserializationTask (line 39) | @RestController
    method completed (line 47) | @PostMapping("/InsecureDeserialization/task")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/deserialization/SerializationHelper.java
  class SerializationHelper (line 12) | public class SerializationHelper {
    method fromString (line 16) | public static Object fromString(String s) throws IOException, ClassNot...
    method toString (line 24) | public static String toString(Serializable o) throws IOException {
    method show (line 33) | public static String show() throws IOException {
    method bytesToHex (line 42) | public static String bytesToHex(byte[] bytes) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/hijacksession/HijackSession.java
  class HijackSession (line 36) | @Component
    method getDefaultCategory (line 39) | @Override
    method getTitle (line 44) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/hijacksession/HijackSessionAssignment.java
  class HijackSessionAssignment (line 46) | @RestController
    method login (line 60) | @PostMapping(path = "/HijackSession/login")
    method setCookie (line 85) | private void setCookie(HttpServletResponse response, String cookieValu...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/hijacksession/cas/Authentication.java
  class Authentication (line 34) | @Getter
    method Authentication (line 43) | @Builder
    method getName (line 50) | @Override
    method setAuthenticated (line 55) | protected void setAuthenticated(boolean authenticated) {
    method setId (line 59) | protected void setId(String id) {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/hijacksession/cas/AuthenticationProvider.java
  type AuthenticationProvider (line 31) | @FunctionalInterface
    method authenticate (line 34) | T authenticate(T t);

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/hijacksession/cas/HijackSessionAuthenticationProvider.java
  class HijackSessionAuthenticationProvider (line 43) | @ApplicationScope
    method authenticate (line 57) | @Override
    method authorizedUserAutoLogin (line 78) | protected void authorizedUserAutoLogin() {
    method addSession (line 86) | protected boolean addSession(String sessionId) {
    method getSessionsSize (line 93) | protected int getSessionsSize() {

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/htmltampering/HtmlTampering.java
  class HtmlTampering (line 37) | @Component
    method getDefaultCategory (line 39) | @Override
    method getTitle (line 44) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/htmltampering/HtmlTamperingTask.java
  class HtmlTamperingTask (line 33) | @RestController
    method completed (line 37) | @PostMapping("/HtmlTampering/task")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/httpbasics/HttpBasics.java
  class HttpBasics (line 29) | @Component
    method getDefaultCategory (line 31) | @Override
    method getTitle (line 36) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/httpbasics/HttpBasicsLesson.java
  class HttpBasicsLesson (line 33) | @RestController
    method completed (line 37) | @PostMapping("/HttpBasics/attack1")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/httpbasics/HttpBasicsQuiz.java
  class HttpBasicsQuiz (line 34) | @RestController
    method completed (line 39) | @PostMapping("/HttpBasics/attack2")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/httpproxies/HttpBasicsInterceptRequest.java
  class HttpBasicsInterceptRequest (line 36) | @RestController
    method completed (line 39) | @RequestMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/httpproxies/HttpProxies.java
  class HttpProxies (line 37) | @Component
    method getDefaultCategory (line 39) | @Override
    method getTitle (line 44) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDOR.java
  class IDOR (line 37) | @Component
    method getDefaultCategory (line 40) | @Override
    method getTitle (line 45) | @Override

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDORDiffAttributes.java
  class IDORDiffAttributes (line 33) | @RestController
    method completed (line 41) | @PostMapping("/IDOR/diff-attributes")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDOREditOtherProfiile.java
  class IDOREditOtherProfiile (line 36) | @RestController
    method completed (line 52) | @PutMapping(path = "/IDOR/profile/{userId}", consumes = "application/j...

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDORLogin.java
  class IDORLogin (line 36) | @RestController
    method initIDORInfo (line 42) | public void initIDORInfo() {
    method completed (line 57) | @PostMapping("/IDOR/login")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOtherProfile.java
  class IDORViewOtherProfile (line 38) | @RestController
    method completed (line 54) | @GetMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOwnProfile.java
  class IDORViewOwnProfile (line 34) | @RestController
    method invoke (line 40) | @GetMapping(

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/IDORViewOwnProfileAltUrl.java
  class IDORViewOwnProfileAltUrl (line 35) | @RestController
    method completed (line 45) | @PostMapping("/IDOR/profile/alt-path")

FILE: src/test/resources/sourceCode/testProjects/maven/src/main/java/org/owasp/webgoat/lessons/idor/UserProfile.java
  class UserProfile (line 29) | public class UserProfile {
    method UserProfile (line 37) | public UserProfile() {}
    method UserProfile (line 39) | public UserProfile(String id) {
    method setProfileFromId (line 44) | private void setProfileFromId(String id) {
    method profileToMap (line 65) | public Map<String, Object> profileToMap() {
    method toHTMLString (line 75) | public String toHTMLString() {
    method getUserId (line 94) | public String getUserId() {
    method setUserId (line 98) | public void setUserId(String userId) {
    method getName (line 102) | public String getName() {
    method setName (line 106) | public void setName(String name) {
    method getColor (line 110) | public String getColor() {
    method setColor (line 1
Condensed preview — 635 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,869K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 544,
    "preview": "---\nname: 🐞 Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Describe th"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 625,
    "preview": "---\nname: ⭐️ Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: feature request\nassignees: ''\n\n--"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "chars": 89,
    "preview": "---\nname: ❓ Question\nabout: Ask a question\ntitle: ''\nlabels: question\nassignees: ''\n\n---\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 175,
    "preview": "- [ ] All [tests](https://github.com/jfrog/jfrog-idea-plugin/actions/workflows/test.yml) passed. If this feature is not "
  },
  {
    "path": ".github/release.yml",
    "chars": 394,
    "preview": "changelog:\n  exclude:\n    labels:\n      - ignore for release\n  categories:\n    - title: Breaking Changes 🚨\n      labels:"
  },
  {
    "path": ".github/workflows/cla.yml",
    "chars": 1248,
    "preview": "name: \"CLA Assistant\"\non:\n  # issue_comment triggers this action on each comment on issues and pull requests\n  issue_com"
  },
  {
    "path": ".github/workflows/frogbot-scan-pull-request.yml",
    "chars": 1580,
    "preview": "name: \"Frogbot Scan Pull Request\"\non:\n  pull_request_target:\n    types: [opened, synchronize]\npermissions:\n  pull-reques"
  },
  {
    "path": ".github/workflows/integration-tests.yml",
    "chars": 1860,
    "preview": "name: \"Integration Tests\"\n\non:\n  push:\n  # Triggers the workflow on labeled PRs only.\n  pull_request_target:\n    types: "
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 1512,
    "preview": "name: Test\n\non: [ push, pull_request ]\n\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false"
  },
  {
    "path": ".github/workflows/verification.yml",
    "chars": 812,
    "preview": "name: \"Compatibility verification\"\n\non: [ push, pull_request ]\n\njobs:\n  test:\n    runs-on: macOS-latest\n    name: Compat"
  },
  {
    "path": ".gitignore",
    "chars": 1229,
    "preview": "# Created by .ignore support plugin (hsz.mobi)\n### Java template\n*.class\n\n# BlueJ files\n*.ctxt\n\n# Mobile Tools for Java "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1735,
    "preview": "# Guidelines\n\n- If the existing tests do not already cover your changes, please add tests.\n\n## Building and Testing the "
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 4221,
    "preview": "[![](readme-resources/readme_image.png)](#readme)\n\n<div align=\"center\">\n\n# JFrog IntelliJ IDEA Plugin\n\n![JFrog IntelliJ "
  },
  {
    "path": "build.gradle",
    "chars": 7469,
    "preview": "import java.net.http.HttpClient\nimport java.net.http.HttpRequest\nimport java.net.http.HttpResponse\nimport java.nio.file."
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 221,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 157,
    "preview": "webviewVersion=0.2.14\nsandboxVersion=2022.3.2\nwebviewChecksum=434265d6fa98eabbb4108f3157ce5cdc499c4d9fa294eb7b723e2a4d55"
  },
  {
    "path": "gradlew",
    "chars": 8474,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "gradlew.bat",
    "chars": 2776,
    "preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
  },
  {
    "path": "release/pipelines.release.yml",
    "chars": 3594,
    "preview": "pipelines:\n  - name: release_jfrog_idea_plugin\n    configuration:\n      runtime:\n        type: image\n        image:\n    "
  },
  {
    "path": "release/pipelines.resources.yml",
    "chars": 501,
    "preview": "resources:\n  - name: jfrogIdeaPluginSnapshotGit\n    type: GitRepo\n    configuration:\n      path: jfrog/jfrog-idea-plugin"
  },
  {
    "path": "release/pipelines.snapshot.yml",
    "chars": 2404,
    "preview": "pipelines:\n  - name: build_jfrog_idea_plugin_snapshot\n    configuration:\n      runtime:\n        type: image\n        imag"
  },
  {
    "path": "release/specs/dev-rbc-filespec.json",
    "chars": 176,
    "preview": "{\n  \"files\": [\n    {\n      \"pattern\": \"ecosys-oss-snapshot-local/(com/jfrog/ide/jfrog-idea-plugin/*/jfrog-idea-plugin-*)"
  },
  {
    "path": "release/specs/prod-rbc-filespec.json",
    "chars": 183,
    "preview": "{\n  \"files\": [\n    {\n      \"pattern\": \"ecosys-oss-release-local/(com/jfrog/ide/jfrog-idea-plugin/${version}/jfrog-idea-p"
  },
  {
    "path": "settings.gradle",
    "chars": 216,
    "preview": "pluginManagement {\n    repositories {\n        maven {\n            url 'https://oss.sonatype.org/content/repositories/sna"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/Syncable.java",
    "chars": 198,
    "preview": "package com.jfrog.ide.idea;\n\nimport com.intellij.util.messages.Topic;\nimport com.jfrog.ide.idea.events.ApplicationEvents"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/CollapseAllAction.java",
    "chars": 997,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.actionSystem.AnActi"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/CreateIgnoreRuleAction.java",
    "chars": 2339,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.ide.BrowserUtil;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/ExpandAllAction.java",
    "chars": 975,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.actionSystem.AnActi"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/GoToSettingsAction.java",
    "chars": 712,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.actionSystem.AnActi"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/RefreshBuildsAction.java",
    "chars": 486,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.openapi.actionSystem.AnAction;\nimport com.intellij.openapi.acti"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/ScanTimeLabelAction.java",
    "chars": 2001,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.actionSystem.Action"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/StartLocalScanAction.java",
    "chars": 1107,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.openapi.actionSystem.ActionUpdateThread;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/actions/StopLocalScanAction.java",
    "chars": 1104,
    "preview": "package com.jfrog.ide.idea.actions;\n\nimport com.intellij.openapi.actionSystem.ActionUpdateThread;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ci/CiManager.java",
    "chars": 9536,
    "preview": "package com.jfrog.ide.idea.ci;\n\nimport com.intellij.ide.util.PropertiesComponent;\nimport com.intellij.openapi.Disposable"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/configuration/GlobalSettings.java",
    "chars": 8248,
    "preview": "/*\n * SonarLint for IntelliJ IDEA\n * Copyright (C) 2015 SonarSource\n * sonarlint@sonarsource.com\n *\n * This program is f"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/configuration/ServerConfigImpl.java",
    "chars": 22323,
    "preview": "/*\n * SonarLint for IntelliJ IDEA\n * Copyright (C) 2015 SonarSource\n * sonarlint@sonarsource.com\n *\n * This program is f"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/events/AnnotationEvents.java",
    "chars": 351,
    "preview": "package com.jfrog.ide.idea.events;\n\nimport com.intellij.util.messages.Topic;\n\npublic interface AnnotationEvents {\n    //"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/events/ApplicationEvents.java",
    "chars": 1100,
    "preview": "package com.jfrog.ide.idea.events;\n\nimport com.intellij.util.messages.Topic;\n\n/**\n * Application based events.\n * <p>\n *"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/events/BuildEvents.java",
    "chars": 423,
    "preview": "package com.jfrog.ide.idea.events;\n\nimport com.intellij.util.messages.Topic;\nimport com.jfrog.ide.common.ci.BuildGeneral"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/events/ProjectEvents.java",
    "chars": 525,
    "preview": "package com.jfrog.ide.idea.events;\n\nimport com.intellij.util.messages.Topic;\nimport com.jfrog.ide.common.utils.ProjectsM"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/exclusion/Excludable.java",
    "chars": 258,
    "preview": "package com.jfrog.ide.idea.exclusion;\n\nimport com.intellij.openapi.project.Project;\n\n/**\n * Created by Bar Belity on 28/"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/exclusion/ExclusionUtils.java",
    "chars": 2069,
    "preview": "package com.jfrog.ide.idea.exclusion;\n\nimport com.jfrog.ide.idea.navigation.NavigationTarget;\nimport org.jfrog.build.ext"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/exclusion/MavenExclusion.java",
    "chars": 5157,
    "preview": "package com.jfrog.ide.idea.exclusion;\n\nimport com.intellij.openapi.command.WriteCommandAction;\nimport com.intellij.opena"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/AbstractInspection.java",
    "chars": 13448,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.google.common.collect.ArrayListMultimap;\nimport com.google.common.co"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/AnnotationIconRenderer.java",
    "chars": 2249,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.openapi.actionSystem.AnAction;\nimport com.intellij.openapi."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/AnnotationUtils.java",
    "chars": 2790,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.lang.annotation.AnnotationBuilder;\nimport com.intellij.lang"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/GoInspection.java",
    "chars": 2786,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.goide.vgo.mod.psi.VgoModuleSpec;\nimport com.goide.vgo.mod.psi.VgoReq"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/GradleGroovyInspection.java",
    "chars": 6514,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.codeInspection.ProblemsHolder;\nimport com.intellij.lang.ann"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/GradleInspection.java",
    "chars": 1676,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.openapi.editor.Document;\nimport com.intellij.openapi.projec"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/GradleKotlinInspection.java",
    "chars": 4205,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.codeInspection.ProblemsHolder;\nimport com.intellij.lang.ann"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/JFrogSecurityAnnotator.java",
    "chars": 4170,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.lang.annotation.AnnotationHolder;\nimport com.intellij.lang."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/JFrogSecurityWarning.java",
    "chars": 5273,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.jfrog.ide.common.nodes.subentities.FindingInfo;\nimport com.jfrog.ide"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/JumpToCode.java",
    "chars": 3976,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/MavenInspection.java",
    "chars": 4171,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.codeInspection.ProblemsHolder;\nimport com.intellij.lang.ann"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/NpmInspection.java",
    "chars": 2705,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.codeInspection.ProblemsHolder;\nimport com.intellij.json.psi"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/ShowInDependencyTree.java",
    "chars": 1623,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.intellij.codeInsight.intention.HighPriorityAction;\nimport com.intell"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/YarnInspection.java",
    "chars": 744,
    "preview": "package com.jfrog.ide.idea.inspections;\n\nimport com.jfrog.ide.idea.inspections.upgradeversion.UpgradeVersion;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GoUpgradeVersion.java",
    "chars": 1254,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInspection.ProblemDescriptor;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GradleGroovyUpgradeVersion.java",
    "chars": 2401,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInspection.ProblemDescriptor;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/GradleKotlinUpgradeVersion.java",
    "chars": 2057,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInspection.ProblemDescriptor;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/MavenUpgradeVersion.java",
    "chars": 2056,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInspection.ProblemDescriptor;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/NpmUpgradeVersion.java",
    "chars": 1148,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInspection.ProblemDescriptor;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/UpgradeVersion.java",
    "chars": 3084,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInsight.intention.HighPriorityAction;\nim"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/inspections/upgradeversion/YarnUpgradeVersion.java",
    "chars": 1155,
    "preview": "package com.jfrog.ide.idea.inspections.upgradeversion;\n\nimport com.intellij.codeInspection.ProblemDescriptor;\nimport com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/log/Logger.java",
    "chars": 7259,
    "preview": "package com.jfrog.ide.idea.log;\n\nimport com.intellij.notification.*;\nimport com.intellij.openapi.actionSystem.AnAction;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/log/ProgressIndicatorImpl.java",
    "chars": 731,
    "preview": "package com.jfrog.ide.idea.log;\n\n\nimport com.intellij.openapi.progress.ProgressIndicator;\n\n/**\n * @author yahavi\n */\npub"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/navigation/NavigationService.java",
    "chars": 2646,
    "preview": "package com.jfrog.ide.idea.navigation;\n\nimport com.google.common.collect.Maps;\nimport com.intellij.openapi.editor.Docume"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/navigation/NavigationTarget.java",
    "chars": 1247,
    "preview": "package com.jfrog.ide.idea.navigation;\n\nimport com.intellij.psi.PsiElement;\n\nimport java.util.Objects;\n\n/**\n * Created b"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/ApplicabilityScannerExecutor.java",
    "chars": 6222,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.jfrog.ide.common.log.ProgressIndicator;\nimport com.jfrog.ide.common.nodes.A"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/GoScanner.java",
    "chars": 3404,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.google.common.collect.Maps;\nimport com.intellij.diagnostic.PluginException;"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/GradleScanner.java",
    "chars": 8056,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.google.common.collect.Maps;\nimport com.intellij.ide.plugins.PluginManagerCo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/IACScannerExecutor.java",
    "chars": 2466,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.jfrog.ide.common.log.ProgressIndicator;\nimport com.jfrog.ide.common.nodes.F"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/MavenScanner.java",
    "chars": 10947,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.intellij.ide.highlighter.XmlFileType;\nimport com.intellij.openapi.project.P"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/NpmScanner.java",
    "chars": 2542,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.vfs.LocalFile"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/PypiScanner.java",
    "chars": 4432,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.intellij.execution.ExecutionException;\nimport com.intellij.openapi.project."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/SastScannerExecutor.java",
    "chars": 3173,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.jfrog.ide.common.log.ProgressIndicator;\nimport com.jfrog.ide.common.nodes.F"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/ScanBinaryExecutor.java",
    "chars": 17947,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.intellij.util.Environme"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/ScanManager.java",
    "chars": 6987,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.google.common.collect.Maps;\nimport com.google.common.collect.Sets;\nimport c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/ScannerBase.java",
    "chars": 15935,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.google.common.collect.Sets;\nimport com.intellij.codeInsight.daemon.DaemonCo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/ScannerFactory.java",
    "chars": 8984,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.google.common.base.Objects;\nimport com.google.common.collect.Maps;\nimport c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/SecretsScannerExecutor.java",
    "chars": 2442,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.jfrog.ide.common.log.ProgressIndicator;\nimport com.jfrog.ide.common.nodes.F"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/SingleDescriptorScanner.java",
    "chars": 4319,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.intellij.openapi.project.Project;\nimport com.jfrog.ide.common.deptree.DepTr"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/SourceCodeScannerManager.java",
    "chars": 15714,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.intellij.openapi.progre"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/YarnScanner.java",
    "chars": 7126,
    "preview": "package com.jfrog.ide.idea.scan;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.vfs.LocalFile"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/AnalyzeSuppression.java",
    "chars": 241,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter;\nimpor"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/ArtifactLocation.java",
    "chars": 770,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/CodeFlow.java",
    "chars": 1035,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport org.apache.commons.c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Driver.java",
    "chars": 1424,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport org.apache.commons.c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Invocation.java",
    "chars": 2063,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackso"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Location.java",
    "chars": 912,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Message.java",
    "chars": 995,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/NewScanConfig.java",
    "chars": 1066,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.jfrog.ide.common"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/NewScansConfig.java",
    "chars": 388,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter;\nimpor"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Output.java",
    "chars": 1159,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport org.apache.commons.c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/PackageManagerType.java",
    "chars": 317,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport lombok.Getter;\n\n@Getter\npublic enum PackageManagerType {\n    PYPI(\"pypi\"),"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/PhysicalLocation.java",
    "chars": 1227,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Region.java",
    "chars": 2009,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Rule.java",
    "chars": 1633,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport java.util.Objects;\ni"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/RuleProperties.java",
    "chars": 291,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter;\n\n@Get"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Run.java",
    "chars": 1738,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport org.apache.commons.c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/SarifResult.java",
    "chars": 2621,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter;\nimpor"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/ScanConfig.java",
    "chars": 4445,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.jfrog.ide.common"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/ScansConfig.java",
    "chars": 507,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter;\n\nimpo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/ThreadFlow.java",
    "chars": 1047,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport org.apache.commons.c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/ThreadFlowLocation.java",
    "chars": 872,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/Tool.java",
    "chars": 788,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/WorkingDirectory.java",
    "chars": 802,
    "preview": "package com.jfrog.ide.idea.scan.data;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\n\nimport java.util.Objects;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/applications/JFrogApplicationsConfig.java",
    "chars": 1427,
    "preview": "package com.jfrog.ide.idea.scan.data.applications;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport com.int"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/applications/ModuleConfig.java",
    "chars": 597,
    "preview": "package com.jfrog.ide.idea.scan.data.applications;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/data/applications/ScannerConfig.java",
    "chars": 509,
    "preview": "package com.jfrog.ide.idea.scan.data.applications;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/utils/ImpactTreeBuilder.java",
    "chars": 3975,
    "preview": "package com.jfrog.ide.idea.scan.utils;\n\nimport com.jfrog.ide.common.nodes.DependencyNode;\nimport com.jfrog.ide.common.no"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/scan/utils/ScanUtils.java",
    "chars": 2696,
    "preview": "package com.jfrog.ide.idea.scan.utils;\n\nimport com.google.common.collect.Sets;\nimport com.intellij.openapi.module.Module"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/AbstractJFrogToolWindow.java",
    "chars": 2158,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.Disposable;\nimport com.intellij.openapi.actionSystem.*;\nimpo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/CiComponentsTree.java",
    "chars": 5079,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij.openapi."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/ComponentDetails.java",
    "chars": 2954,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.ui.HyperlinkLabel;\nimport com.intellij.ui.components.JBPanel;\nimport"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/ComponentIssueDetails.java",
    "chars": 935,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport org.apache.commons.lang3.StringUtils;\nimport org.jfrog.build.extractor.scan.Depen"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/ComponentIssuesTable.java",
    "chars": 4342,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.google.common.collect.Lists;\nimport com.intellij.ui.table.JBTable;\nimport org"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/ComponentsTree.java",
    "chars": 4563,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.ui.JBMenuItem;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/ComponentsTreeCellRenderer.java",
    "chars": 2291,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.editor.markup.TextAttributes;\nimport com.intellij.ui.Highlig"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/ExpiredComponentsTreeCellRenderer.java",
    "chars": 796,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.ui.HighlightableCellRenderer;\nimport com.intellij.util.ui.UIUtil;\nim"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/IssueDetails.java",
    "chars": 1940,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.jfrog.ide.idea.ui.components.ImpactPathPane;\nimport com.jfrog.ide.idea.ui.com"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/IssuesTableCellRenderer.java",
    "chars": 2200,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.jfrog.ide.idea.ui.utils.IconUtils;\n\nimport javax.swing.*;\nimport javax.swing."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/IssuesTableModel.java",
    "chars": 2616,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.google.common.collect.Sets;\nimport org.apache.commons.lang3.StringUtils;\nimpo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/IssuesTableSelectionListener.java",
    "chars": 3975,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.ui.JBPopupMenu;\nimport com.jfrog.ide.idea.actions.CreateIgno"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/JFrogCiToolWindow.java",
    "chars": 16529,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.google.common.collect.Lists;\nimport com.intellij.icons.AllIcons;\nimport com.i"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/JFrogFloatingToolbar.java",
    "chars": 3572,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.Disposable;\nimport com.intellij.openapi.actionSystem.DataCon"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/JFrogLocalToolWindow.java",
    "chars": 13849,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.actionSystem.ActionManager;\nimport com.intellij.openapi.acti"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/JFrogToolWindow.java",
    "chars": 1492,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.wm.ToolWindow;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/JFrogToolWindowFactory.java",
    "chars": 1255,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.ide.util.PropertiesComponent;\nimport com.intellij.openapi.project.Du"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/JfrogContextMenuHandler.java",
    "chars": 1493,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport org.cef.browser.CefBrowser;\nimport org.cef.browser.CefFrame;\nimport org.cef.callb"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/LocalComponentsTree.java",
    "chars": 11105,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij.openapi."
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/MoreInfoPanel.java",
    "chars": 2238,
    "preview": "package com.jfrog.ide.idea.ui;\n\nimport com.intellij.ui.components.JBLabel;\nimport com.intellij.util.ui.UIUtil;\nimport co"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/components/ConnectionResultsGesture.java",
    "chars": 2232,
    "preview": "package com.jfrog.ide.idea.ui.components;\n\n\nimport javax.swing.*;\nimport java.awt.event.MouseAdapter;\nimport java.awt.ev"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/components/ImpactPathPane.java",
    "chars": 5128,
    "preview": "package com.jfrog.ide.idea.ui.components;\n\nimport com.intellij.ui.components.JBLabel;\nimport com.intellij.util.ui.JBFont"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/components/LinkButton.java",
    "chars": 2054,
    "preview": "package com.jfrog.ide.idea.ui.components;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.ide.BrowserUtil;\nimpo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/components/MenuButton.java",
    "chars": 4131,
    "preview": "package com.jfrog.ide.idea.ui.components;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.ui.JBPopupMen"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/components/ReferencesPane.java",
    "chars": 2967,
    "preview": "package com.jfrog.ide.idea.ui.components;\n\nimport com.intellij.ide.BrowserUtil;\nimport com.intellij.ui.HyperlinkLabel;\ni"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/components/TitledPane.java",
    "chars": 1039,
    "preview": "package com.jfrog.ide.idea.ui.components;\n\nimport com.intellij.util.ui.UIUtil;\n\nimport javax.swing.*;\nimport java.awt.*;"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/BuildsVerifier.java",
    "chars": 1176,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport javax.swing.*;\nimport java.nio.file.FileSystems;\nimport java.util.r"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/ConfigVerificationUtils.java",
    "chars": 4350,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport com.intellij.openapi.options.ConfigurationException;\nimport com.jfr"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/ConnectionRetriesSpinner.java",
    "chars": 362,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport com.intellij.ide.ui.UINumericRange;\nimport com.intellij.ui.JBIntSpi"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/ConnectionTimeoutSpinner.java",
    "chars": 368,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport com.intellij.ide.ui.UINumericRange;\nimport com.intellij.ui.JBIntSpi"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/JFrogGlobalConfiguration.form",
    "chars": 39343,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<form xmlns=\"http://www.intellij.com/uidesigner/form/\" version=\"1\" bind-to-class="
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/JFrogGlobalConfiguration.java",
    "chars": 30980,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport com.google.common.collect.Sets;\nimport com.intellij.icons.AllIcons;"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/JFrogProjectConfiguration.form",
    "chars": 2670,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<form xmlns=\"http://www.intellij.com/uidesigner/form/\" version=\"1\" bind-to-class="
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/JFrogProjectConfiguration.java",
    "chars": 2322,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport com.intellij.ide.util.PropertiesComponent;\nimport com.intellij.open"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/configuration/Utils.java",
    "chars": 5540,
    "preview": "package com.jfrog.ide.idea.ui.configuration;\n\nimport com.intellij.credentialStore.CredentialAttributes;\nimport com.intel"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/MenuCheckbox.java",
    "chars": 513,
    "preview": "package com.jfrog.ide.idea.ui.menus;\n\nimport com.intellij.ui.components.JBCheckBoxMenuItem;\n\nimport java.awt.event.Mouse"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/SelectAllCheckbox.java",
    "chars": 2073,
    "preview": "package com.jfrog.ide.idea.ui.menus;\n\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij.ui"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/SelectionCheckbox.java",
    "chars": 888,
    "preview": "package com.jfrog.ide.idea.ui.menus;\n\nimport com.intellij.openapi.application.ApplicationManager;\nimport com.intellij.ut"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/ToolbarPopupMenu.java",
    "chars": 901,
    "preview": "package com.jfrog.ide.idea.ui.menus;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.ui.JBPopu"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/builds/BuildsButton.java",
    "chars": 2919,
    "preview": "package com.jfrog.ide.idea.ui.menus.builds;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.Disposable;"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/builds/BuildsMenu.java",
    "chars": 1330,
    "preview": "package com.jfrog.ide.idea.ui.menus.builds;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.openapi.ui"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermanager/CiFilterManager.java",
    "chars": 1119,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermanager;\n\nimport com.intellij.openapi.components.State;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermanager/ConsistentFilterManager.java",
    "chars": 3917,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermanager;\n\nimport com.intellij.openapi.components.PersistentStateComponent;\nimp"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/CiIssueFilterMenu.java",
    "chars": 659,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.util.m"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/CiLicenseFilterMenu.java",
    "chars": 1181,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.util.m"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/CiScopeFilterMenu.java",
    "chars": 1566,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.util.m"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/FilterMenu.java",
    "chars": 4041,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.icons.AllIcons;\nimport com.intellij.openapi.project"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/IssueFilterMenu.java",
    "chars": 768,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.openapi.project.Project;\nimport com.jfrog.ide.commo"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/LicenseFilterMenu.java",
    "chars": 527,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.openapi.project.Project;\nimport org.jetbrains.annot"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/menus/filtermenu/ScopeFilterMenu.java",
    "chars": 516,
    "preview": "package com.jfrog.ide.idea.ui.menus.filtermenu;\n\nimport com.intellij.openapi.project.Project;\nimport org.jetbrains.annot"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/utils/ComponentUtils.java",
    "chars": 4628,
    "preview": "package com.jfrog.ide.idea.ui.utils;\n\nimport com.intellij.ide.BrowserUtil;\nimport com.intellij.openapi.options.ShowSetti"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/utils/IconUtils.java",
    "chars": 802,
    "preview": "package com.jfrog.ide.idea.ui.utils;\n\nimport com.google.common.collect.Maps;\nimport com.intellij.openapi.util.IconLoader"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/WebviewManager.java",
    "chars": 4351,
    "preview": "package com.jfrog.ide.idea.ui.webview;\n\nimport com.intellij.openapi.Disposable;\nimport com.intellij.openapi.project.Proj"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/WebviewObjectConverter.java",
    "chars": 12587,
    "preview": "package com.jfrog.ide.idea.ui.webview;\n\nimport com.jfrog.ide.common.nodes.*;\nimport com.jfrog.ide.common.nodes.subentiti"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/WebviewResourceHandler.java",
    "chars": 3861,
    "preview": "package com.jfrog.ide.idea.ui.webview;\n\nimport com.jfrog.ide.idea.log.Logger;\nimport org.cef.callback.CefCallback;\nimpor"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/WebviewSchemeHandlerFactory.java",
    "chars": 495,
    "preview": "package com.jfrog.ide.idea.ui.webview;\n\nimport org.cef.browser.CefBrowser;\nimport org.cef.browser.CefFrame;\nimport org.c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/EventManager.java",
    "chars": 2004,
    "preview": "package com.jfrog.ide.idea.ui.webview.event;\n\nimport com.intellij.openapi.project.Project;\nimport com.intellij.ui.jcef.J"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/Receiver.java",
    "chars": 3256,
    "preview": "package com.jfrog.ide.idea.ui.webview.event;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fast"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/Sender.java",
    "chars": 3013,
    "preview": "package com.jfrog.ide.idea.ui.webview.event;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fast"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/model/Event.java",
    "chars": 580,
    "preview": "package com.jfrog.ide.idea.ui.webview.event.model;\n\nimport java.io.Serializable;\n\n/**\n * The Event class is an abstract "
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/model/IdeEvent.java",
    "chars": 442,
    "preview": "package com.jfrog.ide.idea.ui.webview.event.model;\n\n/**\n * Represents an IDE-specific event that can be sent from the We"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/model/WebviewEvent.java",
    "chars": 578,
    "preview": "package com.jfrog.ide.idea.ui.webview.event.model;\n\n/**\n * Represents a Webview-specific event that can be sent from the"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/event/tasks/JumpToCodeTask.java",
    "chars": 829,
    "preview": "package com.jfrog.ide.idea.ui.webview.event.tasks;\n\nimport com.intellij.openapi.project.Project;\nimport com.jfrog.ide.id"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/ApplicableDetails.java",
    "chars": 734,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class ApplicableDetails {\n    private final boolean isApplicable;\n "
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/Cve.java",
    "chars": 1312,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class Cve {\n    private final String id;\n    private final String c"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/DependencyPage.java",
    "chars": 4115,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class DependencyPage {\n    private String id;\n    private String co"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/Evidence.java",
    "chars": 713,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class Evidence {\n    private final String reason;\n    private final"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/ExtendedInformation.java",
    "chars": 1416,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class ExtendedInformation {\n    private final String shortDescripti"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/Finding.java",
    "chars": 900,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class Finding {\n    private final String does;\n    private final St"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/ImpactGraph.java",
    "chars": 481,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class ImpactGraph {\n    private final ImpactGraphNode root;\n    pri"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/ImpactGraphNode.java",
    "chars": 492,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class ImpactGraphNode {\n    private final String name;\n    private "
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/IssuePage.java",
    "chars": 2280,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class IssuePage {\n    private String pageType;\n    private String h"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/JfrogResearchSeverityReason.java",
    "chars": 704,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class JfrogResearchSeverityReason {\n    private final String name;\n"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/License.java",
    "chars": 419,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class License {\n    private final String name;\n    private final St"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/Location.java",
    "chars": 2199,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\nimport java.io.Serializable;\n\npublic class Location implements Serializabl"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/Reference.java",
    "chars": 417,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\npublic class Reference {\n    private final String url;\n    private final S"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/ui/webview/model/SastIssuePage.java",
    "chars": 680,
    "preview": "package com.jfrog.ide.idea.ui.webview.model;\n\nimport com.fasterxml.jackson.annotation.JsonProperty;\nimport lombok.Getter"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/utils/Descriptor.java",
    "chars": 749,
    "preview": "package com.jfrog.ide.idea.utils;\n\nimport org.apache.commons.lang3.StringUtils;\n\n/**\n * Represents all supported file de"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/utils/GoUtils.java",
    "chars": 2013,
    "preview": "package com.jfrog.ide.idea.utils;\n\nimport com.goide.GoConstants;\nimport com.goide.sdk.GoSdkUtil;\nimport com.goide.vgo.co"
  },
  {
    "path": "src/main/java/com/jfrog/ide/idea/utils/Utils.java",
    "chars": 6588,
    "preview": "package com.jfrog.ide.idea.utils;\n\nimport com.intellij.ide.plugins.IdeaPluginDescriptor;\nimport com.intellij.ide.plugins"
  },
  {
    "path": "src/main/resources/META-INF/plugin.xml",
    "chars": 8000,
    "preview": "<idea-plugin>\n    <id>org.jfrog.idea</id>\n    <name>JFrog</name>\n    <vendor email=\"support@jfrog.com\" url=\"https://www."
  },
  {
    "path": "src/main/resources/META-INF/with-go.xml",
    "chars": 622,
    "preview": "<idea-plugin>\n    <depends>com.intellij.modules.platform</depends>\n    <extensions defaultExtensionNs=\"com.intellij\">\n  "
  },
  {
    "path": "src/main/resources/META-INF/with-gradle.xml",
    "chars": 14,
    "preview": "<idea-plugin/>"
  },
  {
    "path": "src/main/resources/META-INF/with-groovy.xml",
    "chars": 596,
    "preview": "<idea-plugin>\n    <extensions defaultExtensionNs=\"com.intellij\">\n        <localInspection language=\"Groovy\"\n            "
  },
  {
    "path": "src/main/resources/META-INF/with-kotlin.xml",
    "chars": 595,
    "preview": "<idea-plugin>\n    <extensions defaultExtensionNs=\"com.intellij\">\n        <localInspection language=\"kotlin\"\n            "
  },
  {
    "path": "src/main/resources/META-INF/with-maven.xml",
    "chars": 575,
    "preview": "<idea-plugin>\n    <extensions defaultExtensionNs=\"com.intellij\">\n        <localInspection language=\"XML\"\n               "
  },
  {
    "path": "src/main/resources/META-INF/with-python-ce.xml",
    "chars": 145,
    "preview": "<idea-plugin>\n    <depends>com.intellij.modules.platform</depends>\n    <depends>com.intellij.modules.python-core-capable"
  }
]

// ... and 435 more files (download for full content)

About this extraction

This page contains the full source code of the jfrog/jfrog-idea-plugin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 635 files (1.6 MB), approximately 414.9k tokens, and a symbol index with 2574 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!