Showing preview only (8,033K chars total). Download the full file or copy to clipboard to get everything.
Repository: SonarSource/sonarlint-core
Branch: master
Commit: be6119e3fe92
Files: 1983
Total size: 7.1 MB
Directory structure:
gitextract_0whgick7/
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── renovate.json
│ └── workflows/
│ ├── PullRequestClosed.yml
│ ├── PullRequestCreated.yml
│ ├── RequestReview.yml
│ ├── SubmitReview.yml
│ ├── build.yml
│ ├── full-release.yml
│ ├── notify-failure.yml
│ ├── releasability.yml
│ ├── release.yml
│ └── shadow_scans.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── .sonarlint/
│ └── connectedMode.json
├── API_CHANGES.md
├── LICENSE.txt
├── NOTICE.txt
├── README.md
├── SECURITY.md
├── backend/
│ ├── analysis-engine/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── analysis/
│ │ │ ├── AnalysisQueue.java
│ │ │ ├── AnalysisScheduler.java
│ │ │ ├── SchedulerResetConfiguration.java
│ │ │ ├── api/
│ │ │ │ ├── AnalysisConfiguration.java
│ │ │ │ ├── AnalysisResults.java
│ │ │ │ ├── AnalysisSchedulerConfiguration.java
│ │ │ │ ├── ClientInputFile.java
│ │ │ │ ├── ClientInputFileEdit.java
│ │ │ │ ├── ClientModuleFileEvent.java
│ │ │ │ ├── ClientModuleFileSystem.java
│ │ │ │ ├── ClientModuleInfo.java
│ │ │ │ ├── DefaultLocation.java
│ │ │ │ ├── Flow.java
│ │ │ │ ├── Issue.java
│ │ │ │ ├── IssueLocation.java
│ │ │ │ ├── QuickFix.java
│ │ │ │ ├── TextEdit.java
│ │ │ │ ├── TriggerType.java
│ │ │ │ ├── WithTextRange.java
│ │ │ │ └── package-info.java
│ │ │ ├── command/
│ │ │ │ ├── AnalyzeCommand.java
│ │ │ │ ├── Command.java
│ │ │ │ ├── NotifyModuleEventCommand.java
│ │ │ │ ├── ResetPluginsCommand.java
│ │ │ │ ├── UnregisterModuleCommand.java
│ │ │ │ └── package-info.java
│ │ │ ├── container/
│ │ │ │ ├── ContainerLifespan.java
│ │ │ │ ├── analysis/
│ │ │ │ │ ├── AnalysisConfigurationProvider.java
│ │ │ │ │ ├── AnalysisContainer.java
│ │ │ │ │ ├── AnalysisSettings.java
│ │ │ │ │ ├── AnalysisTempFolderProvider.java
│ │ │ │ │ ├── IssueListenerHolder.java
│ │ │ │ │ ├── SonarLintPathPattern.java
│ │ │ │ │ ├── filesystem/
│ │ │ │ │ │ ├── AbstractFilePredicate.java
│ │ │ │ │ │ ├── AndPredicate.java
│ │ │ │ │ │ ├── DefaultFilePredicates.java
│ │ │ │ │ │ ├── DefaultTextPointer.java
│ │ │ │ │ │ ├── DefaultTextRange.java
│ │ │ │ │ │ ├── FalsePredicate.java
│ │ │ │ │ │ ├── FileExtensionPredicate.java
│ │ │ │ │ │ ├── FileIndexer.java
│ │ │ │ │ │ ├── FileMetadata.java
│ │ │ │ │ │ ├── FilenamePredicate.java
│ │ │ │ │ │ ├── InputFileBuilder.java
│ │ │ │ │ │ ├── InputFileIndex.java
│ │ │ │ │ │ ├── Language.java
│ │ │ │ │ │ ├── LanguageDetection.java
│ │ │ │ │ │ ├── LanguagePredicate.java
│ │ │ │ │ │ ├── NotPredicate.java
│ │ │ │ │ │ ├── OptimizedFilePredicate.java
│ │ │ │ │ │ ├── OptimizedFilePredicateAdapter.java
│ │ │ │ │ │ ├── OrPredicate.java
│ │ │ │ │ │ ├── PathPatternPredicate.java
│ │ │ │ │ │ ├── ProgressReport.java
│ │ │ │ │ │ ├── SonarLintFileSystem.java
│ │ │ │ │ │ ├── SonarLintInputDir.java
│ │ │ │ │ │ ├── SonarLintInputFile.java
│ │ │ │ │ │ ├── SonarLintInputProject.java
│ │ │ │ │ │ ├── StatusPredicate.java
│ │ │ │ │ │ ├── TruePredicate.java
│ │ │ │ │ │ ├── TypePredicate.java
│ │ │ │ │ │ ├── URIPredicate.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── issue/
│ │ │ │ │ │ ├── DefaultIssueFilterChain.java
│ │ │ │ │ │ ├── IssueFilters.java
│ │ │ │ │ │ ├── SensorInputFileEdit.java
│ │ │ │ │ │ ├── SensorQuickFix.java
│ │ │ │ │ │ ├── SensorTextEdit.java
│ │ │ │ │ │ ├── TextRangeUtils.java
│ │ │ │ │ │ ├── ignore/
│ │ │ │ │ │ │ ├── EnforceIssuesFilter.java
│ │ │ │ │ │ │ ├── IgnoreIssuesFilter.java
│ │ │ │ │ │ │ ├── SonarLintNoSonarFilter.java
│ │ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ │ ├── pattern/
│ │ │ │ │ │ │ │ ├── AbstractPatternInitializer.java
│ │ │ │ │ │ │ │ ├── BlockIssuePattern.java
│ │ │ │ │ │ │ │ ├── IssueExclusionPatternInitializer.java
│ │ │ │ │ │ │ │ ├── IssueInclusionPatternInitializer.java
│ │ │ │ │ │ │ │ ├── IssuePattern.java
│ │ │ │ │ │ │ │ └── package-info.java
│ │ │ │ │ │ │ └── scanner/
│ │ │ │ │ │ │ ├── IssueExclusionsLoader.java
│ │ │ │ │ │ │ ├── IssueExclusionsRegexpScanner.java
│ │ │ │ │ │ │ ├── LineRange.java
│ │ │ │ │ │ │ └── package-info.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── sensor/
│ │ │ │ │ ├── SensorOptimizer.java
│ │ │ │ │ ├── SensorsExecutor.java
│ │ │ │ │ ├── SonarLintSensorStorage.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── global/
│ │ │ │ │ ├── AnalysisExtensionInstaller.java
│ │ │ │ │ ├── GlobalAnalysisContainer.java
│ │ │ │ │ ├── GlobalConfigurationProvider.java
│ │ │ │ │ ├── GlobalExtensionContainer.java
│ │ │ │ │ ├── GlobalSettings.java
│ │ │ │ │ ├── GlobalTempFolder.java
│ │ │ │ │ ├── GlobalTempFolderProvider.java
│ │ │ │ │ ├── ModuleRegistry.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── module/
│ │ │ │ │ ├── DefaultModuleFileEvent.java
│ │ │ │ │ ├── ModuleContainer.java
│ │ │ │ │ ├── ModuleFileEventNotifier.java
│ │ │ │ │ ├── ModuleInputFileBuilder.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── sonarapi/
│ │ │ ├── ActiveRulesAdapter.java
│ │ │ ├── DefaultAnalysisError.java
│ │ │ ├── DefaultFilterableIssue.java
│ │ │ ├── DefaultFlow.java
│ │ │ ├── DefaultSensorContext.java
│ │ │ ├── DefaultSensorDescriptor.java
│ │ │ ├── DefaultSonarLintIssue.java
│ │ │ ├── DefaultSonarLintIssueLocation.java
│ │ │ ├── DefaultStorable.java
│ │ │ ├── DefaultTempFolder.java
│ │ │ ├── SonarLintModuleFileSystem.java
│ │ │ ├── noop/
│ │ │ │ ├── NoOpFileLinesContext.java
│ │ │ │ ├── NoOpFileLinesContextFactory.java
│ │ │ │ ├── NoOpNewCoverage.java
│ │ │ │ ├── NoOpNewCpdTokens.java
│ │ │ │ ├── NoOpNewHighlighting.java
│ │ │ │ ├── NoOpNewMeasure.java
│ │ │ │ ├── NoOpNewMessageFormatting.java
│ │ │ │ ├── NoOpNewSignificantCode.java
│ │ │ │ ├── NoOpNewSymbolTable.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── test/
│ │ ├── java/
│ │ │ ├── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ └── analysis/
│ │ │ │ ├── AnalysisQueueTest.java
│ │ │ │ ├── api/
│ │ │ │ │ ├── AnalysisConfigurationTests.java
│ │ │ │ │ ├── AnalysisSchedulerConfigurationTests.java
│ │ │ │ │ ├── ClientInputFileTests.java
│ │ │ │ │ ├── DefaultLocationTests.java
│ │ │ │ │ └── IssueLocationTests.java
│ │ │ │ ├── command/
│ │ │ │ │ └── AnalyzeCommandTest.java
│ │ │ │ ├── container/
│ │ │ │ │ ├── analysis/
│ │ │ │ │ │ ├── AnalysisSettingsTest.java
│ │ │ │ │ │ ├── AnalysisTempFolderProviderTests.java
│ │ │ │ │ │ ├── SonarLintPathPatternTests.java
│ │ │ │ │ │ ├── filesystem/
│ │ │ │ │ │ │ ├── DefaultFilePredicatesTests.java
│ │ │ │ │ │ │ ├── InputFileBuilderTests.java
│ │ │ │ │ │ │ ├── InputFileCacheTests.java
│ │ │ │ │ │ │ ├── LanguageDetectionTests.java
│ │ │ │ │ │ │ ├── ProgressReportTests.java
│ │ │ │ │ │ │ ├── SonarLintFileSystemTests.java
│ │ │ │ │ │ │ ├── SonarLintInputDirTests.java
│ │ │ │ │ │ │ └── SonarLintInputFileTests.java
│ │ │ │ │ │ ├── issue/
│ │ │ │ │ │ │ └── ignore/
│ │ │ │ │ │ │ ├── EnforceIssuesFilterTests.java
│ │ │ │ │ │ │ ├── IgnoreIssuesFilterTests.java
│ │ │ │ │ │ │ ├── pattern/
│ │ │ │ │ │ │ │ ├── IssueExclusionPatternInitializerTests.java
│ │ │ │ │ │ │ │ ├── IssueInclusionPatternInitializerTests.java
│ │ │ │ │ │ │ │ └── IssuePatternTests.java
│ │ │ │ │ │ │ └── scanner/
│ │ │ │ │ │ │ ├── IssueExclusionsLoaderTests.java
│ │ │ │ │ │ │ ├── IssueExclusionsRegexpScannerTests.java
│ │ │ │ │ │ │ └── LineRangeTests.java
│ │ │ │ │ │ └── sensor/
│ │ │ │ │ │ ├── SensorOptimizerTests.java
│ │ │ │ │ │ ├── SensorsExecutorTests.java
│ │ │ │ │ │ └── SonarLintSensorStorageTests.java
│ │ │ │ │ ├── global/
│ │ │ │ │ │ ├── AnalysisExtensionInstallerTests.java
│ │ │ │ │ │ ├── GlobalSettingsTests.java
│ │ │ │ │ │ └── GlobalTempFolderProviderTests.java
│ │ │ │ │ └── module/
│ │ │ │ │ └── ModuleInputFileBuilderTests.java
│ │ │ │ ├── mediumtests/
│ │ │ │ │ └── AnalysisSchedulerMediumTests.java
│ │ │ │ └── sonarapi/
│ │ │ │ ├── DefaultAnalysisErrorTests.java
│ │ │ │ ├── DefaultFilterableIssueTests.java
│ │ │ │ ├── DefaultSensorContextTests.java
│ │ │ │ ├── DefaultSensorDescriptorTests.java
│ │ │ │ ├── DefaultSonarLintIssueTests.java
│ │ │ │ ├── DefaultTempFolderTests.java
│ │ │ │ └── noop/
│ │ │ │ ├── NoOpNewCoverageTests.java
│ │ │ │ ├── NoOpNewCpdTokensTests.java
│ │ │ │ ├── NoOpNewHighlightingTests.java
│ │ │ │ ├── NoOpNewMeasureTests.java
│ │ │ │ ├── NoOpNewMessageFormattingTest.java
│ │ │ │ ├── NoOpNewSignificantCodeTests.java
│ │ │ │ └── NoOpNewSymbolTableTests.java
│ │ │ └── testutils/
│ │ │ ├── FileUtils.java
│ │ │ ├── InMemoryTestClientInputFile.java
│ │ │ ├── OnDiskTestClientInputFile.java
│ │ │ ├── TestClientInputFile.java
│ │ │ └── TestInputFileBuilder.java
│ │ └── resources/
│ │ ├── IssueExclusionsRegexpScannerTests/
│ │ │ ├── file-with-double-regexp-mess.txt
│ │ │ ├── file-with-double-regexp-twice.txt
│ │ │ ├── file-with-double-regexp-unfinished.txt
│ │ │ ├── file-with-double-regexp-wrong-order.txt
│ │ │ ├── file-with-double-regexp.txt
│ │ │ ├── file-with-no-regexp.txt
│ │ │ ├── file-with-single-regexp-and-double-regexp.txt
│ │ │ ├── file-with-single-regexp-last-line.txt
│ │ │ └── file-with-single-regexp.txt
│ │ └── logback-test.xml
│ ├── cli/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── assembly/
│ │ │ │ ├── dist-linux_aarch64.xml
│ │ │ │ ├── dist-linux_x64.xml
│ │ │ │ ├── dist-macosx_aarch64.xml
│ │ │ │ ├── dist-macosx_x64.xml
│ │ │ │ ├── dist-no-arch.xml
│ │ │ │ └── dist-windows_x64.xml
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── backend/
│ │ │ └── cli/
│ │ │ ├── EndOfStreamAwareInputStream.java
│ │ │ ├── SonarLintServerCli.java
│ │ │ └── package-info.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── backend/
│ │ └── cli/
│ │ ├── EndOfStreamAwareInputStreamTest.java
│ │ └── SonarLintServerCliTest.java
│ ├── commons/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ └── commons/
│ │ │ │ ├── CleanCodeAttribute.java
│ │ │ │ ├── CleanCodeAttributeCategory.java
│ │ │ │ ├── ConnectionKind.java
│ │ │ │ ├── HotspotReviewStatus.java
│ │ │ │ ├── IOExceptionUtils.java
│ │ │ │ ├── ImpactSeverity.java
│ │ │ │ ├── IssueSeverity.java
│ │ │ │ ├── IssueStatus.java
│ │ │ │ ├── KnownFinding.java
│ │ │ │ ├── KnownFindingType.java
│ │ │ │ ├── LineWithHash.java
│ │ │ │ ├── LocalOnlyIssue.java
│ │ │ │ ├── LocalOnlyIssueResolution.java
│ │ │ │ ├── MultiFileBlameResult.java
│ │ │ │ ├── NewCodeDefinition.java
│ │ │ │ ├── NewCodeMode.java
│ │ │ │ ├── RuleKey.java
│ │ │ │ ├── RuleType.java
│ │ │ │ ├── SoftwareQuality.java
│ │ │ │ ├── SonarLintCoreVersion.java
│ │ │ │ ├── SonarLintException.java
│ │ │ │ ├── SonarLintGitIgnore.java
│ │ │ │ ├── SonarLintUserHome.java
│ │ │ │ ├── Transition.java
│ │ │ │ ├── Version.java
│ │ │ │ ├── VulnerabilityProbability.java
│ │ │ │ ├── api/
│ │ │ │ │ ├── SonarLanguage.java
│ │ │ │ │ ├── TextRange.java
│ │ │ │ │ ├── TextRangeWithHash.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── progress/
│ │ │ │ │ ├── CanceledException.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── dogfood/
│ │ │ │ │ ├── DogfoodEnvironmentDetectionService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── log/
│ │ │ │ │ ├── FormattingTuple.java
│ │ │ │ │ ├── LogOutput.java
│ │ │ │ │ ├── MessageFormatter.java
│ │ │ │ │ ├── NormalizedParameters.java
│ │ │ │ │ ├── SonarLintLogger.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── plugins/
│ │ │ │ │ ├── Dependency.java
│ │ │ │ │ ├── EnterpriseReplacement.java
│ │ │ │ │ ├── SonarArtifact.java
│ │ │ │ │ ├── SonarPlugin.java
│ │ │ │ │ ├── SonarPluginDependency.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── progress/
│ │ │ │ │ ├── ExecutorServiceShutdownWatchable.java
│ │ │ │ │ ├── NoOpProgressMonitor.java
│ │ │ │ │ ├── ProgressIndicator.java
│ │ │ │ │ ├── ProgressMonitor.java
│ │ │ │ │ ├── SonarLintCancelMonitor.java
│ │ │ │ │ ├── Task.java
│ │ │ │ │ ├── TaskManager.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── DatabaseExceptionReporter.java
│ │ │ │ │ ├── JooqDatabaseExceptionListener.java
│ │ │ │ │ ├── SonarLintDatabase.java
│ │ │ │ │ ├── XodusPurgeUtils.java
│ │ │ │ │ ├── adapter/
│ │ │ │ │ │ ├── LocalDateAdapter.java
│ │ │ │ │ │ ├── LocalDateTimeAdapter.java
│ │ │ │ │ │ ├── OffsetDateTimeAdapter.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── local/
│ │ │ │ │ │ ├── FileStorageManager.java
│ │ │ │ │ │ ├── LocalStorage.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── tracing/
│ │ │ │ │ ├── Span.java
│ │ │ │ │ ├── Step.java
│ │ │ │ │ ├── Trace.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── util/
│ │ │ │ │ ├── FailSafeExecutors.java
│ │ │ │ │ ├── FileUtils.java
│ │ │ │ │ ├── StringUtils.java
│ │ │ │ │ ├── git/
│ │ │ │ │ │ ├── BlameResult.java
│ │ │ │ │ │ ├── GitBlameReader.java
│ │ │ │ │ │ ├── GitService.java
│ │ │ │ │ │ ├── NativeGit.java
│ │ │ │ │ │ ├── NativeGitLocator.java
│ │ │ │ │ │ ├── ProcessWrapperFactory.java
│ │ │ │ │ │ ├── exceptions/
│ │ │ │ │ │ │ ├── GitException.java
│ │ │ │ │ │ │ ├── GitRepoNotFoundException.java
│ │ │ │ │ │ │ └── package-info.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── validation/
│ │ │ │ ├── InvalidFields.java
│ │ │ │ ├── RegexpValidator.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ ├── db/
│ │ │ │ └── migration/
│ │ │ │ ├── README_BEFORE_TOUCHING_THIS_FOLDER.md
│ │ │ │ ├── V1__init_database.sql
│ │ │ │ ├── V2__create_local_only_issues_table.sql
│ │ │ │ ├── V3__allow_longer_messages_for_known_findings_table.sql
│ │ │ │ ├── V4__allow_longer_file_paths.sql
│ │ │ │ └── V5__allow_longer_configuration_scope_ids.sql
│ │ │ ├── logback-shared.xml
│ │ │ └── sl_core_version.txt
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── commons/
│ │ │ ├── HotspotReviewStatusTest.java
│ │ │ ├── IOExceptionUtilsTests.java
│ │ │ ├── LogTestStartAndEnd.java
│ │ │ ├── MultiFileBlameResultTest.java
│ │ │ ├── NewCodeDefinitionTests.java
│ │ │ ├── RuleKeyTests.java
│ │ │ ├── SonarLintCoreVersionTests.java
│ │ │ ├── SonarLintUserHomeTests.java
│ │ │ ├── StringUtilsTests.java
│ │ │ ├── TextRangeTests.java
│ │ │ ├── TextRangeWithHashTests.java
│ │ │ ├── VersionTests.java
│ │ │ ├── log/
│ │ │ │ ├── ConcurrentListAppender.java
│ │ │ │ ├── MessageFormatterTests.java
│ │ │ │ ├── SonarLintLogTester.java
│ │ │ │ └── SonarLintLoggerTests.java
│ │ │ ├── progress/
│ │ │ │ └── ExecutorServiceShutdownWatchableTests.java
│ │ │ ├── storage/
│ │ │ │ ├── DatabaseExceptionReporterTests.java
│ │ │ │ ├── JooqDatabaseExceptionListenerTests.java
│ │ │ │ ├── SonarLintDatabaseExceptionTests.java
│ │ │ │ └── local/
│ │ │ │ └── FileStorageManagerTest.java
│ │ │ ├── testutils/
│ │ │ │ ├── GitUtils.java
│ │ │ │ └── MockWebServerExtension.java
│ │ │ ├── util/
│ │ │ │ └── git/
│ │ │ │ ├── BlameParserTests.java
│ │ │ │ ├── GitServiceTests.java
│ │ │ │ ├── NativeGitLocatorTests.java
│ │ │ │ ├── NativeGitTest.java
│ │ │ │ └── ProcessWrapperFactoryTests.java
│ │ │ └── validation/
│ │ │ ├── InvalidFieldsTest.java
│ │ │ └── RegexpValidatorTest.java
│ │ └── resources/
│ │ └── logback.xml
│ ├── core/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ ├── BindingCandidatesFinder.java
│ │ │ │ ├── BindingClueProvider.java
│ │ │ │ ├── BindingSuggestionProvider.java
│ │ │ │ ├── ConfigurationScopeSharedContext.java
│ │ │ │ ├── ConfigurationService.java
│ │ │ │ ├── ConnectionService.java
│ │ │ │ ├── ConnectionSuggestionProvider.java
│ │ │ │ ├── DtoMapper.java
│ │ │ │ ├── MCPServerConfigurationProvider.java
│ │ │ │ ├── OrganizationsCache.java
│ │ │ │ ├── ServerFileExclusions.java
│ │ │ │ ├── SharedConnectedModeSettingsProvider.java
│ │ │ │ ├── SonarCloudActiveEnvironment.java
│ │ │ │ ├── SonarCloudRegion.java
│ │ │ │ ├── SonarCodeContextService.java
│ │ │ │ ├── SonarLintMDC.java
│ │ │ │ ├── SonarProjectsCache.java
│ │ │ │ ├── SonarQubeClientManager.java
│ │ │ │ ├── TextSearchIndex.java
│ │ │ │ ├── TokenGeneratorHelper.java
│ │ │ │ ├── UserPaths.java
│ │ │ │ ├── VersionSoonUnsupportedHelper.java
│ │ │ │ ├── active/
│ │ │ │ │ └── rules/
│ │ │ │ │ ├── ActiveRuleDetails.java
│ │ │ │ │ ├── ActiveRulesService.java
│ │ │ │ │ ├── ServerActiveRulesChanged.java
│ │ │ │ │ ├── StandaloneRulesConfigurationChanged.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── ai/
│ │ │ │ │ └── ide/
│ │ │ │ │ ├── AiAgentService.java
│ │ │ │ │ ├── AiHookService.java
│ │ │ │ │ ├── ExecutableLocator.java
│ │ │ │ │ ├── HookScriptType.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── analysis/
│ │ │ │ │ ├── AnalysisFailedEvent.java
│ │ │ │ │ ├── AnalysisFinishedEvent.java
│ │ │ │ │ ├── AnalysisResult.java
│ │ │ │ │ ├── AnalysisSchedulerCache.java
│ │ │ │ │ ├── AnalysisService.java
│ │ │ │ │ ├── AnalysisStartedEvent.java
│ │ │ │ │ ├── AutomaticAnalysisSettingChangedEvent.java
│ │ │ │ │ ├── BackendInputFile.java
│ │ │ │ │ ├── BackendModuleFileSystem.java
│ │ │ │ │ ├── ClientNodeJsPathChanged.java
│ │ │ │ │ ├── IssuesRaisedEvent.java
│ │ │ │ │ ├── NodeJsService.java
│ │ │ │ │ ├── RawIssue.java
│ │ │ │ │ ├── RawIssueDetectedEvent.java
│ │ │ │ │ ├── UserAnalysisPropertiesRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── branch/
│ │ │ │ │ ├── MatchedSonarProjectBranchChangedEvent.java
│ │ │ │ │ ├── SonarProjectBranchMatchingEndedEvent.java
│ │ │ │ │ ├── SonarProjectBranchTrackingService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── commons/
│ │ │ │ │ ├── Binding.java
│ │ │ │ │ ├── BoundScope.java
│ │ │ │ │ ├── DebounceComputer.java
│ │ │ │ │ ├── SmartCancelableLoadingCache.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── connection/
│ │ │ │ │ ├── SonarQubeClient.java
│ │ │ │ │ ├── SonarQubeClientState.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── embedded/
│ │ │ │ │ └── server/
│ │ │ │ │ ├── AnalyzeFileListRequestHandler.java
│ │ │ │ │ ├── AttributeUtils.java
│ │ │ │ │ ├── AwaitingUserTokenFutureRepository.java
│ │ │ │ │ ├── EmbeddedServer.java
│ │ │ │ │ ├── RequestHandlerBindingAssistant.java
│ │ │ │ │ ├── ToggleAutomaticAnalysisRequestHandler.java
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ ├── CorsFilter.java
│ │ │ │ │ │ ├── CspFilter.java
│ │ │ │ │ │ ├── ParseParamsFilter.java
│ │ │ │ │ │ ├── RateLimitFilter.java
│ │ │ │ │ │ ├── ValidationFilter.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── handler/
│ │ │ │ │ │ ├── GeneratedUserTokenHandler.java
│ │ │ │ │ │ ├── ShowFixSuggestionRequestHandler.java
│ │ │ │ │ │ ├── ShowHotspotRequestHandler.java
│ │ │ │ │ │ ├── ShowIssueRequestHandler.java
│ │ │ │ │ │ ├── StatusRequestHandler.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── event/
│ │ │ │ │ ├── BindingConfigChangedEvent.java
│ │ │ │ │ ├── ConfigurationScopeRemovedEvent.java
│ │ │ │ │ ├── ConfigurationScopesAddedWithBindingEvent.java
│ │ │ │ │ ├── ConnectionConfigurationAddedEvent.java
│ │ │ │ │ ├── ConnectionConfigurationRemovedEvent.java
│ │ │ │ │ ├── ConnectionConfigurationUpdatedEvent.java
│ │ │ │ │ ├── ConnectionCredentialsChangedEvent.java
│ │ │ │ │ ├── DependencyRisksSynchronizedEvent.java
│ │ │ │ │ ├── FixSuggestionReceivedEvent.java
│ │ │ │ │ ├── LocalOnlyIssueStatusChangedEvent.java
│ │ │ │ │ ├── MatchingSessionEndedEvent.java
│ │ │ │ │ ├── PluginStatusUpdateEvent.java
│ │ │ │ │ ├── ServerIssueStatusChangedEvent.java
│ │ │ │ │ ├── SonarServerEventReceivedEvent.java
│ │ │ │ │ ├── TaintVulnerabilitiesSynchronizedEvent.java
│ │ │ │ │ ├── TelemetryUpdatedEvent.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FilePathTranslation.java
│ │ │ │ │ ├── PathTranslationService.java
│ │ │ │ │ ├── ServerFilePathsProvider.java
│ │ │ │ │ ├── WindowsShortcutUtils.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── fs/
│ │ │ │ │ ├── ClientFile.java
│ │ │ │ │ ├── ClientFileSystemService.java
│ │ │ │ │ ├── FileExclusionService.java
│ │ │ │ │ ├── FileOpenedEvent.java
│ │ │ │ │ ├── FileSystemUpdatedEvent.java
│ │ │ │ │ ├── OpenFilesRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── hotspot/
│ │ │ │ │ ├── HotspotService.java
│ │ │ │ │ ├── HotspotStatusChangeException.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── http/
│ │ │ │ │ ├── AskClientCertificatePredicate.java
│ │ │ │ │ ├── ClientProxyCredentialsProvider.java
│ │ │ │ │ ├── ClientProxySelector.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── issue/
│ │ │ │ │ ├── IssueNotFoundException.java
│ │ │ │ │ ├── IssueService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── labs/
│ │ │ │ │ ├── IdeLabsHttpClient.java
│ │ │ │ │ ├── IdeLabsService.java
│ │ │ │ │ ├── IdeLabsSpringConfig.java
│ │ │ │ │ ├── IdeLabsSubscriptionRequestPayload.java
│ │ │ │ │ ├── IdeLabsSubscriptionResponseBody.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── languages/
│ │ │ │ │ ├── LanguageSupportRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── local/
│ │ │ │ │ └── only/
│ │ │ │ │ ├── IssueStatusBinding.java
│ │ │ │ │ ├── XodusLocalOnlyIssueStorageService.java
│ │ │ │ │ ├── XodusLocalOnlyIssueStore.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── log/
│ │ │ │ │ ├── LogService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── mode/
│ │ │ │ │ ├── SeverityModeService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── monitoring/
│ │ │ │ │ ├── MonitoringInitializationParams.java
│ │ │ │ │ ├── MonitoringService.java
│ │ │ │ │ ├── MonitoringUserIdStore.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── newcode/
│ │ │ │ │ ├── NewCodeService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── nodejs/
│ │ │ │ │ ├── InstalledNodeJs.java
│ │ │ │ │ ├── NodeJsHelper.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── ArtifactSource.java
│ │ │ │ │ ├── DotnetSupport.java
│ │ │ │ │ ├── PluginJarUtils.java
│ │ │ │ │ ├── PluginLifecycleService.java
│ │ │ │ │ ├── PluginStatus.java
│ │ │ │ │ ├── PluginStatusMapper.java
│ │ │ │ │ ├── PluginStatusNotifierService.java
│ │ │ │ │ ├── PluginStatusesChangedEvent.java
│ │ │ │ │ ├── PluginsConfiguration.java
│ │ │ │ │ ├── PluginsRepository.java
│ │ │ │ │ ├── PluginsService.java
│ │ │ │ │ ├── loading/
│ │ │ │ │ │ └── strategy/
│ │ │ │ │ │ ├── ArtifactCandidate.java
│ │ │ │ │ │ ├── ArtifactsLoadingResult.java
│ │ │ │ │ │ ├── ArtifactsLoadingStrategy.java
│ │ │ │ │ │ ├── BaseArtifactsLoadingStrategy.java
│ │ │ │ │ │ ├── ConnectedArtifactsLoadingStrategy.java
│ │ │ │ │ │ ├── ConnectedArtifactsLoadingStrategyFactory.java
│ │ │ │ │ │ ├── StandaloneArtifactsLoadingStrategy.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── skipped/
│ │ │ │ │ │ ├── SkippedPlugin.java
│ │ │ │ │ │ ├── SkippedPluginsNotifierService.java
│ │ │ │ │ │ ├── SkippedPluginsRepository.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── source/
│ │ │ │ │ ├── ArtifactKind.java
│ │ │ │ │ ├── ArtifactOrigin.java
│ │ │ │ │ ├── ArtifactSource.java
│ │ │ │ │ ├── ArtifactState.java
│ │ │ │ │ ├── AvailableArtifact.java
│ │ │ │ │ ├── LoadResult.java
│ │ │ │ │ ├── ResolvedArtifact.java
│ │ │ │ │ ├── UniqueTaskExecutor.java
│ │ │ │ │ ├── binaries/
│ │ │ │ │ │ ├── BinariesArtifact.java
│ │ │ │ │ │ ├── BinariesArtifactSource.java
│ │ │ │ │ │ ├── BinariesLocalCacheManager.java
│ │ │ │ │ │ ├── BinariesSignatureVerifier.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── embedded/
│ │ │ │ │ │ ├── EmbeddedPluginSource.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── server/
│ │ │ │ │ ├── ServerPluginDownloader.java
│ │ │ │ │ ├── ServerPluginSource.java
│ │ │ │ │ ├── ServerPluginsCache.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── progress/
│ │ │ │ │ ├── ClientAwareProgressMonitor.java
│ │ │ │ │ ├── ClientAwareTaskManager.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── promotion/
│ │ │ │ │ ├── LanguagePromotionService.java
│ │ │ │ │ ├── PromotionSpringConfig.java
│ │ │ │ │ ├── campaign/
│ │ │ │ │ │ ├── CampaignConstants.java
│ │ │ │ │ │ ├── CampaignResolvedEvent.java
│ │ │ │ │ │ ├── CampaignService.java
│ │ │ │ │ │ ├── CampaignShownEvent.java
│ │ │ │ │ │ ├── FeedbackNotificationActionItem.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── storage/
│ │ │ │ │ │ ├── CampaignsLocalStorage.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── remediation/
│ │ │ │ │ └── aicodefix/
│ │ │ │ │ ├── AiCodeFixFeature.java
│ │ │ │ │ ├── AiCodeFixService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── reporting/
│ │ │ │ │ ├── FindingReportingService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── repository/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── BindingConfiguration.java
│ │ │ │ │ │ ├── ConfigurationRepository.java
│ │ │ │ │ │ ├── ConfigurationScope.java
│ │ │ │ │ │ ├── ConfigurationScopeWithBinding.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── connection/
│ │ │ │ │ │ ├── AbstractConnectionConfiguration.java
│ │ │ │ │ │ ├── ConnectionConfigurationRepository.java
│ │ │ │ │ │ ├── SonarCloudConnectionConfiguration.java
│ │ │ │ │ │ ├── SonarQubeConnectionConfiguration.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── reporting/
│ │ │ │ │ │ ├── PreviouslyRaisedFindingsRepository.java
│ │ │ │ │ │ ├── RaisedIssue.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── rules/
│ │ │ │ │ ├── RulesRepository.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── rules/
│ │ │ │ │ ├── CleanCodePrinciples.java
│ │ │ │ │ ├── OthersSectionHtmlContent.java
│ │ │ │ │ ├── RuleDetails.java
│ │ │ │ │ ├── RuleDetailsAdapter.java
│ │ │ │ │ ├── RuleNotFoundException.java
│ │ │ │ │ ├── RulesExtractionHelper.java
│ │ │ │ │ ├── RulesService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── sca/
│ │ │ │ │ ├── DependencyRiskService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── server/
│ │ │ │ │ └── event/
│ │ │ │ │ ├── ServerEventsService.java
│ │ │ │ │ ├── SonarQubeEventStream.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── smartnotifications/
│ │ │ │ │ ├── LastEventPolling.java
│ │ │ │ │ ├── SmartNotifications.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── spring/
│ │ │ │ │ ├── SonarLintSpringAppConfig.java
│ │ │ │ │ ├── SpringApplicationContextInitializer.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── SonarLintDatabaseService.java
│ │ │ │ │ ├── StorageService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── sync/
│ │ │ │ │ ├── AnalyzerConfigurationSynchronized.java
│ │ │ │ │ ├── BranchBinding.java
│ │ │ │ │ ├── ConfigurationScopesSynchronizedEvent.java
│ │ │ │ │ ├── FindingsSynchronizationService.java
│ │ │ │ │ ├── HotspotSynchronizationService.java
│ │ │ │ │ ├── IssueSynchronizationService.java
│ │ │ │ │ ├── PluginsSynchronizedEvent.java
│ │ │ │ │ ├── ScaSynchronizationService.java
│ │ │ │ │ ├── SonarProjectBranchesChangedEvent.java
│ │ │ │ │ ├── SonarProjectBranchesSynchronizationService.java
│ │ │ │ │ ├── SynchronizationService.java
│ │ │ │ │ ├── SynchronizationTimestampRepository.java
│ │ │ │ │ ├── TaintSynchronizationService.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── telemetry/
│ │ │ │ │ ├── TelemetryServerAttributesProvider.java
│ │ │ │ │ ├── TelemetryService.java
│ │ │ │ │ ├── TelemetrySpringConfig.java
│ │ │ │ │ ├── gessie/
│ │ │ │ │ │ ├── GessieSpringConfig.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── tracking/
│ │ │ │ │ ├── IntroductionDateProvider.java
│ │ │ │ │ ├── IssueMapper.java
│ │ │ │ │ ├── IssueStatusBinding.java
│ │ │ │ │ ├── KnownFindings.java
│ │ │ │ │ ├── LocalOnlyIssueRepository.java
│ │ │ │ │ ├── LocalOnlySecurityHotspot.java
│ │ │ │ │ ├── TaintVulnerabilityTrackingService.java
│ │ │ │ │ ├── TextRangeUtils.java
│ │ │ │ │ ├── TrackedIssue.java
│ │ │ │ │ ├── TrackingService.java
│ │ │ │ │ ├── XodusKnownFindingsStorageService.java
│ │ │ │ │ ├── XodusKnownFindingsStore.java
│ │ │ │ │ ├── matching/
│ │ │ │ │ │ ├── IssueMatcher.java
│ │ │ │ │ │ ├── KnownIssueMatchingAttributesMapper.java
│ │ │ │ │ │ ├── LocalOnlyIssueMatchingAttributesMapper.java
│ │ │ │ │ │ ├── MatchingAttributesMapper.java
│ │ │ │ │ │ ├── MatchingResult.java
│ │ │ │ │ │ ├── MatchingSession.java
│ │ │ │ │ │ ├── RawIssueFindingMatchingAttributeMapper.java
│ │ │ │ │ │ ├── ServerHotspotMatchingAttributesMapper.java
│ │ │ │ │ │ ├── ServerIssueMatchingAttributesMapper.java
│ │ │ │ │ │ ├── TrackedIssueFindingMatchingAttributeMapper.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── streaming/
│ │ │ │ │ ├── Alarm.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── websocket/
│ │ │ │ ├── History.java
│ │ │ │ ├── SonarCloudWebSocket.java
│ │ │ │ ├── WebSocketEventSubscribePayload.java
│ │ │ │ ├── WebSocketManager.java
│ │ │ │ ├── WebSocketService.java
│ │ │ │ ├── events/
│ │ │ │ │ ├── SmartNotificationEvent.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── parsing/
│ │ │ │ ├── SmartNotificationEventParser.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ ├── ai/
│ │ │ │ └── hooks/
│ │ │ │ ├── sonarqube_analysis_hook.js
│ │ │ │ ├── sonarqube_analysis_hook.py
│ │ │ │ └── sonarqube_analysis_hook.sh
│ │ │ ├── clean-code-principles/
│ │ │ │ ├── defense_in_depth.html
│ │ │ │ └── never_trust_user_input.html
│ │ │ ├── context-rule-description/
│ │ │ │ └── others_section_html_content.html
│ │ │ └── ondemand/
│ │ │ ├── plugins.properties
│ │ │ └── sonarsource-public.key
│ │ └── test/
│ │ ├── java/
│ │ │ ├── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ ├── BindingCandidatesFinderTests.java
│ │ │ │ ├── BindingClueProviderTests.java
│ │ │ │ ├── BindingSuggestionProviderTests.java
│ │ │ │ ├── ConfigurationServiceTests.java
│ │ │ │ ├── ConnectionServiceTests.java
│ │ │ │ ├── DtoMapperTests.java
│ │ │ │ ├── SonarCloudActiveEnvironmentTests.java
│ │ │ │ ├── SonarProjectsCacheTests.java
│ │ │ │ ├── SonarQubeClientManagerTests.java
│ │ │ │ ├── TelemetryServerAttributesProviderTests.java
│ │ │ │ ├── UserPathsTests.java
│ │ │ │ ├── VersionSoonUnsupportedHelperTests.java
│ │ │ │ ├── ai/
│ │ │ │ │ └── ide/
│ │ │ │ │ ├── AiHookServiceTests.java
│ │ │ │ │ └── ExecutableLocatorTests.java
│ │ │ │ ├── analysis/
│ │ │ │ │ ├── AnalysisSchedulerCacheTest.java
│ │ │ │ │ ├── BackendInputFileTests.java
│ │ │ │ │ └── ClientAnalysisPropertiesServiceTests.java
│ │ │ │ ├── branch/
│ │ │ │ │ └── SonarProjectBranchTrackingServiceTests.java
│ │ │ │ ├── commons/
│ │ │ │ │ └── SmartCancelableLoadingCacheTests.java
│ │ │ │ ├── embedded/
│ │ │ │ │ └── server/
│ │ │ │ │ ├── AnalyzeFileListRequestHandlerTests.java
│ │ │ │ │ ├── ToggleAutomaticAnalysisRequestHandlerTests.java
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ ├── CspFilterTest.java
│ │ │ │ │ │ └── RateLimitFilterTests.java
│ │ │ │ │ └── handler/
│ │ │ │ │ ├── ShowFixSuggestionRequestHandlerTests.java
│ │ │ │ │ └── ShowIssueRequestHandlerTests.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FilePathTranslationTests.java
│ │ │ │ │ ├── PathTranslationServiceTests.java
│ │ │ │ │ └── ServerFilePathsProviderTest.java
│ │ │ │ ├── fs/
│ │ │ │ │ ├── ClientFileTests.java
│ │ │ │ │ └── FileExclusionServiceTests.java
│ │ │ │ ├── hotspot/
│ │ │ │ │ └── HotspotServiceTests.java
│ │ │ │ ├── issue/
│ │ │ │ │ └── matching/
│ │ │ │ │ └── IssueMatcherTests.java
│ │ │ │ ├── monitoring/
│ │ │ │ │ └── MonitoringUserIdStoreTests.java
│ │ │ │ ├── newcode/
│ │ │ │ │ └── NewCodeServiceTests.java
│ │ │ │ ├── nodejs/
│ │ │ │ │ └── NodeJsHelperTests.java
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── DotnetSupportTest.java
│ │ │ │ │ ├── PluginJarUtilsTest.java
│ │ │ │ │ ├── PluginLifecycleServiceTest.java
│ │ │ │ │ ├── PluginStatusNotifierServiceTest.java
│ │ │ │ │ ├── PluginsServiceTest.java
│ │ │ │ │ ├── loading/
│ │ │ │ │ │ └── strategy/
│ │ │ │ │ │ ├── ConnectedArtifactsLoadingStrategyTest.java
│ │ │ │ │ │ └── StandaloneArtifactsLoadingStrategyTest.java
│ │ │ │ │ └── source/
│ │ │ │ │ ├── BinariesArtifactTest.java
│ │ │ │ │ ├── binaries/
│ │ │ │ │ │ ├── BinariesArtifactSourceTest.java
│ │ │ │ │ │ ├── BinariesLocalCacheManagerTest.java
│ │ │ │ │ │ └── BinariesSignatureVerifierTest.java
│ │ │ │ │ ├── embedded/
│ │ │ │ │ │ └── EmbeddedPluginSourceTest.java
│ │ │ │ │ └── server/
│ │ │ │ │ ├── ServerPluginDownloaderTest.java
│ │ │ │ │ ├── ServerPluginSourceTest.java
│ │ │ │ │ └── ServerPluginsCacheTest.java
│ │ │ │ ├── progress/
│ │ │ │ │ └── ClientAwareTaskManagerTest.java
│ │ │ │ ├── remediation/
│ │ │ │ │ └── aicodefix/
│ │ │ │ │ └── AiCodeFixServiceTest.java
│ │ │ │ ├── repository/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── BindingConfigurationTest.java
│ │ │ │ │ │ └── ConfigurationRepositoryTest.java
│ │ │ │ │ ├── connection/
│ │ │ │ │ │ ├── SonarCloudConnectionConfigurationTest.java
│ │ │ │ │ │ └── SonarQubeConnectionConfigurationTest.java
│ │ │ │ │ └── rules/
│ │ │ │ │ └── RulesRepositoryTest.java
│ │ │ │ ├── rules/
│ │ │ │ │ ├── RuleDetailsAdapterTests.java
│ │ │ │ │ ├── RulesFixtures.java
│ │ │ │ │ └── RulesServiceTests.java
│ │ │ │ ├── sca/
│ │ │ │ │ └── DependencyRiskServiceTests.java
│ │ │ │ ├── smartnotifications/
│ │ │ │ │ └── LastEventPollingTests.java
│ │ │ │ ├── sync/
│ │ │ │ │ └── BranchBindingTest.java
│ │ │ │ ├── tracking/
│ │ │ │ │ ├── KnownFindingMatchingAttributesMapperTests.java
│ │ │ │ │ ├── LocalOnlyIssueMatchingAttributesMapperTests.java
│ │ │ │ │ ├── ServerHotspotMatchingAttributesMapperTests.java
│ │ │ │ │ └── ServerIssueMatchingAttributesMapperTests.java
│ │ │ │ └── websocket/
│ │ │ │ ├── SonarCloudWebSocketTests.java
│ │ │ │ └── parsing/
│ │ │ │ └── SmartNotificationEventParserTests.java
│ │ │ └── testutils/
│ │ │ ├── LocalOnlyIssueFixtures.java
│ │ │ ├── TakeThreadDumpAfter.java
│ │ │ ├── TestUtils.java
│ │ │ └── ThreadDumpExtension.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── ondemand/
│ │ ├── sonar-cpp-compressed-plugin.jar.asc
│ │ ├── sonar-cpp-corrupt-plugin.jar.asc
│ │ ├── sonar-cpp-nosig-plugin.jar.asc
│ │ ├── sonar-cpp-plugin.jar.asc
│ │ ├── sonar-cpp-unknownkey-plugin.jar.asc
│ │ └── sonarsource-public.key
│ ├── http/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── http/
│ │ │ ├── ApacheHttpClientAdapter.java
│ │ │ ├── ApacheHttpResponse.java
│ │ │ ├── ContextAttributes.java
│ │ │ ├── HttpClient.java
│ │ │ ├── HttpClientProvider.java
│ │ │ ├── HttpConfig.java
│ │ │ ├── HttpConnectionListener.java
│ │ │ ├── RedirectInterceptor.java
│ │ │ ├── RetryOnDemandStrategy.java
│ │ │ ├── ThreadFactories.java
│ │ │ ├── WebSocketClient.java
│ │ │ ├── package-info.java
│ │ │ └── ssl/
│ │ │ ├── CertificateStore.java
│ │ │ ├── SslConfig.java
│ │ │ └── package-info.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── http/
│ │ │ ├── HttpClientProviderTests.java
│ │ │ └── WebSocketClientTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── plugin-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── plugin/
│ │ │ └── api/
│ │ │ ├── SonarLintRuntime.java
│ │ │ ├── issue/
│ │ │ │ ├── NewInputFileEdit.java
│ │ │ │ ├── NewQuickFix.java
│ │ │ │ ├── NewSonarLintIssue.java
│ │ │ │ ├── NewTextEdit.java
│ │ │ │ └── package-info.java
│ │ │ ├── module/
│ │ │ │ └── file/
│ │ │ │ ├── ModuleFileEvent.java
│ │ │ │ ├── ModuleFileListener.java
│ │ │ │ ├── ModuleFileSystem.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── sonarlint-api-version.txt
│ ├── plugin-commons/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ ├── com/
│ │ │ │ └── sonarsource/
│ │ │ │ └── plugins/
│ │ │ │ └── license/
│ │ │ │ └── api/
│ │ │ │ ├── LicensedPluginRegistration.java
│ │ │ │ └── package-info.java
│ │ │ └── org/
│ │ │ ├── sonar/
│ │ │ │ └── api/
│ │ │ │ ├── SonarQubeVersion.java
│ │ │ │ └── package-info.java
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── plugin/
│ │ │ └── commons/
│ │ │ ├── ApiVersions.java
│ │ │ ├── DataflowBugDetection.java
│ │ │ ├── ExtensionInstaller.java
│ │ │ ├── ExtensionUtils.java
│ │ │ ├── LoadedPlugins.java
│ │ │ ├── MultivalueProperty.java
│ │ │ ├── PluginsLoadResult.java
│ │ │ ├── PluginsLoader.java
│ │ │ ├── api/
│ │ │ │ ├── SkipReason.java
│ │ │ │ └── package-info.java
│ │ │ ├── container/
│ │ │ │ ├── ClassDerivedBeanDefinition.java
│ │ │ │ ├── ComponentKeys.java
│ │ │ │ ├── Container.java
│ │ │ │ ├── ExtensionContainer.java
│ │ │ │ ├── LazyUnlessStartableStrategy.java
│ │ │ │ ├── PriorityBeanFactory.java
│ │ │ │ ├── SpringComponentContainer.java
│ │ │ │ ├── SpringInitStrategy.java
│ │ │ │ ├── StartableBeanPostProcessor.java
│ │ │ │ ├── StartableContainer.java
│ │ │ │ └── package-info.java
│ │ │ ├── loading/
│ │ │ │ ├── PluginClassLoaderDef.java
│ │ │ │ ├── PluginClassloaderFactory.java
│ │ │ │ ├── PluginInfo.java
│ │ │ │ ├── PluginInstancesLoader.java
│ │ │ │ ├── PluginRequirementsCheckResult.java
│ │ │ │ ├── SonarPluginManifest.java
│ │ │ │ ├── SonarPluginRequirementsChecker.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── sonarapi/
│ │ │ ├── ConfigurationBridge.java
│ │ │ ├── MapSettings.java
│ │ │ ├── PluginContextImpl.java
│ │ │ ├── SonarLintRuntimeImpl.java
│ │ │ └── package-info.java
│ │ └── test/
│ │ ├── java/
│ │ │ ├── com/
│ │ │ │ └── sonarsource/
│ │ │ │ └── plugins/
│ │ │ │ └── license/
│ │ │ │ └── api/
│ │ │ │ └── LicensedPluginRegistrationTests.java
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── plugin/
│ │ │ └── commons/
│ │ │ ├── ApiVersionsTests.java
│ │ │ ├── ExtensionUtilsTests.java
│ │ │ ├── MultivaluePropertyTests.java
│ │ │ ├── SkipReasonTests.java
│ │ │ ├── Utils.java
│ │ │ ├── container/
│ │ │ │ ├── ComponentKeysTests.java
│ │ │ │ ├── LazyUnlessStartableStrategyTests.java
│ │ │ │ ├── PriorityBeanFactoryTests.java
│ │ │ │ ├── SpringComponentContainerTests.java
│ │ │ │ └── StartableBeanPostProcessorTests.java
│ │ │ ├── loading/
│ │ │ │ ├── PluginClassloaderFactoryTests.java
│ │ │ │ ├── PluginInfoTests.java
│ │ │ │ ├── PluginInstancesLoaderTests.java
│ │ │ │ ├── SonarPluginManifestTests.java
│ │ │ │ └── SonarPluginRequirementsCheckerTests.java
│ │ │ └── sonarapi/
│ │ │ └── MapSettingsTests.java
│ │ ├── projects/
│ │ │ ├── .gitignore
│ │ │ ├── README.txt
│ │ │ ├── base-plugin/
│ │ │ │ ├── pom.xml
│ │ │ │ └── src/
│ │ │ │ └── org/
│ │ │ │ └── sonar/
│ │ │ │ └── plugins/
│ │ │ │ └── base/
│ │ │ │ ├── BasePlugin.java
│ │ │ │ └── api/
│ │ │ │ └── BaseApi.java
│ │ │ ├── classloader-leak-plugin/
│ │ │ │ ├── pom.xml
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── org/
│ │ │ │ │ └── sonar/
│ │ │ │ │ └── plugins/
│ │ │ │ │ └── leak/
│ │ │ │ │ └── LeakPlugin.java
│ │ │ │ └── resources/
│ │ │ │ └── Hello.txt
│ │ │ ├── dependent-plugin/
│ │ │ │ ├── pom.xml
│ │ │ │ └── src/
│ │ │ │ └── org/
│ │ │ │ └── sonar/
│ │ │ │ └── plugins/
│ │ │ │ └── dependent/
│ │ │ │ └── DependentPlugin.java
│ │ │ └── pom.xml
│ │ └── resources/
│ │ ├── SonarPluginManifestTests/
│ │ │ ├── plugin-with-jre-min.jar
│ │ │ ├── plugin-with-nodejs-min.jar
│ │ │ ├── plugin-with-require-plugins.jar
│ │ │ └── plugin-without-jre-min.jar
│ │ ├── logback-test.xml
│ │ └── sonar-checkstyle-plugin-2.8.jar
│ ├── pom.xml
│ ├── rpc-impl/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ └── rpc/
│ │ │ │ └── impl/
│ │ │ │ ├── AbstractRpcServiceDelegate.java
│ │ │ │ ├── AiAgentRpcServiceDelegate.java
│ │ │ │ ├── AiCodeFixRpcServiceDelegate.java
│ │ │ │ ├── AnalysisRpcServiceDelegate.java
│ │ │ │ ├── BackendJsonRpcLauncher.java
│ │ │ │ ├── BindingRpcServiceDelegate.java
│ │ │ │ ├── ConfigurationRpcServiceDelegate.java
│ │ │ │ ├── ConnectionRpcServiceDelegate.java
│ │ │ │ ├── DependencyRiskRpcServiceDelegate.java
│ │ │ │ ├── DogfoodingRpcServiceDelegate.java
│ │ │ │ ├── FileRpcServiceDelegate.java
│ │ │ │ ├── HotspotRpcServiceDelegate.java
│ │ │ │ ├── IdeLabsRpcServiceDelegate.java
│ │ │ │ ├── IssueRpcServiceDelegate.java
│ │ │ │ ├── LogServiceDelegate.java
│ │ │ │ ├── NewCodeRpcServiceDelegate.java
│ │ │ │ ├── PluginRpcServiceDelegate.java
│ │ │ │ ├── RpcClientLogOutput.java
│ │ │ │ ├── RulesRpcServiceDelegate.java
│ │ │ │ ├── SonarLintRpcClientLogbackAppender.java
│ │ │ │ ├── SonarLintRpcServerImpl.java
│ │ │ │ ├── SonarProjectBranchRpcServiceDelegate.java
│ │ │ │ ├── TaintVulnerabilityTrackingRpcServiceDelegate.java
│ │ │ │ ├── TaskProgressRpcServiceDelegate.java
│ │ │ │ ├── TelemetryRpcServiceDelegate.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── logback.xml
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── rpc/
│ │ └── impl/
│ │ ├── AnalysisServiceTests.java
│ │ └── SonarLintRpcServerImplTests.java
│ ├── rule-extractor/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── rule/
│ │ │ └── extractor/
│ │ │ ├── EmptyConfiguration.java
│ │ │ ├── LegacyHotspotRuleDescriptionSectionsGenerator.java
│ │ │ ├── NoopTempFolder.java
│ │ │ ├── RuleDefinitionsLoader.java
│ │ │ ├── RuleExtractionSettings.java
│ │ │ ├── RuleSettings.java
│ │ │ ├── RulesDefinitionExtractor.java
│ │ │ ├── RulesDefinitionExtractorContainer.java
│ │ │ ├── SecurityStandards.java
│ │ │ ├── SonarLintRuleDefinition.java
│ │ │ ├── SonarLintRuleDescriptionSection.java
│ │ │ ├── SonarLintRuleParamDefinition.java
│ │ │ ├── SonarLintRuleParamType.java
│ │ │ └── package-info.java
│ │ └── test/
│ │ ├── java/
│ │ │ ├── mediumtests/
│ │ │ │ └── RuleExtractorMediumTests.java
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── rule/
│ │ │ └── extractor/
│ │ │ ├── EmptyConfigurationTest.java
│ │ │ ├── LegacyHotspotRuleDescriptionSectionsGeneratorTest.java
│ │ │ ├── NoopTempFolderTest.java
│ │ │ ├── SecurityStandardsTest.java
│ │ │ └── SonarLintRuleDefinitionTests.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── server-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ └── serverapi/
│ │ │ │ ├── EndpointParams.java
│ │ │ │ ├── ServerApi.java
│ │ │ │ ├── ServerApiHelper.java
│ │ │ │ ├── UrlUtils.java
│ │ │ │ ├── authentication/
│ │ │ │ │ ├── AuthenticationApi.java
│ │ │ │ │ ├── ValidateResponseDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── branches/
│ │ │ │ │ ├── ProjectBranchesApi.java
│ │ │ │ │ ├── ServerBranch.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── component/
│ │ │ │ │ ├── Component.java
│ │ │ │ │ ├── ComponentApi.java
│ │ │ │ │ ├── SearchProjectResponse.java
│ │ │ │ │ ├── SearchProjectResponseDto.java
│ │ │ │ │ ├── ServerProject.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── developers/
│ │ │ │ │ ├── DevelopersApi.java
│ │ │ │ │ ├── SearchEventsResponseDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── ForbiddenException.java
│ │ │ │ │ ├── NetworkException.java
│ │ │ │ │ ├── NotFoundException.java
│ │ │ │ │ ├── ProjectNotFoundException.java
│ │ │ │ │ ├── ServerErrorException.java
│ │ │ │ │ ├── ServerRequestException.java
│ │ │ │ │ ├── TooManyRequestsException.java
│ │ │ │ │ ├── UnauthorizedException.java
│ │ │ │ │ ├── UnexpectedBodyException.java
│ │ │ │ │ ├── UnexpectedServerResponseException.java
│ │ │ │ │ ├── UnsupportedServerException.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── features/
│ │ │ │ │ ├── Feature.java
│ │ │ │ │ ├── FeaturesApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── fixsuggestions/
│ │ │ │ │ ├── AiCodeFixConfiguration.java
│ │ │ │ │ ├── AiSuggestionRequestBodyDto.java
│ │ │ │ │ ├── AiSuggestionResponseBodyDto.java
│ │ │ │ │ ├── FixSuggestionsApi.java
│ │ │ │ │ ├── OrganizationConfigsResponseDto.java
│ │ │ │ │ ├── SuggestionFeatureEnablement.java
│ │ │ │ │ ├── SupportedRulesResponseDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── hotspot/
│ │ │ │ │ ├── HotspotApi.java
│ │ │ │ │ ├── ServerHotspot.java
│ │ │ │ │ ├── ServerHotspotDetails.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── issue/
│ │ │ │ │ ├── IssueApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── newcode/
│ │ │ │ │ ├── NewCodeApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── organization/
│ │ │ │ │ ├── GetOrganizationsResponseDto.java
│ │ │ │ │ ├── OrganizationApi.java
│ │ │ │ │ ├── ServerOrganization.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── plugins/
│ │ │ │ │ ├── InstalledPluginsPayloadDto.java
│ │ │ │ │ ├── PluginsApi.java
│ │ │ │ │ ├── ServerPlugin.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── projectbindings/
│ │ │ │ │ ├── ProjectBindingsApi.java
│ │ │ │ │ ├── SQCProjectBindingsResponse.java
│ │ │ │ │ ├── SQCProjectBindingsResponseDto.java
│ │ │ │ │ ├── SQSProjectBindingsResponse.java
│ │ │ │ │ ├── SQSProjectBindingsResponseDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── push/
│ │ │ │ │ ├── IssueChangedEvent.java
│ │ │ │ │ ├── PushApi.java
│ │ │ │ │ ├── RuleSetChangedEvent.java
│ │ │ │ │ ├── SecurityHotspotChangedEvent.java
│ │ │ │ │ ├── SecurityHotspotClosedEvent.java
│ │ │ │ │ ├── SecurityHotspotRaisedEvent.java
│ │ │ │ │ ├── ServerHotspotEvent.java
│ │ │ │ │ ├── SonarProjectEvent.java
│ │ │ │ │ ├── SonarServerEvent.java
│ │ │ │ │ ├── TaintVulnerabilityClosedEvent.java
│ │ │ │ │ ├── TaintVulnerabilityRaisedEvent.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── parsing/
│ │ │ │ │ ├── EventParser.java
│ │ │ │ │ ├── IssueChangedEventParser.java
│ │ │ │ │ ├── RuleSetChangedEventParser.java
│ │ │ │ │ ├── SecurityHotspotChangedEventParser.java
│ │ │ │ │ ├── SecurityHotspotClosedEventParser.java
│ │ │ │ │ ├── SecurityHotspotRaisedEventParser.java
│ │ │ │ │ ├── TaintVulnerabilityClosedEventParser.java
│ │ │ │ │ ├── TaintVulnerabilityRaisedEventParser.java
│ │ │ │ │ ├── common/
│ │ │ │ │ │ ├── ImpactPayload.java
│ │ │ │ │ │ ├── LocationPayload.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── qualityprofile/
│ │ │ │ │ ├── QualityProfile.java
│ │ │ │ │ ├── QualityProfileApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── rules/
│ │ │ │ │ ├── RulesApi.java
│ │ │ │ │ ├── ServerActiveRule.java
│ │ │ │ │ ├── ServerRule.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── sca/
│ │ │ │ │ ├── GetIssuesReleasesResponse.java
│ │ │ │ │ ├── GetScaEnablementResponse.java
│ │ │ │ │ ├── ScaApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── settings/
│ │ │ │ │ ├── SettingsApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── source/
│ │ │ │ │ ├── SourceApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── stream/
│ │ │ │ │ ├── Event.java
│ │ │ │ │ ├── EventBuffer.java
│ │ │ │ │ ├── EventParser.java
│ │ │ │ │ ├── EventStream.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── system/
│ │ │ │ │ ├── ServerStatusInfo.java
│ │ │ │ │ ├── SystemApi.java
│ │ │ │ │ ├── SystemStatusDto.java
│ │ │ │ │ ├── ValidationResult.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── users/
│ │ │ │ │ ├── CurrentUserResponseDto.java
│ │ │ │ │ ├── UsersApi.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── util/
│ │ │ │ ├── ProtobufUtil.java
│ │ │ │ ├── ServerApiUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── proto/
│ │ │ ├── sonarcloud/
│ │ │ │ └── ws-organizations.proto
│ │ │ └── sonarqube/
│ │ │ ├── ws-commons.proto
│ │ │ ├── ws-components.proto
│ │ │ ├── ws-hotspots.proto
│ │ │ ├── ws-issues.proto
│ │ │ ├── ws-measures.proto
│ │ │ ├── ws-projectbranches.proto
│ │ │ ├── ws-qualityprofiles.proto
│ │ │ ├── ws-rules.proto
│ │ │ └── ws-settings.proto
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── serverapi/
│ │ │ ├── MockWebServerExtensionWithProtobuf.java
│ │ │ ├── ServerApiHelperTests.java
│ │ │ ├── authentication/
│ │ │ │ └── AuthenticationApiTests.java
│ │ │ ├── branches/
│ │ │ │ ├── ProjectBranchesApiTests.java
│ │ │ │ └── ServerBranchTests.java
│ │ │ ├── component/
│ │ │ │ ├── ComponentApiTests.java
│ │ │ │ └── ServerProjectTests.java
│ │ │ ├── developers/
│ │ │ │ └── DevelopersApiTests.java
│ │ │ ├── exception/
│ │ │ │ └── ProjectNotFoundExceptionTests.java
│ │ │ ├── fixsuggestions/
│ │ │ │ └── FixSuggestionsApiTest.java
│ │ │ ├── hotspot/
│ │ │ │ ├── HotspotApiTests.java
│ │ │ │ └── ServerHotspotDetailsTests.java
│ │ │ ├── issue/
│ │ │ │ └── IssueApiTests.java
│ │ │ ├── newcode/
│ │ │ │ └── NewCodeApiTests.java
│ │ │ ├── organization/
│ │ │ │ ├── OrganizationApiTests.java
│ │ │ │ └── ServerOrganizationTests.java
│ │ │ ├── plugins/
│ │ │ │ └── PluginsApiTests.java
│ │ │ ├── projectbindings/
│ │ │ │ └── ProjectBindingsApiTests.java
│ │ │ ├── push/
│ │ │ │ ├── PushApiTests.java
│ │ │ │ └── parsing/
│ │ │ │ ├── SecurityHotspotChangedEventParserTest.java
│ │ │ │ ├── SecurityHotspotClosedEventParserTest.java
│ │ │ │ └── SecurityHotspotRaisedEventParserTest.java
│ │ │ ├── qualityprofile/
│ │ │ │ └── QualityProfileApiTests.java
│ │ │ ├── rules/
│ │ │ │ └── RulesApiTests.java
│ │ │ ├── sca/
│ │ │ │ └── ScaApiTests.java
│ │ │ ├── settings/
│ │ │ │ └── SettingsApiTests.java
│ │ │ ├── stream/
│ │ │ │ └── EventStreamTests.java
│ │ │ ├── users/
│ │ │ │ └── UsersApiTests.java
│ │ │ └── util/
│ │ │ └── ProtobufUtilTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── update/
│ │ ├── component_tree.pb
│ │ ├── empty_component_tree.pb
│ │ └── empty_rules.pb
│ ├── server-connection/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ └── serverconnection/
│ │ │ │ ├── AnalyzerConfiguration.java
│ │ │ │ ├── AnalyzerConfigurationStorage.java
│ │ │ │ ├── AnalyzerSettingsUpdateSummary.java
│ │ │ │ ├── ConnectionStorage.java
│ │ │ │ ├── DownloadException.java
│ │ │ │ ├── DownloaderUtils.java
│ │ │ │ ├── FileUtils.java
│ │ │ │ ├── HotspotDownloader.java
│ │ │ │ ├── IssueDownloader.java
│ │ │ │ ├── IssueStorePaths.java
│ │ │ │ ├── LocalStorageSynchronizer.java
│ │ │ │ ├── Organization.java
│ │ │ │ ├── OrganizationSynchronizer.java
│ │ │ │ ├── ProjectBinding.java
│ │ │ │ ├── ProjectBranches.java
│ │ │ │ ├── ProjectBranchesStorage.java
│ │ │ │ ├── RuleSet.java
│ │ │ │ ├── ServerHotspotUpdater.java
│ │ │ │ ├── ServerInfoSynchronizer.java
│ │ │ │ ├── ServerIssueUpdater.java
│ │ │ │ ├── ServerSettings.java
│ │ │ │ ├── ServerUpdaterUtils.java
│ │ │ │ ├── ServerVersionAndStatusChecker.java
│ │ │ │ ├── Settings.java
│ │ │ │ ├── SonarProjectStorage.java
│ │ │ │ ├── SonarServerSettingsChangedEvent.java
│ │ │ │ ├── StoredPlugin.java
│ │ │ │ ├── StoredServerInfo.java
│ │ │ │ ├── SynchronizationResult.java
│ │ │ │ ├── TaintIssueDownloader.java
│ │ │ │ ├── UserSynchronizer.java
│ │ │ │ ├── VersionUtils.java
│ │ │ │ ├── aicodefix/
│ │ │ │ │ ├── AiCodeFix.java
│ │ │ │ │ ├── AiCodeFixFeatureEnablement.java
│ │ │ │ │ ├── AiCodeFixRepository.java
│ │ │ │ │ ├── AiCodeFixSettings.java
│ │ │ │ │ ├── AiCodeFixSettingsSynchronizer.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── issues/
│ │ │ │ │ ├── FileLevelServerIssue.java
│ │ │ │ │ ├── Findings.java
│ │ │ │ │ ├── KnownFindingsRepository.java
│ │ │ │ │ ├── LineLevelServerIssue.java
│ │ │ │ │ ├── LocalOnlyIssuesRepository.java
│ │ │ │ │ ├── RangeLevelServerIssue.java
│ │ │ │ │ ├── ServerDependencyRisk.java
│ │ │ │ │ ├── ServerFinding.java
│ │ │ │ │ ├── ServerIssue.java
│ │ │ │ │ ├── ServerTaintIssue.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── prefix/
│ │ │ │ │ ├── FileTreeMatcher.java
│ │ │ │ │ ├── ReversePathTree.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── storage/
│ │ │ │ ├── EntityMapper.java
│ │ │ │ ├── HotspotReviewStatusBinding.java
│ │ │ │ ├── InstantBinding.java
│ │ │ │ ├── IssueSeverityBinding.java
│ │ │ │ ├── IssueStatusBinding.java
│ │ │ │ ├── IssueTypeBinding.java
│ │ │ │ ├── NewCodeDefinitionStorage.java
│ │ │ │ ├── OrganizationStorage.java
│ │ │ │ ├── PluginsStorage.java
│ │ │ │ ├── ProjectServerIssueStore.java
│ │ │ │ ├── ProjectStoragePaths.java
│ │ │ │ ├── ProtobufFileUtil.java
│ │ │ │ ├── RWLock.java
│ │ │ │ ├── ServerFindingRepository.java
│ │ │ │ ├── ServerFindingType.java
│ │ │ │ ├── ServerInfoStorage.java
│ │ │ │ ├── ServerIssueStoresManager.java
│ │ │ │ ├── SmartNotificationsStorage.java
│ │ │ │ ├── StorageException.java
│ │ │ │ ├── StorageUtils.java
│ │ │ │ ├── TarGzUtils.java
│ │ │ │ ├── UpdateSummary.java
│ │ │ │ ├── UserStorage.java
│ │ │ │ ├── UuidBinding.java
│ │ │ │ └── package-info.java
│ │ │ └── proto/
│ │ │ └── sonarlint.proto
│ │ └── test/
│ │ ├── java/
│ │ │ ├── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── sonarlint/
│ │ │ │ └── core/
│ │ │ │ └── serverconnection/
│ │ │ │ ├── AnalyzerConfigurationStorageTests.java
│ │ │ │ ├── DownloadExceptionTests.java
│ │ │ │ ├── FileUtilsTests.java
│ │ │ │ ├── HotspotDownloaderTests.java
│ │ │ │ ├── IssueDownloaderTests.java
│ │ │ │ ├── IssueStorePathsTests.java
│ │ │ │ ├── ProjectBindingTests.java
│ │ │ │ ├── ProjectStoragePathsTests.java
│ │ │ │ ├── ServerHotspotUpdaterTests.java
│ │ │ │ ├── ServerInfoSynchronizerTests.java
│ │ │ │ ├── ServerIssueUpdaterTests.java
│ │ │ │ ├── ServerVersionAndStatusCheckerTests.java
│ │ │ │ ├── StorageExceptionTests.java
│ │ │ │ ├── TaintIssueDownloaderTests.java
│ │ │ │ ├── UserSynchronizerTests.java
│ │ │ │ ├── VersionUtilsTests.java
│ │ │ │ ├── aicodefix/
│ │ │ │ │ └── AiCodeFixRepositoryTest.java
│ │ │ │ ├── issues/
│ │ │ │ │ ├── KnownFindingsRepositoryTests.java
│ │ │ │ │ ├── LocalOnlyIssuesRepositoryTests.java
│ │ │ │ │ └── ServerIssueTests.java
│ │ │ │ ├── prefix/
│ │ │ │ │ ├── FileTreeMatcherTests.java
│ │ │ │ │ └── ReversePathTreeTests.java
│ │ │ │ └── storage/
│ │ │ │ ├── EntityMapperTests.java
│ │ │ │ ├── NewCodeDefinitionStorageTests.java
│ │ │ │ ├── PluginsStorageTests.java
│ │ │ │ ├── ProtobufFileUtilTests.java
│ │ │ │ ├── ServerFindingRepositoryTests.java
│ │ │ │ ├── ServerHotspotFixtures.java
│ │ │ │ └── ServerIssueFixtures.java
│ │ │ └── testutils/
│ │ │ └── MockWebServerExtensionWithProtobuf.java
│ │ └── resources/
│ │ └── logback-test.xml
│ └── telemetry/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── telemetry/
│ │ ├── InternalDebug.java
│ │ ├── TelemetryAnalysisReportingCounter.java
│ │ ├── TelemetryAnalyzerPerformance.java
│ │ ├── TelemetryConnectionAttributes.java
│ │ ├── TelemetryFindingsFilteredCounter.java
│ │ ├── TelemetryFixSuggestionReceivedCounter.java
│ │ ├── TelemetryFixSuggestionResolvedStatus.java
│ │ ├── TelemetryHelpAndFeedbackCounter.java
│ │ ├── TelemetryHttpClient.java
│ │ ├── TelemetryLiveAttributes.java
│ │ ├── TelemetryLocalStorage.java
│ │ ├── TelemetryLocalStorageManager.java
│ │ ├── TelemetryManager.java
│ │ ├── TelemetryNotificationsCounter.java
│ │ ├── TelemetryServerAttributes.java
│ │ ├── TelemetryUtils.java
│ │ ├── ToolCallCounter.java
│ │ ├── common/
│ │ │ ├── TelemetryUserSetting.java
│ │ │ └── package-info.java
│ │ ├── gessie/
│ │ │ ├── GessieHttpClient.java
│ │ │ ├── GessieService.java
│ │ │ ├── event/
│ │ │ │ ├── GessieEvent.java
│ │ │ │ ├── GessieMetadata.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── payload/
│ │ │ │ ├── MessagePayload.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ ├── measures/
│ │ │ └── payload/
│ │ │ ├── TelemetryMeasuresBuilder.java
│ │ │ ├── TelemetryMeasuresDimension.java
│ │ │ ├── TelemetryMeasuresPayload.java
│ │ │ ├── TelemetryMeasuresValue.java
│ │ │ ├── TelemetryMeasuresValueGranularity.java
│ │ │ ├── TelemetryMeasuresValueType.java
│ │ │ └── package-info.java
│ │ ├── package-info.java
│ │ └── payload/
│ │ ├── HotspotPayload.java
│ │ ├── IssuePayload.java
│ │ ├── ShareConnectedModePayload.java
│ │ ├── ShowHotspotPayload.java
│ │ ├── ShowIssuePayload.java
│ │ ├── TaintVulnerabilitiesPayload.java
│ │ ├── TelemetryAnalyzerPerformancePayload.java
│ │ ├── TelemetryFixSuggestionPayload.java
│ │ ├── TelemetryFixSuggestionResolvedPayload.java
│ │ ├── TelemetryHelpAndFeedbackPayload.java
│ │ ├── TelemetryNotificationsCounterPayload.java
│ │ ├── TelemetryNotificationsPayload.java
│ │ ├── TelemetryPayload.java
│ │ ├── TelemetryRulesPayload.java
│ │ ├── cayc/
│ │ │ ├── CleanAsYouCodePayload.java
│ │ │ ├── NewCodeFocusPayload.java
│ │ │ └── package-info.java
│ │ └── package-info.java
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── telemetry/
│ │ ├── TelemetryHttpClientTests.java
│ │ ├── TelemetryLocalStorageManagerTests.java
│ │ ├── TelemetryLocalStorageTests.java
│ │ ├── TelemetryManagerTests.java
│ │ ├── TelemetryUtilsTests.java
│ │ ├── gessie/
│ │ │ ├── GessieHttpClientTests.java
│ │ │ └── event/
│ │ │ └── GessieMetadataTests.java
│ │ └── payload/
│ │ ├── TelemetryMeasuresPayloadTests.java
│ │ └── TelemetryPayloadTests.java
│ └── resources/
│ └── response/
│ └── gessie/
│ └── GessieHttpClientTest/
│ ├── GessieRequest.json
│ └── InvalidRequest.json
├── buildSrc/
│ ├── README.md
│ └── maven-shade-ext-bnd-transformer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── org/
│ └── sonarsource/
│ └── sonarlint/
│ └── maven/
│ └── shade/
│ └── ext/
│ └── ManifestBndTransformer.java
├── client/
│ ├── java-client-dependencies/
│ │ └── pom.xml
│ ├── java-client-osgi/
│ │ ├── java-client-osgi-sources.bnd
│ │ ├── java-client-osgi.bnd
│ │ ├── pom.xml
│ │ └── shared.bnd
│ ├── java-client-utils/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── sonarlint/
│ │ │ └── core/
│ │ │ └── client/
│ │ │ └── utils/
│ │ │ ├── CleanCodeAttribute.java
│ │ │ ├── CleanCodeAttributeCategory.java
│ │ │ ├── ClientFileExclusions.java
│ │ │ ├── ClientLogOutput.java
│ │ │ ├── DateUtils.java
│ │ │ ├── DependencyRiskTransitionStatus.java
│ │ │ ├── GitUtils.java
│ │ │ ├── HotspotStatus.java
│ │ │ ├── ImpactSeverity.java
│ │ │ ├── IssueResolutionStatus.java
│ │ │ ├── Language.java
│ │ │ ├── SoftwareQuality.java
│ │ │ └── package-info.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── client/
│ │ └── utils/
│ │ ├── CleanCodeAttributeCategoryTests.java
│ │ ├── CleanCodeAttributeTests.java
│ │ ├── ClientFileExclusionsTests.java
│ │ ├── DateUtilsTests.java
│ │ ├── DependencyRiskTransitionStatusTest.java
│ │ ├── GitUtilsTests.java
│ │ ├── HotspotStatusTest.java
│ │ ├── ImpactSeverityTests.java
│ │ ├── IssueResolutionStatusTest.java
│ │ ├── LanguageTests.java
│ │ └── SoftwareQualityTests.java
│ ├── pom.xml
│ └── rpc-java-client/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── rpc/
│ │ └── client/
│ │ ├── ClientJsonRpcLauncher.java
│ │ ├── ConfigScopeNotFoundException.java
│ │ ├── ConnectionNotFoundException.java
│ │ ├── Sloop.java
│ │ ├── SloopLauncher.java
│ │ ├── SonarLintCancelChecker.java
│ │ ├── SonarLintRpcClientDelegate.java
│ │ ├── SonarLintRpcClientImpl.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── org/
│ └── sonarsource/
│ └── sonarlint/
│ └── core/
│ └── rpc/
│ └── client/
│ ├── SloopLauncherTests.java
│ └── SonarLintRpcClientImplTest.java
├── doc/
│ └── analyzer_management.md
├── docs/
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── contributing.md
│ └── decisions/
│ ├── 0000-move-more-responsibilities-to-the-core.md
│ ├── 0001-implement-binding-suggestions-in-the-core.md
│ ├── 0002-manage-http-client-in-core.md
│ └── template.md
├── its/
│ ├── README.md
│ ├── plugins/
│ │ ├── custom-sensor-plugin/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── sonarsource/
│ │ │ │ └── plugins/
│ │ │ │ └── example/
│ │ │ │ ├── ExamplePlugin.java
│ │ │ │ ├── FooLintRulesDefinition.java
│ │ │ │ └── OneIssuePerLineSensor.java
│ │ │ └── resources/
│ │ │ └── example/
│ │ │ └── foolint-rules.xml
│ │ ├── global-extension-plugin/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── sonarsource/
│ │ │ └── plugins/
│ │ │ └── example/
│ │ │ ├── GlobalExtension.java
│ │ │ ├── GlobalExtensionPlugin.java
│ │ │ ├── GlobalLanguage.java
│ │ │ ├── GlobalRulesDefinition.java
│ │ │ ├── GlobalSensor.java
│ │ │ └── GlobalSonarWayProfile.java
│ │ └── java-custom-rules/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── sonar/
│ │ │ └── samples/
│ │ │ └── java/
│ │ │ ├── MyJavaFileCheckRegistrar.java
│ │ │ ├── MyJavaRulesDefinition.java
│ │ │ ├── MyJavaRulesPlugin.java
│ │ │ ├── RulesList.java
│ │ │ └── checks/
│ │ │ └── AvoidAnnotationRule.java
│ │ └── resources/
│ │ └── org/
│ │ └── sonar/
│ │ └── l10n/
│ │ └── java/
│ │ └── rules/
│ │ └── java/
│ │ ├── AvoidAnnotation.html
│ │ └── AvoidAnnotation.json
│ ├── pom.xml
│ └── tests/
│ ├── pom.xml
│ ├── projects/
│ │ ├── sample-apex/
│ │ │ └── src/
│ │ │ └── file.cls
│ │ ├── sample-c/
│ │ │ └── src/
│ │ │ ├── file.c
│ │ │ └── foo.h
│ │ ├── sample-cloudformation/
│ │ │ └── src/
│ │ │ └── sample.yaml
│ │ ├── sample-cobol/
│ │ │ ├── copybooks/
│ │ │ │ ├── Attr.cpy
│ │ │ │ ├── Custmas.cpy
│ │ │ │ ├── Errparm.cpy
│ │ │ │ └── MNTSET2.CPY
│ │ │ └── src/
│ │ │ └── Custmnt2.cbl
│ │ ├── sample-custom-secrets/
│ │ │ └── src/
│ │ │ └── file.md
│ │ ├── sample-dbd/
│ │ │ └── src/
│ │ │ └── hello.py
│ │ ├── sample-docker/
│ │ │ └── src/
│ │ │ └── Dockerfile
│ │ ├── sample-global-extension/
│ │ │ └── src/
│ │ │ └── foo.glob
│ │ ├── sample-go/
│ │ │ └── src/
│ │ │ └── sample.go
│ │ ├── sample-java/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── foo/
│ │ │ └── Foo.java
│ │ ├── sample-java-custom/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── foo/
│ │ │ └── Foo.java
│ │ ├── sample-java-hotspot/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── foo/
│ │ │ └── Foo.java
│ │ ├── sample-java-taint/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── foo/
│ │ │ ├── DbHelper.java
│ │ │ └── Endpoint.java
│ │ ├── sample-javascript/
│ │ │ └── src/
│ │ │ └── Person.js
│ │ ├── sample-jcl/
│ │ │ └── GAM0VCDB.jcl
│ │ ├── sample-kotlin/
│ │ │ └── src/
│ │ │ └── hello.kt
│ │ ├── sample-kubernetes/
│ │ │ └── src/
│ │ │ └── sample.yaml
│ │ ├── sample-language-mix/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── foo/
│ │ │ ├── Foo.java
│ │ │ └── main.py
│ │ ├── sample-misra/
│ │ │ └── foo.cpp
│ │ ├── sample-php/
│ │ │ └── src/
│ │ │ └── Math.php
│ │ ├── sample-python/
│ │ │ └── src/
│ │ │ └── hello.py
│ │ ├── sample-ruby/
│ │ │ └── src/
│ │ │ └── hello.rb
│ │ ├── sample-sca/
│ │ │ └── pom.xml
│ │ ├── sample-scala/
│ │ │ └── src/
│ │ │ └── Hello.scala
│ │ ├── sample-terraform/
│ │ │ └── src/
│ │ │ └── sample.tf
│ │ ├── sample-tsql/
│ │ │ └── src/
│ │ │ └── file.tsql
│ │ ├── sample-typescript/
│ │ │ ├── .gitignore
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── Person.ts
│ │ │ └── tsconfig.json
│ │ ├── sample-web/
│ │ │ └── src/
│ │ │ └── file.html
│ │ └── sample-xml/
│ │ └── src/
│ │ └── foo.xml
│ └── src/
│ └── test/
│ ├── java/
│ │ └── its/
│ │ ├── AbstractConnectedTests.java
│ │ ├── FileExclusionTests.java
│ │ ├── MockSonarLintRpcClientDelegate.java
│ │ ├── SonarCloudTests.java
│ │ ├── SonarQubeCommunityEditionTests.java
│ │ ├── SonarQubeDeveloperEditionTests.java
│ │ ├── SonarQubeEnterpriseEditionTests.java
│ │ ├── StandaloneTests.java
│ │ └── utils/
│ │ ├── AnalysisUtils.java
│ │ ├── ItUtils.java
│ │ ├── LogOnTestFailure.java
│ │ ├── OrchestratorUtils.java
│ │ ├── PluginLocator.java
│ │ └── TestClientInputFile.java
│ └── resources/
│ ├── apex-sonarlint.xml
│ ├── c-sonarlint.xml
│ ├── cloudformation-sonarlint.xml
│ ├── cobol-sonarlint.xml
│ ├── cpp-misra-sonarlint.xml
│ ├── custom-secrets-sonarlint.xml
│ ├── custom-sensor.xml
│ ├── dbd-sonarlint.xml
│ ├── docker-sonarlint.xml
│ ├── global-extension.xml
│ ├── go-sonarlint.xml
│ ├── java-custom.xml
│ ├── java-sonarlint-with-hotspot.xml
│ ├── java-sonarlint-with-markdown.xml
│ ├── java-sonarlint-with-taint.xml
│ ├── java-sonarlint.xml
│ ├── javascript-sonarlint.xml
│ ├── jcl-sonarlint.xml
│ ├── kotlin-sonarlint.xml
│ ├── kubernetes-sonarlint.xml
│ ├── php-sonarlint.xml
│ ├── python-sonarlint.xml
│ ├── ruby-sonarlint.xml
│ ├── scala-sonarlint.xml
│ ├── terraform-sonarlint.xml
│ ├── tsql-sonarlint.xml
│ ├── typescript-sonarlint.xml
│ ├── web-sonarlint.xml
│ └── xml-sonarlint.xml
├── medium-tests/
│ ├── pom.xml
│ └── src/
│ └── test/
│ ├── java/
│ │ ├── mediumtest/
│ │ │ ├── BindingSuggestionsMediumTests.java
│ │ │ ├── BindingTelemetryMediumTests.java
│ │ │ ├── ConnectedHotspotMediumTests.java
│ │ │ ├── ConnectedIssueExclusionsMediumTests.java
│ │ │ ├── ConnectedIssueMediumTests.java
│ │ │ ├── ConnectedStorageProblemsMediumTests.java
│ │ │ ├── ConnectionSetupMediumTests.java
│ │ │ ├── ConnectionSuggestionMediumTests.java
│ │ │ ├── EffectiveRulesMediumTests.java
│ │ │ ├── EmbeddedServerMediumTests.java
│ │ │ ├── InitializationMediumTests.java
│ │ │ ├── MCPServerConfigurationProviderMediumTests.java
│ │ │ ├── NotebookLanguageMediumTests.java
│ │ │ ├── SharedConnectedModeSettingsMediumTests.java
│ │ │ ├── SonarLintTestHarnessMediumTests.java
│ │ │ ├── StandaloneIssueMediumTests.java
│ │ │ ├── StandaloneNoPluginMediumTests.java
│ │ │ ├── StandaloneRulesMediumTests.java
│ │ │ ├── TelemetryMediumTests.java
│ │ │ ├── ai/
│ │ │ │ └── ide/
│ │ │ │ ├── AiAgentMediumTests.java
│ │ │ │ └── AiHookMediumTests.java
│ │ │ ├── analysis/
│ │ │ │ ├── ActiveRulesDumpingSensor.java
│ │ │ │ ├── AnalysisCharsetMediumTests.java
│ │ │ │ ├── AnalysisForcedByClientMediumTests.java
│ │ │ │ ├── AnalysisMediumTests.java
│ │ │ │ ├── AnalysisReadinessMediumTests.java
│ │ │ │ ├── AnalysisSchedulingMediumTests.java
│ │ │ │ ├── AnalysisTriggeringMediumTests.java
│ │ │ │ ├── NodeJsMediumTests.java
│ │ │ │ ├── PropertyDumpingSensor.java
│ │ │ │ ├── RulesInConnectedModeMediumTests.java
│ │ │ │ ├── SupportedFilePatternsMediumTests.java
│ │ │ │ ├── ToggleAutomaticAnalysisMediumTests.java
│ │ │ │ └── sensor/
│ │ │ │ ├── ThrowingSensorConstructor.java
│ │ │ │ ├── WaitingCancellationSensor.java
│ │ │ │ └── WaitingSensor.java
│ │ │ ├── branch/
│ │ │ │ └── SonarProjectBranchMediumTests.java
│ │ │ ├── connection/
│ │ │ │ ├── ConnectionGetAllProjectsMediumTests.java
│ │ │ │ ├── ConnectionGetProjectNameByKeyMediumTests.java
│ │ │ │ ├── ConnectionValidatorMediumTests.java
│ │ │ │ └── OrganizationMediumTests.java
│ │ │ ├── dogfooding/
│ │ │ │ └── DogfoodingRpcServiceMediumTests.java
│ │ │ ├── file/
│ │ │ │ ├── ClientFileExclusionsMediumTests.java
│ │ │ │ └── ConnectedFileExclusionsMediumTests.java
│ │ │ ├── fixtures/
│ │ │ │ └── LocalOnlyIssueFixtures.java
│ │ │ ├── gessie/
│ │ │ │ └── GessieIntegrationMediumTests.java
│ │ │ ├── hotspots/
│ │ │ │ ├── HotspotCheckStatusChangePermittedMediumTests.java
│ │ │ │ ├── HotspotEventsMediumTests.java
│ │ │ │ ├── HotspotLocalDetectionSupportMediumTests.java
│ │ │ │ ├── HotspotStatusChangeMediumTests.java
│ │ │ │ ├── OpenHotspotInBrowserMediumTests.java
│ │ │ │ └── OpenHotspotInIdeMediumTests.java
│ │ │ ├── http/
│ │ │ │ ├── AuthenticationMediumTests.java
│ │ │ │ ├── ProxyMediumTests.java
│ │ │ │ ├── SslMediumTests.java
│ │ │ │ └── TimeoutMediumTests.java
│ │ │ ├── issues/
│ │ │ │ ├── AnalyzeFileListMediumTests.java
│ │ │ │ ├── CheckAnticipatedStatusChangeSupportedMediumTests.java
│ │ │ │ ├── CheckResolutionStatusChangePermittedMediumTests.java
│ │ │ │ ├── IssueEventsMediumTests.java
│ │ │ │ ├── IssuesStatusChangeMediumTests.java
│ │ │ │ ├── LocalOnlyResolvedIssuesStorageMediumTests.java
│ │ │ │ ├── OpenFixSuggestionInIdeMediumTests.java
│ │ │ │ └── OpenIssueInIdeMediumTests.java
│ │ │ ├── labs/
│ │ │ │ └── IdeLabsMediumTests.java
│ │ │ ├── log/
│ │ │ │ └── LoggingMediumTests.java
│ │ │ ├── monitoring/
│ │ │ │ ├── MonitoringMediumTests.java
│ │ │ │ └── ThrowingPhpSensor.java
│ │ │ ├── newcode/
│ │ │ │ └── NewCodeTelemetryMediumTests.java
│ │ │ ├── plugin/
│ │ │ │ ├── OnDemandAnalyzersMediumTests.java
│ │ │ │ └── PluginRpcServiceMediumTests.java
│ │ │ ├── promotion/
│ │ │ │ ├── CampaignMediumTests.java
│ │ │ │ └── ExtraEnabledLanguagesInConnectedModePromotionMediumTests.java
│ │ │ ├── remediation/
│ │ │ │ └── aicodefix/
│ │ │ │ └── AiCodeFixMediumTest.java
│ │ │ ├── rules/
│ │ │ │ ├── OkRulesDefinition.java
│ │ │ │ ├── RuleEventsMediumTests.java
│ │ │ │ ├── RuleExtractionMediumTests.java
│ │ │ │ └── ThrowingRulesDefinition.java
│ │ │ ├── sca/
│ │ │ │ ├── CheckDependencyRisksSupportedMediumTests.java
│ │ │ │ ├── DependencyRiskStatusChangeMediumTests.java
│ │ │ │ ├── DependencyRisksMediumTests.java
│ │ │ │ └── OpenDependencyRiskInBrowserMediumTests.java
│ │ │ ├── server/
│ │ │ │ └── events/
│ │ │ │ └── ServerSentEventsMediumTests.java
│ │ │ ├── sloop/
│ │ │ │ ├── JreLocator.java
│ │ │ │ ├── ProcessUtils.java
│ │ │ │ ├── SloopDistLocator.java
│ │ │ │ ├── SloopLauncherTests.java
│ │ │ │ ├── SloopLauncherWithJreTests.java
│ │ │ │ └── UnArchiveUtils.java
│ │ │ ├── smartnotifications/
│ │ │ │ └── SmartNotificationsMediumTests.java
│ │ │ ├── sonarcodecontext/
│ │ │ │ └── SonarCodeContextMediumTests.java
│ │ │ ├── synchronization/
│ │ │ │ ├── BranchSpecificSynchronizationMediumTests.java
│ │ │ │ ├── ConnectionSyncMediumTests.java
│ │ │ │ ├── PluginSynchronizationMediumTests.java
│ │ │ │ ├── RuleSetSynchronizationMediumTests.java
│ │ │ │ ├── ServerInfoSynchronizationMediumTests.java
│ │ │ │ ├── TaintVulnerabilitySynchronizationMediumTests.java
│ │ │ │ └── UserSynchronizationMediumTests.java
│ │ │ ├── taint/
│ │ │ │ └── vulnerabilities/
│ │ │ │ ├── TaintVulnerabilitiesMediumTests.java
│ │ │ │ └── TaintVulnerabilityEventsMediumTests.java
│ │ │ ├── tracking/
│ │ │ │ ├── IssueStreamingRulesDefinition.java
│ │ │ │ ├── IssueStreamingSensor.java
│ │ │ │ ├── IssueTrackingMediumTests.java
│ │ │ │ └── SecurityHotspotTrackingMediumTests.java
│ │ │ └── websockets/
│ │ │ └── WebSocketMediumTests.java
│ │ └── utils/
│ │ ├── AnalysisUtils.java
│ │ ├── JuliSLF4JDelegatingLog.java
│ │ ├── MockWebServerExtensionWithProtobuf.java
│ │ ├── OnDiskTestClientInputFile.java
│ │ ├── PluginLocator.java
│ │ ├── TestPlugin.java
│ │ └── ThreadLeakDetector.java
│ ├── projects/
│ │ ├── java-with-bytecode/
│ │ │ └── src/
│ │ │ └── Foo.java
│ │ └── windows-shortcut/
│ │ ├── hello.py
│ │ ├── hello.py.lnk
│ │ └── hellp.py.fake.lnk
│ └── resources/
│ ├── META-INF/
│ │ └── services/
│ │ ├── org.apache.juli.logging.Log
│ │ └── org.junit.jupiter.api.extension.Extension
│ ├── file-with-utf8-bom.js
│ ├── logback-test.xml
│ ├── response/
│ │ └── gessie/
│ │ └── GessieIntegrationMediumTests/
│ │ └── GessieRequest.json
│ └── ssl/
│ ├── README.md
│ ├── ca-client-auth.crt
│ ├── ca-client-auth.key
│ ├── ca.crt
│ ├── ca.key
│ ├── client.csr
│ ├── client.key
│ ├── client.p12
│ ├── client.pem
│ ├── openssl-client-auth.conf
│ ├── openssl.conf
│ ├── server-with-client-ca.p12
│ ├── server.csr
│ ├── server.jks
│ ├── server.key
│ ├── server.p12
│ ├── server.pem
│ └── v3.ext
├── mise.toml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── report-aggregate/
│ └── pom.xml
├── rpc-protocol/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── rpc/
│ │ └── protocol/
│ │ ├── Lsp4jUtils.java
│ │ ├── RpcErrorHandler.java
│ │ ├── SingleThreadedMessageConsumer.java
│ │ ├── SonarLintLauncherBuilder.java
│ │ ├── SonarLintRpcClient.java
│ │ ├── SonarLintRpcErrorCode.java
│ │ ├── SonarLintRpcServer.java
│ │ ├── adapter/
│ │ │ ├── CustomEitherAdapterFactory.java
│ │ │ ├── DurationTypeAdapter.java
│ │ │ ├── EitherCredentialsAdapterFactory.java
│ │ │ ├── EitherProgressNotificationAdapterFactory.java
│ │ │ ├── EitherRuleDescriptionAdapterFactory.java
│ │ │ ├── EitherRuleDescriptionTabContentAdapterFactory.java
│ │ │ ├── EitherSonarQubeSonarCloudConnectionAdapterFactory.java
│ │ │ ├── EitherSonarQubeSonarCloudConnectionParamsAdapterFactory.java
│ │ │ ├── EitherStandardOrMQRModeAdapterFactory.java
│ │ │ ├── EitherTransientConnectionAdapterFactory.java
│ │ │ ├── EitherTypeAdapter.java
│ │ │ ├── InstantTypeAdapter.java
│ │ │ ├── OffsetDateTimeAdapter.java
│ │ │ ├── PathTypeAdapter.java
│ │ │ ├── UriTypeAdapter.java
│ │ │ ├── UuidTypeAdapter.java
│ │ │ └── package-info.java
│ │ ├── backend/
│ │ │ ├── ai/
│ │ │ │ ├── AiAgent.java
│ │ │ │ ├── AiAgentRpcService.java
│ │ │ │ ├── GetHookScriptContentParams.java
│ │ │ │ ├── GetHookScriptContentResponse.java
│ │ │ │ ├── GetRuleFileContentParams.java
│ │ │ │ ├── GetRuleFileContentResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── analysis/
│ │ │ │ ├── AnalysisRpcService.java
│ │ │ │ ├── AnalyzeFileListParams.java
│ │ │ │ ├── AnalyzeFilesAndTrackParams.java
│ │ │ │ ├── AnalyzeFilesResponse.java
│ │ │ │ ├── AnalyzeFullProjectParams.java
│ │ │ │ ├── AnalyzeOpenFilesParams.java
│ │ │ │ ├── AnalyzeVCSChangedFilesParams.java
│ │ │ │ ├── DidChangeAnalysisPropertiesParams.java
│ │ │ │ ├── DidChangeAutomaticAnalysisSettingParams.java
│ │ │ │ ├── DidChangeClientNodeJsPathParams.java
│ │ │ │ ├── DidChangePathToCompileCommandsParams.java
│ │ │ │ ├── ForceAnalyzeResponse.java
│ │ │ │ ├── GetAutoDetectedNodeJsResponse.java
│ │ │ │ ├── GetForcedNodeJsResponse.java
│ │ │ │ ├── GetSupportedFilePatternsParams.java
│ │ │ │ ├── GetSupportedFilePatternsResponse.java
│ │ │ │ ├── NodeJsDetailsDto.java
│ │ │ │ ├── ShouldUseEnterpriseCSharpAnalyzerParams.java
│ │ │ │ ├── ShouldUseEnterpriseCSharpAnalyzerResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── binding/
│ │ │ │ ├── BindingRpcService.java
│ │ │ │ ├── GetBindingSuggestionParams.java
│ │ │ │ ├── GetSharedConnectedModeConfigFileParams.java
│ │ │ │ ├── GetSharedConnectedModeConfigFileResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── branch/
│ │ │ │ ├── DidVcsRepositoryChangeParams.java
│ │ │ │ ├── GetMatchedSonarProjectBranchParams.java
│ │ │ │ ├── GetMatchedSonarProjectBranchResponse.java
│ │ │ │ ├── SonarProjectBranchRpcService.java
│ │ │ │ └── package-info.java
│ │ │ ├── config/
│ │ │ │ ├── ConfigurationRpcService.java
│ │ │ │ ├── binding/
│ │ │ │ │ ├── BindingConfigurationDto.java
│ │ │ │ │ ├── BindingMode.java
│ │ │ │ │ ├── BindingSuggestionDto.java
│ │ │ │ │ ├── BindingSuggestionOrigin.java
│ │ │ │ │ ├── DidUpdateBindingParams.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── scope/
│ │ │ │ ├── ConfigurationScopeDto.java
│ │ │ │ ├── DidAddConfigurationScopesParams.java
│ │ │ │ ├── DidRemoveConfigurationScopeParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── connection/
│ │ │ │ ├── ConnectionRpcService.java
│ │ │ │ ├── GetConnectionSuggestionsResponse.java
│ │ │ │ ├── GetMCPServerConfigurationParams.java
│ │ │ │ ├── GetMCPServerConfigurationResponse.java
│ │ │ │ ├── auth/
│ │ │ │ │ ├── HelpGenerateUserTokenParams.java
│ │ │ │ │ ├── HelpGenerateUserTokenResponse.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── common/
│ │ │ │ │ ├── TransientSonarCloudConnectionDto.java
│ │ │ │ │ ├── TransientSonarQubeConnectionDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── DidChangeCredentialsParams.java
│ │ │ │ │ ├── DidUpdateConnectionsParams.java
│ │ │ │ │ ├── SonarCloudConnectionConfigurationDto.java
│ │ │ │ │ ├── SonarQubeConnectionConfigurationDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── org/
│ │ │ │ │ ├── FuzzySearchUserOrganizationsParams.java
│ │ │ │ │ ├── FuzzySearchUserOrganizationsResponse.java
│ │ │ │ │ ├── GetOrganizationParams.java
│ │ │ │ │ ├── GetOrganizationResponse.java
│ │ │ │ │ ├── ListUserOrganizationsParams.java
│ │ │ │ │ ├── ListUserOrganizationsResponse.java
│ │ │ │ │ ├── OrganizationDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── projects/
│ │ │ │ │ ├── FuzzySearchProjectsParams.java
│ │ │ │ │ ├── FuzzySearchProjectsResponse.java
│ │ │ │ │ ├── GetAllProjectsParams.java
│ │ │ │ │ ├── GetAllProjectsResponse.java
│ │ │ │ │ ├── GetProjectNamesByKeyParams.java
│ │ │ │ │ ├── GetProjectNamesByKeyResponse.java
│ │ │ │ │ ├── SonarProjectDto.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── validate/
│ │ │ │ ├── ValidateConnectionParams.java
│ │ │ │ ├── ValidateConnectionResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── dogfooding/
│ │ │ │ ├── DogfoodingRpcService.java
│ │ │ │ ├── IsDogfoodingEnvironmentResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── file/
│ │ │ │ ├── DidCloseFileParams.java
│ │ │ │ ├── DidOpenFileParams.java
│ │ │ │ ├── DidUpdateFileSystemParams.java
│ │ │ │ ├── FileRpcService.java
│ │ │ │ ├── FileStatusDto.java
│ │ │ │ ├── GetFilesStatusParams.java
│ │ │ │ ├── GetFilesStatusResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── hotspot/
│ │ │ │ ├── ChangeHotspotStatusParams.java
│ │ │ │ ├── CheckLocalDetectionSupportedParams.java
│ │ │ │ ├── CheckLocalDetectionSupportedResponse.java
│ │ │ │ ├── CheckStatusChangePermittedParams.java
│ │ │ │ ├── CheckStatusChangePermittedResponse.java
│ │ │ │ ├── HotspotRpcService.java
│ │ │ │ ├── HotspotStatus.java
│ │ │ │ ├── OpenHotspotInBrowserParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── initialize/
│ │ │ │ ├── BackendCapability.java
│ │ │ │ ├── ClientConstantInfoDto.java
│ │ │ │ ├── HttpConfigurationDto.java
│ │ │ │ ├── InitializeParams.java
│ │ │ │ ├── JsTsRequirementsDto.java
│ │ │ │ ├── LanguageSpecificRequirements.java
│ │ │ │ ├── OmnisharpRequirementsDto.java
│ │ │ │ ├── SonarCloudAlternativeEnvironmentDto.java
│ │ │ │ ├── SonarQubeCloudRegionDto.java
│ │ │ │ ├── SslConfigurationDto.java
│ │ │ │ ├── TelemetryClientConstantAttributesDto.java
│ │ │ │ ├── TelemetryMigrationDto.java
│ │ │ │ └── package-info.java
│ │ │ ├── issue/
│ │ │ │ ├── AddIssueCommentParams.java
│ │ │ │ ├── ChangeIssueStatusParams.java
│ │ │ │ ├── CheckAnticipatedStatusChangeSupportedParams.java
│ │ │ │ ├── CheckAnticipatedStatusChangeSupportedResponse.java
│ │ │ │ ├── CheckStatusChangePermittedParams.java
│ │ │ │ ├── CheckStatusChangePermittedResponse.java
│ │ │ │ ├── EffectiveIssueDetailsDto.java
│ │ │ │ ├── GetEffectiveIssueDetailsParams.java
│ │ │ │ ├── GetEffectiveIssueDetailsResponse.java
│ │ │ │ ├── IssueRpcService.java
│ │ │ │ ├── ReopenAllIssuesForFileParams.java
│ │ │ │ ├── ReopenAllIssuesForFileResponse.java
│ │ │ │ ├── ReopenIssueParams.java
│ │ │ │ ├── ReopenIssueResponse.java
│ │ │ │ ├── ResolutionStatus.java
│ │ │ │ └── package-info.java
│ │ │ ├── labs/
│ │ │ │ ├── IdeLabsRpcService.java
│ │ │ │ ├── JoinIdeLabsProgramParams.java
│ │ │ │ ├── JoinIdeLabsProgramResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── log/
│ │ │ │ ├── LogLevel.java
│ │ │ │ ├── LogRpcService.java
│ │ │ │ ├── SetLogLevelParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── newcode/
│ │ │ │ ├── GetNewCodeDefinitionParams.java
│ │ │ │ ├── GetNewCodeDefinitionResponse.java
│ │ │ │ ├── NewCodeRpcService.java
│ │ │ │ └── package-info.java
│ │ │ ├── plugin/
│ │ │ │ ├── ArtifactSourceDto.java
│ │ │ │ ├── GetPluginStatusesParams.java
│ │ │ │ ├── GetPluginStatusesResponse.java
│ │ │ │ ├── PluginRpcService.java
│ │ │ │ ├── PluginStateDto.java
│ │ │ │ ├── PluginStatusDto.java
│ │ │ │ └── package-info.java
│ │ │ ├── progress/
│ │ │ │ ├── CancelTaskParams.java
│ │ │ │ ├── TaskProgressRpcService.java
│ │ │ │ └── package-info.java
│ │ │ ├── remediation/
│ │ │ │ └── aicodefix/
│ │ │ │ ├── AiCodeFixRpcService.java
│ │ │ │ ├── SuggestFixChangeDto.java
│ │ │ │ ├── SuggestFixParams.java
│ │ │ │ ├── SuggestFixResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── rules/
│ │ │ │ ├── EffectiveRuleDetailsDto.java
│ │ │ │ ├── EffectiveRuleParamDto.java
│ │ │ │ ├── GetEffectiveRuleDetailsParams.java
│ │ │ │ ├── GetEffectiveRuleDetailsResponse.java
│ │ │ │ ├── GetStandaloneRuleDescriptionParams.java
│ │ │ │ ├── GetStandaloneRuleDescriptionResponse.java
│ │ │ │ ├── ImpactDto.java
│ │ │ │ ├── ListAllStandaloneRulesDefinitionsResponse.java
│ │ │ │ ├── RuleContextualSectionDto.java
│ │ │ │ ├── RuleContextualSectionWithDefaultContextKeyDto.java
│ │ │ │ ├── RuleDefinitionDto.java
│ │ │ │ ├── RuleDescriptionTabDto.java
│ │ │ │ ├── RuleMonolithicDescriptionDto.java
│ │ │ │ ├── RuleNonContextualSectionDto.java
│ │ │ │ ├── RuleParamDefinitionDto.java
│ │ │ │ ├── RuleParamType.java
│ │ │ │ ├── RuleSplitDescriptionDto.java
│ │ │ │ ├── RulesRpcService.java
│ │ │ │ ├── StandaloneRuleConfigDto.java
│ │ │ │ ├── UpdateStandaloneRulesConfigurationParams.java
│ │ │ │ ├── VulnerabilityProbability.java
│ │ │ │ └── package-info.java
│ │ │ ├── sca/
│ │ │ │ ├── ChangeDependencyRiskStatusParams.java
│ │ │ │ ├── CheckDependencyRiskSupportedParams.java
│ │ │ │ ├── CheckDependencyRiskSupportedResponse.java
│ │ │ │ ├── DependencyRiskRpcService.java
│ │ │ │ ├── DependencyRiskTransition.java
│ │ │ │ ├── ListAllDependencyRisksResponse.java
│ │ │ │ ├── OpenDependencyRiskInBrowserParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── telemetry/
│ │ │ │ ├── GetStatusResponse.java
│ │ │ │ ├── TelemetryRpcService.java
│ │ │ │ └── package-info.java
│ │ │ └── tracking/
│ │ │ ├── AffectedPackageDto.java
│ │ │ ├── DependencyRiskDto.java
│ │ │ ├── ListAllParams.java
│ │ │ ├── ListAllResponse.java
│ │ │ ├── RecommendationDetailsDto.java
│ │ │ ├── TaintVulnerabilityDto.java
│ │ │ ├── TaintVulnerabilityTrackingRpcService.java
│ │ │ ├── TextRangeWithHashDto.java
│ │ │ └── package-info.java
│ │ ├── client/
│ │ │ ├── OpenUrlInBrowserParams.java
│ │ │ ├── analysis/
│ │ │ │ ├── DidChangeAnalysisReadinessParams.java
│ │ │ │ ├── DidDetectSecretParams.java
│ │ │ │ ├── FileEditDto.java
│ │ │ │ ├── GetFileExclusionsParams.java
│ │ │ │ ├── GetFileExclusionsResponse.java
│ │ │ │ ├── GetInferredAnalysisPropertiesParams.java
│ │ │ │ ├── GetInferredAnalysisPropertiesResponse.java
│ │ │ │ ├── QuickFixDto.java
│ │ │ │ ├── RawIssueDto.java
│ │ │ │ ├── RawIssueFlowDto.java
│ │ │ │ ├── RawIssueLocationDto.java
│ │ │ │ ├── TextEditDto.java
│ │ │ │ └── package-info.java
│ │ │ ├── binding/
│ │ │ │ ├── AssistBindingParams.java
│ │ │ │ ├── AssistBindingResponse.java
│ │ │ │ ├── GetBindingSuggestionsResponse.java
│ │ │ │ ├── NoBindingSuggestionFoundParams.java
│ │ │ │ ├── SuggestBindingParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── branch/
│ │ │ │ ├── DidChangeMatchedSonarProjectBranchParams.java
│ │ │ │ ├── MatchProjectBranchParams.java
│ │ │ │ ├── MatchProjectBranchResponse.java
│ │ │ │ ├── MatchSonarProjectBranchParams.java
│ │ │ │ ├── MatchSonarProjectBranchResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── connection/
│ │ │ │ ├── AssistCreatingConnectionParams.java
│ │ │ │ ├── AssistCreatingConnectionResponse.java
│ │ │ │ ├── ConnectionSuggestionDto.java
│ │ │ │ ├── GetConnectionSuggestionsParams.java
│ │ │ │ ├── GetCredentialsParams.java
│ │ │ │ ├── GetCredentialsResponse.java
│ │ │ │ ├── SonarCloudConnectionParams.java
│ │ │ │ ├── SonarCloudConnectionSuggestionDto.java
│ │ │ │ ├── SonarQubeConnectionParams.java
│ │ │ │ ├── SonarQubeConnectionSuggestionDto.java
│ │ │ │ ├── SuggestConnectionParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── embeddedserver/
│ │ │ │ ├── EmbeddedServerStartedParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── event/
│ │ │ │ ├── DidReceiveServerHotspotEvent.java
│ │ │ │ └── package-info.java
│ │ │ ├── fix/
│ │ │ │ ├── ChangesDto.java
│ │ │ │ ├── FileEditDto.java
│ │ │ │ ├── FixSuggestionDto.java
│ │ │ │ ├── LineRangeDto.java
│ │ │ │ ├── ShowFixSuggestionParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── fs/
│ │ │ │ ├── GetBaseDirParams.java
│ │ │ │ ├── GetBaseDirResponse.java
│ │ │ │ ├── ListFilesParams.java
│ │ │ │ ├── ListFilesResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── hotspot/
│ │ │ │ ├── HotspotDetailsDto.java
│ │ │ │ ├── RaiseHotspotsParams.java
│ │ │ │ ├── RaisedHotspotDto.java
│ │ │ │ ├── ShowHotspotParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── http/
│ │ │ │ ├── CheckServerTrustedParams.java
│ │ │ │ ├── CheckServerTrustedResponse.java
│ │ │ │ ├── GetProxyPasswordAuthenticationParams.java
│ │ │ │ ├── GetProxyPasswordAuthenticationResponse.java
│ │ │ │ ├── ProxyDto.java
│ │ │ │ ├── SelectProxiesParams.java
│ │ │ │ ├── SelectProxiesResponse.java
│ │ │ │ ├── X509CertificateDto.java
│ │ │ │ └── package-info.java
│ │ │ ├── info/
│ │ │ │ ├── GetClientLiveInfoResponse.java
│ │ │ │ └── package-info.java
│ │ │ ├── issue/
│ │ │ │ ├── FileEditDto.java
│ │ │ │ ├── IssueDetailsDto.java
│ │ │ │ ├── IssueFlowDto.java
│ │ │ │ ├── IssueLocationDto.java
│ │ │ │ ├── QuickFixDto.java
│ │ │ │ ├── RaiseIssuesParams.java
│ │ │ │ ├── RaisedFindingDto.java
│ │ │ │ ├── RaisedIssueDto.java
│ │ │ │ ├── ShowIssueParams.java
│ │ │ │ ├── TextEditDto.java
│ │ │ │ └── package-info.java
│ │ │ ├── log/
│ │ │ │ ├── LogLevel.java
│ │ │ │ ├── LogParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── message/
│ │ │ │ ├── MessageActionItem.java
│ │ │ │ ├── MessageType.java
│ │ │ │ ├── ShowMessageParams.java
│ │ │ │ ├── ShowMessageRequestParams.java
│ │ │ │ ├── ShowMessageRequestResponse.java
│ │ │ │ ├── ShowSoonUnsupportedMessageParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ ├── plugin/
│ │ │ │ ├── DidChangePluginStatusesParams.java
│ │ │ │ ├── DidSkipLoadingPluginParams.java
│ │ │ │ ├── DidUpdatePluginsParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── progress/
│ │ │ │ ├── ProgressEndNotification.java
│ │ │ │ ├── ProgressUpdateNotification.java
│ │ │ │ ├── ReportProgressParams.java
│ │ │ │ ├── StartProgressParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── promotion/
│ │ │ │ ├── PromoteExtraEnabledLanguagesInConnectedModeParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── sca/
│ │ │ │ ├── DidChangeDependencyRisksParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── smartnotification/
│ │ │ │ ├── ShowSmartNotificationParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── sync/
│ │ │ │ ├── DidSynchronizeConfigurationScopeParams.java
│ │ │ │ ├── InvalidTokenParams.java
│ │ │ │ └── package-info.java
│ │ │ ├── taint/
│ │ │ │ └── vulnerability/
│ │ │ │ ├── DidChangeTaintVulnerabilitiesParams.java
│ │ │ │ └── package-info.java
│ │ │ └── telemetry/
│ │ │ ├── AcceptedBindingSuggestionParams.java
│ │ │ ├── AddQuickFixAppliedForRuleParams.java
│ │ │ ├── AddReportedRulesParams.java
│ │ │ ├── AiSuggestionSource.java
│ │ │ ├── AnalysisDoneOnSingleLanguageParams.java
│ │ │ ├── AnalysisReportingTriggeredParams.java
│ │ │ ├── AnalysisReportingType.java
│ │ │ ├── DevNotificationsClickedParams.java
│ │ │ ├── FindingsFilteredParams.java
│ │ │ ├── FixSuggestionResolvedParams.java
│ │ │ ├── FixSuggestionStatus.java
│ │ │ ├── HelpAndFeedbackClickedParams.java
│ │ │ ├── IdeLabsExternalLinkClickedParams.java
│ │ │ ├── IdeLabsFeedbackLinkClickedParams.java
│ │ │ ├── McpTransportMode.java
│ │ │ ├── McpTransportModeUsedParams.java
│ │ │ ├── TelemetryClientLiveAttributesResponse.java
│ │ │ ├── ToggleIdeLabsEnablementParams.java
│ │ │ ├── ToolCalledParams.java
│ │ │ └── package-info.java
│ │ ├── common/
│ │ │ ├── CleanCodeAttribute.java
│ │ │ ├── CleanCodeAttributeCategory.java
│ │ │ ├── ClientFileDto.java
│ │ │ ├── Either.java
│ │ │ ├── FlowDto.java
│ │ │ ├── ImpactSeverity.java
│ │ │ ├── IssueSeverity.java
│ │ │ ├── Language.java
│ │ │ ├── LocationDto.java
│ │ │ ├── MQRModeDetails.java
│ │ │ ├── RuleType.java
│ │ │ ├── SoftwareQuality.java
│ │ │ ├── SonarCloudRegion.java
│ │ │ ├── StandardModeDetails.java
│ │ │ ├── TextRangeDto.java
│ │ │ ├── TokenDto.java
│ │ │ ├── UsernamePasswordDto.java
│ │ │ └── package-info.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── org/
│ └── sonarsource/
│ └── sonarlint/
│ └── core/
│ └── rpc/
│ └── protocol/
│ ├── backend/
│ │ ├── config/
│ │ │ └── binding/
│ │ │ └── DidUpdateBindingParamsTests.java
│ │ ├── connection/
│ │ │ └── projects/
│ │ │ └── SonarProjectDtoTest.java
│ │ └── initialize/
│ │ ├── InitializeParamsTests.java
│ │ └── TelemetryClientConstantAttributesDtoTests.java
│ ├── client/
│ │ └── binding/
│ │ └── AssistBindingParamsTests.java
│ └── common/
│ ├── EitherTests.java
│ ├── TokenDtoTests.java
│ └── UsernamePasswordDtoTests.java
├── spec/
│ ├── README.adoc
│ ├── connected_mode/
│ │ ├── README.adoc
│ │ ├── binding_suggestion.adoc
│ │ └── synchronization/
│ │ ├── README.adoc
│ │ ├── overview.adoc
│ │ └── pull_synchronization.adoc
│ ├── glossary.adoc
│ ├── issue_tracking.adoc
│ ├── rpc/
│ │ └── json_rpc.adoc
│ └── smart_notifications.adoc
├── test-utils/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── org/
│ │ └── sonarsource/
│ │ └── sonarlint/
│ │ └── core/
│ │ └── test/
│ │ └── utils/
│ │ ├── ProtobufUtils.java
│ │ ├── SonarLintBackendFixture.java
│ │ ├── SonarLintTestRpcServer.java
│ │ ├── junit5/
│ │ │ ├── SonarLintTest.java
│ │ │ ├── SonarLintTestHarness.java
│ │ │ └── package-info.java
│ │ ├── package-info.java
│ │ ├── plugins/
│ │ │ ├── Plugin.java
│ │ │ ├── SonarPluginBuilder.java
│ │ │ ├── package-info.java
│ │ │ └── src/
│ │ │ ├── DefaultPlugin.java
│ │ │ ├── DefaultRulesDefinition.java
│ │ │ ├── DefaultSensor.java
│ │ │ └── package-info.java
│ │ ├── server/
│ │ │ ├── ServerFixture.java
│ │ │ ├── package-info.java
│ │ │ ├── sse/
│ │ │ │ ├── SSEServer.java
│ │ │ │ ├── SSEServlet.java
│ │ │ │ └── package-info.java
│ │ │ └── websockets/
│ │ │ ├── ContextListener.java
│ │ │ ├── RequestListener.java
│ │ │ ├── ServletAwareConfig.java
│ │ │ ├── WebSocketConnection.java
│ │ │ ├── WebSocketConnectionRepository.java
│ │ │ ├── WebSocketEndpoint.java
│ │ │ ├── WebSocketRequest.java
│ │ │ ├── WebSocketServer.java
│ │ │ └── package-info.java
│ │ └── storage/
│ │ ├── AiCodeFixFixtures.java
│ │ ├── ConfigurationScopeStorageFixture.java
│ │ ├── ProjectStorageFixture.java
│ │ ├── ServerDependencyRiskFixtures.java
│ │ ├── ServerIssueFixtures.java
│ │ ├── ServerSecurityHotspotFixture.java
│ │ ├── ServerTaintIssueFixtures.java
│ │ ├── StorageFixture.java
│ │ ├── TestDatabase.java
│ │ └── package-info.java
│ └── test/
│ └── java/
│ └── org/
│ └── sonarsource/
│ └── sonarlint/
│ └── core/
│ └── test/
│ └── utils/
│ └── SonarLintTestRpcServerTest.java
└── third-party-licenses.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.pb binary
================================================
FILE: .github/CODEOWNERS
================================================
.github/CODEOWNERS @SonarSource/remediation-ide-experience-squad
================================================
FILE: .github/renovate.json
================================================
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"github>SonarSource/renovate-config:ide-xp-team"
]
}
================================================
FILE: .github/workflows/PullRequestClosed.yml
================================================
name: Pull Request Closed
on:
pull_request:
types: [closed]
jobs:
PullRequestClosed_job:
name: Pull Request Closed
runs-on: sonar-xs-public
permissions:
id-token: write
pull-requests: read
# For external PR, ticket should be moved manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/PullRequestClosed@v2
with:
github-token: ${{secrets.GITHUB_TOKEN}}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}
================================================
FILE: .github/workflows/PullRequestCreated.yml
================================================
name: Pull Request Created
on:
pull_request:
types: ["opened"]
jobs:
PullRequestCreated_job:
name: Pull Request Created
runs-on: sonar-xs-public
permissions:
id-token: write
# For external PR, ticket should be created manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/github/token/{REPO_OWNER_NAME_DASH}-jira token | GITHUB_TOKEN;
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/PullRequestCreated@v2
with:
github-token: ${{ fromJSON(steps.secrets.outputs.vault).GITHUB_TOKEN }}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}
jira-project: SLCORE
================================================
FILE: .github/workflows/RequestReview.yml
================================================
name: Request review
on:
pull_request:
types: ["review_requested"]
jobs:
RequestReview_job:
name: Request review
runs-on: sonar-xs-public
permissions:
id-token: write
# For external PR, ticket should be moved manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/github/token/{REPO_OWNER_NAME_DASH}-jira token | GITHUB_TOKEN;
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/RequestReview@v2
with:
github-token: ${{ fromJSON(steps.secrets.outputs.vault).GITHUB_TOKEN }}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}
================================================
FILE: .github/workflows/SubmitReview.yml
================================================
name: Submit Review
on:
pull_request_review:
types: [submitted]
jobs:
SubmitReview_job:
name: Submit Review
runs-on: sonar-xs-public
permissions:
id-token: write
pull-requests: read
# For external PR, ticket should be moved manually
if: |
github.event.pull_request.head.repo.full_name == github.repository
&& (github.event.review.state == 'changes_requested'
|| github.event.review.state == 'approved')
steps:
- id: secrets
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/kv/data/jira user | JIRA_USER;
development/kv/data/jira token | JIRA_TOKEN;
- uses: sonarsource/gh-action-lt-backlog/SubmitReview@v2
with:
github-token: ${{secrets.GITHUB_TOKEN}}
jira-user: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
jira-token: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
push:
branches:
- master
- branch-*
- dogfood-*
pull_request:
merge_group:
workflow_dispatch:
concurrency:
group: >-
${{ github.workflow }}-
${{ github.event.pull_request.base.ref || 'push' }}-
${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
CACHE_BACKEND: s3
jobs:
build-number:
outputs:
BUILD_NUMBER: ${{ steps.build-number.outputs.BUILD_NUMBER }}
runs-on: sonar-xs-public
name: Get build number
permissions:
id-token: write
steps:
- uses: SonarSource/ci-github-actions/get-build-number@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
id: build-number
build:
runs-on: sonar-xs-public
needs: build-number
name: Build
permissions:
id-token: write
contents: write
env:
BUILD_NUMBER: ${{ needs.build-number.outputs.BUILD_NUMBER }}
outputs:
build_number: ${{ steps.build.outputs.build_number }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
with:
version: 2026.4.11
- uses: SonarSource/ci-github-actions/build-maven@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
id: build
with:
sonar-platform: none
deploy-pull-request: true
artifactory-reader-role: private-reader
artifactory-deployer-role: qa-deployer
maven-args: -T 1C -P dist-no-arch,dist-windows_x64,dist-linux_x64,dist-linux_aarch64,dist-macosx_x64,dist-macosx_aarch64 -Dmaven.test.skip=true -Dsonar.skip=true
- name: Config Maven (cache setup)
run: |
mvn -B -e -V -Pits dependency:go-offline # populate cache including ITs deps too
test-linux:
needs: [ build-number, build ]
runs-on: sonar-m-public
name: Test (Linux, Sonar Next)
permissions:
id-token: write
contents: write
env:
BUILD_NUMBER: ${{ needs.build-number.outputs.BUILD_NUMBER }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
with:
version: 2026.4.11
- name: Vault
id: secrets
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/kv/data/next url | NEXT_URL;
development/kv/data/next token | NEXT_TOKEN;
- name: Cache Sonar Scanner artifacts
id: sonar-scanner-cache
uses: SonarSource/ci-github-actions/cache@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
with:
path: ~/.sonar/cache
key: sonar-scanner-${{ runner.os }}
- uses: SonarSource/ci-github-actions/config-maven@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
id: config
with:
artifactory-reader-role: private-reader
- name: Run tests
env:
SONAR_HOST_URL: ${{ fromJSON(steps.secrets.outputs.vault).NEXT_URL }}
SONAR_TOKEN: ${{ fromJSON(steps.secrets.outputs.vault).NEXT_TOKEN }}
PROJECT_VERSION: ${{ steps.config.outputs.project-version }}
SCANNER_VERSION: 5.1.0.4751
PULL_REQUEST: ${{ github.event.pull_request.number || '' }}
run: |
mvn -B -Pcoverage -Dcommercial verify
maven_goals=("org.sonarsource.scanner.maven:sonar-maven-plugin:${SCANNER_VERSION}:sonar")
sonar_props=("-Dsonar.host.url=${SONAR_HOST_URL}" "-Dsonar.token=${SONAR_TOKEN}")
sonar_props+=("-Dsonar.projectVersion=${CURRENT_VERSION}")
sonar_props+=("-Dsonar.coverage.jacoco.aggregateXmlReportPaths=${{ github.workspace }}/report-aggregate/target/site/jacoco-aggregate/jacoco.xml")
echo "Maven command: mvn ${maven_goals[*]} ${sonar_props[*]}"
mvn -B "${maven_goals[@]}" "${sonar_props[@]}"
- name: Generate test report on failure
if: failure()
uses: dorny/test-reporter@a43b3a5f7366b97d083190328d2c652e1a8b6aa2 # v3.0.0
with:
name: QA Linux Test Report
reporter: java-junit
path: '**/target/surefire-reports/TEST-*.xml,**/target/failsafe-reports/*.xml'
list-suites: failed
list-tests: failed
fail-on-empty: false
- name: Upload failure diagnostics
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: linux-test-report
path: |
**/target/surefire-reports/**
**/target/failsafe-reports/**
test-windows:
needs: [ build-number, build ]
runs-on: github-windows-latest-m
name: Test (Windows)
permissions:
id-token: write
contents: write
env:
BUILD_NUMBER: ${{ needs.build-number.outputs.BUILD_NUMBER }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
with:
version: 2026.4.11
- uses: SonarSource/ci-github-actions/config-maven@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
id: config
with:
artifactory-reader-role: private-reader
- name: Run tests
env:
MAVEN_OPTS: -Xmx4g
PROJECT_VERSION: ${{ steps.config.outputs.project-version }}
run: |
mvn -B -Dcommercial verify
- name: Generate test report on failure
if: failure()
uses: dorny/test-reporter@a43b3a5f7366b97d083190328d2c652e1a8b6aa2 # v3.0.0
with:
name: QA Windows Test Report
reporter: java-junit
path: '**/target/surefire-reports/TEST-*.xml,**/target/failsafe-reports/*.xml'
list-suites: failed
list-tests: failed
fail-on-empty: false
- name: Upload failure diagnostics
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: windows-test-report
path: |
**/target/surefire-reports/**
**/target/failsafe-reports/**
qa:
needs: [ build-number, build ]
runs-on: sonar-m-public
name: QA (${{ matrix.name }})
permissions:
id-token: write
contents: write
env:
BUILD_NUMBER: ${{ needs.build-number.outputs.BUILD_NUMBER }}
strategy:
fail-fast: false
matrix:
include:
- name: SonarCloudEU
sq_version: SonarCloudEU
category: "-Dgroups=SonarCloud"
sc: true
sc_token_path: sonarcloud-it
region: EU
- name: SonarCloudUS
sq_version: SonarCloudUS
category: "-Dgroups=SonarCloud"
sc: true
sc_token_path: sonarcloud-it-US
region: US
- name: SQDogfood
sq_version: DEV
category: "-DexcludedGroups=SonarCloud"
- name: SQLatest
sq_version: LATEST_RELEASE
category: "-DexcludedGroups=SonarCloud"
- name: SQLts99
sq_version: "LATEST_RELEASE[9.9]"
category: "-DexcludedGroups=SonarCloud"
customOrchestratorJavaVersion: 17
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
with:
version: 2026.4.11
- name: Setup Java ${{ matrix.customOrchestratorJavaVersion }} for Orchestrator
if: matrix.customOrchestratorJavaVersion
run: |
mise install java@${{ matrix.customOrchestratorJavaVersion }}
echo "ORCHESTRATOR_JAVA_HOME=$(mise where java@${{ matrix.customOrchestratorJavaVersion }})" >> "$GITHUB_ENV"
- name: Compute month key
#Avoid caching for DEV since it is frequently changing
if: ${{ matrix.sc != true && matrix.sq_version != 'DEV' }}
id: month
shell: bash
run: |
THIS_MONTH="$(date +%Y-%m)"
echo "month=${THIS_MONTH}" >> "$GITHUB_OUTPUT"
ORCHESTRATOR_HOME="${GITHUB_WORKSPACE}/orchestrator/${THIS_MONTH}"
echo "ORCHESTRATOR_HOME=${ORCHESTRATOR_HOME}" >> "$GITHUB_ENV"
echo "Create dir ${ORCHESTRATOR_HOME} if needed"
mkdir -p "${ORCHESTRATOR_HOME}"
- uses: SonarSource/ci-github-actions/cache@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
if: ${{ matrix.sc != true && matrix.sq_version != 'DEV' }}
with:
path: ${{ github.workspace }}/orchestrator/${{ steps.month.outputs.month }}
key: cache-${{ runner.os }}-${{ steps.month.outputs.month }}-${{ matrix.name }} # Use matrix name to differentiate caches
- name: Vault (SonarCloud IT token)
if: ${{ matrix.sc == true }}
id: secrets-sc
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/team/sonarlint/kv/data/${{ matrix.sc_token_path }} token | SONARCLOUD_IT_TOKEN;
- name: Vault (GITHUB Token)
id: secrets-gh
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/github/token/licenses-ro token | GITHUB_TOKEN;
- uses: SonarSource/ci-github-actions/config-maven@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
with:
artifactory-reader-role: private-reader
- name: Run QA
if: ${{ github.event_name == 'pull_request' || github.ref_name == github.event.repository.default_branch || startsWith(github.ref_name, 'branch-') || startsWith(github.ref_name, 'dogfood-on-') }}
env:
MAVEN_OPTS: -Xmx4g
SONARCLOUD_IT_TOKEN: ${{ steps.secrets-sc.outputs.vault && fromJSON(steps.secrets-sc.outputs.vault).SONARCLOUD_IT_TOKEN || '' }}
SONARCLOUD_REGION: ${{ matrix.sc && matrix.region || '' }}
GITHUB_TOKEN: ${{ fromJSON(steps.secrets-gh.outputs.vault).GITHUB_TOKEN }}
SONAR_SEARCH_JAVAADDITIONALOPTS: -XX:-UseContainerSupport
SONAR_WEB_JAVAADDITIONALOPTS: -XX:-UseContainerSupport
SONAR_CE_JAVAADDITIONALOPTS: -XX:-UseContainerSupport
run: |
mvn -f its/pom.xml -Dsonar.runtimeVersion=${{ matrix.sq_version }} ${{ matrix.category }} verify surefire-report:report
- name: Generate QA test report on failure
if: failure()
uses: dorny/test-reporter@2dcf091ad558da2cabf16f6b423e02cd078c937a
with:
name: QA ${{ matrix.name }} Test Report
reporter: java-junit
path: '**/target/surefire-reports/TEST-*.xml,**/target/failsafe-reports/*.xml'
list-suites: failed
list-tests: failed
fail-on-empty: false
- name: Upload failure diagnostics
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: qa-test-report ${{ matrix.name }}
path: |
**/target/surefire-reports/**
**/target/failsafe-reports/**
- name: debug
if: failure()
shell: bash
run: |
echo "=== Listing surefire-reports contents ==="
find ./its/tests/target/surefire-reports -type f || true
echo "=== Checking if directory is empty ==="
[ -d ./its/tests/target/surefire-reports ] && ls -la ./its/tests/target/surefire-reports/ || echo "Directory doesn't exist"
- name: Inspect Orchestrator Cache
if: always()
shell: bash
run: |
echo "=== Listing orchestrator cache contents ==="
CACHE_DIR="${{ github.workspace }}/orchestrator/${{ steps.month.outputs.month }}"
if [ -d "${CACHE_DIR}" ]; then
echo "Directory exists: ${CACHE_DIR}"
ls -lah "${CACHE_DIR}"
echo ""
echo "=== Detailed file tree ==="
find "${CACHE_DIR}" -type f -ls || true
else
echo "Directory does not exist: ${CACHE_DIR}"
fi
promote:
needs: [ build-number, build, qa, test-linux, test-windows ]
runs-on: sonar-xs-public
name: Promote
permissions:
id-token: write
contents: write
env:
BUILD_NUMBER: ${{ needs.build-number.outputs.BUILD_NUMBER }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: SonarSource/ci-github-actions/promote@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34
with:
promote-pull-request: true
================================================
FILE: .github/workflows/full-release.yml
================================================
name: Full release
on:
workflow_dispatch:
inputs:
short-description:
description: 'A short description for the release ticket'
required: true
type: string
branch:
description: 'The branch from which to release.'
required: false
default: 'master'
type: string
jobs:
release:
name: Release
uses: SonarSource/release-github-actions/.github/workflows/ide-automated-release.yml@6f94d0d49b2bb6d324f3110ef078e3a5bd95604e # 1.5.4
if: always() && !failure() && !cancelled()
permissions:
statuses: read
id-token: write
contents: write
actions: write
pull-requests: write
with:
jira-project-key: "SLCORE"
project-name: "SonarLint Core"
short-description: ${{ inputs.short-description }}
branch: ${{ inputs.branch }}
bump-version:
name: Create a PR to bump version
runs-on: sonar-xs-public
needs:
- release
permissions:
contents: write # write for peter-evans/create-pull-request, read for actions/checkout
pull-requests: write # write for peter-evans/create-pull-request
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
- name: bump-version
env:
NEW_VERSION: ${{ needs.release.outputs.new-version }}
run: |
mvn versions:set -DgenerateBackupPoms=false -DnewVersion="$NEW_VERSION-SNAPSHOT"
- uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8
with:
author: ${{ github.actor }} <${{ github.actor }}>
commit-message: Prepare next development iteration
title: Prepare next development iteration
branch: bot/bump-project-version
branch-suffix: timestamp
delete-branch: true
base: master
draft: true # so that we don't actually need to re-open the PR and just make it ready for review
reviewers: ${{ github.actor }}
body: Bump the version for the new iteration. Created by release automation.
================================================
FILE: .github/workflows/notify-failure.yml
================================================
name: Notify Failure
on:
workflow_run:
workflows: [ "Build" ]
types:
- completed
branches:
- master
permissions:
id-token: write
jobs:
notify:
runs-on: sonar-xs-public
name: Send Slack Notification
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- name: Vault Secrets
id: secrets
uses: SonarSource/vault-action-wrapper@c154b4a417b51cb98dd71137f49bf20e77c56820 # 3.4.0
with:
secrets: |
development/kv/data/slack token | SLACK_BOT_TOKEN;
- name: Slack Notification on Failure
uses: slackapi/slack-github-action@af78098f536edbc4de71162a307590698245be95 # v3.0.1
with:
method: chat.postMessage
token: ${{ fromJSON(steps.secrets.outputs.vault).SLACK_BOT_TOKEN }}
# Slack channel squad-devex-flow-interrupts
payload: |
channel: C0ADM04C59A
text: "Workflow failed in ${{ github.repository }}"
blocks:
- type: "section"
text:
type: "mrkdwn"
text: ":x: *Repository:* ${{ github.repository }}\n*Branch:* ${{ github.event.workflow_run.head_branch }}\n*Workflow:* ${{ github.event.workflow_run.name }}\n*Run:* <${{ github.event.workflow_run.html_url }}|#${{ github.event.workflow_run.run_number }}>"
================================================
FILE: .github/workflows/releasability.yml
================================================
name: Releasability Status
on:
workflow_run:
workflows: [ "Build" ] # Name must match the name of the build workflow
types: [ completed ]
branches:
- master
- branch-*
jobs:
releasability-status:
name: Releasability status
runs-on: sonar-xs-public
permissions:
id-token: write
statuses: write
contents: read
if: github.event.workflow_run.conclusion == 'success'
steps:
- uses: SonarSource/gh-action_releasability/releasability-status@52f09917764eac5a80045d103bfa91e7eaf0c8d6 # 3.0.5
with:
optional_checks: "Jira"
env:
GITHUB_TOKEN: ${{ github.token }}
================================================
FILE: .github/workflows/release.yml
================================================
name: sonar-release
on:
workflow_dispatch:
inputs:
version:
type: string
description: Version
required: true
releaseId:
type: string
description: Release ID
required: true
dryRun:
type: boolean
description: Flag to enable the dry-run execution
default: false
required: false
jobs:
release:
permissions:
id-token: write
contents: write
uses: SonarSource/gh-action_release/.github/workflows/main.yaml@4ac0f4304e2858f8144ac48037bb135b5fdac1ad # 6.7.1
with:
version: ${{ inputs.version }}
releaseId: ${{ inputs.releaseId }}
dryRun: ${{ inputs.dryRun }}
publishToBinaries: false
mavenCentralSync: true
# Slack channel squad-devex-private
slackChannel: C02E6L5C01H
================================================
FILE: .github/workflows/shadow_scans.yml
================================================
name: Shadow scans
on:
schedule:
# Run the workflow every day at 04:00 UTC
- cron: '0 4 * * *'
workflow_dispatch:
env:
CACHE_BACKEND: s3
jobs:
scan:
runs-on: sonar-xs-public
name: Scan on shadow platforms
permissions:
id-token: write
contents: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1
with:
version: 2026.4.11
- uses: SonarSource/ci-github-actions/build-maven@23d3a5700259f9890438851083904c6d5e87ff4e # 1.3.34 # dogfood
with:
maven-args: -Dcommercial -Dsonar.coverage.jacoco.xmlReportPaths=${{ github.workspace }}/report-aggregate/target/site/jacoco-aggregate/jacoco.xml
run-shadow-scans: true
artifactory-reader-role: private-reader
artifactory-deployer-role: qa-deployer
scanner-java-opts: '-Xmx2g'
- name: Run IRIS sync
uses: SonarSource/unified-dogfooding-actions/run-iris@v1
with:
primary_project_key: "org.sonarsource.sonarlint.core:sonarlint-core-parent"
primary_platform: "Next"
shadow1_project_key: "org.sonarsource.sonarlint.core:sonarlint-core-parent"
shadow1_platform: "SQC-EU"
shadow2_project_key: "org.sonarsource.sonarlint.core:sonarlint-core-parent"
shadow2_platform: "SQC-US"
================================================
FILE: .gitignore
================================================
# The following should be moved in related sub-directories
server/sonar-web/src/main/webapp/stylesheets/sonar-colorizer.css
server/sonar-web/src/main/webapp/deploy/plugins
server/sonar-web/src/main/webapp/deploy/bootstrap
server/sonar-web/src/main/webapp/deploy/maven/org
server/sonar-web/src/main/webapp/WEB-INF/log/
server/sonar-web/src/main/webapp/deploy/*.jar
server/sonar-web/src/main/webapp/deploy/jdbc-driver.txt
# ---- Javadoc
docs.tar
# ---- Maven
target/
dependency-reduced-pom.xml
# ---- IntelliJ IDEA
*.iws
*.iml
*.ipr
.idea/
# ---- Eclipse
.classpath
.project
.settings
.externalToolBuilders
# ---- Mac OS X
.DS_Store
Icon?
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# ---- Windows
# Windows image file caches
Thumbs.db
# Folder config file
Desktop.ini
# ---- Sonar
.sonar/
.scannerwork
# scripts patches, they are local to each developer
scripts/patches/*.sh
scripts/patches/*license*.txt
# Visual Studio
.vs
# Run configurations
.run
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.13/apache-maven-3.9.13-bin.zip
================================================
FILE: .sonarlint/connectedMode.json
================================================
{
"sonarQubeUri": "https://next.sonarqube.com/sonarqube",
"projectKey": "org.sonarsource.sonarlint.core:sonarlint-core-parent"
}
================================================
FILE: API_CHANGES.md
================================================
# 10.48
## New features
* Add `label` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginStateDto`.
* Add `label` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.ArtifactSourceDto`.
* Add `language` field to `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginStatusDto`.
* Add `serverVersion` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginStatusDto`.
* Contains the version of the SonarQube Server that provided the plugin (e.g. `"10.8.1"`).
* Non-null only when `source` is `SONARQUBE_SERVER`; `null` for all other sources (embedded, SonarQube Cloud, unavailable).
* Introduce two new telemetry notification methods to `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService` to track usage of the "Supported Languages" panel:
* `supportedLanguagesPanelOpened` - call this each time the user opens the "Supported Languages" panel.
* `supportedLanguagesPanelCtaClicked` - call this each time the user clicks the "set up connection/binding" CTA button in the "Supported Languages" panel.
# 10.46
## New features
* Introduce `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginRpcService`, accessible via `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer#getPluginService`.
* Use `getPluginStatuses` to populate the "Supported Languages" panel with the full list of known analyzer statuses (one entry per language, including unsupported ones).
* Pass a `configurationScopeId` to get statuses in the context of its bound connection, or `null` for standalone statuses.
* Each `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginStatusDto` contains: plugin name, state (`org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginStateDto`), source (`org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.ArtifactSourceDto`), actual version, and overridden version if applicable.
* Add a new `didChangePluginStatuses` notification to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`.
* Implement it to keep the "Supported Languages" panel up to date after the initial load.
* Called when plugin statuses change, e.g. after a sync with a connection or when a connection is removed.
# 10.44
## Breaking changes
* Add `closedByUser` flag to `org.sonarsource.sonarlint.core.rpc.protocol.client.message.ShowMessageRequestResponse`. It must be set to `true` if the `showMessageRequest` was explicitly closed by the user (e.g. via clicking X on the notification)
# 10.43
## Breaking changes
* Remove the flight recorder feature. This should be handled by clients
# 10.42
* Add `org.sonarsource.sonarlint.core.rpc.client.Sloop.getPid` to return the pid of the backend process.
* Add a new `PROMOTIONAL_CAMPAIGNS` capability in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability`. Clients using the feature need to declare it at initialization time. Enables promotional campaign notifications and tracking user responses to not show again or postpone showing them. Data about shown notifications and user responses is saved separately for each IDE in the similar manner to telemetry in path: `{sonarUserHome}/campaigns/{productKey}/campaigns`
* Add a new `KIRO` value to `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAgent` enum.
# 10.39
## Breaking changes
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.DependencyRiskRpcService.getDependencyRiskDetails` method and associated DTOs.
# 10.38
## New features
* Add a new `GESSIE_TELEMETRY` capability in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability`. Clients using the feature need to declare it at initialization time. Enables sending data to Gessie (Generic Event System) alongside previous telemetry implementation.
# 10.37
## Deprecation
* Deprecate 4-parameter constructor and remove deprecation of 2-parameter one of `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams`. Move back to an old constructor as not all IDEs were able to provide all data to a new one.
* Remove Deprecation from `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService#addedManualBindings` method. It should be used again for manual binding events instead of parametrized `didUpdateBinding`.
## New features
* Add ide labs flags to `org.sonarsource.sonarlint.core.rpc.protocol.client.telemetry.TelemetryClientLiveAttributesResponse`.
* Introduce 2 new methods to `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService` to record Ide Labs telemetry: `externalLinkClicked`, `feedbackLinkClicked`.
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService.acceptedBindingSuggestion`. It should be used to for bindings created based on suggestions and pass `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin` instead of parametrized `didUpdateBinding`.
# 10.36
## Breaking Changes
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAssistedIdeRpcService` has been renamed to `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAgentService`.
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAssitedIde` has been renamed to `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAgent`.
* `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer#getAiAssistedIdeRpcService` has been renamed to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer#getAiAgentService`.
* Replace `VSCODE` and `VSCODE_INSIDERS` with `GITHUB_COPILOT` in `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAgent` enum.
* This better reflects that the distinction is about the AI agent (GitHub Copilot), not the IDE
## New features
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.labs.IdeLabsRpcService` service and a `joinIdeLabsProgram` method.
* Use it to allow users to join the SonarQube for IDE Labs program
* The method accepts user email and IDE name as parameters
# 10.35
## Breaking changes
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.FeatureFlagsDto` class.
* Remove unused methods from `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService`:
* `getGlobalStandaloneConfiguration`
* `getGlobalConnectedConfiguration`
* `getAnalysisConfig`
* `getRuleDetails`
## New features
* Add a new `CONTEXT_GENERATION` value in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability`. Clients using the feature need to declare it at initialization time. This is only accessible in dogfooding environments, and should be enabled in AI-related environments.
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.log.LogRpcService` service, with a new `setLogLevel` method. This allows clients to dynamically change the logging level.
* Introduce a new constructor in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams`, that accepts a `LogLevel` parameter.
## Deprecation
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams` previous constructor. Please use the new one and provide the log level.
# 10.33
## New features
* Add a new endpoint `/sonarlint/api/analysis/automatic/config` in the embedded server to globally disable or enable the automatic analysis.
* This endpoint should be used by external clients such as MCP servers.
* Add a new endpoint `/sonarlint/api/analysis/files` in our embedded server to analyze a list of files and return the issues, hotspots and taints found.
* This endpoint should be used by external clients such as MCP servers.
* Add a new `getMCPServerConfiguration` method to `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.ConnectionRpcService`
* It accepts `connectionId` and `token` as parameters
* It returns JSON string containing MCP server settings (without the `sonarqube` parent item)
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.ai.AiAssistedIdeRpcService` service and a `getRuleFileContent` method.
* Use it to retrieve the content of the rule file to write to provide guidance to the agent when using the SonarQube MCP server.
* Introduce an RPC notification `embeddedServerStarted` in `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`
* It is sent by the backend to notify the client that the embedded server has started
* It contains the embedded server port
* Example usage is by the MCP Server to establish the bridge connection
* Add a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService.mcpIntegrationEnabled` method.
* Should only be used by SonarQube MCP Server when integration with SQ:IDE is enabled and valid
# 10.31
## New features
* Add a new `FLIGHT_RECORDER` value in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability`. Clients using the feature need to declare it at initialization time. Important note: the `MONITORING` capability is also required by this feature.
* Add a new optional backend-to-client notification `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#flightRecorderStarted`. Clients can implement this notification to inform end users about a starting flight recorder session.
* Add a new service to the backend API: `org.sonarsource.sonarlint.core.rpc.protocol.backend.flightrecorder.FlightRecordingRpcService` can be used to interact with the flight recorder (e.g. to capture a thread dump of the current backend process)
* Add a new `CURRENT_FILE_ANALYSIS_TYPE` to the `org.sonarsource.sonarlint.core.rpc.protocol.client.telemetry.AnalysisReportingType` enum. This value can be used when reporting telemetry for forced analysis of currently open file.
# 10.29
## New features
* Clients can now access more granular origin information via the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto`, `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.connection.ConnectionSuggestionDto` and `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.AssistBindingParams`.
* Added `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingMode` and `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams` and allowed clients to provide this information when calling `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.ConfigurationRpcService#didUpdateBinding` which will trigger telemetry events for binding updates. Clients no longer need to call separate telemetry methods while adding bindings.
## Potential breaking changes
* Clients are normally not expected to use following constructors directly, but if they do perhaps in their tests, it's a potential breaking change.
* Removed the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto` constructor with `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto#isFromSharedConfiguration` parameter. Clients should use the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto#origin` parameter if it is used in their tests. `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin.SHARED_CONFIGURATION` can be used if it was true, otherwise it wouldn't matter which other origin used, they can default to `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin.PROJECT_NAME`
* Removed the `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.ConnectionSuggestionDto` constructor with `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.ConnectionSuggestionDto#isFromSharedConfiguration` parameter. Clients should use the `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.ConnectionSuggestionDto#origin` parameter if it is used in their tests. `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin.SHARED_CONFIGURATION` can be used if it was true, otherwise it wouldn't matter which other origin used, they can default to `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin.PROJECT_NAME`
* Removed the `org.sonarsource.sonarlint.core.rpc.protocol.client.binding.AssistBindingParams` constructor with `org.sonarsource.sonarlint.core.rpc.protocol.client.binding.AssistBindingParams#isFromSharedConfiguration` parameter. Clients should use the `org.sonarsource.sonarlint.core.rpc.protocol.client.binding.AssistBindingParams#origin` parameter if it is used in their tests. `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin.SHARED_CONFIGURATION` can be used if it was true, otherwise it wouldn't matter which other origin used, they can default to `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin.PROJECT_NAME`
## Deprecation
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.ConnectionSuggestionDto#isFromSharedConfiguration` method since it is not used anymore. Use `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.ConnectionSuggestionDto#getOrigin` instead.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto#isFromSharedConfiguration` method since it is not used anymore. Use `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto#getOrigin` instead.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.AssistBindingParams#isFromSharedConfiguration` method since it is not used anymore. Use `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.AssistBindingParams#getOrigin` instead.
* Deprecate `isFromSharedConfiguration` parameter from `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.AssistBindingParams`.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.AssistBindingParams` constructor. Use the other one.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams` constructor. Use the other one.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService#addedManualBindings` method. This will be automatically handled by passing the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin` and `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingMode` to the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams` constructor during the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.ConfigurationRpcService#didUpdateBinding` call.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService#addedImportedBindings` method. This will be automatically handled by passing the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin` and `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingMode` to the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams` constructor during the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.ConfigurationRpcService#didUpdateBinding` call.
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService#addedAutomaticBindings` method. This will be automatically handled by passing the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionOrigin` and `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingMode` to the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams` constructor during the `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.ConfigurationRpcService#didUpdateBinding` call.
# 10.28
## Breaking changes
* Fields `vulnerabilityId` and `description` from `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.GetDependencyRiskDetailsResponse` are now nullable.
* Dependency risks of type `PROHIBITED_LICENSE` do not have a vulnerability ID or description.
## New features
* Add `TEXT` language to `org.sonarsource.sonarlint.core.commons.api.SonarLanguage`
* Enabling this language allows detecting [text issues](https://rules.sonarsource.com/text/)
* Add `GITHUBACTIONS` language to `org.sonarsource.sonarlint.core.commons.api.SonarLanguage`
* Enabling this language allows detecting [issues on GitHub Actions](https://rules.sonarsource.com/githubactions/)
* Add new method `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.DependencyRiskRpcService#checkSupported` to check if dependency risks are supported by the server
* It returns the reason in case the server does not support dependency risks
## SCA
* Introduce new fields `vulnerabilityId` and `cvssScore` in `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.DependencyRiskDto`
* The `vulnerabilityId` is a unique identifier for the vulnerability such as `CVE-1234`, and the `cvssScore` is the Common Vulnerability Scoring System score for the vulnerability
* They are null in case the dependency risk is of type `PROHIBITED_LICENSE`
# 10.27
## Breaking changes
* Merge `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.DependencyRiskTrackingRpcService` into `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.DependencyRiskRpcService`.
* Rename `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient.didChangeScaIssues` to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient.didChangeDependencyRisks`.
## New features
* Allow changing status of dependency risks (SCA issues) via `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.DependencyRiskRpcService.changeStatus`.
* Required parameters are `configScopeId`, `dependencyRiskKey` and `transition`.
* If transition is `ACCEPT` or `SAFE`, a `comment` field is mandatory
* Allow clients to open dependency risk in browser
* Introduce `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.DependencyRiskRpcService.openDependencyRiskInBrowser` that accepts `configScopeId` and `dependencyRiskKey` (UUID) parameters
* Allow clients to record interactions with dependency risks in telemetry
* Introduce `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService.dependencyRiskInvestigatedLocally` method
* Add a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.sca.DependencyRiskRpcService.getDependencyRiskDetails`.
# 10.26
## New features
* Add a new `SCA_SYNCHRONIZATION` value in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability`. Clients using the feature need to declare it at initialization time.
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.ScaIssueTrackingRpcService` service and a `listAll` method
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient.didChangeScaIssues` notification.
# 10.25
## Breaking changes
* Add a new `ISSUE_STREAMING` value in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability`. Clients using the feature need to declare it at initialization time.
## New features
* Add a new optional parameter to `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenParams` to track SonarQube Cloud account creation through token generation.
## File exclusions
* The RPC client method `org.sonarsource.sonarlint.core.rpc.protocol.backend.file.getFilesStatus` previously returned information exclusively about server exclusions. It now includes the same exclusion criteria as used during the analysis (client exclusions, gitignore, etc.).
# 10.23
## Deprecation
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#matchProjectBranch` method since it is not used anymore.
# 10.22
## New features
* Add a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService.toolCalled` method.
* Add a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.ConnectionRpcService.getConnectionSuggestions` method.
* This method is used to get connection suggestions for a given configuration scope.
* The method should only be used when neither connection nor binding exists for a given configuration scope.
* If a connection already exists, a `org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.BindingRpcService.getBindingSuggestions` should be used instead
# 10.20
## Breaking changes
* Remove `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.UserTokenRpcService` and `org.sonarsource.sonarlint.core.rpc.impl.SonarLintRpcServerImpl.getUserTokenService`. They were not useful anymore.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenParams` deprecated constructor. Use the other one.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.ConnectionRpcService#checkSmartNotificationsSupported` method and associated parameter and response. They were not useful anymore.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarCloudConnectionDto` deprecated constructor. Use the other one.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.config.SonarCloudConnectionConfigurationDto` deprecated constructor. Use the other one.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.rules.GetEffectiveRuleDetailsParams` deprecated constructor. Use the other one.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.SonarCloudAlternativeEnvironmentDto` deprecated constructors. Use the other one.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.ClientConstantInfoDto` deprecated constructor and the `getPid` getter. They were not useful anymore.
* Remove the `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.GetOrganizationParams` deprecated constructor. Use the other one.
## New features
* Add a new constructor to `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams` constructor to provide flags as an enum values list.
* Add `analysisReportingTriggered` method to `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService`
* It is used to report usage of analysis features such as the analysis of VCS changed files, all project files or for the pre-commit analysis
* Should not be implemented unless necessary
## Deprecation
* Deprecate `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.FeatureFlagsDto` class.
# 10.19
## Deprecation
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalyzeFilesAndTrackParams` constructor, and replace it with a new one without the `startTime` parameter, that is no longer relevant.
# 10.17
## New features
* Add a new constructor to `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.SonarCloudAlternativeEnvironmentDto` to accept a map of `SonarCloudRegion` to `SonarQubeCloudRegionDto`.
* Per region a `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.SonarQubeCloudRegionDto` must be provided that contains the *base*, *API* and *WebSocket* URIs.
* `null` values are accepted for every URI - it will internally fallback to the actual region URIs for a `null` value encountered.
## Deprecation
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.ConnectionRpcService.checkSmartNotificationsSupported` method. It always returns that notifications are supported.
# 10.16
## New features
* Introduce a new `org.sonarsource.sonarlint.core.rpc.protocol.backend.remediation.aicodefix.AiCodeFixRpcService` class, containing a `suggestFix(SuggestFixParams)` method.
* Introduce a new `isAiCodeFixable` method in `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.RaisedIssueDto`.
## Deprecation
* Deprecate the `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.SonarCloudAlternativeEnvironmentDto` constructor. It is replaced by an overload in which the new API base URL should be provided.
# 10.14
## Breaking changes
* Add new method `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#invalidToken` to notify client that WebAPI calls to SQS/SQC fails due to wrong token
* Client can implement this method to offer user to change credentials for the connection to fix the problem
* For now notification is being sent only for 401 Unauthorized HTTP response code since it's corresponds to malformed/wrong token and ignores 403 Forbidden response code since it's a user permissions problem that has to be addressed on the server
* Also once notification sent, backend doesn't attempt to send any requests to server anymore until credentials changed
* Add `region` to `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionParams` and `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionSuggestionDto` to support multi-region SQC connection configuration
* Constructor without region parameter is removed
* Removed `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#didRaiseIssue` and associated types. See `raiseIssues` and `raiseHotspots` instead.
* Removed `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer#getIssueTrackingService` and associated types. Tracking is managed by the backend.
* Removed `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer#getSecurityHotspotMatchingService` and associated types. Tracking is managed by the backend.
* Removed `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.AssistCreatingConnectionParams#getServerUrl()`. Use `getConnectionParams` instead.
* Removed `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService#analyzeFiles`. Use `analyzeFilesAndTrack` instead.
* Removed deprecated methods in `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.RaisedFindingDto`:
* `getSeverity`
* `getType`
* `getCleanCodeAttribute`
* `getImpacts`
* Use `getSeverityMode` instead.
* Removed deprecated methods in `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.TaintVulnerabilityDto`:
* `getSeverity`
* `getType`
* `getCleanCodeAttribute`
* `getImpacts`
* Use `getSeverityMode` instead.
## New features
* Add SonarCloud region parameter to
* `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionParams`
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarCloudConnectionDto`
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.config.SonarCloudConnectionConfigurationDto`
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.FuzzySearchUserOrganizationsParams`
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.GetOrganizationParams`
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.ListUserOrganizationsParams`
* This is in order to support multi-region SQC connection configuration. Constructors without region parameter are deprecated
* `org.sonarsource.sonarlint.core.commons.monitoring.MonitoringService#newTrace(String, String)` can be used internally
to initialize a manual trace in Sentry
* When monitoring is enabled, 1% of all analysis requests are sent to Sentry's performance tracing feature
* Two new system properties can be used to tune the behavior of the Sentry integration:
* `sonarlint.internal.monitoring.dsn` overrides the default [DSN](https://docs.sentry.io/concepts/key-terms/dsn-explainer/) (e.g. for tests)
* `sonarlint.internal.monitoring.tracesSampleRate`, parsed as a `java.lang.Double`, overrides the default sampling rate of analysis requests
# 10.13
## Breaking changes
* New feature flag `enableMonitoring` in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.FeatureFlagsDto` allows clients to opt into monitoring with Sentry
## New features
* Introduce `org.sonarsource.sonarlint.core.rpc.protocol.backend.dogfooding.DogfoodingRpcService.isDogfoodingEnvironment` method to allow clients to know if it is running in a dogfooding environment
* Will return `true` if `SONARSOURCE_DOGFOODING` environment variable is set and equals `"1"`
* Will return `false` in all other cases
* Introduce opt-in monitoring via Sentry
* As a first step, the monitoring service is only initialized in dogfooding environments when the feature flag is set
* All logging events sent to the client at the `ERROR` level are reported as monitoring events
# 10.12
## Breaking changes
* Adapt `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams.languageSpecificRequirements to accept org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.JsTsRequirementsDto` instead of `clientNodeJsPath`
## New features
* Introduce `bundlePath` initialization parameter in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.JsTsRequirementsDto` to allow clients to provide the path to the unzipped es-lint bridge bundle
* The path will be passed down to the Js/Ts/CSS analyzer and will indicate that the analyzer does not need to unzip the bundle itself, thus reducing the usage of the `.sonarlint` temporary storage
* Provide `null` to keep the previous behavior
# 10.11
## Breaking changes
* Signature of `org.sonarsource.sonarlint.core.rpc.protocol.backend.file.DidUpdateFileSystemParams#DidUpdateFileSystemParams` was changed
* Parameter `addedOrChangedFiles` was split into `addedFiles` and `changedFiles`
* Removed parameter `branch` and `pullRequest` from `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.IssueDetailsDto` as it should not be used anymore by the client.
# 10.10
## New features
* Introduce a new method `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService.shouldUseEnterpriseCSharpAnalyzer` to allow clients to know what kind of C# analyzer should be used for the analysis.
* The method returns a boolean value indicating whether the enterprise C# analyzer should be used or not
* The method returns `true` if a binding exists for config scope AND the related connected server has the enterprise C# plugin (`csharpenterprise`) installed
* The method returns `true` if binding exists with a SonarQube version < 10.8 (i.e. SQ versions that do not include repackaged dotnet analyzer) OR SonarCloud
* The method returns `false` in standalone mode or if connected to non-commercial edition of SonarQube with a version >= 10.8
* Inject the relevant C# analyzer to analysis engines based on the above and share the path to the analyzer JAR as an analysis property for the OmniSharp plugin.
## Breaking changes
* Add two new constructor arguments to `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.OmnisharpRequirementsDto` for clients to declare the paths to the Open-Source and Enterprise C# analyzers.
# 10.9
## New features
* A new attribute `severityMode` has been added to `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.RaisedFindingDto`
and `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.TaintVulnerabilityDto` that automatically contains either `StandardModeDetails` or `MQRModeDetails`
* A new type `StandardModeDetails` has been introduced, which contains information about severity and type
* A new type `MQRModeDetails` has been introduced, which contains information about clean code attribute and impacts
* You should display the finding accordingly to the information contained by `severityMode`
* A new method `IssueRpcService#getEffectiveIssueDetails` has been added to the backend to allow clients to retrieve detailed information about an issue
* The method accepts a configuration scope ID and an issue ID (UUID) as parameters
* The method returns a `GetEffectiveIssueDetailsResponse` object containing the detailed information about the issue
* It is preferred to use this method instead of the `RulesRpcService#getEffectiveRuleDetails` when retrieving rule description details in the context of a specific issue, as this new method will provide more precise information based on the issue, like issue impacts & customized issue severity
## Breaking changes
* Remove the `org.sonarsource.sonarlint.core.serverconnection.ServerPathProvider` class.
* Remove `severity` and `type` fields from `org.sonarsource.sonarlint.core.rpc.protocol.backend.rules.RuleDefinitionDto` as this class is only used for fetching standalone rule details, which should always have the Clean Code Attribute and Impacts
## Deprecation
* The following attributes have been deprecated from `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.RaisedFindingDto` and
`org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.TaintVulnerabilityDto`, you should now use the new attribute `severityMode`
* `severity`
* `type`
* `cleanCodeAttribute`
* `impacts`
# 10.7.1
## Breaking changes
* Add a new method to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#matchProjectBranch` allowing the backend to check whether the locally checked-out branch matches a requesting server branch
# 10.7
## Breaking changes
* Signature of `org.sonarsource.sonarlint.core.rpc.client.SonarLintRpcClientDelegate#raiseHotspots` was changed
* Parameter `issuesByFileUri` has been rightfully replaced by `hotspotsByFileUri`
* This is purely a naming change, there is no functional impact
## New features
* Add return value `GetForcedNodeJsResponse` to `org.sonarsource.sonarlint.core.rpc.client.SonarLintRpcClientDelegate#didChangeClientNodeJsPath` indicating whether
the Node.js path is effective or not. If that's the case, the path and the version will be returned.
* It's not mandatory to use this return value. It is used by some IDEs to show the current Node.js version used.
* Add a new system property `sonarlint.debug.active.rules` to log active rules in verbose mode when triggering an analysis
# 10.6
## Breaking changes
* Signature of `org.sonarsource.sonarlint.core.rpc.client.SonarLintRpcClientDelegate#noBindingSuggestionFound` was changed
* Replaced parameter with `org.sonarsource.sonarlint.core.rpc.protocol.client.binding.NoBindingSuggestionFoundParams`
* Former parameter `projectKey` can now be accessed by `params.getProjectKey()`
* Removed deprecated constructors from `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams`
## New features
* Add a field to `org.sonarsource.sonarlint.core.rpc.protocol.common.NoBindingSuggestionFoundParams` indicating whether the suggestion where
no binding was found by is SonarCloud or not, can be used to display a more precise notification in the IDE rather than a generic one
* Add a signature to `SloopLauncher.start`, allowing clients to add custom JVM arguments to the start of the process
# 10.4
## Breaking changes
* Add new `isUserDefined` parameter into `org.sonarsource.sonarlint.core.rpc.protocol.common.ClientFileDto`
* User-defined files will be included in the analysis. Non-user-defined files such as generated or library files will be excluded from
analysis when analysis is triggered by the backend. If the analysis was forced by the client, exclusions are not respected.
* Introduce a new parameter in the constructor of `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.FeatureFlagsDto`: `canOpenFixSuggestion`.
* This flag lets clients completely disable the opening a fix suggestion in the IDE, which can be useful if the feature is not yet available in the client.
* Introduce a new initialization parameter `TelemetryMigrationDto` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams`
* The parameter is nullable and should be used only by the SLVS to migrate its telemetry. All other clients should provide `null` as a value.
## New features
* Add a method to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient` to allow the backend to request client-defined file
exclusions from the client before every standalone analysis.
* `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#getFileExclusions` to request file exclusions
* Add a field to `org.sonarsource.sonarlint.core.rpc.protocol.common.ClientFileDto` to allow the backend to distinguish non-user-defined
files to exclude from analysis
* Add `showFixSuggestion` method to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`
* It's only available when the feature flag `canOpenFixSuggestion` is enabled
* When using this method, you will receive a single fix suggestion for a specific issue that should be displayed to the user
* The user should have the possibility to accept or decline the fix suggestion
* The fix suggestion can be displayed at different locations in the file
* Add `fixSuggestionResolved` method to `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService`
* You should use this method whenever a fix suggestion has been accepted or declined
* If the fix has multiple changes (snippets), you should call the method once for each
* The `indexSnippet` should be filled if possible, it corresponds to the snippet index in the list of changes
* If you do not know if the fix was accepted or declined at the snippet level, you should call the method once for the whole fix
### File events
* Add the `didOpenFile` and `didCloseFile` methods to `org.sonarsource.sonarlint.core.rpc.protocol.backend.file.FileRpcService`.
* Clients are supposed to call these methods when a file is opened in the editor or closed.
### Analysis
* Add a new constructor in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams` to let clients provide if automatic analysis is enabled.
* Add a new `didChangeAutomaticAnalysisSetting` method in `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService`
* Clients are expected to call it whenever users change the "enable automatic analysis" setting.
* Add new methods to `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService` to force analysis
* `analyzeFullProject` forces analysis all files of the project that was provided to backend by method `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#listFiles`
* `analyzeFileList` forces analysis for the provided set of files
* `analyzeOpenFiles` forces analysis of all files that were reported as opened using `org.sonarsource.sonarlint.core.rpc.protocol.backend.file.FileRpcService#didOpenFile`
* `analyzeVCSChangedFiles` forces analysis of modified and not committed files
# 10.3.2
## Breaking changes
* Change `disabledLanguagesForAnalysis` parameter of `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams` introduced in 10.3 version to `disabledPluginKeysForAnalysis`
* Analysis will be disabled for plugins specified in `disabledPluginKeysForAnalysis` but it will be still possible to consume Rule Descriptions
* Can be null or empty if clients do not wish to disable analysis for any loaded plugin
# 10.3
## Breaking changes
* Add new `disabledLanguagesForAnalysis` parameter into `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams`
* Analysis will be disabled for languages specified `disabledLanguagesForAnalysis` but it will be still possible to consume Rule Descriptions
* Can be null or empty if clients do not wish to disable analysis for any loaded plugin
## New features
* Add a method to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient` to allow backend to request inferred analysis properties from the client before every analysis. It's important because properties may change depending on files being analysed.
* `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#getInferredAnalysisProperties` to request inferred properties
* Add a method to the `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService` to let the client notify the backend with user defined analysis properties
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService#didSetUserAnalysisProperties` to set user defined properties
* For analysis, both user-defined and inferred properties will be merged. If the same property is inferred by the client and provided by the user - the inferred value will be used for analysis.
### Open Issue in IDE
* Add the `getConnectionParams` method to `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.AssistCreatingConnectionParams`
* It allows clients to get parameters to create either SonarQube or SonarCloud connection
* This field type is `Either<AssistSonarQubeConnection, AssistSonarCloudConnection>`
* Common methods of both connection types are added to the `AssistCreatingConnectionParams` class to provide users simplicity
## Deprecation
* Deprecate `isSonarCloud` parameter from `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenParams`
* This value on no longer needed on the backend side.
* `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.AssistCreatingConnectionParams.getServerUrl` is only meaningful for SQ
connections. Use `getConnection().getLeft().getServerUrl()` instead to get the `serverUrl` of a SQ connection
* The existing constructor in `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams` is now deprecated, the newly added constructor should be used instead (see above).
# 10.2
## Breaking changes
* `org.sonarsource.sonarlint.core.rpc.client.SonarLintRpcClientDelegate#didDetectSecret` had no `configScopeId` parameter, it was added
## New features
### Analysis and tracking
* Add the `analyzeFilesAndTrack` method to `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService`.
* It allows clients to submit files for analysis, let the backend deal with issue tracking, and will lead to a later notification via `raiseIssues` and `raiseHotspots` (see below).
* Usages of `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService#analyzeFiles` should be replaced by this new method.
* It accepts a `AnalyzeFilesAndTrackParams` object instead of the deprecated `AnalyzeFilesParams`. The extra flag `shouldFetchServerIssues` should be set to `true` when the analysis is triggered in response to a file open event.
* When using this method, implementation of the `didRaiseIssue` method of `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient` is no longer required. The new `raiseIssues` and `raiseHotspots` methods should be implemented instead (see below).
* Add `raiseIssues` method to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient` to report tracked issues.
* Will be called by the backend when issues should be raised to the user. The UI should be updated accordingly.
* The `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.RaiseIssuesParams` class contains a list of issues to raise by file URI.
* Each raised issue went through issue tracking, and has potentially been matched with a previously known issue and/or a server issue in connected mode.
* This new method reports a collection of issues replacing the ones previously raised. Every call contains the full list of known issues.
* Add `raiseHotspots` method to `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient` to report tracked Security Hotspots.
* Will be called by the backend when hotspots should be raised to the user. The UI should be updated accordingly.
* The `org.sonarsource.sonarlint.core.rpc.protocol.client.issue.RaiseHotspotsParams` class contains a list of hotspots to raise by file URI.
* Each raised hotspot went through hotspot tracking, and has potentially been matched with a previously known hotspot and/or a server hotspot in connected mode.
* This new method reports a collection of hotspots replacing the ones previously raised. Every call contains the full list of known hotspots.
* Add `getRawIssues` method to `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalyzeFilesResponse`
* It allows clients to get raised issues in the analysis response.
* This method is temporarily added and will be removed when the deprecated APIs have been dropped.
## Deprecation
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService#analyzeFiles` and the underlying DTOs are deprecated, should be replaced by `analyzeFilesAndTrack`.
* As a consequence, `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient.didRaiseIssue` and the underlying DTOs are now deprecated. It should be replaced by `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient.raiseIssues` and `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient.raiseHotspots`.
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.IssueTrackingRpcService` and the underlying DTOs are deprecated, the functionality is now handled by `analyzeFilesAndTrack`.
* `org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.SecurityHotspotMatchingRpcService` and the underlying DTOs are deprecated, the functionality is now handled by `analyzeFilesAndTrack`.
* `org.sonarsource.sonarlint.core.client.legacy.analysis.SonarLintAnalysisEngine` and all classes from the `sonarlint-java-client-legacy` module are now deprecated. Analysis should happen via `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService#analyzeFilesAndTrack`, and the `sonarlint-java-client-legacy` artifact will soon be removed.
* The `pid` parameter of the `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.ClientConstantInfoDto` constructor is not used anymore (the backend PID is used instead). The constructor is now deprecated, and a new constructor without this parameter was introduced and should be used. The `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.ClientConstantInfoDto.getPid` method is not used anymore and also deprecated.
# 10.1
## Breaking changes
* Replace the last constructor parameter of `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams`.
* Clients should provide an instance of `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.LanguageSpecificRequirements`.
* The previous Node.js path parameter is now part of this new `LanguageSpecificRequirements`, together with configuration related to Omnisharp.
* For clients not executing analysis via the backend, or not supporting C#, a `null` value can be passes as the 2nd parameter of the `LanguageSpecificRequirements` constructor
* Introduce a new parameter in the constructor of `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.ClientConstantInfoDto`.
* Clients should provide the PID of the host process.
* For clients not executing analysis via the backend, this parameter is not used, so a dummy value can be provided.
* Introduce a new parameter in the constructor of `org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.FeatureFlagsDto`: `enableTelemetry`.
* This flag lets clients completely disable the telemetry, which can be useful when using Sloop in the context of tests.
* The flag replaces the `sonarlint.telemetry.disabled` system property.
* For clients that want to keep the same behavior, they can read the system property on the client side and pass it to the `FeatureFlagsDto` constructor.
* Stop leaking LSP4J types in API (SLCORE-663) and wrap them in SonarLint classes instead
* `org.eclipse.lsp4j.jsonrpc.messages.Either` replaced by `org.sonarsource.sonarlint.core.rpc.protocol.common.Either`
* `org.eclipse.lsp4j.jsonrpc.CancelChecker` replaced by `org.sonarsource.sonarlint.core.rpc.client.SonarLintCancelChecker`
* Add new client method `org.sonarsource.sonarlint.core.rpc.client.SonarLintRpcClientDelegate#suggestConnection`.
* This method is used when binding settings are found for an unknown connection.
* Clients are expected to notify users about these.
* Move class `org.sonarsource.sonarlint.core.rpc.protocol.backend.usertoken.RevokeTokenParams` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.RevokeTokenParams`.
* Introduce a new parameter in the constructor of `org.sonarsource.sonarlint.core.rpc.protocol.common.ClientFileDto`.
* Clients can provide a detected language for the file. This is the opportunity to rely on the IDE's detected type.
* This is used for analysis, clients can pass `null` to keep the same behavior as before, or if no language was detected.
## New features
### Connected mode: sharing setup
* Add methods to `org.sonarsource.sonarlint.core.rpc.protocol.backend.telemetry.TelemetryRpcService` to track binding creation.
* `addedManualBindings` should be called by clients when a new binding is created manually.
* `addedImportedBindings` should be called by clients when a binding is created from a shared connected mode configuration file.
* `addedAutomaticBindings` should be called by clients when a binding is created using a suggestion from a server analysis settings files.
* Add `isFromSharedConfiguration` field to `org.sonarsource.sonarlint.core.rpc.protocol.client.binding.AssistBindingParams` and `org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingSuggestionDto`.
* This field tells the client whether the binding suggestion comes from a shared connected mode configuration file (`true`) or from analysis settings files (`false`).
### Analysis
* Add the `analyzeFiles` method in `org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalysisRpcService`.
* Clients can use this method to trigger an analysis. It's a request, so they can get a response with details about the analysis.
* They need to pass the list of URIs representing files to analyze.
* They also need to pass an "analysis ID", which is a unique ID used for correlating the analysis and issues that are raised via `didRaiseIssue` (see below).
* Add the `didRaiseIssue` method in `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`.
* This lets clients be informed when an issue is detected during analysis.
* They can do local tracking or stream the issue to the users.
* They can retrieve which analysis lead to this issue being raised with the "analysis ID" correlation ID.
* Add the `didSkipLoadingPlugin` method in `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`.
* This is called after an analysis when a plugin was not loaded.
* Clients are expected to notify users about these.
* Add the `didDetectSecret` method in `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`.
* This is called after an analysis when a secret was detected in one of the analyzed files.
* Clients are expected to notify users about these.
* The backend does not keep track of any notification regarding secrets detection. Clients will need to manage some cache to avoid notifying users too often.
* Add the `promoteExtraEnabledLanguagesInConnectedMode` method in `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`.
* This is called after an analysis in standalone mode when a language enabled only in connected mode was detected.
* Clients are expected to notify users about these.
* The backend does not keep track of any notification regarding this promotion. Clients will need to manage some cache to avoid notifying users too often.
* Add the `getBaseDir` method in `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient`.
* This is called during an analysis to determine the base directory for the files being analyzed.
* Clients are expected to implement this request if they support analysis via the backend.
================================================
FILE: LICENSE.txt
================================================
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
================================================
FILE: NOTICE.txt
================================================
SonarLint Core
Copyright (C) SonarSource Sàrl
mailto:info AT sonarsource DOT com
This product includes software developed at
SonarSource (http://www.sonarsource.com/).
================================================
FILE: README.md
================================================
SonarLint Core
==============
The core library to run SonarQube for IDE analysis (used by SonarQube for IDE Eclipse, IntelliJ and VS), as well as the SonarQube for IDE language server (used by SonarQube for IDE VSCode) with the goal of helping developers deliver [integrated code quality and security](https://www.sonarsource.com/solutions/for-developers/).
[](https://github.com/SonarSource/sonarlint-core/actions)
[](https://next.sonarqube.com/sonarqube/dashboard?id=org.sonarsource.sonarlint.core%3Asonarlint-core-parent)
Have Questions or Feedback?
---------------------------
For SonarQube for IDE support questions ("How do I?", "I got this error, why?", ...), please first read the [FAQ](https://community.sonarsource.com/t/frequently-asked-questions/7204) and then head to the [SonarSource forum](https://community.sonarsource.com/c/help/sl). There are chances that a question similar to yours has already been answered.
Be aware that this forum is a community, so the standard pleasantries ("Hi", "Thanks", ...) are expected. And if you don't get an answer to your thread, you should sit on your hands for at least three days before bumping it. Operators are not standing by. :-)
Contributing
------------
If you would like to see a new feature, please create a new thread in the forum ["Suggest new features"](https://community.sonarsource.com/c/suggestions/features).
Please be aware that we are not actively looking for feature contributions. The truth is that it's extremely difficult for someone outside SonarSource to comply with our roadmap and expectations. Therefore, we typically only accept minor cosmetic changes and typo fixes.
With that in mind, if you would like to submit a code contribution, please create a pull request for this repository. Please explain your motives to contribute this change: what problem you are trying to fix, what improvement you are trying to make.
Make sure that you follow our [code style](https://github.com/SonarSource/sonar-developer-toolset#code-style) and all tests are passing (Travis build is executed for each pull request).
Building
--------
To build sources locally follow these instructions.
### Build and Run Unit Tests
#### Prerequisites
Some medium tests load plugins relying on Node.js, so make sure the latest LTS version is installed and `node` is in the PATH.
Execute from the project base directory:
mvn verify
### Run integration tests
See [Running Integration Tests](its/README.md)
Documentation
-------------
Have a look at the documentation [here](spec/README.adoc).
License
-------
Copyright SonarSource.
Licensed under the [GNU Lesser General Public License, Version 3.0](http://www.gnu.org/licenses/lgpl.txt)
================================================
FILE: SECURITY.md
================================================
# Reporting Security Issues
A mature software vulnerability treatment process is a cornerstone of a robust information security management system. Contributions from the community play an important role in the evolution and security of our products, and in safeguarding the security and privacy of our users.
If you believe you have discovered a security vulnerability in Sonar's products, we encourage you to report it immediately.
To responsibly report a security issue, please email us at [security@sonarsource.com](mailto:security@sonarsource.com). Sonar’s security team will acknowledge your report, guide you through the next steps, or request additional information if necessary. Customers with a support contract can also report the vulnerability directly through the support channel.
For security vulnerabilities found in third-party libraries, please also contact the library's owner or maintainer directly.
## Responsible Disclosure Policy
For more information about disclosing a security vulnerability to Sonar, please refer to our community post: [Responsible Vulnerability Disclosure](https://community.sonarsource.com/t/responsible-vulnerability-disclosure/9317).
================================================
FILE: backend/analysis-engine/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonarsource.sonarlint.core</groupId>
<artifactId>sonarlint-backend-parent</artifactId>
<version>11.2-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>sonarlint-analysis-engine</artifactId>
<name>SonarLint Core - Analysis Engine</name>
<description>Run analysis</description>
<dependencies>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>sonarlint-plugin-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>sonarlint-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<!-- Tests -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-open-source-plugins-for-mediumtests</id>
<phase>generate-test-resources</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.sonarsource.python</groupId>
<artifactId>sonar-python-plugin</artifactId>
<version>5.18.0.31561</version>
<type>jar</type>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/plugins</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<stripVersion>false</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<!-- Workaround for https://issues.apache.org/jira/projects/MJAR/issues/MJAR-138 -->
<profile>
<id>conditionally-add-commons-tests-if-tests-not-skipped</id>
<activation>
<property>
<name>maven.test.skip</name>
<value>!true</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>sonarlint-commons</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
</profiles>
</project>
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisQueue.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.PriorityQueue;
import java.util.function.Predicate;
import java.util.stream.Stream;
import org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand;
import org.sonarsource.sonarlint.core.analysis.command.Command;
import org.sonarsource.sonarlint.core.analysis.command.NotifyModuleEventCommand;
import org.sonarsource.sonarlint.core.analysis.command.ResetPluginsCommand;
import org.sonarsource.sonarlint.core.analysis.command.UnregisterModuleCommand;
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
import static java.util.Map.entry;
public class AnalysisQueue {
private static final SonarLintLogger LOG = SonarLintLogger.get();
public static final String ANALYSIS_EXPIRATION_DELAY_PROPERTY_NAME = "sonarqube.ide.internal.analysis.expiration.delay";
private static final Duration ANALYSIS_EXPIRATION_DEFAULT_DELAY = Duration.ofMinutes(1);
private final Duration analysisExpirationDelay = getAnalysisExpirationDelay();
private final PriorityQueue<QueuedCommand> queue = new PriorityQueue<>(new CommandComparator());
public synchronized void post(Command command) {
queue.add(new QueuedCommand(command));
LOG.debug("Posting command in analysis queue: {}, new size is {}", command, queue.size());
notifyAll();
}
public synchronized void wakeUp() {
notifyAll();
}
public synchronized List<Command> removeAll() {
var pendingTasks = new ArrayList<>(queue);
queue.clear();
return pendingTasks.stream().map(QueuedCommand::getCommand).toList();
}
public synchronized Command takeNextCommand() throws InterruptedException {
while (true) {
var firstReadyCommand = pollNextReadyCommand();
if (firstReadyCommand.isPresent()) {
var queuedCommand = firstReadyCommand.get();
LOG.debug("Picked command from the queue: {}, {} remaining", queuedCommand.command, queue.size());
return tidyUp(queuedCommand);
}
// wait for a new command to come in
wait();
}
}
public synchronized void clearAllButAnalysesAndResets() {
removeAll(queuedCommand -> !(queuedCommand.command instanceof AnalyzeCommand) && !(queuedCommand.command instanceof ResetPluginsCommand));
}
private Optional<QueuedCommand> pollNextReadyCommand() {
var commandsToKeep = new ArrayList<QueuedCommand>();
// cannot use iterator as priority order is not guaranteed
while (!queue.isEmpty()) {
var candidateCommand = queue.poll();
if (candidateCommand.command.shouldCancelQueue()) {
candidateCommand.command.cancel();
LOG.debug("Not picking next command {}, is canceled", candidateCommand.command);
} else {
if (candidateCommand.command.isReady()) {
queue.addAll(commandsToKeep);
return Optional.of(candidateCommand);
}
LOG.debug("Not picking next command {}, is not ready", candidateCommand.command);
commandsToKeep.add(candidateCommand);
}
}
queue.addAll(commandsToKeep);
return Optional.empty();
}
private Command tidyUp(QueuedCommand nextCommand) {
cleanUpExpiredCommands(nextCommand);
return batchAutomaticAnalyses(nextCommand.command);
}
private void cleanUpExpiredCommands(QueuedCommand nextQueuedCommand) {
var notReadyCommands = removeAll(queuedCommand -> !queuedCommand.command.isReady() && queuedCommand.getQueuedTime().plus(analysisExpirationDelay).isBefore(Instant.now()));
if (!notReadyCommands.isEmpty()) {
LOG.debug("Canceling {} not ready analyses", notReadyCommands.size());
}
if (nextQueuedCommand.command instanceof UnregisterModuleCommand unregisterCommand) {
var expiredCommands = removeAll(
queuedCommand -> (queuedCommand.command instanceof AnalyzeCommand analyzeCommand && analyzeCommand.getModuleKey().equals(unregisterCommand.getModuleKey()))
|| queuedCommand.command instanceof NotifyModuleEventCommand);
if (!expiredCommands.isEmpty()) {
LOG.debug("Canceling {} analyses expired by module unregistration", expiredCommands.size());
}
}
}
private Command batchAutomaticAnalyses(Command nextCommand) {
if (nextCommand instanceof AnalyzeCommand analyzeCommand && analyzeCommand.getTriggerType().canBeBatchedWithSameTriggerType()) {
var removedCommands = (List<AnalyzeCommand>) removeAll(otherQueuedCommand -> canBeBatched(analyzeCommand, otherQueuedCommand.command));
if (removedCommands.isEmpty()) {
return analyzeCommand;
}
LOG.debug("Batching {} analyses", removedCommands.size() + 1);
return Stream.concat(Stream.of(analyzeCommand), removedCommands.stream())
.sorted((c1, c2) -> (int) (c1.getSequenceNumber() - c2.getSequenceNumber()))
.reduce(AnalyzeCommand::mergeWith)
// this last clause should never occur
.orElse(analyzeCommand);
}
return nextCommand;
}
private static boolean canBeBatched(AnalyzeCommand analyzeCommand, Command otherCommand) {
return otherCommand instanceof AnalyzeCommand otherAnalyzeCommand && otherAnalyzeCommand.getModuleKey().equals(analyzeCommand.getModuleKey())
&& otherAnalyzeCommand.getTriggerType().canBeBatchedWithSameTriggerType();
}
private List<? extends Command> removeAll(Predicate<QueuedCommand> predicate) {
var iterator = queue.iterator();
var removedCommands = new ArrayList<Command>();
while (iterator.hasNext()) {
var queuedCommand = iterator.next();
if (predicate.test(queuedCommand)) {
iterator.remove();
queuedCommand.command.cancel();
removedCommands.add(queuedCommand.command);
}
}
return removedCommands;
}
private static class QueuedCommand {
private final Command command;
private final Instant queuedTime = Instant.now();
QueuedCommand(Command command) {
this.command = command;
}
public Command getCommand() {
return command;
}
public Instant getQueuedTime() {
return queuedTime;
}
}
private static class CommandComparator implements Comparator<QueuedCommand> {
private static final Map<Class<?>, Integer> COMMAND_TYPES_ORDERED = Map.ofEntries(
// reset commands should be pulled first from the queue, they cancel unregister and file event commands and make use of more up-to-date plugins for subsequent analyses
entry(ResetPluginsCommand.class, 0),
// then unregister commands might make file events and analyses irrelevant
entry(UnregisterModuleCommand.class, 1),
// then forwarding file events takes priority over analyses, to make sure they give more accurate results
entry(NotifyModuleEventCommand.class, 2),
// then analyses have the lowest priority
entry(AnalyzeCommand.class, 3));
@Override
public int compare(QueuedCommand queuedCommand, QueuedCommand otherQueuedCommand) {
var command = queuedCommand.command;
var otherCommand = otherQueuedCommand.command;
var commandRank = COMMAND_TYPES_ORDERED.get(command.getClass());
var otherCommandRank = COMMAND_TYPES_ORDERED.get(otherCommand.getClass());
return !Objects.equals(commandRank, otherCommandRank) ? (commandRank - otherCommandRank) :
// for same command types, respect insertion order
(int) (command.getSequenceNumber() - otherCommand.getSequenceNumber());
}
}
private static Duration getAnalysisExpirationDelay() {
try {
var analysisExpirationDelayFromSystemProperty = System.getProperty(ANALYSIS_EXPIRATION_DELAY_PROPERTY_NAME);
var parsedDelay = Duration.parse(analysisExpirationDelayFromSystemProperty);
LOG.debug("Overriding analysis expiration delay with value from system property: {}", parsedDelay);
return parsedDelay;
} catch (RuntimeException e) {
LOG.debug("Using default analysis expiration delay: {}", ANALYSIS_EXPIRATION_DEFAULT_DELAY);
return ANALYSIS_EXPIRATION_DEFAULT_DELAY;
}
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisScheduler.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
import javax.annotation.Nullable;
import org.sonarsource.sonarlint.core.analysis.api.AnalysisSchedulerConfiguration;
import org.sonarsource.sonarlint.core.analysis.command.Command;
import org.sonarsource.sonarlint.core.analysis.command.ResetPluginsCommand;
import org.sonarsource.sonarlint.core.analysis.container.global.GlobalAnalysisContainer;
import org.sonarsource.sonarlint.core.commons.log.LogOutput;
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
import org.sonarsource.sonarlint.core.plugin.commons.LoadedPlugins;
public class AnalysisScheduler {
private static final SonarLintLogger LOG = SonarLintLogger.get();
private static final Runnable CANCELING_TERMINATION = () -> {
};
private final AtomicReference<GlobalAnalysisContainer> globalAnalysisContainer = new AtomicReference<>();
private final AnalysisQueue analysisQueue = new AnalysisQueue();
private final Thread analysisThread = new Thread(this::executeQueuedCommands, "sonarlint-analysis-scheduler");
private final LogOutput logOutput;
private final AtomicReference<Runnable> termination = new AtomicReference<>();
private final AtomicReference<Command> executingCommand = new AtomicReference<>();
public AnalysisScheduler(AnalysisSchedulerConfiguration analysisGlobalConfig, LoadedPlugins loadedPlugins, @Nullable LogOutput logOutput) {
this.logOutput = logOutput;
// if the container cannot be started, the thread won't be started
var analysisContainer = new GlobalAnalysisContainer(analysisGlobalConfig, loadedPlugins);
analysisContainer.startComponents();
globalAnalysisContainer.set(analysisContainer);
analysisThread.start();
}
public void reset(Supplier<SchedulerResetConfiguration> pluginsWithConfigSupplier) {
post(new ResetPluginsCommand(globalAnalysisContainer, analysisQueue, pluginsWithConfigSupplier));
}
public void wakeUp() {
analysisQueue.wakeUp();
}
private void executeQueuedCommands() {
while (termination.get() == null) {
SonarLintLogger.get().setTarget(logOutput);
try {
var command = analysisQueue.takeNextCommand();
executingCommand.set(command);
if (termination.get() == CANCELING_TERMINATION) {
break;
}
executingCommand.get().execute(globalAnalysisContainer.get().getModuleRegistry());
executingCommand.set(null);
} catch (InterruptedException e) {
if (termination.get() != CANCELING_TERMINATION) {
LOG.error("Analysis engine interrupted", e);
}
} catch (Exception e) {
LOG.debug("Analysis command failed", e);
}
}
termination.get().run();
}
public void post(Command command) {
LOG.debug("Post: " + Thread.currentThread().getName() + " " + Thread.currentThread().threadId());
LOG.debug("Posting command from Scheduler: " + command);
if (termination.get() != null) {
LOG.error("Analysis engine stopping, ignoring command");
command.cancel();
return;
}
if (!analysisThread.isAlive()) {
LOG.error("Analysis engine not started, ignoring command");
command.cancel();
return;
}
var currentCommand = executingCommand.get();
if (currentCommand != null && command.shouldCancelPost(currentCommand)) {
LOG.debug("Cancelling queuing of command");
currentCommand.cancel();
}
LOG.debug("Posting command from Scheduler to queue: " + command);
analysisQueue.post(command);
}
public void stop() {
if (!analysisThread.isAlive()) {
return;
}
if (!termination.compareAndSet(null, CANCELING_TERMINATION)) {
// already terminating
return;
}
var command = executingCommand.getAndSet(null);
if (command != null) {
command.cancel();
}
analysisThread.interrupt();
analysisQueue.removeAll().forEach(Command::cancel);
globalAnalysisContainer.get().stopComponents();
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/SchedulerResetConfiguration.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis;
import org.sonarsource.sonarlint.core.analysis.api.AnalysisSchedulerConfiguration;
import org.sonarsource.sonarlint.core.plugin.commons.LoadedPlugins;
/**
* Pairs an {@link AnalysisSchedulerConfiguration} with the {@link LoadedPlugins} it was built
* alongside, so both are always resolved atomically inside a
* {@link org.sonarsource.sonarlint.core.analysis.command.ResetPluginsCommand}.
*/
public record SchedulerResetConfiguration(AnalysisSchedulerConfiguration config, LoadedPlugins plugins) {
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisConfiguration.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.concurrent.Immutable;
import org.sonar.api.batch.rule.ActiveRule;
@Immutable
public class AnalysisConfiguration {
private final List<ClientInputFile> inputFiles;
private final Map<String, String> extraProperties;
private final Path baseDir;
private final Collection<ActiveRule> activeRules;
private final String toString;
private AnalysisConfiguration(Builder builder) {
this.baseDir = builder.baseDir;
this.inputFiles = builder.inputFiles;
this.extraProperties = builder.extraProperties;
this.activeRules = builder.activeRules;
this.toString = generateToString();
}
public static Builder builder() {
return new Builder();
}
public Map<String, String> extraProperties() {
return extraProperties;
}
public Path baseDir() {
return baseDir;
}
public List<ClientInputFile> inputFiles() {
return inputFiles;
}
public Collection<ActiveRule> activeRules() {
return activeRules;
}
@Override
public String toString() {
return toString;
}
private String generateToString() {
var sb = new StringBuilder();
sb.append("[\n");
generateToStringCommon(sb);
generateToStringActiveRules(sb);
generateToStringInputFiles(sb);
sb.append("]\n");
return sb.toString();
}
protected void generateToStringActiveRules(StringBuilder sb) {
if ("true".equals(System.getProperty("sonarlint.debug.active.rules"))) {
sb.append(" activeRules: ").append(activeRules).append("\n");
} else {
// Group active rules by language and count occurrences
var languageCounts = new HashMap<String, Integer>();
for (var rule : activeRules) {
var languageKey = rule.ruleKey().toString().split(":")[0];
languageCounts.put(languageKey, languageCounts.getOrDefault(languageKey, 0) + 1);
}
sb.append(" activeRules: [");
languageCounts.forEach((language, count) -> sb.append(count).append(" ").append(language).append(", "));
if (!languageCounts.isEmpty()) {
// Remove the trailing comma and space
sb.setLength(sb.length() - 2);
}
sb.append("]\n");
}
}
protected void generateToStringCommon(StringBuilder sb) {
sb.append(" baseDir: ").append(baseDir()).append("\n");
sb.append(" extraProperties: ").append(extraProperties()).append("\n");
}
protected void generateToStringInputFiles(StringBuilder sb) {
sb.append(" inputFiles: [\n");
for (ClientInputFile inputFile : inputFiles()) {
sb.append(" ").append(inputFile.uri());
sb.append(" (").append(getCharsetLabel(inputFile)).append(")");
if (inputFile.isTest()) {
sb.append(" [test]");
}
var language = inputFile.language();
if (language != null) {
sb.append(" [").append(language.getSonarLanguageKey()).append("]");
}
sb.append("\n");
}
sb.append(" ]\n");
}
private static String getCharsetLabel(ClientInputFile inputFile) {
var charset = inputFile.getCharset();
return charset != null ? charset.displayName() : "default";
}
public static final class Builder {
private final List<ClientInputFile> inputFiles = new ArrayList<>();
private final Map<String, String> extraProperties = new HashMap<>();
private Path baseDir;
private final Collection<ActiveRule> activeRules = new ArrayList<>();
private Builder() {
}
public Builder addInputFiles(ClientInputFile... inputFiles) {
Collections.addAll(this.inputFiles, inputFiles);
return this;
}
public Builder addInputFiles(Collection<? extends ClientInputFile> inputFiles) {
this.inputFiles.addAll(inputFiles);
return this;
}
public Builder addInputFile(ClientInputFile inputFile) {
this.inputFiles.add(inputFile);
return this;
}
public Builder putAllExtraProperties(Map<String, String> extraProperties) {
extraProperties.forEach(this::putExtraProperty);
return this;
}
public Builder putExtraProperty(String key, String value) {
this.extraProperties.put(key.trim(), value);
return this;
}
public Builder setBaseDir(Path baseDir) {
this.baseDir = baseDir;
return this;
}
public Builder addActiveRules(ActiveRule... activeRules) {
Collections.addAll(this.activeRules, activeRules);
return this;
}
public Builder addActiveRules(Collection<? extends ActiveRule> activeRules) {
this.activeRules.addAll(activeRules);
return this;
}
public Builder addActiveRule(ActiveRule activeRules) {
this.activeRules.add(activeRules);
return this;
}
public AnalysisConfiguration build() {
return new AnalysisConfiguration(this);
}
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisResults.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.time.Duration;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import org.sonarsource.sonarlint.core.commons.api.SonarLanguage;
public class AnalysisResults {
private final Set<ClientInputFile> failedAnalysisFiles = new LinkedHashSet<>();
private final Map<ClientInputFile, SonarLanguage> languagePerFile = new LinkedHashMap<>();
private Duration duration = Duration.ZERO;
public void addFailedAnalysisFile(ClientInputFile inputFile) {
failedAnalysisFiles.add(inputFile);
}
/**
* Detected languages for each file.
* The values in the map can be null if no language was detected for some files.
*/
public Map<ClientInputFile, SonarLanguage> languagePerFile() {
return languagePerFile;
}
public void setLanguageForFile(ClientInputFile file, @Nullable SonarLanguage language) {
this.languagePerFile.put(file, language);
}
/**
* Input files for which there were analysis errors. The analyzers failed to correctly handle these files, and therefore there might be issues
* missing or no issues at all for these files.
*/
public Collection<ClientInputFile> failedAnalysisFiles() {
return failedAnalysisFiles;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisSchedulerConfiguration.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.nio.file.Path;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Function;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
@Immutable
public class AnalysisSchedulerConfiguration {
private static final String NODE_EXECUTABLE_PROPERTY = "sonar.nodejs.executable";
private final Path workDir;
private final Map<String, String> extraProperties;
private final Path nodeJsPath;
private final long clientPid;
private final Function<String, ClientModuleFileSystem> fileSystemProvider;
private AnalysisSchedulerConfiguration(Builder builder) {
this.workDir = builder.workDir;
this.extraProperties = new LinkedHashMap<>(builder.extraProperties);
this.nodeJsPath = builder.nodeJsPath;
this.clientPid = builder.clientPid;
this.fileSystemProvider = builder.fileSystemProvider;
}
public static Builder builder() {
return new Builder();
}
public Path getWorkDir() {
return workDir;
}
public long getClientPid() {
return clientPid;
}
public Function<String, ClientModuleFileSystem> getFileSystemProvider() {
return fileSystemProvider;
}
public Map<String, String> getEffectiveSettings() {
Map<String, String> props = new HashMap<>(extraProperties);
if (nodeJsPath != null) {
props.put(NODE_EXECUTABLE_PROPERTY, nodeJsPath.toString());
}
return props;
}
public static final class Builder {
private Path workDir;
private Map<String, String> extraProperties = Collections.emptyMap();
private Path nodeJsPath;
private long clientPid;
private Function<String, ClientModuleFileSystem> fileSystemProvider = key -> null;
private Builder() {
}
/**
* Override default work dir (~/.sonarlint/work)
*/
public Builder setWorkDir(Path workDir) {
this.workDir = workDir;
return this;
}
/**
* Properties that will be passed to global extensions
*/
public Builder setExtraProperties(Map<String, String> extraProperties) {
this.extraProperties = extraProperties;
return this;
}
/**
* Set the location of the nodejs executable used by some analyzers.
*/
public Builder setNodeJs(@Nullable Path nodeJsPath) {
this.nodeJsPath = nodeJsPath;
return this;
}
public Builder setClientPid(long clientPid) {
this.clientPid = clientPid;
return this;
}
public Builder setFileSystemProvider(Function<String, ClientModuleFileSystem> fileSystemProvider) {
this.fileSystemProvider = fileSystemProvider;
return this;
}
public AnalysisSchedulerConfiguration build() {
return new AnalysisSchedulerConfiguration(this);
}
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFile.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.charset.Charset;
import javax.annotation.CheckForNull;
import org.sonarsource.sonarlint.core.commons.api.SonarLanguage;
/**
* InputFile as provided by client
* @since 1.1
*/
public interface ClientInputFile {
/**
* The absolute file path. It needs to correspond to a file in the filesystem because some plugins don't use {@link #contents}
* or {@link inputStream} yet, and will attempt to access the file directly.
* @deprecated avoid calling this method if possible, since it may require to create a temporary copy of the file
*/
@Deprecated
String getPath();
/**
* Flag an input file as test file. Analyzers may apply different rules on test files.
*/
boolean isTest();
/**
* Charset to be used to read file content. If null it means the charset is unknown and analysis will likely use JVM default encoding to read the file.
*/
@CheckForNull
Charset getCharset();
/**
* Language key of the file. If not null, language detection based on the file name suffix is skipped. The file will be analyzed by an analyzer that can
* handle the language.
*/
@CheckForNull
default SonarLanguage language() {
return null;
}
/**
* Allow clients to pass their own object to ease mapping back to IDE file.
*/
<G> G getClientObject();
/**
* Gets a stream of the contents of the file.
*/
InputStream inputStream() throws IOException;
/**
* Gets the contents of the file.
*/
String contents() throws IOException;
/**
* Logical relative path with '/' separators. Used to apply SonarLintPathPatterns and by some analyzers. Example: 'src/main/java/Foo.java'.
* Can be project relative path when it makes sense.
*/
String relativePath();
/**
* URI to uniquely identify this file.
*/
URI uri();
default boolean isDirty() {
return false;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFileEdit.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.util.List;
public class ClientInputFileEdit {
private final ClientInputFile target;
private final List<TextEdit> textEdits;
public ClientInputFileEdit(ClientInputFile target, List<TextEdit> textEdits) {
this.target = target;
this.textEdits = textEdits;
}
public ClientInputFile target() {
return target;
}
public List<TextEdit> textEdits() {
return textEdits;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleFileEvent.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import org.sonarsource.sonarlint.plugin.api.module.file.ModuleFileEvent;
public class ClientModuleFileEvent {
private final ClientInputFile target;
private final ModuleFileEvent.Type type;
private ClientModuleFileEvent(ClientInputFile target, ModuleFileEvent.Type type) {
this.target = target;
this.type = type;
}
public static ClientModuleFileEvent of(ClientInputFile target, ModuleFileEvent.Type type) {
return new ClientModuleFileEvent(target, type);
}
public ClientInputFile target() {
return target;
}
public ModuleFileEvent.Type type() {
return type;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleFileSystem.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.util.stream.Stream;
import org.sonar.api.batch.fs.InputFile;
public interface ClientModuleFileSystem {
Stream<ClientInputFile> files(String suffix, InputFile.Type type);
Stream<ClientInputFile> files();
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleInfo.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
public class ClientModuleInfo {
private final String key;
private final ClientModuleFileSystem clientFileSystem;
public ClientModuleInfo(String key, ClientModuleFileSystem clientFileSystem) {
this.key = key;
this.clientFileSystem = clientFileSystem;
}
public String key() {
return key;
}
public ClientModuleFileSystem fileSystem() {
return clientFileSystem;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/DefaultLocation.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonar.api.batch.fs.TextRange;
public class DefaultLocation implements IssueLocation {
private final String message;
private final ClientInputFile inputFile;
private final org.sonarsource.sonarlint.core.commons.api.TextRange textRange;
public DefaultLocation(@Nullable ClientInputFile inputFile, @Nullable TextRange textRange, @Nullable String message) {
this.textRange = textRange != null ? WithTextRange.convert(textRange) : null;
this.inputFile = inputFile;
this.message = message;
}
@Override
public ClientInputFile getInputFile() {
return inputFile;
}
@Override
public String getMessage() {
return message;
}
@CheckForNull
@Override
public org.sonarsource.sonarlint.core.commons.api.TextRange getTextRange() {
return textRange;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/Flow.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.util.List;
import java.util.stream.Collectors;
import org.sonar.api.batch.sensor.issue.IssueLocation;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.SonarLintInputFile;
public class Flow {
private final List<org.sonarsource.sonarlint.core.analysis.api.IssueLocation> locations;
public Flow(List<IssueLocation> issueLocations) {
this.locations = issueLocations.stream()
.map(i -> new DefaultLocation(
i.inputComponent().isFile() ? ((SonarLintInputFile) i.inputComponent()).getClientInputFile() : null,
i.textRange(),
i.message()))
.collect(Collectors.toList());
}
public List<org.sonarsource.sonarlint.core.analysis.api.IssueLocation> locations() {
return locations;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/Issue.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonar.api.batch.rule.ActiveRule;
import org.sonar.api.rule.RuleKey;
import org.sonarsource.sonarlint.core.commons.ImpactSeverity;
import org.sonarsource.sonarlint.core.commons.SoftwareQuality;
import org.sonarsource.sonarlint.core.commons.api.TextRange;
public class Issue implements IssueLocation {
private final String primaryMessage;
private final ClientInputFile clientInputFile;
private final List<Flow> flows;
private final List<QuickFix> quickFixes;
private final Optional<String> ruleDescriptionContextKey;
private final TextRange textRange;
private final ActiveRule activeRule;
private final Map<SoftwareQuality, ImpactSeverity> overriddenImpacts;
public Issue(ActiveRule activeRule, @Nullable String primaryMessage, Map<SoftwareQuality, ImpactSeverity> overriddenImpacts, @Nullable org.sonar.api.batch.fs.TextRange textRange,
@Nullable ClientInputFile clientInputFile, List<Flow> flows, List<QuickFix> quickFixes, Optional<String> ruleDescriptionContextKey) {
this.activeRule = activeRule;
this.overriddenImpacts = overriddenImpacts;
this.textRange = Optional.ofNullable(textRange).map(WithTextRange::convert).orElse(null);
this.primaryMessage = primaryMessage;
this.clientInputFile = clientInputFile;
this.flows = flows;
this.quickFixes = quickFixes;
this.ruleDescriptionContextKey = ruleDescriptionContextKey;
}
public ActiveRule getActiveRule() {
return activeRule;
}
public RuleKey getRuleKey() {
return activeRule.ruleKey();
}
@Override
public String getMessage() {
return primaryMessage;
}
@Override
@CheckForNull
public ClientInputFile getInputFile() {
return clientInputFile;
}
public List<Flow> flows() {
return flows;
}
public List<QuickFix> quickFixes() {
return quickFixes;
}
@Override
@CheckForNull
public TextRange getTextRange() {
return textRange;
}
public Map<SoftwareQuality, ImpactSeverity> getOverriddenImpacts() {
return overriddenImpacts;
}
public Optional<String> getRuleDescriptionContextKey() {
return ruleDescriptionContextKey;
}
@Override
public String toString() {
var sb = new StringBuilder();
sb.append("[");
sb.append("rule=").append(getRuleKey());
if (textRange != null) {
var startLine = textRange.getStartLine();
sb.append(", line=").append(startLine);
}
if (clientInputFile != null) {
sb.append(", file=").append(clientInputFile.uri());
}
sb.append("]");
return sb.toString();
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/IssueLocation.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import javax.annotation.CheckForNull;
public interface IssueLocation extends WithTextRange {
@CheckForNull
String getMessage();
/**
* @return null for global issues
*/
@CheckForNull
ClientInputFile getInputFile();
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/QuickFix.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import java.util.List;
public class QuickFix {
private final List<ClientInputFileEdit> inputFileEdits;
private final String message;
public QuickFix(List<ClientInputFileEdit> inputFileEdits, String message) {
this.inputFileEdits = inputFileEdits;
this.message = message;
}
public List<ClientInputFileEdit> inputFileEdits() {
return inputFileEdits;
}
public String message() {
return message;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/TextEdit.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import org.sonarsource.sonarlint.core.commons.api.TextRange;
public class TextEdit {
private final TextRange range;
private final String newText;
public TextEdit(TextRange range, String newText) {
this.range = range;
this.newText = newText;
}
public TextRange range() {
return range;
}
public String newText() {
return newText;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/TriggerType.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
public enum TriggerType {
AUTO(true),
FORCED(false);
private final boolean canBeBatchedWithSameTriggerType;
TriggerType(boolean canBeBatchedWithSameTriggerType) {
this.canBeBatchedWithSameTriggerType = canBeBatchedWithSameTriggerType;
}
public boolean canBeBatchedWithSameTriggerType() {
return canBeBatchedWithSameTriggerType;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/WithTextRange.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.api;
import javax.annotation.CheckForNull;
import org.sonarsource.sonarlint.core.commons.api.TextRange;
public interface WithTextRange {
/**
* @return null for file level issues
*/
@CheckForNull
TextRange getTextRange();
@CheckForNull
default Integer getStartLine() {
var textRange = getTextRange();
return textRange != null ? textRange.getStartLine() : null;
}
@CheckForNull
default Integer getStartLineOffset() {
var textRange = getTextRange();
return textRange != null ? textRange.getStartLineOffset() : null;
}
@CheckForNull
default Integer getEndLine() {
var textRange = getTextRange();
return textRange != null ? textRange.getEndLine() : null;
}
@CheckForNull
default Integer getEndLineOffset() {
var textRange = getTextRange();
return textRange != null ? textRange.getEndLineOffset() : null;
}
static TextRange convert(org.sonar.api.batch.fs.TextRange analyzerTextRange) {
return new TextRange(
analyzerTextRange.start().line(),
analyzerTextRange.start().lineOffset(),
analyzerTextRange.end().line(),
analyzerTextRange.end().lineOffset());
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/package-info.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
@ParametersAreNonnullByDefault
package org.sonarsource.sonarlint.core.analysis.api;
import javax.annotation.ParametersAreNonnullByDefault;
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/AnalyzeCommand.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.command;
import java.io.IOException;
import java.net.URI;
import java.time.Duration;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonarsource.sonarlint.core.analysis.api.AnalysisConfiguration;
import org.sonarsource.sonarlint.core.analysis.api.AnalysisResults;
import org.sonarsource.sonarlint.core.analysis.api.ClientInputFile;
import org.sonarsource.sonarlint.core.analysis.api.Issue;
import org.sonarsource.sonarlint.core.analysis.api.TriggerType;
import org.sonarsource.sonarlint.core.analysis.container.global.ModuleRegistry;
import org.sonarsource.sonarlint.core.commons.api.SonarLanguage;
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
import org.sonarsource.sonarlint.core.commons.progress.ProgressIndicator;
import org.sonarsource.sonarlint.core.commons.progress.SonarLintCancelMonitor;
import org.sonarsource.sonarlint.core.commons.progress.TaskManager;
import org.sonarsource.sonarlint.core.commons.tracing.Trace;
import static org.sonarsource.sonarlint.core.commons.util.StringUtils.pluralize;
public class AnalyzeCommand extends Command {
private static final SonarLintLogger LOG = SonarLintLogger.get();
private final String moduleKey;
private final UUID analysisId;
private final TriggerType triggerType;
private final Supplier<AnalysisConfiguration> configurationSupplier;
private final Consumer<Issue> issueListener;
@Nullable
private final Trace trace;
private final CompletableFuture<AnalysisResults> futureResult;
private final SonarLintCancelMonitor cancelMonitor;
private final TaskManager taskManager;
private final Consumer<List<ClientInputFile>> analysisStarted;
private final Supplier<Boolean> isReadySupplier;
private final Set<URI> files;
private final Map<String, String> extraProperties;
public AnalyzeCommand(String moduleKey, UUID analysisId, TriggerType triggerType, Supplier<AnalysisConfiguration> configurationSupplier, Consumer<Issue> issueListener,
@Nullable Trace trace, SonarLintCancelMonitor cancelMonitor, TaskManager taskManager, Consumer<List<ClientInputFile>> analysisStarted, Supplier<Boolean> isReadySupplier,
Set<URI> files, Map<String, String> extraProperties) {
this(moduleKey, analysisId, triggerType, configurationSupplier, issueListener, trace, cancelMonitor, taskManager, analysisStarted, isReadySupplier, files, extraProperties,
new CompletableFuture<>());
}
public AnalyzeCommand(String moduleKey, UUID analysisId, TriggerType triggerType, Supplier<AnalysisConfiguration> configurationSupplier, Consumer<Issue> issueListener,
@Nullable Trace trace, SonarLintCancelMonitor cancelMonitor, TaskManager taskManager, Consumer<List<ClientInputFile>> analysisStarted, Supplier<Boolean> isReadySupplier,
Set<URI> files, Map<String, String> extraProperties, CompletableFuture<AnalysisResults> futureResult) {
this.moduleKey = moduleKey;
this.analysisId = analysisId;
this.triggerType = triggerType;
this.configurationSupplier = configurationSupplier;
this.issueListener = issueListener;
this.trace = trace;
this.cancelMonitor = cancelMonitor;
this.taskManager = taskManager;
this.analysisStarted = analysisStarted;
this.isReadySupplier = isReadySupplier;
this.files = files;
this.extraProperties = extraProperties;
this.futureResult = futureResult;
taskManager.trackNewTask(analysisId, cancelMonitor);
}
@Override
public boolean isReady() {
return isReadySupplier.get();
}
public String getModuleKey() {
return moduleKey;
}
public TriggerType getTriggerType() {
return triggerType;
}
public CompletableFuture<AnalysisResults> getFutureResult() {
return futureResult;
}
public Set<URI> getFiles() {
return files;
}
public Map<String, String> getExtraProperties() {
return extraProperties;
}
@Override
public void execute(ModuleRegistry moduleRegistry) {
try {
var configuration = configurationSupplier.get();
taskManager.runExistingTask(moduleKey, analysisId, "Analyzing " + pluralize(configuration.inputFiles().size(), "file"), null, true, true,
indicator -> execute(moduleRegistry, indicator, configuration), cancelMonitor);
} catch (Exception e) {
handleAnalysisFailed(e);
}
}
void execute(ModuleRegistry moduleRegistry, ProgressIndicator progressIndicator, AnalysisConfiguration configuration) {
try {
doExecute(moduleRegistry, progressIndicator, configuration);
} catch (Exception e) {
handleAnalysisFailed(e);
}
}
void doExecute(ModuleRegistry moduleRegistry, ProgressIndicator progressIndicator, AnalysisConfiguration analysisConfig) {
try {
LOG.info("Starting analysis with configuration: {}", analysisConfig);
var analysisResults = doRunAnalysis(moduleRegistry, progressIndicator, analysisConfig);
futureResult.complete(analysisResults);
} catch (CompletionException e) {
handleAnalysisFailed(e.getCause());
} catch (Exception e) {
handleAnalysisFailed(e);
}
}
private void handleAnalysisFailed(Throwable throwable) {
LOG.error("Error during analysis", throwable);
futureResult.completeExceptionally(throwable);
}
private AnalysisResults doRunAnalysis(ModuleRegistry moduleRegistry, ProgressIndicator progressIndicator, AnalysisConfiguration configuration) {
var startTime = System.currentTimeMillis();
analysisStarted.accept(configuration.inputFiles());
if (configuration.inputFiles().isEmpty()) {
LOG.info("No file to analyze");
futureResult.complete(new AnalysisResults());
return new AnalysisResults();
}
var moduleContainer = moduleRegistry.getContainerFor(moduleKey);
Throwable originalException = null;
doIfTraceIsSet(t -> {
int filesCount = configuration.inputFiles().size();
t.setData("filesCount", filesCount);
var fileSizes = new ArrayList<>(filesCount);
var languages = new HashSet<>();
configuration.inputFiles().forEach(f -> {
try {
fileSizes.add(f.contents().length());
} catch (IOException | IllegalStateException e) {
fileSizes.add(0);
}
Optional.ofNullable(f.language())
.map(SonarLanguage::getSonarLanguageKey)
.ifPresent(languages::add);
});
t.setData("fileSizes", fileSizes);
t.setData("languages", languages);
t.setData("activeRulesCount", configuration.activeRules().size());
});
try {
var issueCounter = new AtomicInteger(0);
Consumer<Issue> issueCountingListener = issue -> {
issueCounter.incrementAndGet();
issueListener.accept(issue);
};
var result = moduleContainer.analyze(configuration, issueCountingListener, progressIndicator, trace);
doIfTraceIsSet(t -> {
t.setData("failedFilesCount", result.failedAnalysisFiles().size());
t.setData("foundIssuesCount", issueCounter.get());
t.finishSuccessfully();
});
result.setDuration(Duration.ofMillis(System.currentTimeMillis() - startTime));
return result;
} catch (Throwable e) {
originalException = e;
doIfTraceIsSet(t -> t.finishExceptionally(e));
throw e;
} finally {
try {
if (moduleContainer.isTransient()) {
moduleContainer.stopComponents();
}
} catch (Exception e) {
if (originalException != null) {
e.addSuppressed(originalException);
}
throw e;
}
}
}
private void doIfTraceIsSet(Consumer<Trace> action) {
if (trace != null) {
action.accept(trace);
}
}
public AnalyzeCommand mergeWith(AnalyzeCommand otherNewerAnalyzeCommand) {
var analysisConfiguration = configurationSupplier.get();
var newerAnalysisConfiguration = otherNewerAnalyzeCommand.configurationSupplier.get();
var mergedInputFiles = new ArrayList<>(newerAnalysisConfiguration.inputFiles());
var newInputFileUris = newerAnalysisConfiguration.inputFiles().stream().map(ClientInputFile::uri).collect(Collectors.toSet());
for (ClientInputFile inputFile : analysisConfiguration.inputFiles()) {
if (!newInputFileUris.contains(inputFile.uri())) {
mergedInputFiles.add(inputFile);
}
}
var mergedAnalysisConfiguration = AnalysisConfiguration.builder()
.addActiveRules(newerAnalysisConfiguration.activeRules())
.setBaseDir(newerAnalysisConfiguration.baseDir())
.putAllExtraProperties(newerAnalysisConfiguration.extraProperties())
.addInputFiles(mergedInputFiles)
.build();
return new AnalyzeCommand(moduleKey, analysisId, triggerType, () -> mergedAnalysisConfiguration, issueListener, trace, new SonarLintCancelMonitor(), taskManager,
analysisStarted, isReadySupplier, mergedInputFiles.stream().map(ClientInputFile::uri).collect(Collectors.toSet()), newerAnalysisConfiguration.extraProperties(),
futureResult);
}
@Override
public void cancel() {
if (!cancelMonitor.isCanceled()) {
cancelMonitor.cancel();
}
if (!futureResult.isCancelled()) {
futureResult.cancel(true);
}
}
@Override
public boolean shouldCancelPost(Command executingCommand) {
if (!(executingCommand instanceof AnalyzeCommand analyzeCommand)) {
return false;
}
if (cancelMonitor.isCanceled() || futureResult.isCancelled()) {
return true;
}
var triggerTypesMatch = getTriggerType() == analyzeCommand.getTriggerType();
var filesMatch = Objects.equals(getFiles(), analyzeCommand.getFiles());
var extraPropertiesMatch = Objects.equals(getExtraProperties(), analyzeCommand.getExtraProperties());
return triggerTypesMatch && filesMatch && extraPropertiesMatch;
}
@Override
public boolean shouldCancelQueue() {
return cancelMonitor.isCanceled() || futureResult.isCancelled();
}
@CheckForNull
public Trace getTrace() {
return trace;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/Command.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.command;
import java.util.concurrent.atomic.AtomicLong;
import org.sonarsource.sonarlint.core.analysis.container.global.ModuleRegistry;
public abstract class Command {
private static final AtomicLong analysisGlobalNumber = new AtomicLong();
private final long sequenceNumber = analysisGlobalNumber.incrementAndGet();
public abstract void execute(ModuleRegistry moduleRegistry);
public final long getSequenceNumber() {
return sequenceNumber;
}
public boolean isReady() {
return true;
}
public void cancel() {
// most commands are not cancelable
}
public boolean shouldCancelPost(Command executingCommand) {
return false;
}
public boolean shouldCancelQueue() {
return false;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/NotifyModuleEventCommand.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.command;
import org.sonarsource.sonarlint.core.analysis.api.ClientModuleFileEvent;
import org.sonarsource.sonarlint.core.analysis.container.global.ModuleRegistry;
import org.sonarsource.sonarlint.core.analysis.container.module.ModuleFileEventNotifier;
public class NotifyModuleEventCommand extends Command {
private final String moduleKey;
private final ClientModuleFileEvent event;
public NotifyModuleEventCommand(String moduleKey, ClientModuleFileEvent event) {
this.moduleKey = moduleKey;
this.event = event;
}
@Override
public void execute(ModuleRegistry moduleRegistry) {
var moduleContainer = moduleRegistry.getContainerIfStarted(moduleKey);
if (moduleContainer != null) {
moduleContainer.getComponentByType(ModuleFileEventNotifier.class).fireModuleFileEvent(event);
}
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/ResetPluginsCommand.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.command;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
import org.sonarsource.sonarlint.core.analysis.AnalysisQueue;
import org.sonarsource.sonarlint.core.analysis.SchedulerResetConfiguration;
import org.sonarsource.sonarlint.core.analysis.container.global.GlobalAnalysisContainer;
import org.sonarsource.sonarlint.core.analysis.container.global.ModuleRegistry;
public class ResetPluginsCommand extends Command {
private final Supplier<SchedulerResetConfiguration> schedulerResetConfigurationSupplier;
private final AtomicReference<GlobalAnalysisContainer> globalAnalysisContainer;
private final AnalysisQueue analysisQueue;
public ResetPluginsCommand(AtomicReference<GlobalAnalysisContainer> globalAnalysisContainer, AnalysisQueue analysisQueue,
Supplier<SchedulerResetConfiguration> schedulerResetConfigurationSupplier) {
this.schedulerResetConfigurationSupplier = schedulerResetConfigurationSupplier;
this.globalAnalysisContainer = globalAnalysisContainer;
this.analysisQueue = analysisQueue;
}
@Override
public void execute(ModuleRegistry moduleRegistry) {
globalAnalysisContainer.get().stopComponents();
var pluginsWithConfig = schedulerResetConfigurationSupplier.get();
globalAnalysisContainer.set(new GlobalAnalysisContainer(pluginsWithConfig.config(), pluginsWithConfig.plugins()));
globalAnalysisContainer.get().startComponents();
analysisQueue.clearAllButAnalysesAndResets();
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/UnregisterModuleCommand.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.command;
import org.sonarsource.sonarlint.core.analysis.container.global.ModuleRegistry;
public final class UnregisterModuleCommand extends Command {
private final String moduleKey;
public UnregisterModuleCommand(String moduleKey) {
this.moduleKey = moduleKey;
}
@Override
public void execute(ModuleRegistry moduleRegistry) {
moduleRegistry.unregisterModule(moduleKey);
}
public String getModuleKey() {
return moduleKey;
}
@Override
public boolean shouldCancelPost(Command executingCommand) {
return executingCommand instanceof AnalyzeCommand analyzeCommand && analyzeCommand.getModuleKey().equals(moduleKey);
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/package-info.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
@ParametersAreNonnullByDefault
package org.sonarsource.sonarlint.core.analysis.command;
import javax.annotation.ParametersAreNonnullByDefault;
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/ContainerLifespan.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container;
public enum ContainerLifespan {
INSTANCE, MODULE, ANALYSIS
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisConfigurationProvider.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis;
import org.sonar.api.config.Configuration;
import org.sonarsource.sonarlint.core.plugin.commons.sonarapi.ConfigurationBridge;
import org.springframework.context.annotation.Bean;
public class AnalysisConfigurationProvider {
private Configuration analysisConfig;
@Bean("configuration")
public Configuration provide(AnalysisSettings settings) {
if (analysisConfig == null) {
this.analysisConfig = new ConfigurationBridge(settings);
}
return analysisConfig;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisContainer.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis;
import org.sonar.api.batch.rule.CheckFactory;
import org.sonar.api.resources.Languages;
import org.sonar.api.scan.filesystem.PathResolver;
import org.sonarsource.sonarlint.core.analysis.container.ContainerLifespan;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.FileIndexer;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.FileMetadata;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.InputFileBuilder;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.InputFileIndex;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.LanguageDetection;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.SonarLintFileSystem;
import org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem.SonarLintInputProject;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.IssueFilters;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.ignore.EnforceIssuesFilter;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.ignore.IgnoreIssuesFilter;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.ignore.SonarLintNoSonarFilter;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.ignore.pattern.IssueInclusionPatternInitializer;
import org.sonarsource.sonarlint.core.analysis.container.analysis.issue.ignore.scanner.IssueExclusionsLoader;
import org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorOptimizer;
import org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SensorsExecutor;
import org.sonarsource.sonarlint.core.analysis.container.analysis.sensor.SonarLintSensorStorage;
import org.sonarsource.sonarlint.core.analysis.container.global.AnalysisExtensionInstaller;
import org.sonarsource.sonarlint.core.analysis.sonarapi.DefaultSensorContext;
import org.sonarsource.sonarlint.core.analysis.sonarapi.noop.NoOpFileLinesContextFactory;
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
import org.sonarsource.sonarlint.core.commons.progress.ProgressIndicator;
import org.sonarsource.sonarlint.core.plugin.commons.container.SpringComponentContainer;
public class AnalysisContainer extends SpringComponentContainer {
private static final SonarLintLogger LOG = SonarLintLogger.get();
private final ProgressIndicator cancelMonitor;
public AnalysisContainer(SpringComponentContainer globalContainer, ProgressIndicator progressIndicator) {
super(globalContainer);
this.cancelMonitor = progressIndicator;
}
@Override
protected void doBeforeStart() {
addCoreComponents();
addPluginExtensions();
}
private void addCoreComponents() {
add(
cancelMonitor,
SonarLintInputProject.class,
NoOpFileLinesContextFactory.class,
// temp
new AnalysisTempFolderProvider(),
// file system
PathResolver.class,
// lang
Languages.class,
AnalysisSettings.class,
new AnalysisConfigurationProvider(),
// file system
InputFileIndex.class,
InputFileBuilder.class,
FileMetadata.class,
LanguageDetection.class,
FileIndexer.class,
SonarLintFileSystem.class,
// Exclusions using SonarQube properties
EnforceIssuesFilter.class,
IgnoreIssuesFilter.class,
IssueExclusionPatternInitializer.class,
IssueInclusionPatternInitializer.class,
IssueExclusionsLoader.class,
SensorOptimizer.class,
SensorsExecutor.class,
DefaultSensorContext.class,
SonarLintSensorStorage.class,
IssueFilters.class,
// rules
CheckFactory.class,
// issues
SonarLintNoSonarFilter.class);
}
private void addPluginExtensions() {
getParent().getComponentByType(AnalysisExtensionInstaller.class).install(this, ContainerLifespan.ANALYSIS);
}
@Override
protected void doAfterStart() {
LOG.debug("Start analysis");
// Don't initialize Sensors before the FS is indexed
getComponentByType(FileIndexer.class).index();
getComponentByType(SensorsExecutor.class).execute();
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisSettings.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis;
import java.util.HashMap;
import java.util.Map;
import org.sonar.api.config.PropertyDefinitions;
import org.sonarsource.sonarlint.core.analysis.api.AnalysisConfiguration;
import org.sonarsource.sonarlint.core.analysis.container.global.GlobalSettings;
import org.sonarsource.sonarlint.core.plugin.commons.sonarapi.MapSettings;
public class AnalysisSettings extends MapSettings {
public AnalysisSettings(GlobalSettings globalSettings, AnalysisConfiguration analysisConfig, PropertyDefinitions propertyDefinitions) {
super(propertyDefinitions, mergeInOrder(globalSettings, analysisConfig));
}
private static Map<String, String> mergeInOrder(GlobalSettings globalSettings, AnalysisConfiguration analysisConfig) {
Map<String, String> result = new HashMap<>(globalSettings.getProperties());
result.putAll(analysisConfig.extraProperties());
return result;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisTempFolderProvider.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis;
import java.io.File;
import javax.annotation.Nullable;
import org.sonar.api.utils.TempFolder;
import org.springframework.context.annotation.Bean;
public class AnalysisTempFolderProvider {
private final NoTempFilesDuringAnalysis instance = new NoTempFilesDuringAnalysis();
@Bean("tempFolder")
public TempFolder provide() {
return instance;
}
private static class NoTempFilesDuringAnalysis implements TempFolder {
@Override
public File newDir() {
throw throwUOEFolder();
}
@Override
public File newDir(String name) {
throw throwUOEFolder();
}
private static UnsupportedOperationException throwUOEFolder() {
return new UnsupportedOperationException("Don't create temp folders during analysis");
}
@Override
public File newFile() {
throw throwUOEFiles();
}
private static UnsupportedOperationException throwUOEFiles() {
return new UnsupportedOperationException("Don't create temp files during analysis");
}
@Override
public File newFile(@Nullable String prefix, @Nullable String suffix) {
throw throwUOEFiles();
}
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/IssueListenerHolder.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis;
import java.util.function.Consumer;
import org.sonarsource.sonarlint.core.analysis.api.Issue;
/**
* We need a dedicated class for dependency injection
*
*/
public class IssueListenerHolder {
private final Consumer<Issue> wrapped;
public IssueListenerHolder(Consumer<Issue> issueListener) {
this.wrapped = issueListener;
}
public void handle(Issue issue) {
wrapped.accept(issue);
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/SonarLintPathPattern.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis;
import javax.annotation.Nullable;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Strings;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.utils.PathUtils;
import org.sonar.api.utils.WildcardPattern;
import org.sonarsource.sonarlint.core.commons.log.SonarLintLogger;
/**
* Path relative to module basedir
*/
public class SonarLintPathPattern {
private static final SonarLintLogger LOG = SonarLintLogger.get();
final WildcardPattern pattern;
public SonarLintPathPattern(String pattern) {
if (pattern.startsWith("file:")) {
LOG.warn("Unsupported path pattern: " + pattern);
pattern = pattern.replaceAll("^file:/*", "");
}
if (!pattern.startsWith("**/")) {
pattern = "**/" + pattern;
}
this.pattern = WildcardPattern.create(pattern);
}
public static SonarLintPathPattern[] create(String[] s) {
var result = new SonarLintPathPattern[s.length];
for (var i = 0; i < s.length; i++) {
result[i] = new SonarLintPathPattern(s[i]);
}
return result;
}
public boolean match(InputFile inputFile) {
return match(inputFile.relativePath(), true);
}
public boolean match(String filePath) {
return match(filePath, true);
}
public boolean match(InputFile inputFile, boolean caseSensitiveFileExtension) {
return match(inputFile.relativePath(), caseSensitiveFileExtension);
}
public boolean match(String filePath, boolean caseSensitiveFileExtension) {
var path = PathUtils.sanitize(filePath);
if (!caseSensitiveFileExtension) {
var extension = sanitizeExtension(FilenameUtils.getExtension(path));
if (StringUtils.isNotBlank(extension)) {
path = Strings.CI.removeEnd(path, extension);
path = path + extension;
}
}
return path != null && pattern.match(path);
}
@Override
public String toString() {
return pattern.toString();
}
static String sanitizeExtension(@Nullable String suffix) {
return StringUtils.lowerCase(Strings.CS.removeStart(suffix, "."));
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/AbstractFilePredicate.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem;
import java.util.stream.StreamSupport;
import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.FileSystem.Index;
import org.sonar.api.batch.fs.InputFile;
/**
* Partial implementation of {@link FilePredicate}.
* @since 5.1
*/
public abstract class AbstractFilePredicate implements OptimizedFilePredicate {
protected static final int DEFAULT_PRIORITY = 10;
@Override
public Iterable<InputFile> filter(Iterable<InputFile> target) {
return StreamSupport.stream(target.spliterator(), false).filter(AbstractFilePredicate.this::apply).toList();
}
@Override
public Iterable<InputFile> get(Index index) {
return filter(index.inputFiles());
}
@Override
public int priority() {
return DEFAULT_PRIORITY;
}
@Override
public final int compareTo(OptimizedFilePredicate o) {
return o.priority() - priority();
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/AndPredicate.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.FileSystem.Index;
import org.sonar.api.batch.fs.InputFile;
/**
* @since 4.2
*/
class AndPredicate extends AbstractFilePredicate {
private final List<OptimizedFilePredicate> predicates = new ArrayList<>();
private AndPredicate() {
}
public static FilePredicate create(Collection<FilePredicate> predicates) {
if (predicates.isEmpty()) {
return TruePredicate.TRUE;
}
var result = new AndPredicate();
for (FilePredicate filePredicate : predicates) {
if (filePredicate == TruePredicate.TRUE) {
continue;
} else if (filePredicate == FalsePredicate.FALSE) {
return FalsePredicate.FALSE;
} else if (filePredicate instanceof AndPredicate andPredicate) {
result.predicates.addAll(andPredicate.predicates);
} else {
result.predicates.add(OptimizedFilePredicateAdapter.create(filePredicate));
}
}
Collections.sort(result.predicates);
return result;
}
@Override
public boolean apply(InputFile f) {
for (OptimizedFilePredicate predicate : predicates) {
if (!predicate.apply(f)) {
return false;
}
}
return true;
}
@Override
public Iterable<InputFile> filter(Iterable<InputFile> target) {
var result = target;
for (OptimizedFilePredicate predicate : predicates) {
result = predicate.filter(result);
}
return result;
}
@Override
public Iterable<InputFile> get(Index index) {
if (predicates.isEmpty()) {
return index.inputFiles();
}
// Optimization, use get on first predicate then filter with next predicates
var result = predicates.get(0).get(index);
for (var i = 1; i < predicates.size(); i++) {
result = predicates.get(i).filter(result);
}
return result;
}
}
================================================
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultFilePredicates.java
================================================
/*
* SonarLint Core - Analysis Engine
* Copyright (C) SonarSource Sàrl
* mailto:info AT sonarsource DOT 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 02110-1301, USA.
*/
package org.sonarsource.sonarlint.core.analysis.container.analysis.filesystem;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.FilePredicates;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Status;
import org.sonarsource.sonarlint.core.analysis.container.analysis.SonarLintPathPattern;
/**
* Factory of {@link org.sonar.api.batch.fs.FilePredicate}
*
* @since 4.2
*/
public class DefaultFilePredicates implements FilePredicates {
/**
* Returns a predicate that always evaluates to true
*/
@Override
public FilePredicate all() {
return TruePredicate.TRUE;
}
/**
* Returns a predicate that always evaluates to false
*/
@Override
public FilePredicate none() {
return FalsePredicate.FALSE;
}
@Override
public FilePredicate hasAbsolutePath(String s) {
throw new UnsupportedOperationException("hasAbsolutePath");
}
/**
* non-normalized path and Windows-style path are supported
*/
@Override
public FilePredicate hasRelativePath(String s) {
throw new UnsupportedOperationException("hasRelativePath");
}
@Override
public FilePredicate hasURI(URI uri) {
return new URIPredicate(uri);
}
@Override
public FilePredicate matchesPathPattern(String inclusionPattern) {
return new PathPatternPredicate(new SonarLintPathPattern(inclusionPattern));
}
@Override
public FilePredicate matchesPathPatterns(String[] inclusionPatterns) {
if (inclusionPatterns.length == 0) {
return TruePredicate.TRUE;
}
var predicates = new FilePredicate[inclusionPatterns.length];
for (var i = 0; i < inclusionPatterns.length; i++) {
predicates[i] = new PathPatternPredicate(new SonarLintPathPattern(inclusionPatterns[i]));
}
return or(predicates);
}
@Override
public FilePredicate doesNotMatchPathPattern(String exclusionPattern) {
return not(matchesPathPattern(exclusionPattern));
}
@Override
public FilePredicate doesNotMatchPathPatterns(String[] exclusionPatterns) {
if (exclusionPatterns.length == 0) {
return TruePredicate.TRUE;
}
return not(matchesPathPatterns(exclusionPatterns));
}
@Override
public FilePredicate hasPath(String s) {
throw new UnsupportedOperationException("hasPath");
}
@Override
public FilePredicate is(File ioFile) {
// Needed for SonarCFamily
return hasURI(ioFile.toURI());
}
@Override
public FilePredicate hasLanguage(String language) {
return new LanguagePredicate(language);
}
@Override
public FilePredicate hasLanguages(Collection<String> languages) {
List<FilePredicate> list = new ArrayList<>();
for (String language : languages) {
list.add(hasLanguage(language));
}
return or(list);
}
@Override
public FilePredicate hasLanguages(String... languages) {
List<FilePredicate> list = new ArrayList<>();
for (String language : languages) {
list.add(hasLanguage(language));
}
return or(list);
}
@Override
public FilePredicate hasType(InputFile.Type type) {
return new TypePredicate(type);
}
@Override
public FilePredicate not(FilePredicate p) {
return new NotPredicate(p);
}
@Override
public FilePredicate or(Collection<FilePredicate> or) {
return OrPredicate.create(or);
}
@Override
public FilePredicate or(FilePredicate... or) {
return OrPredicate.create(Arrays.asList(or));
}
@Override
public FilePredicate or(FilePredicate first, FilePredicate second) {
return OrPredicate.create(Arrays.asList(first, second));
}
@Override
public FilePredicate and(Collection<FilePredicate> and) {
return AndPredicate.create(and);
}
@Override
public FilePredicate and(FilePredicate... and) {
return AndPredicate.create(Arrays.asList(and));
}
@Override
public FilePredicate an
Showing preview only (209K chars total). Download the full file or copy to clipboard to get everything.
gitextract_0whgick7/ ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── renovate.json │ └── workflows/ │ ├── PullRequestClosed.yml │ ├── PullRequestCreated.yml │ ├── RequestReview.yml │ ├── SubmitReview.yml │ ├── build.yml │ ├── full-release.yml │ ├── notify-failure.yml │ ├── releasability.yml │ ├── release.yml │ └── shadow_scans.yml ├── .gitignore ├── .mvn/ │ └── wrapper/ │ └── maven-wrapper.properties ├── .sonarlint/ │ └── connectedMode.json ├── API_CHANGES.md ├── LICENSE.txt ├── NOTICE.txt ├── README.md ├── SECURITY.md ├── backend/ │ ├── analysis-engine/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── analysis/ │ │ │ ├── AnalysisQueue.java │ │ │ ├── AnalysisScheduler.java │ │ │ ├── SchedulerResetConfiguration.java │ │ │ ├── api/ │ │ │ │ ├── AnalysisConfiguration.java │ │ │ │ ├── AnalysisResults.java │ │ │ │ ├── AnalysisSchedulerConfiguration.java │ │ │ │ ├── ClientInputFile.java │ │ │ │ ├── ClientInputFileEdit.java │ │ │ │ ├── ClientModuleFileEvent.java │ │ │ │ ├── ClientModuleFileSystem.java │ │ │ │ ├── ClientModuleInfo.java │ │ │ │ ├── DefaultLocation.java │ │ │ │ ├── Flow.java │ │ │ │ ├── Issue.java │ │ │ │ ├── IssueLocation.java │ │ │ │ ├── QuickFix.java │ │ │ │ ├── TextEdit.java │ │ │ │ ├── TriggerType.java │ │ │ │ ├── WithTextRange.java │ │ │ │ └── package-info.java │ │ │ ├── command/ │ │ │ │ ├── AnalyzeCommand.java │ │ │ │ ├── Command.java │ │ │ │ ├── NotifyModuleEventCommand.java │ │ │ │ ├── ResetPluginsCommand.java │ │ │ │ ├── UnregisterModuleCommand.java │ │ │ │ └── package-info.java │ │ │ ├── container/ │ │ │ │ ├── ContainerLifespan.java │ │ │ │ ├── analysis/ │ │ │ │ │ ├── AnalysisConfigurationProvider.java │ │ │ │ │ ├── AnalysisContainer.java │ │ │ │ │ ├── AnalysisSettings.java │ │ │ │ │ ├── AnalysisTempFolderProvider.java │ │ │ │ │ ├── IssueListenerHolder.java │ │ │ │ │ ├── SonarLintPathPattern.java │ │ │ │ │ ├── filesystem/ │ │ │ │ │ │ ├── AbstractFilePredicate.java │ │ │ │ │ │ ├── AndPredicate.java │ │ │ │ │ │ ├── DefaultFilePredicates.java │ │ │ │ │ │ ├── DefaultTextPointer.java │ │ │ │ │ │ ├── DefaultTextRange.java │ │ │ │ │ │ ├── FalsePredicate.java │ │ │ │ │ │ ├── FileExtensionPredicate.java │ │ │ │ │ │ ├── FileIndexer.java │ │ │ │ │ │ ├── FileMetadata.java │ │ │ │ │ │ ├── FilenamePredicate.java │ │ │ │ │ │ ├── InputFileBuilder.java │ │ │ │ │ │ ├── InputFileIndex.java │ │ │ │ │ │ ├── Language.java │ │ │ │ │ │ ├── LanguageDetection.java │ │ │ │ │ │ ├── LanguagePredicate.java │ │ │ │ │ │ ├── NotPredicate.java │ │ │ │ │ │ ├── OptimizedFilePredicate.java │ │ │ │ │ │ ├── OptimizedFilePredicateAdapter.java │ │ │ │ │ │ ├── OrPredicate.java │ │ │ │ │ │ ├── PathPatternPredicate.java │ │ │ │ │ │ ├── ProgressReport.java │ │ │ │ │ │ ├── SonarLintFileSystem.java │ │ │ │ │ │ ├── SonarLintInputDir.java │ │ │ │ │ │ ├── SonarLintInputFile.java │ │ │ │ │ │ ├── SonarLintInputProject.java │ │ │ │ │ │ ├── StatusPredicate.java │ │ │ │ │ │ ├── TruePredicate.java │ │ │ │ │ │ ├── TypePredicate.java │ │ │ │ │ │ ├── URIPredicate.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── issue/ │ │ │ │ │ │ ├── DefaultIssueFilterChain.java │ │ │ │ │ │ ├── IssueFilters.java │ │ │ │ │ │ ├── SensorInputFileEdit.java │ │ │ │ │ │ ├── SensorQuickFix.java │ │ │ │ │ │ ├── SensorTextEdit.java │ │ │ │ │ │ ├── TextRangeUtils.java │ │ │ │ │ │ ├── ignore/ │ │ │ │ │ │ │ ├── EnforceIssuesFilter.java │ │ │ │ │ │ │ ├── IgnoreIssuesFilter.java │ │ │ │ │ │ │ ├── SonarLintNoSonarFilter.java │ │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ │ ├── pattern/ │ │ │ │ │ │ │ │ ├── AbstractPatternInitializer.java │ │ │ │ │ │ │ │ ├── BlockIssuePattern.java │ │ │ │ │ │ │ │ ├── IssueExclusionPatternInitializer.java │ │ │ │ │ │ │ │ ├── IssueInclusionPatternInitializer.java │ │ │ │ │ │ │ │ ├── IssuePattern.java │ │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ │ └── scanner/ │ │ │ │ │ │ │ ├── IssueExclusionsLoader.java │ │ │ │ │ │ │ ├── IssueExclusionsRegexpScanner.java │ │ │ │ │ │ │ ├── LineRange.java │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── sensor/ │ │ │ │ │ ├── SensorOptimizer.java │ │ │ │ │ ├── SensorsExecutor.java │ │ │ │ │ ├── SonarLintSensorStorage.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── global/ │ │ │ │ │ ├── AnalysisExtensionInstaller.java │ │ │ │ │ ├── GlobalAnalysisContainer.java │ │ │ │ │ ├── GlobalConfigurationProvider.java │ │ │ │ │ ├── GlobalExtensionContainer.java │ │ │ │ │ ├── GlobalSettings.java │ │ │ │ │ ├── GlobalTempFolder.java │ │ │ │ │ ├── GlobalTempFolderProvider.java │ │ │ │ │ ├── ModuleRegistry.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── module/ │ │ │ │ │ ├── DefaultModuleFileEvent.java │ │ │ │ │ ├── ModuleContainer.java │ │ │ │ │ ├── ModuleFileEventNotifier.java │ │ │ │ │ ├── ModuleInputFileBuilder.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── sonarapi/ │ │ │ ├── ActiveRulesAdapter.java │ │ │ ├── DefaultAnalysisError.java │ │ │ ├── DefaultFilterableIssue.java │ │ │ ├── DefaultFlow.java │ │ │ ├── DefaultSensorContext.java │ │ │ ├── DefaultSensorDescriptor.java │ │ │ ├── DefaultSonarLintIssue.java │ │ │ ├── DefaultSonarLintIssueLocation.java │ │ │ ├── DefaultStorable.java │ │ │ ├── DefaultTempFolder.java │ │ │ ├── SonarLintModuleFileSystem.java │ │ │ ├── noop/ │ │ │ │ ├── NoOpFileLinesContext.java │ │ │ │ ├── NoOpFileLinesContextFactory.java │ │ │ │ ├── NoOpNewCoverage.java │ │ │ │ ├── NoOpNewCpdTokens.java │ │ │ │ ├── NoOpNewHighlighting.java │ │ │ │ ├── NoOpNewMeasure.java │ │ │ │ ├── NoOpNewMessageFormatting.java │ │ │ │ ├── NoOpNewSignificantCode.java │ │ │ │ ├── NoOpNewSymbolTable.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ ├── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ └── analysis/ │ │ │ │ ├── AnalysisQueueTest.java │ │ │ │ ├── api/ │ │ │ │ │ ├── AnalysisConfigurationTests.java │ │ │ │ │ ├── AnalysisSchedulerConfigurationTests.java │ │ │ │ │ ├── ClientInputFileTests.java │ │ │ │ │ ├── DefaultLocationTests.java │ │ │ │ │ └── IssueLocationTests.java │ │ │ │ ├── command/ │ │ │ │ │ └── AnalyzeCommandTest.java │ │ │ │ ├── container/ │ │ │ │ │ ├── analysis/ │ │ │ │ │ │ ├── AnalysisSettingsTest.java │ │ │ │ │ │ ├── AnalysisTempFolderProviderTests.java │ │ │ │ │ │ ├── SonarLintPathPatternTests.java │ │ │ │ │ │ ├── filesystem/ │ │ │ │ │ │ │ ├── DefaultFilePredicatesTests.java │ │ │ │ │ │ │ ├── InputFileBuilderTests.java │ │ │ │ │ │ │ ├── InputFileCacheTests.java │ │ │ │ │ │ │ ├── LanguageDetectionTests.java │ │ │ │ │ │ │ ├── ProgressReportTests.java │ │ │ │ │ │ │ ├── SonarLintFileSystemTests.java │ │ │ │ │ │ │ ├── SonarLintInputDirTests.java │ │ │ │ │ │ │ └── SonarLintInputFileTests.java │ │ │ │ │ │ ├── issue/ │ │ │ │ │ │ │ └── ignore/ │ │ │ │ │ │ │ ├── EnforceIssuesFilterTests.java │ │ │ │ │ │ │ ├── IgnoreIssuesFilterTests.java │ │ │ │ │ │ │ ├── pattern/ │ │ │ │ │ │ │ │ ├── IssueExclusionPatternInitializerTests.java │ │ │ │ │ │ │ │ ├── IssueInclusionPatternInitializerTests.java │ │ │ │ │ │ │ │ └── IssuePatternTests.java │ │ │ │ │ │ │ └── scanner/ │ │ │ │ │ │ │ ├── IssueExclusionsLoaderTests.java │ │ │ │ │ │ │ ├── IssueExclusionsRegexpScannerTests.java │ │ │ │ │ │ │ └── LineRangeTests.java │ │ │ │ │ │ └── sensor/ │ │ │ │ │ │ ├── SensorOptimizerTests.java │ │ │ │ │ │ ├── SensorsExecutorTests.java │ │ │ │ │ │ └── SonarLintSensorStorageTests.java │ │ │ │ │ ├── global/ │ │ │ │ │ │ ├── AnalysisExtensionInstallerTests.java │ │ │ │ │ │ ├── GlobalSettingsTests.java │ │ │ │ │ │ └── GlobalTempFolderProviderTests.java │ │ │ │ │ └── module/ │ │ │ │ │ └── ModuleInputFileBuilderTests.java │ │ │ │ ├── mediumtests/ │ │ │ │ │ └── AnalysisSchedulerMediumTests.java │ │ │ │ └── sonarapi/ │ │ │ │ ├── DefaultAnalysisErrorTests.java │ │ │ │ ├── DefaultFilterableIssueTests.java │ │ │ │ ├── DefaultSensorContextTests.java │ │ │ │ ├── DefaultSensorDescriptorTests.java │ │ │ │ ├── DefaultSonarLintIssueTests.java │ │ │ │ ├── DefaultTempFolderTests.java │ │ │ │ └── noop/ │ │ │ │ ├── NoOpNewCoverageTests.java │ │ │ │ ├── NoOpNewCpdTokensTests.java │ │ │ │ ├── NoOpNewHighlightingTests.java │ │ │ │ ├── NoOpNewMeasureTests.java │ │ │ │ ├── NoOpNewMessageFormattingTest.java │ │ │ │ ├── NoOpNewSignificantCodeTests.java │ │ │ │ └── NoOpNewSymbolTableTests.java │ │ │ └── testutils/ │ │ │ ├── FileUtils.java │ │ │ ├── InMemoryTestClientInputFile.java │ │ │ ├── OnDiskTestClientInputFile.java │ │ │ ├── TestClientInputFile.java │ │ │ └── TestInputFileBuilder.java │ │ └── resources/ │ │ ├── IssueExclusionsRegexpScannerTests/ │ │ │ ├── file-with-double-regexp-mess.txt │ │ │ ├── file-with-double-regexp-twice.txt │ │ │ ├── file-with-double-regexp-unfinished.txt │ │ │ ├── file-with-double-regexp-wrong-order.txt │ │ │ ├── file-with-double-regexp.txt │ │ │ ├── file-with-no-regexp.txt │ │ │ ├── file-with-single-regexp-and-double-regexp.txt │ │ │ ├── file-with-single-regexp-last-line.txt │ │ │ └── file-with-single-regexp.txt │ │ └── logback-test.xml │ ├── cli/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── assembly/ │ │ │ │ ├── dist-linux_aarch64.xml │ │ │ │ ├── dist-linux_x64.xml │ │ │ │ ├── dist-macosx_aarch64.xml │ │ │ │ ├── dist-macosx_x64.xml │ │ │ │ ├── dist-no-arch.xml │ │ │ │ └── dist-windows_x64.xml │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── backend/ │ │ │ └── cli/ │ │ │ ├── EndOfStreamAwareInputStream.java │ │ │ ├── SonarLintServerCli.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── backend/ │ │ └── cli/ │ │ ├── EndOfStreamAwareInputStreamTest.java │ │ └── SonarLintServerCliTest.java │ ├── commons/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ └── commons/ │ │ │ │ ├── CleanCodeAttribute.java │ │ │ │ ├── CleanCodeAttributeCategory.java │ │ │ │ ├── ConnectionKind.java │ │ │ │ ├── HotspotReviewStatus.java │ │ │ │ ├── IOExceptionUtils.java │ │ │ │ ├── ImpactSeverity.java │ │ │ │ ├── IssueSeverity.java │ │ │ │ ├── IssueStatus.java │ │ │ │ ├── KnownFinding.java │ │ │ │ ├── KnownFindingType.java │ │ │ │ ├── LineWithHash.java │ │ │ │ ├── LocalOnlyIssue.java │ │ │ │ ├── LocalOnlyIssueResolution.java │ │ │ │ ├── MultiFileBlameResult.java │ │ │ │ ├── NewCodeDefinition.java │ │ │ │ ├── NewCodeMode.java │ │ │ │ ├── RuleKey.java │ │ │ │ ├── RuleType.java │ │ │ │ ├── SoftwareQuality.java │ │ │ │ ├── SonarLintCoreVersion.java │ │ │ │ ├── SonarLintException.java │ │ │ │ ├── SonarLintGitIgnore.java │ │ │ │ ├── SonarLintUserHome.java │ │ │ │ ├── Transition.java │ │ │ │ ├── Version.java │ │ │ │ ├── VulnerabilityProbability.java │ │ │ │ ├── api/ │ │ │ │ │ ├── SonarLanguage.java │ │ │ │ │ ├── TextRange.java │ │ │ │ │ ├── TextRangeWithHash.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── progress/ │ │ │ │ │ ├── CanceledException.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── dogfood/ │ │ │ │ │ ├── DogfoodEnvironmentDetectionService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── log/ │ │ │ │ │ ├── FormattingTuple.java │ │ │ │ │ ├── LogOutput.java │ │ │ │ │ ├── MessageFormatter.java │ │ │ │ │ ├── NormalizedParameters.java │ │ │ │ │ ├── SonarLintLogger.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── plugins/ │ │ │ │ │ ├── Dependency.java │ │ │ │ │ ├── EnterpriseReplacement.java │ │ │ │ │ ├── SonarArtifact.java │ │ │ │ │ ├── SonarPlugin.java │ │ │ │ │ ├── SonarPluginDependency.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── progress/ │ │ │ │ │ ├── ExecutorServiceShutdownWatchable.java │ │ │ │ │ ├── NoOpProgressMonitor.java │ │ │ │ │ ├── ProgressIndicator.java │ │ │ │ │ ├── ProgressMonitor.java │ │ │ │ │ ├── SonarLintCancelMonitor.java │ │ │ │ │ ├── Task.java │ │ │ │ │ ├── TaskManager.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── storage/ │ │ │ │ │ ├── DatabaseExceptionReporter.java │ │ │ │ │ ├── JooqDatabaseExceptionListener.java │ │ │ │ │ ├── SonarLintDatabase.java │ │ │ │ │ ├── XodusPurgeUtils.java │ │ │ │ │ ├── adapter/ │ │ │ │ │ │ ├── LocalDateAdapter.java │ │ │ │ │ │ ├── LocalDateTimeAdapter.java │ │ │ │ │ │ ├── OffsetDateTimeAdapter.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── local/ │ │ │ │ │ │ ├── FileStorageManager.java │ │ │ │ │ │ ├── LocalStorage.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── tracing/ │ │ │ │ │ ├── Span.java │ │ │ │ │ ├── Step.java │ │ │ │ │ ├── Trace.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── util/ │ │ │ │ │ ├── FailSafeExecutors.java │ │ │ │ │ ├── FileUtils.java │ │ │ │ │ ├── StringUtils.java │ │ │ │ │ ├── git/ │ │ │ │ │ │ ├── BlameResult.java │ │ │ │ │ │ ├── GitBlameReader.java │ │ │ │ │ │ ├── GitService.java │ │ │ │ │ │ ├── NativeGit.java │ │ │ │ │ │ ├── NativeGitLocator.java │ │ │ │ │ │ ├── ProcessWrapperFactory.java │ │ │ │ │ │ ├── exceptions/ │ │ │ │ │ │ │ ├── GitException.java │ │ │ │ │ │ │ ├── GitRepoNotFoundException.java │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── validation/ │ │ │ │ ├── InvalidFields.java │ │ │ │ ├── RegexpValidator.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ ├── db/ │ │ │ │ └── migration/ │ │ │ │ ├── README_BEFORE_TOUCHING_THIS_FOLDER.md │ │ │ │ ├── V1__init_database.sql │ │ │ │ ├── V2__create_local_only_issues_table.sql │ │ │ │ ├── V3__allow_longer_messages_for_known_findings_table.sql │ │ │ │ ├── V4__allow_longer_file_paths.sql │ │ │ │ └── V5__allow_longer_configuration_scope_ids.sql │ │ │ ├── logback-shared.xml │ │ │ └── sl_core_version.txt │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── commons/ │ │ │ ├── HotspotReviewStatusTest.java │ │ │ ├── IOExceptionUtilsTests.java │ │ │ ├── LogTestStartAndEnd.java │ │ │ ├── MultiFileBlameResultTest.java │ │ │ ├── NewCodeDefinitionTests.java │ │ │ ├── RuleKeyTests.java │ │ │ ├── SonarLintCoreVersionTests.java │ │ │ ├── SonarLintUserHomeTests.java │ │ │ ├── StringUtilsTests.java │ │ │ ├── TextRangeTests.java │ │ │ ├── TextRangeWithHashTests.java │ │ │ ├── VersionTests.java │ │ │ ├── log/ │ │ │ │ ├── ConcurrentListAppender.java │ │ │ │ ├── MessageFormatterTests.java │ │ │ │ ├── SonarLintLogTester.java │ │ │ │ └── SonarLintLoggerTests.java │ │ │ ├── progress/ │ │ │ │ └── ExecutorServiceShutdownWatchableTests.java │ │ │ ├── storage/ │ │ │ │ ├── DatabaseExceptionReporterTests.java │ │ │ │ ├── JooqDatabaseExceptionListenerTests.java │ │ │ │ ├── SonarLintDatabaseExceptionTests.java │ │ │ │ └── local/ │ │ │ │ └── FileStorageManagerTest.java │ │ │ ├── testutils/ │ │ │ │ ├── GitUtils.java │ │ │ │ └── MockWebServerExtension.java │ │ │ ├── util/ │ │ │ │ └── git/ │ │ │ │ ├── BlameParserTests.java │ │ │ │ ├── GitServiceTests.java │ │ │ │ ├── NativeGitLocatorTests.java │ │ │ │ ├── NativeGitTest.java │ │ │ │ └── ProcessWrapperFactoryTests.java │ │ │ └── validation/ │ │ │ ├── InvalidFieldsTest.java │ │ │ └── RegexpValidatorTest.java │ │ └── resources/ │ │ └── logback.xml │ ├── core/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ ├── BindingCandidatesFinder.java │ │ │ │ ├── BindingClueProvider.java │ │ │ │ ├── BindingSuggestionProvider.java │ │ │ │ ├── ConfigurationScopeSharedContext.java │ │ │ │ ├── ConfigurationService.java │ │ │ │ ├── ConnectionService.java │ │ │ │ ├── ConnectionSuggestionProvider.java │ │ │ │ ├── DtoMapper.java │ │ │ │ ├── MCPServerConfigurationProvider.java │ │ │ │ ├── OrganizationsCache.java │ │ │ │ ├── ServerFileExclusions.java │ │ │ │ ├── SharedConnectedModeSettingsProvider.java │ │ │ │ ├── SonarCloudActiveEnvironment.java │ │ │ │ ├── SonarCloudRegion.java │ │ │ │ ├── SonarCodeContextService.java │ │ │ │ ├── SonarLintMDC.java │ │ │ │ ├── SonarProjectsCache.java │ │ │ │ ├── SonarQubeClientManager.java │ │ │ │ ├── TextSearchIndex.java │ │ │ │ ├── TokenGeneratorHelper.java │ │ │ │ ├── UserPaths.java │ │ │ │ ├── VersionSoonUnsupportedHelper.java │ │ │ │ ├── active/ │ │ │ │ │ └── rules/ │ │ │ │ │ ├── ActiveRuleDetails.java │ │ │ │ │ ├── ActiveRulesService.java │ │ │ │ │ ├── ServerActiveRulesChanged.java │ │ │ │ │ ├── StandaloneRulesConfigurationChanged.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── ai/ │ │ │ │ │ └── ide/ │ │ │ │ │ ├── AiAgentService.java │ │ │ │ │ ├── AiHookService.java │ │ │ │ │ ├── ExecutableLocator.java │ │ │ │ │ ├── HookScriptType.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── analysis/ │ │ │ │ │ ├── AnalysisFailedEvent.java │ │ │ │ │ ├── AnalysisFinishedEvent.java │ │ │ │ │ ├── AnalysisResult.java │ │ │ │ │ ├── AnalysisSchedulerCache.java │ │ │ │ │ ├── AnalysisService.java │ │ │ │ │ ├── AnalysisStartedEvent.java │ │ │ │ │ ├── AutomaticAnalysisSettingChangedEvent.java │ │ │ │ │ ├── BackendInputFile.java │ │ │ │ │ ├── BackendModuleFileSystem.java │ │ │ │ │ ├── ClientNodeJsPathChanged.java │ │ │ │ │ ├── IssuesRaisedEvent.java │ │ │ │ │ ├── NodeJsService.java │ │ │ │ │ ├── RawIssue.java │ │ │ │ │ ├── RawIssueDetectedEvent.java │ │ │ │ │ ├── UserAnalysisPropertiesRepository.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── branch/ │ │ │ │ │ ├── MatchedSonarProjectBranchChangedEvent.java │ │ │ │ │ ├── SonarProjectBranchMatchingEndedEvent.java │ │ │ │ │ ├── SonarProjectBranchTrackingService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── commons/ │ │ │ │ │ ├── Binding.java │ │ │ │ │ ├── BoundScope.java │ │ │ │ │ ├── DebounceComputer.java │ │ │ │ │ ├── SmartCancelableLoadingCache.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── connection/ │ │ │ │ │ ├── SonarQubeClient.java │ │ │ │ │ ├── SonarQubeClientState.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── embedded/ │ │ │ │ │ └── server/ │ │ │ │ │ ├── AnalyzeFileListRequestHandler.java │ │ │ │ │ ├── AttributeUtils.java │ │ │ │ │ ├── AwaitingUserTokenFutureRepository.java │ │ │ │ │ ├── EmbeddedServer.java │ │ │ │ │ ├── RequestHandlerBindingAssistant.java │ │ │ │ │ ├── ToggleAutomaticAnalysisRequestHandler.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ ├── CorsFilter.java │ │ │ │ │ │ ├── CspFilter.java │ │ │ │ │ │ ├── ParseParamsFilter.java │ │ │ │ │ │ ├── RateLimitFilter.java │ │ │ │ │ │ ├── ValidationFilter.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── GeneratedUserTokenHandler.java │ │ │ │ │ │ ├── ShowFixSuggestionRequestHandler.java │ │ │ │ │ │ ├── ShowHotspotRequestHandler.java │ │ │ │ │ │ ├── ShowIssueRequestHandler.java │ │ │ │ │ │ ├── StatusRequestHandler.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── event/ │ │ │ │ │ ├── BindingConfigChangedEvent.java │ │ │ │ │ ├── ConfigurationScopeRemovedEvent.java │ │ │ │ │ ├── ConfigurationScopesAddedWithBindingEvent.java │ │ │ │ │ ├── ConnectionConfigurationAddedEvent.java │ │ │ │ │ ├── ConnectionConfigurationRemovedEvent.java │ │ │ │ │ ├── ConnectionConfigurationUpdatedEvent.java │ │ │ │ │ ├── ConnectionCredentialsChangedEvent.java │ │ │ │ │ ├── DependencyRisksSynchronizedEvent.java │ │ │ │ │ ├── FixSuggestionReceivedEvent.java │ │ │ │ │ ├── LocalOnlyIssueStatusChangedEvent.java │ │ │ │ │ ├── MatchingSessionEndedEvent.java │ │ │ │ │ ├── PluginStatusUpdateEvent.java │ │ │ │ │ ├── ServerIssueStatusChangedEvent.java │ │ │ │ │ ├── SonarServerEventReceivedEvent.java │ │ │ │ │ ├── TaintVulnerabilitiesSynchronizedEvent.java │ │ │ │ │ ├── TelemetryUpdatedEvent.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FilePathTranslation.java │ │ │ │ │ ├── PathTranslationService.java │ │ │ │ │ ├── ServerFilePathsProvider.java │ │ │ │ │ ├── WindowsShortcutUtils.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── fs/ │ │ │ │ │ ├── ClientFile.java │ │ │ │ │ ├── ClientFileSystemService.java │ │ │ │ │ ├── FileExclusionService.java │ │ │ │ │ ├── FileOpenedEvent.java │ │ │ │ │ ├── FileSystemUpdatedEvent.java │ │ │ │ │ ├── OpenFilesRepository.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── hotspot/ │ │ │ │ │ ├── HotspotService.java │ │ │ │ │ ├── HotspotStatusChangeException.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── http/ │ │ │ │ │ ├── AskClientCertificatePredicate.java │ │ │ │ │ ├── ClientProxyCredentialsProvider.java │ │ │ │ │ ├── ClientProxySelector.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── issue/ │ │ │ │ │ ├── IssueNotFoundException.java │ │ │ │ │ ├── IssueService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── labs/ │ │ │ │ │ ├── IdeLabsHttpClient.java │ │ │ │ │ ├── IdeLabsService.java │ │ │ │ │ ├── IdeLabsSpringConfig.java │ │ │ │ │ ├── IdeLabsSubscriptionRequestPayload.java │ │ │ │ │ ├── IdeLabsSubscriptionResponseBody.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── languages/ │ │ │ │ │ ├── LanguageSupportRepository.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── local/ │ │ │ │ │ └── only/ │ │ │ │ │ ├── IssueStatusBinding.java │ │ │ │ │ ├── XodusLocalOnlyIssueStorageService.java │ │ │ │ │ ├── XodusLocalOnlyIssueStore.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── log/ │ │ │ │ │ ├── LogService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── mode/ │ │ │ │ │ ├── SeverityModeService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── monitoring/ │ │ │ │ │ ├── MonitoringInitializationParams.java │ │ │ │ │ ├── MonitoringService.java │ │ │ │ │ ├── MonitoringUserIdStore.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── newcode/ │ │ │ │ │ ├── NewCodeService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── nodejs/ │ │ │ │ │ ├── InstalledNodeJs.java │ │ │ │ │ ├── NodeJsHelper.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── plugin/ │ │ │ │ │ ├── ArtifactSource.java │ │ │ │ │ ├── DotnetSupport.java │ │ │ │ │ ├── PluginJarUtils.java │ │ │ │ │ ├── PluginLifecycleService.java │ │ │ │ │ ├── PluginStatus.java │ │ │ │ │ ├── PluginStatusMapper.java │ │ │ │ │ ├── PluginStatusNotifierService.java │ │ │ │ │ ├── PluginStatusesChangedEvent.java │ │ │ │ │ ├── PluginsConfiguration.java │ │ │ │ │ ├── PluginsRepository.java │ │ │ │ │ ├── PluginsService.java │ │ │ │ │ ├── loading/ │ │ │ │ │ │ └── strategy/ │ │ │ │ │ │ ├── ArtifactCandidate.java │ │ │ │ │ │ ├── ArtifactsLoadingResult.java │ │ │ │ │ │ ├── ArtifactsLoadingStrategy.java │ │ │ │ │ │ ├── BaseArtifactsLoadingStrategy.java │ │ │ │ │ │ ├── ConnectedArtifactsLoadingStrategy.java │ │ │ │ │ │ ├── ConnectedArtifactsLoadingStrategyFactory.java │ │ │ │ │ │ ├── StandaloneArtifactsLoadingStrategy.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── skipped/ │ │ │ │ │ │ ├── SkippedPlugin.java │ │ │ │ │ │ ├── SkippedPluginsNotifierService.java │ │ │ │ │ │ ├── SkippedPluginsRepository.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── source/ │ │ │ │ │ ├── ArtifactKind.java │ │ │ │ │ ├── ArtifactOrigin.java │ │ │ │ │ ├── ArtifactSource.java │ │ │ │ │ ├── ArtifactState.java │ │ │ │ │ ├── AvailableArtifact.java │ │ │ │ │ ├── LoadResult.java │ │ │ │ │ ├── ResolvedArtifact.java │ │ │ │ │ ├── UniqueTaskExecutor.java │ │ │ │ │ ├── binaries/ │ │ │ │ │ │ ├── BinariesArtifact.java │ │ │ │ │ │ ├── BinariesArtifactSource.java │ │ │ │ │ │ ├── BinariesLocalCacheManager.java │ │ │ │ │ │ ├── BinariesSignatureVerifier.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── embedded/ │ │ │ │ │ │ ├── EmbeddedPluginSource.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── server/ │ │ │ │ │ ├── ServerPluginDownloader.java │ │ │ │ │ ├── ServerPluginSource.java │ │ │ │ │ ├── ServerPluginsCache.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── progress/ │ │ │ │ │ ├── ClientAwareProgressMonitor.java │ │ │ │ │ ├── ClientAwareTaskManager.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── promotion/ │ │ │ │ │ ├── LanguagePromotionService.java │ │ │ │ │ ├── PromotionSpringConfig.java │ │ │ │ │ ├── campaign/ │ │ │ │ │ │ ├── CampaignConstants.java │ │ │ │ │ │ ├── CampaignResolvedEvent.java │ │ │ │ │ │ ├── CampaignService.java │ │ │ │ │ │ ├── CampaignShownEvent.java │ │ │ │ │ │ ├── FeedbackNotificationActionItem.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── storage/ │ │ │ │ │ │ ├── CampaignsLocalStorage.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── remediation/ │ │ │ │ │ └── aicodefix/ │ │ │ │ │ ├── AiCodeFixFeature.java │ │ │ │ │ ├── AiCodeFixService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── reporting/ │ │ │ │ │ ├── FindingReportingService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── repository/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── BindingConfiguration.java │ │ │ │ │ │ ├── ConfigurationRepository.java │ │ │ │ │ │ ├── ConfigurationScope.java │ │ │ │ │ │ ├── ConfigurationScopeWithBinding.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── connection/ │ │ │ │ │ │ ├── AbstractConnectionConfiguration.java │ │ │ │ │ │ ├── ConnectionConfigurationRepository.java │ │ │ │ │ │ ├── SonarCloudConnectionConfiguration.java │ │ │ │ │ │ ├── SonarQubeConnectionConfiguration.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── reporting/ │ │ │ │ │ │ ├── PreviouslyRaisedFindingsRepository.java │ │ │ │ │ │ ├── RaisedIssue.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── rules/ │ │ │ │ │ ├── RulesRepository.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── rules/ │ │ │ │ │ ├── CleanCodePrinciples.java │ │ │ │ │ ├── OthersSectionHtmlContent.java │ │ │ │ │ ├── RuleDetails.java │ │ │ │ │ ├── RuleDetailsAdapter.java │ │ │ │ │ ├── RuleNotFoundException.java │ │ │ │ │ ├── RulesExtractionHelper.java │ │ │ │ │ ├── RulesService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sca/ │ │ │ │ │ ├── DependencyRiskService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── server/ │ │ │ │ │ └── event/ │ │ │ │ │ ├── ServerEventsService.java │ │ │ │ │ ├── SonarQubeEventStream.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── smartnotifications/ │ │ │ │ │ ├── LastEventPolling.java │ │ │ │ │ ├── SmartNotifications.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── spring/ │ │ │ │ │ ├── SonarLintSpringAppConfig.java │ │ │ │ │ ├── SpringApplicationContextInitializer.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── storage/ │ │ │ │ │ ├── SonarLintDatabaseService.java │ │ │ │ │ ├── StorageService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sync/ │ │ │ │ │ ├── AnalyzerConfigurationSynchronized.java │ │ │ │ │ ├── BranchBinding.java │ │ │ │ │ ├── ConfigurationScopesSynchronizedEvent.java │ │ │ │ │ ├── FindingsSynchronizationService.java │ │ │ │ │ ├── HotspotSynchronizationService.java │ │ │ │ │ ├── IssueSynchronizationService.java │ │ │ │ │ ├── PluginsSynchronizedEvent.java │ │ │ │ │ ├── ScaSynchronizationService.java │ │ │ │ │ ├── SonarProjectBranchesChangedEvent.java │ │ │ │ │ ├── SonarProjectBranchesSynchronizationService.java │ │ │ │ │ ├── SynchronizationService.java │ │ │ │ │ ├── SynchronizationTimestampRepository.java │ │ │ │ │ ├── TaintSynchronizationService.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── telemetry/ │ │ │ │ │ ├── TelemetryServerAttributesProvider.java │ │ │ │ │ ├── TelemetryService.java │ │ │ │ │ ├── TelemetrySpringConfig.java │ │ │ │ │ ├── gessie/ │ │ │ │ │ │ ├── GessieSpringConfig.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── tracking/ │ │ │ │ │ ├── IntroductionDateProvider.java │ │ │ │ │ ├── IssueMapper.java │ │ │ │ │ ├── IssueStatusBinding.java │ │ │ │ │ ├── KnownFindings.java │ │ │ │ │ ├── LocalOnlyIssueRepository.java │ │ │ │ │ ├── LocalOnlySecurityHotspot.java │ │ │ │ │ ├── TaintVulnerabilityTrackingService.java │ │ │ │ │ ├── TextRangeUtils.java │ │ │ │ │ ├── TrackedIssue.java │ │ │ │ │ ├── TrackingService.java │ │ │ │ │ ├── XodusKnownFindingsStorageService.java │ │ │ │ │ ├── XodusKnownFindingsStore.java │ │ │ │ │ ├── matching/ │ │ │ │ │ │ ├── IssueMatcher.java │ │ │ │ │ │ ├── KnownIssueMatchingAttributesMapper.java │ │ │ │ │ │ ├── LocalOnlyIssueMatchingAttributesMapper.java │ │ │ │ │ │ ├── MatchingAttributesMapper.java │ │ │ │ │ │ ├── MatchingResult.java │ │ │ │ │ │ ├── MatchingSession.java │ │ │ │ │ │ ├── RawIssueFindingMatchingAttributeMapper.java │ │ │ │ │ │ ├── ServerHotspotMatchingAttributesMapper.java │ │ │ │ │ │ ├── ServerIssueMatchingAttributesMapper.java │ │ │ │ │ │ ├── TrackedIssueFindingMatchingAttributeMapper.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── streaming/ │ │ │ │ │ ├── Alarm.java │ │ │ │ │ └── package-info.java │ │ │ │ └── websocket/ │ │ │ │ ├── History.java │ │ │ │ ├── SonarCloudWebSocket.java │ │ │ │ ├── WebSocketEventSubscribePayload.java │ │ │ │ ├── WebSocketManager.java │ │ │ │ ├── WebSocketService.java │ │ │ │ ├── events/ │ │ │ │ │ ├── SmartNotificationEvent.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ └── parsing/ │ │ │ │ ├── SmartNotificationEventParser.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ ├── ai/ │ │ │ │ └── hooks/ │ │ │ │ ├── sonarqube_analysis_hook.js │ │ │ │ ├── sonarqube_analysis_hook.py │ │ │ │ └── sonarqube_analysis_hook.sh │ │ │ ├── clean-code-principles/ │ │ │ │ ├── defense_in_depth.html │ │ │ │ └── never_trust_user_input.html │ │ │ ├── context-rule-description/ │ │ │ │ └── others_section_html_content.html │ │ │ └── ondemand/ │ │ │ ├── plugins.properties │ │ │ └── sonarsource-public.key │ │ └── test/ │ │ ├── java/ │ │ │ ├── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ ├── BindingCandidatesFinderTests.java │ │ │ │ ├── BindingClueProviderTests.java │ │ │ │ ├── BindingSuggestionProviderTests.java │ │ │ │ ├── ConfigurationServiceTests.java │ │ │ │ ├── ConnectionServiceTests.java │ │ │ │ ├── DtoMapperTests.java │ │ │ │ ├── SonarCloudActiveEnvironmentTests.java │ │ │ │ ├── SonarProjectsCacheTests.java │ │ │ │ ├── SonarQubeClientManagerTests.java │ │ │ │ ├── TelemetryServerAttributesProviderTests.java │ │ │ │ ├── UserPathsTests.java │ │ │ │ ├── VersionSoonUnsupportedHelperTests.java │ │ │ │ ├── ai/ │ │ │ │ │ └── ide/ │ │ │ │ │ ├── AiHookServiceTests.java │ │ │ │ │ └── ExecutableLocatorTests.java │ │ │ │ ├── analysis/ │ │ │ │ │ ├── AnalysisSchedulerCacheTest.java │ │ │ │ │ ├── BackendInputFileTests.java │ │ │ │ │ └── ClientAnalysisPropertiesServiceTests.java │ │ │ │ ├── branch/ │ │ │ │ │ └── SonarProjectBranchTrackingServiceTests.java │ │ │ │ ├── commons/ │ │ │ │ │ └── SmartCancelableLoadingCacheTests.java │ │ │ │ ├── embedded/ │ │ │ │ │ └── server/ │ │ │ │ │ ├── AnalyzeFileListRequestHandlerTests.java │ │ │ │ │ ├── ToggleAutomaticAnalysisRequestHandlerTests.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ ├── CspFilterTest.java │ │ │ │ │ │ └── RateLimitFilterTests.java │ │ │ │ │ └── handler/ │ │ │ │ │ ├── ShowFixSuggestionRequestHandlerTests.java │ │ │ │ │ └── ShowIssueRequestHandlerTests.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FilePathTranslationTests.java │ │ │ │ │ ├── PathTranslationServiceTests.java │ │ │ │ │ └── ServerFilePathsProviderTest.java │ │ │ │ ├── fs/ │ │ │ │ │ ├── ClientFileTests.java │ │ │ │ │ └── FileExclusionServiceTests.java │ │ │ │ ├── hotspot/ │ │ │ │ │ └── HotspotServiceTests.java │ │ │ │ ├── issue/ │ │ │ │ │ └── matching/ │ │ │ │ │ └── IssueMatcherTests.java │ │ │ │ ├── monitoring/ │ │ │ │ │ └── MonitoringUserIdStoreTests.java │ │ │ │ ├── newcode/ │ │ │ │ │ └── NewCodeServiceTests.java │ │ │ │ ├── nodejs/ │ │ │ │ │ └── NodeJsHelperTests.java │ │ │ │ ├── plugin/ │ │ │ │ │ ├── DotnetSupportTest.java │ │ │ │ │ ├── PluginJarUtilsTest.java │ │ │ │ │ ├── PluginLifecycleServiceTest.java │ │ │ │ │ ├── PluginStatusNotifierServiceTest.java │ │ │ │ │ ├── PluginsServiceTest.java │ │ │ │ │ ├── loading/ │ │ │ │ │ │ └── strategy/ │ │ │ │ │ │ ├── ConnectedArtifactsLoadingStrategyTest.java │ │ │ │ │ │ └── StandaloneArtifactsLoadingStrategyTest.java │ │ │ │ │ └── source/ │ │ │ │ │ ├── BinariesArtifactTest.java │ │ │ │ │ ├── binaries/ │ │ │ │ │ │ ├── BinariesArtifactSourceTest.java │ │ │ │ │ │ ├── BinariesLocalCacheManagerTest.java │ │ │ │ │ │ └── BinariesSignatureVerifierTest.java │ │ │ │ │ ├── embedded/ │ │ │ │ │ │ └── EmbeddedPluginSourceTest.java │ │ │ │ │ └── server/ │ │ │ │ │ ├── ServerPluginDownloaderTest.java │ │ │ │ │ ├── ServerPluginSourceTest.java │ │ │ │ │ └── ServerPluginsCacheTest.java │ │ │ │ ├── progress/ │ │ │ │ │ └── ClientAwareTaskManagerTest.java │ │ │ │ ├── remediation/ │ │ │ │ │ └── aicodefix/ │ │ │ │ │ └── AiCodeFixServiceTest.java │ │ │ │ ├── repository/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── BindingConfigurationTest.java │ │ │ │ │ │ └── ConfigurationRepositoryTest.java │ │ │ │ │ ├── connection/ │ │ │ │ │ │ ├── SonarCloudConnectionConfigurationTest.java │ │ │ │ │ │ └── SonarQubeConnectionConfigurationTest.java │ │ │ │ │ └── rules/ │ │ │ │ │ └── RulesRepositoryTest.java │ │ │ │ ├── rules/ │ │ │ │ │ ├── RuleDetailsAdapterTests.java │ │ │ │ │ ├── RulesFixtures.java │ │ │ │ │ └── RulesServiceTests.java │ │ │ │ ├── sca/ │ │ │ │ │ └── DependencyRiskServiceTests.java │ │ │ │ ├── smartnotifications/ │ │ │ │ │ └── LastEventPollingTests.java │ │ │ │ ├── sync/ │ │ │ │ │ └── BranchBindingTest.java │ │ │ │ ├── tracking/ │ │ │ │ │ ├── KnownFindingMatchingAttributesMapperTests.java │ │ │ │ │ ├── LocalOnlyIssueMatchingAttributesMapperTests.java │ │ │ │ │ ├── ServerHotspotMatchingAttributesMapperTests.java │ │ │ │ │ └── ServerIssueMatchingAttributesMapperTests.java │ │ │ │ └── websocket/ │ │ │ │ ├── SonarCloudWebSocketTests.java │ │ │ │ └── parsing/ │ │ │ │ └── SmartNotificationEventParserTests.java │ │ │ └── testutils/ │ │ │ ├── LocalOnlyIssueFixtures.java │ │ │ ├── TakeThreadDumpAfter.java │ │ │ ├── TestUtils.java │ │ │ └── ThreadDumpExtension.java │ │ └── resources/ │ │ ├── logback-test.xml │ │ └── ondemand/ │ │ ├── sonar-cpp-compressed-plugin.jar.asc │ │ ├── sonar-cpp-corrupt-plugin.jar.asc │ │ ├── sonar-cpp-nosig-plugin.jar.asc │ │ ├── sonar-cpp-plugin.jar.asc │ │ ├── sonar-cpp-unknownkey-plugin.jar.asc │ │ └── sonarsource-public.key │ ├── http/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── http/ │ │ │ ├── ApacheHttpClientAdapter.java │ │ │ ├── ApacheHttpResponse.java │ │ │ ├── ContextAttributes.java │ │ │ ├── HttpClient.java │ │ │ ├── HttpClientProvider.java │ │ │ ├── HttpConfig.java │ │ │ ├── HttpConnectionListener.java │ │ │ ├── RedirectInterceptor.java │ │ │ ├── RetryOnDemandStrategy.java │ │ │ ├── ThreadFactories.java │ │ │ ├── WebSocketClient.java │ │ │ ├── package-info.java │ │ │ └── ssl/ │ │ │ ├── CertificateStore.java │ │ │ ├── SslConfig.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── http/ │ │ │ ├── HttpClientProviderTests.java │ │ │ └── WebSocketClientTest.java │ │ └── resources/ │ │ └── logback-test.xml │ ├── plugin-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── plugin/ │ │ │ └── api/ │ │ │ ├── SonarLintRuntime.java │ │ │ ├── issue/ │ │ │ │ ├── NewInputFileEdit.java │ │ │ │ ├── NewQuickFix.java │ │ │ │ ├── NewSonarLintIssue.java │ │ │ │ ├── NewTextEdit.java │ │ │ │ └── package-info.java │ │ │ ├── module/ │ │ │ │ └── file/ │ │ │ │ ├── ModuleFileEvent.java │ │ │ │ ├── ModuleFileListener.java │ │ │ │ ├── ModuleFileSystem.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── sonarlint-api-version.txt │ ├── plugin-commons/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ ├── com/ │ │ │ │ └── sonarsource/ │ │ │ │ └── plugins/ │ │ │ │ └── license/ │ │ │ │ └── api/ │ │ │ │ ├── LicensedPluginRegistration.java │ │ │ │ └── package-info.java │ │ │ └── org/ │ │ │ ├── sonar/ │ │ │ │ └── api/ │ │ │ │ ├── SonarQubeVersion.java │ │ │ │ └── package-info.java │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── plugin/ │ │ │ └── commons/ │ │ │ ├── ApiVersions.java │ │ │ ├── DataflowBugDetection.java │ │ │ ├── ExtensionInstaller.java │ │ │ ├── ExtensionUtils.java │ │ │ ├── LoadedPlugins.java │ │ │ ├── MultivalueProperty.java │ │ │ ├── PluginsLoadResult.java │ │ │ ├── PluginsLoader.java │ │ │ ├── api/ │ │ │ │ ├── SkipReason.java │ │ │ │ └── package-info.java │ │ │ ├── container/ │ │ │ │ ├── ClassDerivedBeanDefinition.java │ │ │ │ ├── ComponentKeys.java │ │ │ │ ├── Container.java │ │ │ │ ├── ExtensionContainer.java │ │ │ │ ├── LazyUnlessStartableStrategy.java │ │ │ │ ├── PriorityBeanFactory.java │ │ │ │ ├── SpringComponentContainer.java │ │ │ │ ├── SpringInitStrategy.java │ │ │ │ ├── StartableBeanPostProcessor.java │ │ │ │ ├── StartableContainer.java │ │ │ │ └── package-info.java │ │ │ ├── loading/ │ │ │ │ ├── PluginClassLoaderDef.java │ │ │ │ ├── PluginClassloaderFactory.java │ │ │ │ ├── PluginInfo.java │ │ │ │ ├── PluginInstancesLoader.java │ │ │ │ ├── PluginRequirementsCheckResult.java │ │ │ │ ├── SonarPluginManifest.java │ │ │ │ ├── SonarPluginRequirementsChecker.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── sonarapi/ │ │ │ ├── ConfigurationBridge.java │ │ │ ├── MapSettings.java │ │ │ ├── PluginContextImpl.java │ │ │ ├── SonarLintRuntimeImpl.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ ├── com/ │ │ │ │ └── sonarsource/ │ │ │ │ └── plugins/ │ │ │ │ └── license/ │ │ │ │ └── api/ │ │ │ │ └── LicensedPluginRegistrationTests.java │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── plugin/ │ │ │ └── commons/ │ │ │ ├── ApiVersionsTests.java │ │ │ ├── ExtensionUtilsTests.java │ │ │ ├── MultivaluePropertyTests.java │ │ │ ├── SkipReasonTests.java │ │ │ ├── Utils.java │ │ │ ├── container/ │ │ │ │ ├── ComponentKeysTests.java │ │ │ │ ├── LazyUnlessStartableStrategyTests.java │ │ │ │ ├── PriorityBeanFactoryTests.java │ │ │ │ ├── SpringComponentContainerTests.java │ │ │ │ └── StartableBeanPostProcessorTests.java │ │ │ ├── loading/ │ │ │ │ ├── PluginClassloaderFactoryTests.java │ │ │ │ ├── PluginInfoTests.java │ │ │ │ ├── PluginInstancesLoaderTests.java │ │ │ │ ├── SonarPluginManifestTests.java │ │ │ │ └── SonarPluginRequirementsCheckerTests.java │ │ │ └── sonarapi/ │ │ │ └── MapSettingsTests.java │ │ ├── projects/ │ │ │ ├── .gitignore │ │ │ ├── README.txt │ │ │ ├── base-plugin/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── org/ │ │ │ │ └── sonar/ │ │ │ │ └── plugins/ │ │ │ │ └── base/ │ │ │ │ ├── BasePlugin.java │ │ │ │ └── api/ │ │ │ │ └── BaseApi.java │ │ │ ├── classloader-leak-plugin/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── sonar/ │ │ │ │ │ └── plugins/ │ │ │ │ │ └── leak/ │ │ │ │ │ └── LeakPlugin.java │ │ │ │ └── resources/ │ │ │ │ └── Hello.txt │ │ │ ├── dependent-plugin/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ └── org/ │ │ │ │ └── sonar/ │ │ │ │ └── plugins/ │ │ │ │ └── dependent/ │ │ │ │ └── DependentPlugin.java │ │ │ └── pom.xml │ │ └── resources/ │ │ ├── SonarPluginManifestTests/ │ │ │ ├── plugin-with-jre-min.jar │ │ │ ├── plugin-with-nodejs-min.jar │ │ │ ├── plugin-with-require-plugins.jar │ │ │ └── plugin-without-jre-min.jar │ │ ├── logback-test.xml │ │ └── sonar-checkstyle-plugin-2.8.jar │ ├── pom.xml │ ├── rpc-impl/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ └── rpc/ │ │ │ │ └── impl/ │ │ │ │ ├── AbstractRpcServiceDelegate.java │ │ │ │ ├── AiAgentRpcServiceDelegate.java │ │ │ │ ├── AiCodeFixRpcServiceDelegate.java │ │ │ │ ├── AnalysisRpcServiceDelegate.java │ │ │ │ ├── BackendJsonRpcLauncher.java │ │ │ │ ├── BindingRpcServiceDelegate.java │ │ │ │ ├── ConfigurationRpcServiceDelegate.java │ │ │ │ ├── ConnectionRpcServiceDelegate.java │ │ │ │ ├── DependencyRiskRpcServiceDelegate.java │ │ │ │ ├── DogfoodingRpcServiceDelegate.java │ │ │ │ ├── FileRpcServiceDelegate.java │ │ │ │ ├── HotspotRpcServiceDelegate.java │ │ │ │ ├── IdeLabsRpcServiceDelegate.java │ │ │ │ ├── IssueRpcServiceDelegate.java │ │ │ │ ├── LogServiceDelegate.java │ │ │ │ ├── NewCodeRpcServiceDelegate.java │ │ │ │ ├── PluginRpcServiceDelegate.java │ │ │ │ ├── RpcClientLogOutput.java │ │ │ │ ├── RulesRpcServiceDelegate.java │ │ │ │ ├── SonarLintRpcClientLogbackAppender.java │ │ │ │ ├── SonarLintRpcServerImpl.java │ │ │ │ ├── SonarProjectBranchRpcServiceDelegate.java │ │ │ │ ├── TaintVulnerabilityTrackingRpcServiceDelegate.java │ │ │ │ ├── TaskProgressRpcServiceDelegate.java │ │ │ │ ├── TelemetryRpcServiceDelegate.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── logback.xml │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── rpc/ │ │ └── impl/ │ │ ├── AnalysisServiceTests.java │ │ └── SonarLintRpcServerImplTests.java │ ├── rule-extractor/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── rule/ │ │ │ └── extractor/ │ │ │ ├── EmptyConfiguration.java │ │ │ ├── LegacyHotspotRuleDescriptionSectionsGenerator.java │ │ │ ├── NoopTempFolder.java │ │ │ ├── RuleDefinitionsLoader.java │ │ │ ├── RuleExtractionSettings.java │ │ │ ├── RuleSettings.java │ │ │ ├── RulesDefinitionExtractor.java │ │ │ ├── RulesDefinitionExtractorContainer.java │ │ │ ├── SecurityStandards.java │ │ │ ├── SonarLintRuleDefinition.java │ │ │ ├── SonarLintRuleDescriptionSection.java │ │ │ ├── SonarLintRuleParamDefinition.java │ │ │ ├── SonarLintRuleParamType.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ ├── mediumtests/ │ │ │ │ └── RuleExtractorMediumTests.java │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── rule/ │ │ │ └── extractor/ │ │ │ ├── EmptyConfigurationTest.java │ │ │ ├── LegacyHotspotRuleDescriptionSectionsGeneratorTest.java │ │ │ ├── NoopTempFolderTest.java │ │ │ ├── SecurityStandardsTest.java │ │ │ └── SonarLintRuleDefinitionTests.java │ │ └── resources/ │ │ └── logback-test.xml │ ├── server-api/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ └── serverapi/ │ │ │ │ ├── EndpointParams.java │ │ │ │ ├── ServerApi.java │ │ │ │ ├── ServerApiHelper.java │ │ │ │ ├── UrlUtils.java │ │ │ │ ├── authentication/ │ │ │ │ │ ├── AuthenticationApi.java │ │ │ │ │ ├── ValidateResponseDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── branches/ │ │ │ │ │ ├── ProjectBranchesApi.java │ │ │ │ │ ├── ServerBranch.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── component/ │ │ │ │ │ ├── Component.java │ │ │ │ │ ├── ComponentApi.java │ │ │ │ │ ├── SearchProjectResponse.java │ │ │ │ │ ├── SearchProjectResponseDto.java │ │ │ │ │ ├── ServerProject.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── developers/ │ │ │ │ │ ├── DevelopersApi.java │ │ │ │ │ ├── SearchEventsResponseDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── ForbiddenException.java │ │ │ │ │ ├── NetworkException.java │ │ │ │ │ ├── NotFoundException.java │ │ │ │ │ ├── ProjectNotFoundException.java │ │ │ │ │ ├── ServerErrorException.java │ │ │ │ │ ├── ServerRequestException.java │ │ │ │ │ ├── TooManyRequestsException.java │ │ │ │ │ ├── UnauthorizedException.java │ │ │ │ │ ├── UnexpectedBodyException.java │ │ │ │ │ ├── UnexpectedServerResponseException.java │ │ │ │ │ ├── UnsupportedServerException.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── features/ │ │ │ │ │ ├── Feature.java │ │ │ │ │ ├── FeaturesApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── fixsuggestions/ │ │ │ │ │ ├── AiCodeFixConfiguration.java │ │ │ │ │ ├── AiSuggestionRequestBodyDto.java │ │ │ │ │ ├── AiSuggestionResponseBodyDto.java │ │ │ │ │ ├── FixSuggestionsApi.java │ │ │ │ │ ├── OrganizationConfigsResponseDto.java │ │ │ │ │ ├── SuggestionFeatureEnablement.java │ │ │ │ │ ├── SupportedRulesResponseDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── hotspot/ │ │ │ │ │ ├── HotspotApi.java │ │ │ │ │ ├── ServerHotspot.java │ │ │ │ │ ├── ServerHotspotDetails.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── issue/ │ │ │ │ │ ├── IssueApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── newcode/ │ │ │ │ │ ├── NewCodeApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── organization/ │ │ │ │ │ ├── GetOrganizationsResponseDto.java │ │ │ │ │ ├── OrganizationApi.java │ │ │ │ │ ├── ServerOrganization.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── plugins/ │ │ │ │ │ ├── InstalledPluginsPayloadDto.java │ │ │ │ │ ├── PluginsApi.java │ │ │ │ │ ├── ServerPlugin.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── projectbindings/ │ │ │ │ │ ├── ProjectBindingsApi.java │ │ │ │ │ ├── SQCProjectBindingsResponse.java │ │ │ │ │ ├── SQCProjectBindingsResponseDto.java │ │ │ │ │ ├── SQSProjectBindingsResponse.java │ │ │ │ │ ├── SQSProjectBindingsResponseDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── push/ │ │ │ │ │ ├── IssueChangedEvent.java │ │ │ │ │ ├── PushApi.java │ │ │ │ │ ├── RuleSetChangedEvent.java │ │ │ │ │ ├── SecurityHotspotChangedEvent.java │ │ │ │ │ ├── SecurityHotspotClosedEvent.java │ │ │ │ │ ├── SecurityHotspotRaisedEvent.java │ │ │ │ │ ├── ServerHotspotEvent.java │ │ │ │ │ ├── SonarProjectEvent.java │ │ │ │ │ ├── SonarServerEvent.java │ │ │ │ │ ├── TaintVulnerabilityClosedEvent.java │ │ │ │ │ ├── TaintVulnerabilityRaisedEvent.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── parsing/ │ │ │ │ │ ├── EventParser.java │ │ │ │ │ ├── IssueChangedEventParser.java │ │ │ │ │ ├── RuleSetChangedEventParser.java │ │ │ │ │ ├── SecurityHotspotChangedEventParser.java │ │ │ │ │ ├── SecurityHotspotClosedEventParser.java │ │ │ │ │ ├── SecurityHotspotRaisedEventParser.java │ │ │ │ │ ├── TaintVulnerabilityClosedEventParser.java │ │ │ │ │ ├── TaintVulnerabilityRaisedEventParser.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── ImpactPayload.java │ │ │ │ │ │ ├── LocationPayload.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── qualityprofile/ │ │ │ │ │ ├── QualityProfile.java │ │ │ │ │ ├── QualityProfileApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── rules/ │ │ │ │ │ ├── RulesApi.java │ │ │ │ │ ├── ServerActiveRule.java │ │ │ │ │ ├── ServerRule.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sca/ │ │ │ │ │ ├── GetIssuesReleasesResponse.java │ │ │ │ │ ├── GetScaEnablementResponse.java │ │ │ │ │ ├── ScaApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── settings/ │ │ │ │ │ ├── SettingsApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── source/ │ │ │ │ │ ├── SourceApi.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── stream/ │ │ │ │ │ ├── Event.java │ │ │ │ │ ├── EventBuffer.java │ │ │ │ │ ├── EventParser.java │ │ │ │ │ ├── EventStream.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── system/ │ │ │ │ │ ├── ServerStatusInfo.java │ │ │ │ │ ├── SystemApi.java │ │ │ │ │ ├── SystemStatusDto.java │ │ │ │ │ ├── ValidationResult.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── users/ │ │ │ │ │ ├── CurrentUserResponseDto.java │ │ │ │ │ ├── UsersApi.java │ │ │ │ │ └── package-info.java │ │ │ │ └── util/ │ │ │ │ ├── ProtobufUtil.java │ │ │ │ ├── ServerApiUtils.java │ │ │ │ └── package-info.java │ │ │ └── proto/ │ │ │ ├── sonarcloud/ │ │ │ │ └── ws-organizations.proto │ │ │ └── sonarqube/ │ │ │ ├── ws-commons.proto │ │ │ ├── ws-components.proto │ │ │ ├── ws-hotspots.proto │ │ │ ├── ws-issues.proto │ │ │ ├── ws-measures.proto │ │ │ ├── ws-projectbranches.proto │ │ │ ├── ws-qualityprofiles.proto │ │ │ ├── ws-rules.proto │ │ │ └── ws-settings.proto │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── serverapi/ │ │ │ ├── MockWebServerExtensionWithProtobuf.java │ │ │ ├── ServerApiHelperTests.java │ │ │ ├── authentication/ │ │ │ │ └── AuthenticationApiTests.java │ │ │ ├── branches/ │ │ │ │ ├── ProjectBranchesApiTests.java │ │ │ │ └── ServerBranchTests.java │ │ │ ├── component/ │ │ │ │ ├── ComponentApiTests.java │ │ │ │ └── ServerProjectTests.java │ │ │ ├── developers/ │ │ │ │ └── DevelopersApiTests.java │ │ │ ├── exception/ │ │ │ │ └── ProjectNotFoundExceptionTests.java │ │ │ ├── fixsuggestions/ │ │ │ │ └── FixSuggestionsApiTest.java │ │ │ ├── hotspot/ │ │ │ │ ├── HotspotApiTests.java │ │ │ │ └── ServerHotspotDetailsTests.java │ │ │ ├── issue/ │ │ │ │ └── IssueApiTests.java │ │ │ ├── newcode/ │ │ │ │ └── NewCodeApiTests.java │ │ │ ├── organization/ │ │ │ │ ├── OrganizationApiTests.java │ │ │ │ └── ServerOrganizationTests.java │ │ │ ├── plugins/ │ │ │ │ └── PluginsApiTests.java │ │ │ ├── projectbindings/ │ │ │ │ └── ProjectBindingsApiTests.java │ │ │ ├── push/ │ │ │ │ ├── PushApiTests.java │ │ │ │ └── parsing/ │ │ │ │ ├── SecurityHotspotChangedEventParserTest.java │ │ │ │ ├── SecurityHotspotClosedEventParserTest.java │ │ │ │ └── SecurityHotspotRaisedEventParserTest.java │ │ │ ├── qualityprofile/ │ │ │ │ └── QualityProfileApiTests.java │ │ │ ├── rules/ │ │ │ │ └── RulesApiTests.java │ │ │ ├── sca/ │ │ │ │ └── ScaApiTests.java │ │ │ ├── settings/ │ │ │ │ └── SettingsApiTests.java │ │ │ ├── stream/ │ │ │ │ └── EventStreamTests.java │ │ │ ├── users/ │ │ │ │ └── UsersApiTests.java │ │ │ └── util/ │ │ │ └── ProtobufUtilTest.java │ │ └── resources/ │ │ ├── logback-test.xml │ │ └── update/ │ │ ├── component_tree.pb │ │ ├── empty_component_tree.pb │ │ └── empty_rules.pb │ ├── server-connection/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ └── serverconnection/ │ │ │ │ ├── AnalyzerConfiguration.java │ │ │ │ ├── AnalyzerConfigurationStorage.java │ │ │ │ ├── AnalyzerSettingsUpdateSummary.java │ │ │ │ ├── ConnectionStorage.java │ │ │ │ ├── DownloadException.java │ │ │ │ ├── DownloaderUtils.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── HotspotDownloader.java │ │ │ │ ├── IssueDownloader.java │ │ │ │ ├── IssueStorePaths.java │ │ │ │ ├── LocalStorageSynchronizer.java │ │ │ │ ├── Organization.java │ │ │ │ ├── OrganizationSynchronizer.java │ │ │ │ ├── ProjectBinding.java │ │ │ │ ├── ProjectBranches.java │ │ │ │ ├── ProjectBranchesStorage.java │ │ │ │ ├── RuleSet.java │ │ │ │ ├── ServerHotspotUpdater.java │ │ │ │ ├── ServerInfoSynchronizer.java │ │ │ │ ├── ServerIssueUpdater.java │ │ │ │ ├── ServerSettings.java │ │ │ │ ├── ServerUpdaterUtils.java │ │ │ │ ├── ServerVersionAndStatusChecker.java │ │ │ │ ├── Settings.java │ │ │ │ ├── SonarProjectStorage.java │ │ │ │ ├── SonarServerSettingsChangedEvent.java │ │ │ │ ├── StoredPlugin.java │ │ │ │ ├── StoredServerInfo.java │ │ │ │ ├── SynchronizationResult.java │ │ │ │ ├── TaintIssueDownloader.java │ │ │ │ ├── UserSynchronizer.java │ │ │ │ ├── VersionUtils.java │ │ │ │ ├── aicodefix/ │ │ │ │ │ ├── AiCodeFix.java │ │ │ │ │ ├── AiCodeFixFeatureEnablement.java │ │ │ │ │ ├── AiCodeFixRepository.java │ │ │ │ │ ├── AiCodeFixSettings.java │ │ │ │ │ ├── AiCodeFixSettingsSynchronizer.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── issues/ │ │ │ │ │ ├── FileLevelServerIssue.java │ │ │ │ │ ├── Findings.java │ │ │ │ │ ├── KnownFindingsRepository.java │ │ │ │ │ ├── LineLevelServerIssue.java │ │ │ │ │ ├── LocalOnlyIssuesRepository.java │ │ │ │ │ ├── RangeLevelServerIssue.java │ │ │ │ │ ├── ServerDependencyRisk.java │ │ │ │ │ ├── ServerFinding.java │ │ │ │ │ ├── ServerIssue.java │ │ │ │ │ ├── ServerTaintIssue.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── prefix/ │ │ │ │ │ ├── FileTreeMatcher.java │ │ │ │ │ ├── ReversePathTree.java │ │ │ │ │ └── package-info.java │ │ │ │ └── storage/ │ │ │ │ ├── EntityMapper.java │ │ │ │ ├── HotspotReviewStatusBinding.java │ │ │ │ ├── InstantBinding.java │ │ │ │ ├── IssueSeverityBinding.java │ │ │ │ ├── IssueStatusBinding.java │ │ │ │ ├── IssueTypeBinding.java │ │ │ │ ├── NewCodeDefinitionStorage.java │ │ │ │ ├── OrganizationStorage.java │ │ │ │ ├── PluginsStorage.java │ │ │ │ ├── ProjectServerIssueStore.java │ │ │ │ ├── ProjectStoragePaths.java │ │ │ │ ├── ProtobufFileUtil.java │ │ │ │ ├── RWLock.java │ │ │ │ ├── ServerFindingRepository.java │ │ │ │ ├── ServerFindingType.java │ │ │ │ ├── ServerInfoStorage.java │ │ │ │ ├── ServerIssueStoresManager.java │ │ │ │ ├── SmartNotificationsStorage.java │ │ │ │ ├── StorageException.java │ │ │ │ ├── StorageUtils.java │ │ │ │ ├── TarGzUtils.java │ │ │ │ ├── UpdateSummary.java │ │ │ │ ├── UserStorage.java │ │ │ │ ├── UuidBinding.java │ │ │ │ └── package-info.java │ │ │ └── proto/ │ │ │ └── sonarlint.proto │ │ └── test/ │ │ ├── java/ │ │ │ ├── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── sonarlint/ │ │ │ │ └── core/ │ │ │ │ └── serverconnection/ │ │ │ │ ├── AnalyzerConfigurationStorageTests.java │ │ │ │ ├── DownloadExceptionTests.java │ │ │ │ ├── FileUtilsTests.java │ │ │ │ ├── HotspotDownloaderTests.java │ │ │ │ ├── IssueDownloaderTests.java │ │ │ │ ├── IssueStorePathsTests.java │ │ │ │ ├── ProjectBindingTests.java │ │ │ │ ├── ProjectStoragePathsTests.java │ │ │ │ ├── ServerHotspotUpdaterTests.java │ │ │ │ ├── ServerInfoSynchronizerTests.java │ │ │ │ ├── ServerIssueUpdaterTests.java │ │ │ │ ├── ServerVersionAndStatusCheckerTests.java │ │ │ │ ├── StorageExceptionTests.java │ │ │ │ ├── TaintIssueDownloaderTests.java │ │ │ │ ├── UserSynchronizerTests.java │ │ │ │ ├── VersionUtilsTests.java │ │ │ │ ├── aicodefix/ │ │ │ │ │ └── AiCodeFixRepositoryTest.java │ │ │ │ ├── issues/ │ │ │ │ │ ├── KnownFindingsRepositoryTests.java │ │ │ │ │ ├── LocalOnlyIssuesRepositoryTests.java │ │ │ │ │ └── ServerIssueTests.java │ │ │ │ ├── prefix/ │ │ │ │ │ ├── FileTreeMatcherTests.java │ │ │ │ │ └── ReversePathTreeTests.java │ │ │ │ └── storage/ │ │ │ │ ├── EntityMapperTests.java │ │ │ │ ├── NewCodeDefinitionStorageTests.java │ │ │ │ ├── PluginsStorageTests.java │ │ │ │ ├── ProtobufFileUtilTests.java │ │ │ │ ├── ServerFindingRepositoryTests.java │ │ │ │ ├── ServerHotspotFixtures.java │ │ │ │ └── ServerIssueFixtures.java │ │ │ └── testutils/ │ │ │ └── MockWebServerExtensionWithProtobuf.java │ │ └── resources/ │ │ └── logback-test.xml │ └── telemetry/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── telemetry/ │ │ ├── InternalDebug.java │ │ ├── TelemetryAnalysisReportingCounter.java │ │ ├── TelemetryAnalyzerPerformance.java │ │ ├── TelemetryConnectionAttributes.java │ │ ├── TelemetryFindingsFilteredCounter.java │ │ ├── TelemetryFixSuggestionReceivedCounter.java │ │ ├── TelemetryFixSuggestionResolvedStatus.java │ │ ├── TelemetryHelpAndFeedbackCounter.java │ │ ├── TelemetryHttpClient.java │ │ ├── TelemetryLiveAttributes.java │ │ ├── TelemetryLocalStorage.java │ │ ├── TelemetryLocalStorageManager.java │ │ ├── TelemetryManager.java │ │ ├── TelemetryNotificationsCounter.java │ │ ├── TelemetryServerAttributes.java │ │ ├── TelemetryUtils.java │ │ ├── ToolCallCounter.java │ │ ├── common/ │ │ │ ├── TelemetryUserSetting.java │ │ │ └── package-info.java │ │ ├── gessie/ │ │ │ ├── GessieHttpClient.java │ │ │ ├── GessieService.java │ │ │ ├── event/ │ │ │ │ ├── GessieEvent.java │ │ │ │ ├── GessieMetadata.java │ │ │ │ ├── package-info.java │ │ │ │ └── payload/ │ │ │ │ ├── MessagePayload.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── measures/ │ │ │ └── payload/ │ │ │ ├── TelemetryMeasuresBuilder.java │ │ │ ├── TelemetryMeasuresDimension.java │ │ │ ├── TelemetryMeasuresPayload.java │ │ │ ├── TelemetryMeasuresValue.java │ │ │ ├── TelemetryMeasuresValueGranularity.java │ │ │ ├── TelemetryMeasuresValueType.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── payload/ │ │ ├── HotspotPayload.java │ │ ├── IssuePayload.java │ │ ├── ShareConnectedModePayload.java │ │ ├── ShowHotspotPayload.java │ │ ├── ShowIssuePayload.java │ │ ├── TaintVulnerabilitiesPayload.java │ │ ├── TelemetryAnalyzerPerformancePayload.java │ │ ├── TelemetryFixSuggestionPayload.java │ │ ├── TelemetryFixSuggestionResolvedPayload.java │ │ ├── TelemetryHelpAndFeedbackPayload.java │ │ ├── TelemetryNotificationsCounterPayload.java │ │ ├── TelemetryNotificationsPayload.java │ │ ├── TelemetryPayload.java │ │ ├── TelemetryRulesPayload.java │ │ ├── cayc/ │ │ │ ├── CleanAsYouCodePayload.java │ │ │ ├── NewCodeFocusPayload.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── telemetry/ │ │ ├── TelemetryHttpClientTests.java │ │ ├── TelemetryLocalStorageManagerTests.java │ │ ├── TelemetryLocalStorageTests.java │ │ ├── TelemetryManagerTests.java │ │ ├── TelemetryUtilsTests.java │ │ ├── gessie/ │ │ │ ├── GessieHttpClientTests.java │ │ │ └── event/ │ │ │ └── GessieMetadataTests.java │ │ └── payload/ │ │ ├── TelemetryMeasuresPayloadTests.java │ │ └── TelemetryPayloadTests.java │ └── resources/ │ └── response/ │ └── gessie/ │ └── GessieHttpClientTest/ │ ├── GessieRequest.json │ └── InvalidRequest.json ├── buildSrc/ │ ├── README.md │ └── maven-shade-ext-bnd-transformer/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── org/ │ └── sonarsource/ │ └── sonarlint/ │ └── maven/ │ └── shade/ │ └── ext/ │ └── ManifestBndTransformer.java ├── client/ │ ├── java-client-dependencies/ │ │ └── pom.xml │ ├── java-client-osgi/ │ │ ├── java-client-osgi-sources.bnd │ │ ├── java-client-osgi.bnd │ │ ├── pom.xml │ │ └── shared.bnd │ ├── java-client-utils/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── sonarlint/ │ │ │ └── core/ │ │ │ └── client/ │ │ │ └── utils/ │ │ │ ├── CleanCodeAttribute.java │ │ │ ├── CleanCodeAttributeCategory.java │ │ │ ├── ClientFileExclusions.java │ │ │ ├── ClientLogOutput.java │ │ │ ├── DateUtils.java │ │ │ ├── DependencyRiskTransitionStatus.java │ │ │ ├── GitUtils.java │ │ │ ├── HotspotStatus.java │ │ │ ├── ImpactSeverity.java │ │ │ ├── IssueResolutionStatus.java │ │ │ ├── Language.java │ │ │ ├── SoftwareQuality.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── client/ │ │ └── utils/ │ │ ├── CleanCodeAttributeCategoryTests.java │ │ ├── CleanCodeAttributeTests.java │ │ ├── ClientFileExclusionsTests.java │ │ ├── DateUtilsTests.java │ │ ├── DependencyRiskTransitionStatusTest.java │ │ ├── GitUtilsTests.java │ │ ├── HotspotStatusTest.java │ │ ├── ImpactSeverityTests.java │ │ ├── IssueResolutionStatusTest.java │ │ ├── LanguageTests.java │ │ └── SoftwareQualityTests.java │ ├── pom.xml │ └── rpc-java-client/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── rpc/ │ │ └── client/ │ │ ├── ClientJsonRpcLauncher.java │ │ ├── ConfigScopeNotFoundException.java │ │ ├── ConnectionNotFoundException.java │ │ ├── Sloop.java │ │ ├── SloopLauncher.java │ │ ├── SonarLintCancelChecker.java │ │ ├── SonarLintRpcClientDelegate.java │ │ ├── SonarLintRpcClientImpl.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── sonarsource/ │ └── sonarlint/ │ └── core/ │ └── rpc/ │ └── client/ │ ├── SloopLauncherTests.java │ └── SonarLintRpcClientImplTest.java ├── doc/ │ └── analyzer_management.md ├── docs/ │ ├── PULL_REQUEST_TEMPLATE.md │ ├── contributing.md │ └── decisions/ │ ├── 0000-move-more-responsibilities-to-the-core.md │ ├── 0001-implement-binding-suggestions-in-the-core.md │ ├── 0002-manage-http-client-in-core.md │ └── template.md ├── its/ │ ├── README.md │ ├── plugins/ │ │ ├── custom-sensor-plugin/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── sonarsource/ │ │ │ │ └── plugins/ │ │ │ │ └── example/ │ │ │ │ ├── ExamplePlugin.java │ │ │ │ ├── FooLintRulesDefinition.java │ │ │ │ └── OneIssuePerLineSensor.java │ │ │ └── resources/ │ │ │ └── example/ │ │ │ └── foolint-rules.xml │ │ ├── global-extension-plugin/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── sonarsource/ │ │ │ └── plugins/ │ │ │ └── example/ │ │ │ ├── GlobalExtension.java │ │ │ ├── GlobalExtensionPlugin.java │ │ │ ├── GlobalLanguage.java │ │ │ ├── GlobalRulesDefinition.java │ │ │ ├── GlobalSensor.java │ │ │ └── GlobalSonarWayProfile.java │ │ └── java-custom-rules/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── sonar/ │ │ │ └── samples/ │ │ │ └── java/ │ │ │ ├── MyJavaFileCheckRegistrar.java │ │ │ ├── MyJavaRulesDefinition.java │ │ │ ├── MyJavaRulesPlugin.java │ │ │ ├── RulesList.java │ │ │ └── checks/ │ │ │ └── AvoidAnnotationRule.java │ │ └── resources/ │ │ └── org/ │ │ └── sonar/ │ │ └── l10n/ │ │ └── java/ │ │ └── rules/ │ │ └── java/ │ │ ├── AvoidAnnotation.html │ │ └── AvoidAnnotation.json │ ├── pom.xml │ └── tests/ │ ├── pom.xml │ ├── projects/ │ │ ├── sample-apex/ │ │ │ └── src/ │ │ │ └── file.cls │ │ ├── sample-c/ │ │ │ └── src/ │ │ │ ├── file.c │ │ │ └── foo.h │ │ ├── sample-cloudformation/ │ │ │ └── src/ │ │ │ └── sample.yaml │ │ ├── sample-cobol/ │ │ │ ├── copybooks/ │ │ │ │ ├── Attr.cpy │ │ │ │ ├── Custmas.cpy │ │ │ │ ├── Errparm.cpy │ │ │ │ └── MNTSET2.CPY │ │ │ └── src/ │ │ │ └── Custmnt2.cbl │ │ ├── sample-custom-secrets/ │ │ │ └── src/ │ │ │ └── file.md │ │ ├── sample-dbd/ │ │ │ └── src/ │ │ │ └── hello.py │ │ ├── sample-docker/ │ │ │ └── src/ │ │ │ └── Dockerfile │ │ ├── sample-global-extension/ │ │ │ └── src/ │ │ │ └── foo.glob │ │ ├── sample-go/ │ │ │ └── src/ │ │ │ └── sample.go │ │ ├── sample-java/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── foo/ │ │ │ └── Foo.java │ │ ├── sample-java-custom/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── foo/ │ │ │ └── Foo.java │ │ ├── sample-java-hotspot/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── foo/ │ │ │ └── Foo.java │ │ ├── sample-java-taint/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── foo/ │ │ │ ├── DbHelper.java │ │ │ └── Endpoint.java │ │ ├── sample-javascript/ │ │ │ └── src/ │ │ │ └── Person.js │ │ ├── sample-jcl/ │ │ │ └── GAM0VCDB.jcl │ │ ├── sample-kotlin/ │ │ │ └── src/ │ │ │ └── hello.kt │ │ ├── sample-kubernetes/ │ │ │ └── src/ │ │ │ └── sample.yaml │ │ ├── sample-language-mix/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── foo/ │ │ │ ├── Foo.java │ │ │ └── main.py │ │ ├── sample-misra/ │ │ │ └── foo.cpp │ │ ├── sample-php/ │ │ │ └── src/ │ │ │ └── Math.php │ │ ├── sample-python/ │ │ │ └── src/ │ │ │ └── hello.py │ │ ├── sample-ruby/ │ │ │ └── src/ │ │ │ └── hello.rb │ │ ├── sample-sca/ │ │ │ └── pom.xml │ │ ├── sample-scala/ │ │ │ └── src/ │ │ │ └── Hello.scala │ │ ├── sample-terraform/ │ │ │ └── src/ │ │ │ └── sample.tf │ │ ├── sample-tsql/ │ │ │ └── src/ │ │ │ └── file.tsql │ │ ├── sample-typescript/ │ │ │ ├── .gitignore │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── Person.ts │ │ │ └── tsconfig.json │ │ ├── sample-web/ │ │ │ └── src/ │ │ │ └── file.html │ │ └── sample-xml/ │ │ └── src/ │ │ └── foo.xml │ └── src/ │ └── test/ │ ├── java/ │ │ └── its/ │ │ ├── AbstractConnectedTests.java │ │ ├── FileExclusionTests.java │ │ ├── MockSonarLintRpcClientDelegate.java │ │ ├── SonarCloudTests.java │ │ ├── SonarQubeCommunityEditionTests.java │ │ ├── SonarQubeDeveloperEditionTests.java │ │ ├── SonarQubeEnterpriseEditionTests.java │ │ ├── StandaloneTests.java │ │ └── utils/ │ │ ├── AnalysisUtils.java │ │ ├── ItUtils.java │ │ ├── LogOnTestFailure.java │ │ ├── OrchestratorUtils.java │ │ ├── PluginLocator.java │ │ └── TestClientInputFile.java │ └── resources/ │ ├── apex-sonarlint.xml │ ├── c-sonarlint.xml │ ├── cloudformation-sonarlint.xml │ ├── cobol-sonarlint.xml │ ├── cpp-misra-sonarlint.xml │ ├── custom-secrets-sonarlint.xml │ ├── custom-sensor.xml │ ├── dbd-sonarlint.xml │ ├── docker-sonarlint.xml │ ├── global-extension.xml │ ├── go-sonarlint.xml │ ├── java-custom.xml │ ├── java-sonarlint-with-hotspot.xml │ ├── java-sonarlint-with-markdown.xml │ ├── java-sonarlint-with-taint.xml │ ├── java-sonarlint.xml │ ├── javascript-sonarlint.xml │ ├── jcl-sonarlint.xml │ ├── kotlin-sonarlint.xml │ ├── kubernetes-sonarlint.xml │ ├── php-sonarlint.xml │ ├── python-sonarlint.xml │ ├── ruby-sonarlint.xml │ ├── scala-sonarlint.xml │ ├── terraform-sonarlint.xml │ ├── tsql-sonarlint.xml │ ├── typescript-sonarlint.xml │ ├── web-sonarlint.xml │ └── xml-sonarlint.xml ├── medium-tests/ │ ├── pom.xml │ └── src/ │ └── test/ │ ├── java/ │ │ ├── mediumtest/ │ │ │ ├── BindingSuggestionsMediumTests.java │ │ │ ├── BindingTelemetryMediumTests.java │ │ │ ├── ConnectedHotspotMediumTests.java │ │ │ ├── ConnectedIssueExclusionsMediumTests.java │ │ │ ├── ConnectedIssueMediumTests.java │ │ │ ├── ConnectedStorageProblemsMediumTests.java │ │ │ ├── ConnectionSetupMediumTests.java │ │ │ ├── ConnectionSuggestionMediumTests.java │ │ │ ├── EffectiveRulesMediumTests.java │ │ │ ├── EmbeddedServerMediumTests.java │ │ │ ├── InitializationMediumTests.java │ │ │ ├── MCPServerConfigurationProviderMediumTests.java │ │ │ ├── NotebookLanguageMediumTests.java │ │ │ ├── SharedConnectedModeSettingsMediumTests.java │ │ │ ├── SonarLintTestHarnessMediumTests.java │ │ │ ├── StandaloneIssueMediumTests.java │ │ │ ├── StandaloneNoPluginMediumTests.java │ │ │ ├── StandaloneRulesMediumTests.java │ │ │ ├── TelemetryMediumTests.java │ │ │ ├── ai/ │ │ │ │ └── ide/ │ │ │ │ ├── AiAgentMediumTests.java │ │ │ │ └── AiHookMediumTests.java │ │ │ ├── analysis/ │ │ │ │ ├── ActiveRulesDumpingSensor.java │ │ │ │ ├── AnalysisCharsetMediumTests.java │ │ │ │ ├── AnalysisForcedByClientMediumTests.java │ │ │ │ ├── AnalysisMediumTests.java │ │ │ │ ├── AnalysisReadinessMediumTests.java │ │ │ │ ├── AnalysisSchedulingMediumTests.java │ │ │ │ ├── AnalysisTriggeringMediumTests.java │ │ │ │ ├── NodeJsMediumTests.java │ │ │ │ ├── PropertyDumpingSensor.java │ │ │ │ ├── RulesInConnectedModeMediumTests.java │ │ │ │ ├── SupportedFilePatternsMediumTests.java │ │ │ │ ├── ToggleAutomaticAnalysisMediumTests.java │ │ │ │ └── sensor/ │ │ │ │ ├── ThrowingSensorConstructor.java │ │ │ │ ├── WaitingCancellationSensor.java │ │ │ │ └── WaitingSensor.java │ │ │ ├── branch/ │ │ │ │ └── SonarProjectBranchMediumTests.java │ │ │ ├── connection/ │ │ │ │ ├── ConnectionGetAllProjectsMediumTests.java │ │ │ │ ├── ConnectionGetProjectNameByKeyMediumTests.java │ │ │ │ ├── ConnectionValidatorMediumTests.java │ │ │ │ └── OrganizationMediumTests.java │ │ │ ├── dogfooding/ │ │ │ │ └── DogfoodingRpcServiceMediumTests.java │ │ │ ├── file/ │ │ │ │ ├── ClientFileExclusionsMediumTests.java │ │ │ │ └── ConnectedFileExclusionsMediumTests.java │ │ │ ├── fixtures/ │ │ │ │ └── LocalOnlyIssueFixtures.java │ │ │ ├── gessie/ │ │ │ │ └── GessieIntegrationMediumTests.java │ │ │ ├── hotspots/ │ │ │ │ ├── HotspotCheckStatusChangePermittedMediumTests.java │ │ │ │ ├── HotspotEventsMediumTests.java │ │ │ │ ├── HotspotLocalDetectionSupportMediumTests.java │ │ │ │ ├── HotspotStatusChangeMediumTests.java │ │ │ │ ├── OpenHotspotInBrowserMediumTests.java │ │ │ │ └── OpenHotspotInIdeMediumTests.java │ │ │ ├── http/ │ │ │ │ ├── AuthenticationMediumTests.java │ │ │ │ ├── ProxyMediumTests.java │ │ │ │ ├── SslMediumTests.java │ │ │ │ └── TimeoutMediumTests.java │ │ │ ├── issues/ │ │ │ │ ├── AnalyzeFileListMediumTests.java │ │ │ │ ├── CheckAnticipatedStatusChangeSupportedMediumTests.java │ │ │ │ ├── CheckResolutionStatusChangePermittedMediumTests.java │ │ │ │ ├── IssueEventsMediumTests.java │ │ │ │ ├── IssuesStatusChangeMediumTests.java │ │ │ │ ├── LocalOnlyResolvedIssuesStorageMediumTests.java │ │ │ │ ├── OpenFixSuggestionInIdeMediumTests.java │ │ │ │ └── OpenIssueInIdeMediumTests.java │ │ │ ├── labs/ │ │ │ │ └── IdeLabsMediumTests.java │ │ │ ├── log/ │ │ │ │ └── LoggingMediumTests.java │ │ │ ├── monitoring/ │ │ │ │ ├── MonitoringMediumTests.java │ │ │ │ └── ThrowingPhpSensor.java │ │ │ ├── newcode/ │ │ │ │ └── NewCodeTelemetryMediumTests.java │ │ │ ├── plugin/ │ │ │ │ ├── OnDemandAnalyzersMediumTests.java │ │ │ │ └── PluginRpcServiceMediumTests.java │ │ │ ├── promotion/ │ │ │ │ ├── CampaignMediumTests.java │ │ │ │ └── ExtraEnabledLanguagesInConnectedModePromotionMediumTests.java │ │ │ ├── remediation/ │ │ │ │ └── aicodefix/ │ │ │ │ └── AiCodeFixMediumTest.java │ │ │ ├── rules/ │ │ │ │ ├── OkRulesDefinition.java │ │ │ │ ├── RuleEventsMediumTests.java │ │ │ │ ├── RuleExtractionMediumTests.java │ │ │ │ └── ThrowingRulesDefinition.java │ │ │ ├── sca/ │ │ │ │ ├── CheckDependencyRisksSupportedMediumTests.java │ │ │ │ ├── DependencyRiskStatusChangeMediumTests.java │ │ │ │ ├── DependencyRisksMediumTests.java │ │ │ │ └── OpenDependencyRiskInBrowserMediumTests.java │ │ │ ├── server/ │ │ │ │ └── events/ │ │ │ │ └── ServerSentEventsMediumTests.java │ │ │ ├── sloop/ │ │ │ │ ├── JreLocator.java │ │ │ │ ├── ProcessUtils.java │ │ │ │ ├── SloopDistLocator.java │ │ │ │ ├── SloopLauncherTests.java │ │ │ │ ├── SloopLauncherWithJreTests.java │ │ │ │ └── UnArchiveUtils.java │ │ │ ├── smartnotifications/ │ │ │ │ └── SmartNotificationsMediumTests.java │ │ │ ├── sonarcodecontext/ │ │ │ │ └── SonarCodeContextMediumTests.java │ │ │ ├── synchronization/ │ │ │ │ ├── BranchSpecificSynchronizationMediumTests.java │ │ │ │ ├── ConnectionSyncMediumTests.java │ │ │ │ ├── PluginSynchronizationMediumTests.java │ │ │ │ ├── RuleSetSynchronizationMediumTests.java │ │ │ │ ├── ServerInfoSynchronizationMediumTests.java │ │ │ │ ├── TaintVulnerabilitySynchronizationMediumTests.java │ │ │ │ └── UserSynchronizationMediumTests.java │ │ │ ├── taint/ │ │ │ │ └── vulnerabilities/ │ │ │ │ ├── TaintVulnerabilitiesMediumTests.java │ │ │ │ └── TaintVulnerabilityEventsMediumTests.java │ │ │ ├── tracking/ │ │ │ │ ├── IssueStreamingRulesDefinition.java │ │ │ │ ├── IssueStreamingSensor.java │ │ │ │ ├── IssueTrackingMediumTests.java │ │ │ │ └── SecurityHotspotTrackingMediumTests.java │ │ │ └── websockets/ │ │ │ └── WebSocketMediumTests.java │ │ └── utils/ │ │ ├── AnalysisUtils.java │ │ ├── JuliSLF4JDelegatingLog.java │ │ ├── MockWebServerExtensionWithProtobuf.java │ │ ├── OnDiskTestClientInputFile.java │ │ ├── PluginLocator.java │ │ ├── TestPlugin.java │ │ └── ThreadLeakDetector.java │ ├── projects/ │ │ ├── java-with-bytecode/ │ │ │ └── src/ │ │ │ └── Foo.java │ │ └── windows-shortcut/ │ │ ├── hello.py │ │ ├── hello.py.lnk │ │ └── hellp.py.fake.lnk │ └── resources/ │ ├── META-INF/ │ │ └── services/ │ │ ├── org.apache.juli.logging.Log │ │ └── org.junit.jupiter.api.extension.Extension │ ├── file-with-utf8-bom.js │ ├── logback-test.xml │ ├── response/ │ │ └── gessie/ │ │ └── GessieIntegrationMediumTests/ │ │ └── GessieRequest.json │ └── ssl/ │ ├── README.md │ ├── ca-client-auth.crt │ ├── ca-client-auth.key │ ├── ca.crt │ ├── ca.key │ ├── client.csr │ ├── client.key │ ├── client.p12 │ ├── client.pem │ ├── openssl-client-auth.conf │ ├── openssl.conf │ ├── server-with-client-ca.p12 │ ├── server.csr │ ├── server.jks │ ├── server.key │ ├── server.p12 │ ├── server.pem │ └── v3.ext ├── mise.toml ├── mvnw ├── mvnw.cmd ├── pom.xml ├── report-aggregate/ │ └── pom.xml ├── rpc-protocol/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── rpc/ │ │ └── protocol/ │ │ ├── Lsp4jUtils.java │ │ ├── RpcErrorHandler.java │ │ ├── SingleThreadedMessageConsumer.java │ │ ├── SonarLintLauncherBuilder.java │ │ ├── SonarLintRpcClient.java │ │ ├── SonarLintRpcErrorCode.java │ │ ├── SonarLintRpcServer.java │ │ ├── adapter/ │ │ │ ├── CustomEitherAdapterFactory.java │ │ │ ├── DurationTypeAdapter.java │ │ │ ├── EitherCredentialsAdapterFactory.java │ │ │ ├── EitherProgressNotificationAdapterFactory.java │ │ │ ├── EitherRuleDescriptionAdapterFactory.java │ │ │ ├── EitherRuleDescriptionTabContentAdapterFactory.java │ │ │ ├── EitherSonarQubeSonarCloudConnectionAdapterFactory.java │ │ │ ├── EitherSonarQubeSonarCloudConnectionParamsAdapterFactory.java │ │ │ ├── EitherStandardOrMQRModeAdapterFactory.java │ │ │ ├── EitherTransientConnectionAdapterFactory.java │ │ │ ├── EitherTypeAdapter.java │ │ │ ├── InstantTypeAdapter.java │ │ │ ├── OffsetDateTimeAdapter.java │ │ │ ├── PathTypeAdapter.java │ │ │ ├── UriTypeAdapter.java │ │ │ ├── UuidTypeAdapter.java │ │ │ └── package-info.java │ │ ├── backend/ │ │ │ ├── ai/ │ │ │ │ ├── AiAgent.java │ │ │ │ ├── AiAgentRpcService.java │ │ │ │ ├── GetHookScriptContentParams.java │ │ │ │ ├── GetHookScriptContentResponse.java │ │ │ │ ├── GetRuleFileContentParams.java │ │ │ │ ├── GetRuleFileContentResponse.java │ │ │ │ └── package-info.java │ │ │ ├── analysis/ │ │ │ │ ├── AnalysisRpcService.java │ │ │ │ ├── AnalyzeFileListParams.java │ │ │ │ ├── AnalyzeFilesAndTrackParams.java │ │ │ │ ├── AnalyzeFilesResponse.java │ │ │ │ ├── AnalyzeFullProjectParams.java │ │ │ │ ├── AnalyzeOpenFilesParams.java │ │ │ │ ├── AnalyzeVCSChangedFilesParams.java │ │ │ │ ├── DidChangeAnalysisPropertiesParams.java │ │ │ │ ├── DidChangeAutomaticAnalysisSettingParams.java │ │ │ │ ├── DidChangeClientNodeJsPathParams.java │ │ │ │ ├── DidChangePathToCompileCommandsParams.java │ │ │ │ ├── ForceAnalyzeResponse.java │ │ │ │ ├── GetAutoDetectedNodeJsResponse.java │ │ │ │ ├── GetForcedNodeJsResponse.java │ │ │ │ ├── GetSupportedFilePatternsParams.java │ │ │ │ ├── GetSupportedFilePatternsResponse.java │ │ │ │ ├── NodeJsDetailsDto.java │ │ │ │ ├── ShouldUseEnterpriseCSharpAnalyzerParams.java │ │ │ │ ├── ShouldUseEnterpriseCSharpAnalyzerResponse.java │ │ │ │ └── package-info.java │ │ │ ├── binding/ │ │ │ │ ├── BindingRpcService.java │ │ │ │ ├── GetBindingSuggestionParams.java │ │ │ │ ├── GetSharedConnectedModeConfigFileParams.java │ │ │ │ ├── GetSharedConnectedModeConfigFileResponse.java │ │ │ │ └── package-info.java │ │ │ ├── branch/ │ │ │ │ ├── DidVcsRepositoryChangeParams.java │ │ │ │ ├── GetMatchedSonarProjectBranchParams.java │ │ │ │ ├── GetMatchedSonarProjectBranchResponse.java │ │ │ │ ├── SonarProjectBranchRpcService.java │ │ │ │ └── package-info.java │ │ │ ├── config/ │ │ │ │ ├── ConfigurationRpcService.java │ │ │ │ ├── binding/ │ │ │ │ │ ├── BindingConfigurationDto.java │ │ │ │ │ ├── BindingMode.java │ │ │ │ │ ├── BindingSuggestionDto.java │ │ │ │ │ ├── BindingSuggestionOrigin.java │ │ │ │ │ ├── DidUpdateBindingParams.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ └── scope/ │ │ │ │ ├── ConfigurationScopeDto.java │ │ │ │ ├── DidAddConfigurationScopesParams.java │ │ │ │ ├── DidRemoveConfigurationScopeParams.java │ │ │ │ └── package-info.java │ │ │ ├── connection/ │ │ │ │ ├── ConnectionRpcService.java │ │ │ │ ├── GetConnectionSuggestionsResponse.java │ │ │ │ ├── GetMCPServerConfigurationParams.java │ │ │ │ ├── GetMCPServerConfigurationResponse.java │ │ │ │ ├── auth/ │ │ │ │ │ ├── HelpGenerateUserTokenParams.java │ │ │ │ │ ├── HelpGenerateUserTokenResponse.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── common/ │ │ │ │ │ ├── TransientSonarCloudConnectionDto.java │ │ │ │ │ ├── TransientSonarQubeConnectionDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── config/ │ │ │ │ │ ├── DidChangeCredentialsParams.java │ │ │ │ │ ├── DidUpdateConnectionsParams.java │ │ │ │ │ ├── SonarCloudConnectionConfigurationDto.java │ │ │ │ │ ├── SonarQubeConnectionConfigurationDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── org/ │ │ │ │ │ ├── FuzzySearchUserOrganizationsParams.java │ │ │ │ │ ├── FuzzySearchUserOrganizationsResponse.java │ │ │ │ │ ├── GetOrganizationParams.java │ │ │ │ │ ├── GetOrganizationResponse.java │ │ │ │ │ ├── ListUserOrganizationsParams.java │ │ │ │ │ ├── ListUserOrganizationsResponse.java │ │ │ │ │ ├── OrganizationDto.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── projects/ │ │ │ │ │ ├── FuzzySearchProjectsParams.java │ │ │ │ │ ├── FuzzySearchProjectsResponse.java │ │ │ │ │ ├── GetAllProjectsParams.java │ │ │ │ │ ├── GetAllProjectsResponse.java │ │ │ │ │ ├── GetProjectNamesByKeyParams.java │ │ │ │ │ ├── GetProjectNamesByKeyResponse.java │ │ │ │ │ ├── SonarProjectDto.java │ │ │ │ │ └── package-info.java │ │ │ │ └── validate/ │ │ │ │ ├── ValidateConnectionParams.java │ │ │ │ ├── ValidateConnectionResponse.java │ │ │ │ └── package-info.java │ │ │ ├── dogfooding/ │ │ │ │ ├── DogfoodingRpcService.java │ │ │ │ ├── IsDogfoodingEnvironmentResponse.java │ │ │ │ └── package-info.java │ │ │ ├── file/ │ │ │ │ ├── DidCloseFileParams.java │ │ │ │ ├── DidOpenFileParams.java │ │ │ │ ├── DidUpdateFileSystemParams.java │ │ │ │ ├── FileRpcService.java │ │ │ │ ├── FileStatusDto.java │ │ │ │ ├── GetFilesStatusParams.java │ │ │ │ ├── GetFilesStatusResponse.java │ │ │ │ └── package-info.java │ │ │ ├── hotspot/ │ │ │ │ ├── ChangeHotspotStatusParams.java │ │ │ │ ├── CheckLocalDetectionSupportedParams.java │ │ │ │ ├── CheckLocalDetectionSupportedResponse.java │ │ │ │ ├── CheckStatusChangePermittedParams.java │ │ │ │ ├── CheckStatusChangePermittedResponse.java │ │ │ │ ├── HotspotRpcService.java │ │ │ │ ├── HotspotStatus.java │ │ │ │ ├── OpenHotspotInBrowserParams.java │ │ │ │ └── package-info.java │ │ │ ├── initialize/ │ │ │ │ ├── BackendCapability.java │ │ │ │ ├── ClientConstantInfoDto.java │ │ │ │ ├── HttpConfigurationDto.java │ │ │ │ ├── InitializeParams.java │ │ │ │ ├── JsTsRequirementsDto.java │ │ │ │ ├── LanguageSpecificRequirements.java │ │ │ │ ├── OmnisharpRequirementsDto.java │ │ │ │ ├── SonarCloudAlternativeEnvironmentDto.java │ │ │ │ ├── SonarQubeCloudRegionDto.java │ │ │ │ ├── SslConfigurationDto.java │ │ │ │ ├── TelemetryClientConstantAttributesDto.java │ │ │ │ ├── TelemetryMigrationDto.java │ │ │ │ └── package-info.java │ │ │ ├── issue/ │ │ │ │ ├── AddIssueCommentParams.java │ │ │ │ ├── ChangeIssueStatusParams.java │ │ │ │ ├── CheckAnticipatedStatusChangeSupportedParams.java │ │ │ │ ├── CheckAnticipatedStatusChangeSupportedResponse.java │ │ │ │ ├── CheckStatusChangePermittedParams.java │ │ │ │ ├── CheckStatusChangePermittedResponse.java │ │ │ │ ├── EffectiveIssueDetailsDto.java │ │ │ │ ├── GetEffectiveIssueDetailsParams.java │ │ │ │ ├── GetEffectiveIssueDetailsResponse.java │ │ │ │ ├── IssueRpcService.java │ │ │ │ ├── ReopenAllIssuesForFileParams.java │ │ │ │ ├── ReopenAllIssuesForFileResponse.java │ │ │ │ ├── ReopenIssueParams.java │ │ │ │ ├── ReopenIssueResponse.java │ │ │ │ ├── ResolutionStatus.java │ │ │ │ └── package-info.java │ │ │ ├── labs/ │ │ │ │ ├── IdeLabsRpcService.java │ │ │ │ ├── JoinIdeLabsProgramParams.java │ │ │ │ ├── JoinIdeLabsProgramResponse.java │ │ │ │ └── package-info.java │ │ │ ├── log/ │ │ │ │ ├── LogLevel.java │ │ │ │ ├── LogRpcService.java │ │ │ │ ├── SetLogLevelParams.java │ │ │ │ └── package-info.java │ │ │ ├── newcode/ │ │ │ │ ├── GetNewCodeDefinitionParams.java │ │ │ │ ├── GetNewCodeDefinitionResponse.java │ │ │ │ ├── NewCodeRpcService.java │ │ │ │ └── package-info.java │ │ │ ├── plugin/ │ │ │ │ ├── ArtifactSourceDto.java │ │ │ │ ├── GetPluginStatusesParams.java │ │ │ │ ├── GetPluginStatusesResponse.java │ │ │ │ ├── PluginRpcService.java │ │ │ │ ├── PluginStateDto.java │ │ │ │ ├── PluginStatusDto.java │ │ │ │ └── package-info.java │ │ │ ├── progress/ │ │ │ │ ├── CancelTaskParams.java │ │ │ │ ├── TaskProgressRpcService.java │ │ │ │ └── package-info.java │ │ │ ├── remediation/ │ │ │ │ └── aicodefix/ │ │ │ │ ├── AiCodeFixRpcService.java │ │ │ │ ├── SuggestFixChangeDto.java │ │ │ │ ├── SuggestFixParams.java │ │ │ │ ├── SuggestFixResponse.java │ │ │ │ └── package-info.java │ │ │ ├── rules/ │ │ │ │ ├── EffectiveRuleDetailsDto.java │ │ │ │ ├── EffectiveRuleParamDto.java │ │ │ │ ├── GetEffectiveRuleDetailsParams.java │ │ │ │ ├── GetEffectiveRuleDetailsResponse.java │ │ │ │ ├── GetStandaloneRuleDescriptionParams.java │ │ │ │ ├── GetStandaloneRuleDescriptionResponse.java │ │ │ │ ├── ImpactDto.java │ │ │ │ ├── ListAllStandaloneRulesDefinitionsResponse.java │ │ │ │ ├── RuleContextualSectionDto.java │ │ │ │ ├── RuleContextualSectionWithDefaultContextKeyDto.java │ │ │ │ ├── RuleDefinitionDto.java │ │ │ │ ├── RuleDescriptionTabDto.java │ │ │ │ ├── RuleMonolithicDescriptionDto.java │ │ │ │ ├── RuleNonContextualSectionDto.java │ │ │ │ ├── RuleParamDefinitionDto.java │ │ │ │ ├── RuleParamType.java │ │ │ │ ├── RuleSplitDescriptionDto.java │ │ │ │ ├── RulesRpcService.java │ │ │ │ ├── StandaloneRuleConfigDto.java │ │ │ │ ├── UpdateStandaloneRulesConfigurationParams.java │ │ │ │ ├── VulnerabilityProbability.java │ │ │ │ └── package-info.java │ │ │ ├── sca/ │ │ │ │ ├── ChangeDependencyRiskStatusParams.java │ │ │ │ ├── CheckDependencyRiskSupportedParams.java │ │ │ │ ├── CheckDependencyRiskSupportedResponse.java │ │ │ │ ├── DependencyRiskRpcService.java │ │ │ │ ├── DependencyRiskTransition.java │ │ │ │ ├── ListAllDependencyRisksResponse.java │ │ │ │ ├── OpenDependencyRiskInBrowserParams.java │ │ │ │ └── package-info.java │ │ │ ├── telemetry/ │ │ │ │ ├── GetStatusResponse.java │ │ │ │ ├── TelemetryRpcService.java │ │ │ │ └── package-info.java │ │ │ └── tracking/ │ │ │ ├── AffectedPackageDto.java │ │ │ ├── DependencyRiskDto.java │ │ │ ├── ListAllParams.java │ │ │ ├── ListAllResponse.java │ │ │ ├── RecommendationDetailsDto.java │ │ │ ├── TaintVulnerabilityDto.java │ │ │ ├── TaintVulnerabilityTrackingRpcService.java │ │ │ ├── TextRangeWithHashDto.java │ │ │ └── package-info.java │ │ ├── client/ │ │ │ ├── OpenUrlInBrowserParams.java │ │ │ ├── analysis/ │ │ │ │ ├── DidChangeAnalysisReadinessParams.java │ │ │ │ ├── DidDetectSecretParams.java │ │ │ │ ├── FileEditDto.java │ │ │ │ ├── GetFileExclusionsParams.java │ │ │ │ ├── GetFileExclusionsResponse.java │ │ │ │ ├── GetInferredAnalysisPropertiesParams.java │ │ │ │ ├── GetInferredAnalysisPropertiesResponse.java │ │ │ │ ├── QuickFixDto.java │ │ │ │ ├── RawIssueDto.java │ │ │ │ ├── RawIssueFlowDto.java │ │ │ │ ├── RawIssueLocationDto.java │ │ │ │ ├── TextEditDto.java │ │ │ │ └── package-info.java │ │ │ ├── binding/ │ │ │ │ ├── AssistBindingParams.java │ │ │ │ ├── AssistBindingResponse.java │ │ │ │ ├── GetBindingSuggestionsResponse.java │ │ │ │ ├── NoBindingSuggestionFoundParams.java │ │ │ │ ├── SuggestBindingParams.java │ │ │ │ └── package-info.java │ │ │ ├── branch/ │ │ │ │ ├── DidChangeMatchedSonarProjectBranchParams.java │ │ │ │ ├── MatchProjectBranchParams.java │ │ │ │ ├── MatchProjectBranchResponse.java │ │ │ │ ├── MatchSonarProjectBranchParams.java │ │ │ │ ├── MatchSonarProjectBranchResponse.java │ │ │ │ └── package-info.java │ │ │ ├── connection/ │ │ │ │ ├── AssistCreatingConnectionParams.java │ │ │ │ ├── AssistCreatingConnectionResponse.java │ │ │ │ ├── ConnectionSuggestionDto.java │ │ │ │ ├── GetConnectionSuggestionsParams.java │ │ │ │ ├── GetCredentialsParams.java │ │ │ │ ├── GetCredentialsResponse.java │ │ │ │ ├── SonarCloudConnectionParams.java │ │ │ │ ├── SonarCloudConnectionSuggestionDto.java │ │ │ │ ├── SonarQubeConnectionParams.java │ │ │ │ ├── SonarQubeConnectionSuggestionDto.java │ │ │ │ ├── SuggestConnectionParams.java │ │ │ │ └── package-info.java │ │ │ ├── embeddedserver/ │ │ │ │ ├── EmbeddedServerStartedParams.java │ │ │ │ └── package-info.java │ │ │ ├── event/ │ │ │ │ ├── DidReceiveServerHotspotEvent.java │ │ │ │ └── package-info.java │ │ │ ├── fix/ │ │ │ │ ├── ChangesDto.java │ │ │ │ ├── FileEditDto.java │ │ │ │ ├── FixSuggestionDto.java │ │ │ │ ├── LineRangeDto.java │ │ │ │ ├── ShowFixSuggestionParams.java │ │ │ │ └── package-info.java │ │ │ ├── fs/ │ │ │ │ ├── GetBaseDirParams.java │ │ │ │ ├── GetBaseDirResponse.java │ │ │ │ ├── ListFilesParams.java │ │ │ │ ├── ListFilesResponse.java │ │ │ │ └── package-info.java │ │ │ ├── hotspot/ │ │ │ │ ├── HotspotDetailsDto.java │ │ │ │ ├── RaiseHotspotsParams.java │ │ │ │ ├── RaisedHotspotDto.java │ │ │ │ ├── ShowHotspotParams.java │ │ │ │ └── package-info.java │ │ │ ├── http/ │ │ │ │ ├── CheckServerTrustedParams.java │ │ │ │ ├── CheckServerTrustedResponse.java │ │ │ │ ├── GetProxyPasswordAuthenticationParams.java │ │ │ │ ├── GetProxyPasswordAuthenticationResponse.java │ │ │ │ ├── ProxyDto.java │ │ │ │ ├── SelectProxiesParams.java │ │ │ │ ├── SelectProxiesResponse.java │ │ │ │ ├── X509CertificateDto.java │ │ │ │ └── package-info.java │ │ │ ├── info/ │ │ │ │ ├── GetClientLiveInfoResponse.java │ │ │ │ └── package-info.java │ │ │ ├── issue/ │ │ │ │ ├── FileEditDto.java │ │ │ │ ├── IssueDetailsDto.java │ │ │ │ ├── IssueFlowDto.java │ │ │ │ ├── IssueLocationDto.java │ │ │ │ ├── QuickFixDto.java │ │ │ │ ├── RaiseIssuesParams.java │ │ │ │ ├── RaisedFindingDto.java │ │ │ │ ├── RaisedIssueDto.java │ │ │ │ ├── ShowIssueParams.java │ │ │ │ ├── TextEditDto.java │ │ │ │ └── package-info.java │ │ │ ├── log/ │ │ │ │ ├── LogLevel.java │ │ │ │ ├── LogParams.java │ │ │ │ └── package-info.java │ │ │ ├── message/ │ │ │ │ ├── MessageActionItem.java │ │ │ │ ├── MessageType.java │ │ │ │ ├── ShowMessageParams.java │ │ │ │ ├── ShowMessageRequestParams.java │ │ │ │ ├── ShowMessageRequestResponse.java │ │ │ │ ├── ShowSoonUnsupportedMessageParams.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── plugin/ │ │ │ │ ├── DidChangePluginStatusesParams.java │ │ │ │ ├── DidSkipLoadingPluginParams.java │ │ │ │ ├── DidUpdatePluginsParams.java │ │ │ │ └── package-info.java │ │ │ ├── progress/ │ │ │ │ ├── ProgressEndNotification.java │ │ │ │ ├── ProgressUpdateNotification.java │ │ │ │ ├── ReportProgressParams.java │ │ │ │ ├── StartProgressParams.java │ │ │ │ └── package-info.java │ │ │ ├── promotion/ │ │ │ │ ├── PromoteExtraEnabledLanguagesInConnectedModeParams.java │ │ │ │ └── package-info.java │ │ │ ├── sca/ │ │ │ │ ├── DidChangeDependencyRisksParams.java │ │ │ │ └── package-info.java │ │ │ ├── smartnotification/ │ │ │ │ ├── ShowSmartNotificationParams.java │ │ │ │ └── package-info.java │ │ │ ├── sync/ │ │ │ │ ├── DidSynchronizeConfigurationScopeParams.java │ │ │ │ ├── InvalidTokenParams.java │ │ │ │ └── package-info.java │ │ │ ├── taint/ │ │ │ │ └── vulnerability/ │ │ │ │ ├── DidChangeTaintVulnerabilitiesParams.java │ │ │ │ └── package-info.java │ │ │ └── telemetry/ │ │ │ ├── AcceptedBindingSuggestionParams.java │ │ │ ├── AddQuickFixAppliedForRuleParams.java │ │ │ ├── AddReportedRulesParams.java │ │ │ ├── AiSuggestionSource.java │ │ │ ├── AnalysisDoneOnSingleLanguageParams.java │ │ │ ├── AnalysisReportingTriggeredParams.java │ │ │ ├── AnalysisReportingType.java │ │ │ ├── DevNotificationsClickedParams.java │ │ │ ├── FindingsFilteredParams.java │ │ │ ├── FixSuggestionResolvedParams.java │ │ │ ├── FixSuggestionStatus.java │ │ │ ├── HelpAndFeedbackClickedParams.java │ │ │ ├── IdeLabsExternalLinkClickedParams.java │ │ │ ├── IdeLabsFeedbackLinkClickedParams.java │ │ │ ├── McpTransportMode.java │ │ │ ├── McpTransportModeUsedParams.java │ │ │ ├── TelemetryClientLiveAttributesResponse.java │ │ │ ├── ToggleIdeLabsEnablementParams.java │ │ │ ├── ToolCalledParams.java │ │ │ └── package-info.java │ │ ├── common/ │ │ │ ├── CleanCodeAttribute.java │ │ │ ├── CleanCodeAttributeCategory.java │ │ │ ├── ClientFileDto.java │ │ │ ├── Either.java │ │ │ ├── FlowDto.java │ │ │ ├── ImpactSeverity.java │ │ │ ├── IssueSeverity.java │ │ │ ├── Language.java │ │ │ ├── LocationDto.java │ │ │ ├── MQRModeDetails.java │ │ │ ├── RuleType.java │ │ │ ├── SoftwareQuality.java │ │ │ ├── SonarCloudRegion.java │ │ │ ├── StandardModeDetails.java │ │ │ ├── TextRangeDto.java │ │ │ ├── TokenDto.java │ │ │ ├── UsernamePasswordDto.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── sonarsource/ │ └── sonarlint/ │ └── core/ │ └── rpc/ │ └── protocol/ │ ├── backend/ │ │ ├── config/ │ │ │ └── binding/ │ │ │ └── DidUpdateBindingParamsTests.java │ │ ├── connection/ │ │ │ └── projects/ │ │ │ └── SonarProjectDtoTest.java │ │ └── initialize/ │ │ ├── InitializeParamsTests.java │ │ └── TelemetryClientConstantAttributesDtoTests.java │ ├── client/ │ │ └── binding/ │ │ └── AssistBindingParamsTests.java │ └── common/ │ ├── EitherTests.java │ ├── TokenDtoTests.java │ └── UsernamePasswordDtoTests.java ├── spec/ │ ├── README.adoc │ ├── connected_mode/ │ │ ├── README.adoc │ │ ├── binding_suggestion.adoc │ │ └── synchronization/ │ │ ├── README.adoc │ │ ├── overview.adoc │ │ └── pull_synchronization.adoc │ ├── glossary.adoc │ ├── issue_tracking.adoc │ ├── rpc/ │ │ └── json_rpc.adoc │ └── smart_notifications.adoc ├── test-utils/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── sonarsource/ │ │ └── sonarlint/ │ │ └── core/ │ │ └── test/ │ │ └── utils/ │ │ ├── ProtobufUtils.java │ │ ├── SonarLintBackendFixture.java │ │ ├── SonarLintTestRpcServer.java │ │ ├── junit5/ │ │ │ ├── SonarLintTest.java │ │ │ ├── SonarLintTestHarness.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── plugins/ │ │ │ ├── Plugin.java │ │ │ ├── SonarPluginBuilder.java │ │ │ ├── package-info.java │ │ │ └── src/ │ │ │ ├── DefaultPlugin.java │ │ │ ├── DefaultRulesDefinition.java │ │ │ ├── DefaultSensor.java │ │ │ └── package-info.java │ │ ├── server/ │ │ │ ├── ServerFixture.java │ │ │ ├── package-info.java │ │ │ ├── sse/ │ │ │ │ ├── SSEServer.java │ │ │ │ ├── SSEServlet.java │ │ │ │ └── package-info.java │ │ │ └── websockets/ │ │ │ ├── ContextListener.java │ │ │ ├── RequestListener.java │ │ │ ├── ServletAwareConfig.java │ │ │ ├── WebSocketConnection.java │ │ │ ├── WebSocketConnectionRepository.java │ │ │ ├── WebSocketEndpoint.java │ │ │ ├── WebSocketRequest.java │ │ │ ├── WebSocketServer.java │ │ │ └── package-info.java │ │ └── storage/ │ │ ├── AiCodeFixFixtures.java │ │ ├── ConfigurationScopeStorageFixture.java │ │ ├── ProjectStorageFixture.java │ │ ├── ServerDependencyRiskFixtures.java │ │ ├── ServerIssueFixtures.java │ │ ├── ServerSecurityHotspotFixture.java │ │ ├── ServerTaintIssueFixtures.java │ │ ├── StorageFixture.java │ │ ├── TestDatabase.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── sonarsource/ │ └── sonarlint/ │ └── core/ │ └── test/ │ └── utils/ │ └── SonarLintTestRpcServerTest.java └── third-party-licenses.sh
Showing preview only (1,104K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (11309 symbols across 1465 files)
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisQueue.java
class AnalysisQueue (line 42) | public class AnalysisQueue {
method post (line 50) | public synchronized void post(Command command) {
method wakeUp (line 56) | public synchronized void wakeUp() {
method removeAll (line 60) | public synchronized List<Command> removeAll() {
method takeNextCommand (line 66) | public synchronized Command takeNextCommand() throws InterruptedExcept...
method clearAllButAnalysesAndResets (line 79) | public synchronized void clearAllButAnalysesAndResets() {
method pollNextReadyCommand (line 83) | private Optional<QueuedCommand> pollNextReadyCommand() {
method tidyUp (line 104) | private Command tidyUp(QueuedCommand nextCommand) {
method cleanUpExpiredCommands (line 109) | private void cleanUpExpiredCommands(QueuedCommand nextQueuedCommand) {
method batchAutomaticAnalyses (line 124) | private Command batchAutomaticAnalyses(Command nextCommand) {
method canBeBatched (line 140) | private static boolean canBeBatched(AnalyzeCommand analyzeCommand, Com...
method removeAll (line 145) | private List<? extends Command> removeAll(Predicate<QueuedCommand> pre...
class QueuedCommand (line 159) | private static class QueuedCommand {
method QueuedCommand (line 163) | QueuedCommand(Command command) {
method getCommand (line 167) | public Command getCommand() {
method getQueuedTime (line 171) | public Instant getQueuedTime() {
class CommandComparator (line 176) | private static class CommandComparator implements Comparator<QueuedCom...
method compare (line 187) | @Override
method getAnalysisExpirationDelay (line 199) | private static Duration getAnalysisExpirationDelay() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisScheduler.java
class AnalysisScheduler (line 33) | public class AnalysisScheduler {
method AnalysisScheduler (line 45) | public AnalysisScheduler(AnalysisSchedulerConfiguration analysisGlobal...
method reset (line 54) | public void reset(Supplier<SchedulerResetConfiguration> pluginsWithCon...
method wakeUp (line 58) | public void wakeUp() {
method executeQueuedCommands (line 62) | private void executeQueuedCommands() {
method post (line 84) | public void post(Command command) {
method stop (line 106) | public void stop() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisConfiguration.java
class AnalysisConfiguration (line 32) | @Immutable
method AnalysisConfiguration (line 41) | private AnalysisConfiguration(Builder builder) {
method builder (line 49) | public static Builder builder() {
method extraProperties (line 53) | public Map<String, String> extraProperties() {
method baseDir (line 57) | public Path baseDir() {
method inputFiles (line 61) | public List<ClientInputFile> inputFiles() {
method activeRules (line 65) | public Collection<ActiveRule> activeRules() {
method toString (line 69) | @Override
method generateToString (line 74) | private String generateToString() {
method generateToStringActiveRules (line 84) | protected void generateToStringActiveRules(StringBuilder sb) {
method generateToStringCommon (line 105) | protected void generateToStringCommon(StringBuilder sb) {
method generateToStringInputFiles (line 110) | protected void generateToStringInputFiles(StringBuilder sb) {
method getCharsetLabel (line 127) | private static String getCharsetLabel(ClientInputFile inputFile) {
class Builder (line 132) | public static final class Builder {
method Builder (line 138) | private Builder() {
method addInputFiles (line 141) | public Builder addInputFiles(ClientInputFile... inputFiles) {
method addInputFiles (line 146) | public Builder addInputFiles(Collection<? extends ClientInputFile> i...
method addInputFile (line 151) | public Builder addInputFile(ClientInputFile inputFile) {
method putAllExtraProperties (line 156) | public Builder putAllExtraProperties(Map<String, String> extraProper...
method putExtraProperty (line 161) | public Builder putExtraProperty(String key, String value) {
method setBaseDir (line 166) | public Builder setBaseDir(Path baseDir) {
method addActiveRules (line 171) | public Builder addActiveRules(ActiveRule... activeRules) {
method addActiveRules (line 176) | public Builder addActiveRules(Collection<? extends ActiveRule> activ...
method addActiveRule (line 181) | public Builder addActiveRule(ActiveRule activeRules) {
method build (line 186) | public AnalysisConfiguration build() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisResults.java
class AnalysisResults (line 31) | public class AnalysisResults {
method addFailedAnalysisFile (line 36) | public void addFailedAnalysisFile(ClientInputFile inputFile) {
method languagePerFile (line 44) | public Map<ClientInputFile, SonarLanguage> languagePerFile() {
method setLanguageForFile (line 48) | public void setLanguageForFile(ClientInputFile file, @Nullable SonarLa...
method failedAnalysisFiles (line 56) | public Collection<ClientInputFile> failedAnalysisFiles() {
method getDuration (line 60) | public Duration getDuration() {
method setDuration (line 64) | public void setDuration(Duration duration) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisSchedulerConfiguration.java
class AnalysisSchedulerConfiguration (line 31) | @Immutable
method AnalysisSchedulerConfiguration (line 42) | private AnalysisSchedulerConfiguration(Builder builder) {
method builder (line 50) | public static Builder builder() {
method getWorkDir (line 54) | public Path getWorkDir() {
method getClientPid (line 58) | public long getClientPid() {
method getFileSystemProvider (line 62) | public Function<String, ClientModuleFileSystem> getFileSystemProvider() {
method getEffectiveSettings (line 66) | public Map<String, String> getEffectiveSettings() {
class Builder (line 74) | public static final class Builder {
method Builder (line 81) | private Builder() {
method setWorkDir (line 88) | public Builder setWorkDir(Path workDir) {
method setExtraProperties (line 96) | public Builder setExtraProperties(Map<String, String> extraPropertie...
method setNodeJs (line 104) | public Builder setNodeJs(@Nullable Path nodeJsPath) {
method setClientPid (line 109) | public Builder setClientPid(long clientPid) {
method setFileSystemProvider (line 114) | public Builder setFileSystemProvider(Function<String, ClientModuleFi...
method build (line 119) | public AnalysisSchedulerConfiguration build() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFile.java
type ClientInputFile (line 33) | public interface ClientInputFile {
method getPath (line 40) | @Deprecated
method isTest (line 46) | boolean isTest();
method getCharset (line 51) | @CheckForNull
method language (line 58) | @CheckForNull
method getClientObject (line 66) | <G> G getClientObject();
method inputStream (line 71) | InputStream inputStream() throws IOException;
method contents (line 76) | String contents() throws IOException;
method relativePath (line 82) | String relativePath();
method uri (line 87) | URI uri();
method isDirty (line 89) | default boolean isDirty() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFileEdit.java
class ClientInputFileEdit (line 24) | public class ClientInputFileEdit {
method ClientInputFileEdit (line 28) | public ClientInputFileEdit(ClientInputFile target, List<TextEdit> text...
method target (line 33) | public ClientInputFile target() {
method textEdits (line 37) | public List<TextEdit> textEdits() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleFileEvent.java
class ClientModuleFileEvent (line 24) | public class ClientModuleFileEvent {
method ClientModuleFileEvent (line 29) | private ClientModuleFileEvent(ClientInputFile target, ModuleFileEvent....
method of (line 34) | public static ClientModuleFileEvent of(ClientInputFile target, ModuleF...
method target (line 38) | public ClientInputFile target() {
method type (line 42) | public ModuleFileEvent.Type type() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleFileSystem.java
type ClientModuleFileSystem (line 25) | public interface ClientModuleFileSystem {
method files (line 26) | Stream<ClientInputFile> files(String suffix, InputFile.Type type);
method files (line 27) | Stream<ClientInputFile> files();
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleInfo.java
class ClientModuleInfo (line 22) | public class ClientModuleInfo {
method ClientModuleInfo (line 26) | public ClientModuleInfo(String key, ClientModuleFileSystem clientFileS...
method key (line 31) | public String key() {
method fileSystem (line 35) | public ClientModuleFileSystem fileSystem() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/DefaultLocation.java
class DefaultLocation (line 26) | public class DefaultLocation implements IssueLocation {
method DefaultLocation (line 31) | public DefaultLocation(@Nullable ClientInputFile inputFile, @Nullable ...
method getInputFile (line 37) | @Override
method getMessage (line 42) | @Override
method getTextRange (line 47) | @CheckForNull
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/Flow.java
class Flow (line 27) | public class Flow {
method Flow (line 30) | public Flow(List<IssueLocation> issueLocations) {
method locations (line 39) | public List<org.sonarsource.sonarlint.core.analysis.api.IssueLocation>...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/Issue.java
class Issue (line 33) | public class Issue implements IssueLocation {
method Issue (line 43) | public Issue(ActiveRule activeRule, @Nullable String primaryMessage, M...
method getActiveRule (line 55) | public ActiveRule getActiveRule() {
method getRuleKey (line 59) | public RuleKey getRuleKey() {
method getMessage (line 63) | @Override
method getInputFile (line 68) | @Override
method flows (line 74) | public List<Flow> flows() {
method quickFixes (line 78) | public List<QuickFix> quickFixes() {
method getTextRange (line 82) | @Override
method getOverriddenImpacts (line 88) | public Map<SoftwareQuality, ImpactSeverity> getOverriddenImpacts() {
method getRuleDescriptionContextKey (line 92) | public Optional<String> getRuleDescriptionContextKey() {
method toString (line 96) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/IssueLocation.java
type IssueLocation (line 24) | public interface IssueLocation extends WithTextRange {
method getMessage (line 26) | @CheckForNull
method getInputFile (line 32) | @CheckForNull
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/QuickFix.java
class QuickFix (line 24) | public class QuickFix {
method QuickFix (line 29) | public QuickFix(List<ClientInputFileEdit> inputFileEdits, String messa...
method inputFileEdits (line 34) | public List<ClientInputFileEdit> inputFileEdits() {
method message (line 38) | public String message() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/TextEdit.java
class TextEdit (line 24) | public class TextEdit {
method TextEdit (line 28) | public TextEdit(TextRange range, String newText) {
method range (line 33) | public TextRange range() {
method newText (line 37) | public String newText() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/TriggerType.java
type TriggerType (line 22) | public enum TriggerType {
method TriggerType (line 28) | TriggerType(boolean canBeBatchedWithSameTriggerType) {
method canBeBatchedWithSameTriggerType (line 32) | public boolean canBeBatchedWithSameTriggerType() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/WithTextRange.java
type WithTextRange (line 25) | public interface WithTextRange {
method getTextRange (line 30) | @CheckForNull
method getStartLine (line 33) | @CheckForNull
method getStartLineOffset (line 39) | @CheckForNull
method getEndLine (line 45) | @CheckForNull
method getEndLineOffset (line 51) | @CheckForNull
method convert (line 57) | static TextRange convert(org.sonar.api.batch.fs.TextRange analyzerText...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/AnalyzeCommand.java
class AnalyzeCommand (line 56) | public class AnalyzeCommand extends Command {
method AnalyzeCommand (line 74) | public AnalyzeCommand(String moduleKey, UUID analysisId, TriggerType t...
method AnalyzeCommand (line 81) | public AnalyzeCommand(String moduleKey, UUID analysisId, TriggerType t...
method isReady (line 101) | @Override
method getModuleKey (line 106) | public String getModuleKey() {
method getTriggerType (line 110) | public TriggerType getTriggerType() {
method getFutureResult (line 114) | public CompletableFuture<AnalysisResults> getFutureResult() {
method getFiles (line 118) | public Set<URI> getFiles() {
method getExtraProperties (line 122) | public Map<String, String> getExtraProperties() {
method execute (line 126) | @Override
method execute (line 137) | void execute(ModuleRegistry moduleRegistry, ProgressIndicator progress...
method doExecute (line 145) | void doExecute(ModuleRegistry moduleRegistry, ProgressIndicator progre...
method handleAnalysisFailed (line 157) | private void handleAnalysisFailed(Throwable throwable) {
method doRunAnalysis (line 162) | private AnalysisResults doRunAnalysis(ModuleRegistry moduleRegistry, P...
method doIfTraceIsSet (line 224) | private void doIfTraceIsSet(Consumer<Trace> action) {
method mergeWith (line 230) | public AnalyzeCommand mergeWith(AnalyzeCommand otherNewerAnalyzeComman...
method cancel (line 251) | @Override
method shouldCancelPost (line 261) | @Override
method shouldCancelQueue (line 275) | @Override
method getTrace (line 280) | @CheckForNull
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/Command.java
class Command (line 25) | public abstract class Command {
method execute (line 29) | public abstract void execute(ModuleRegistry moduleRegistry);
method getSequenceNumber (line 31) | public final long getSequenceNumber() {
method isReady (line 35) | public boolean isReady() {
method cancel (line 39) | public void cancel() {
method shouldCancelPost (line 43) | public boolean shouldCancelPost(Command executingCommand) {
method shouldCancelQueue (line 47) | public boolean shouldCancelQueue() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/NotifyModuleEventCommand.java
class NotifyModuleEventCommand (line 26) | public class NotifyModuleEventCommand extends Command {
method NotifyModuleEventCommand (line 30) | public NotifyModuleEventCommand(String moduleKey, ClientModuleFileEven...
method execute (line 35) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/ResetPluginsCommand.java
class ResetPluginsCommand (line 29) | public class ResetPluginsCommand extends Command {
method ResetPluginsCommand (line 35) | public ResetPluginsCommand(AtomicReference<GlobalAnalysisContainer> gl...
method execute (line 42) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/UnregisterModuleCommand.java
class UnregisterModuleCommand (line 24) | public final class UnregisterModuleCommand extends Command {
method UnregisterModuleCommand (line 27) | public UnregisterModuleCommand(String moduleKey) {
method execute (line 31) | @Override
method getModuleKey (line 36) | public String getModuleKey() {
method shouldCancelPost (line 40) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/ContainerLifespan.java
type ContainerLifespan (line 22) | public enum ContainerLifespan {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisConfigurationProvider.java
class AnalysisConfigurationProvider (line 26) | public class AnalysisConfigurationProvider {
method provide (line 30) | @Bean("configuration")
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisContainer.java
class AnalysisContainer (line 50) | public class AnalysisContainer extends SpringComponentContainer {
method AnalysisContainer (line 55) | public AnalysisContainer(SpringComponentContainer globalContainer, Pro...
method doBeforeStart (line 60) | @Override
method addCoreComponents (line 66) | private void addCoreComponents() {
method addPluginExtensions (line 113) | private void addPluginExtensions() {
method doAfterStart (line 117) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisSettings.java
class AnalysisSettings (line 29) | public class AnalysisSettings extends MapSettings {
method AnalysisSettings (line 31) | public AnalysisSettings(GlobalSettings globalSettings, AnalysisConfigu...
method mergeInOrder (line 35) | private static Map<String, String> mergeInOrder(GlobalSettings globalS...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisTempFolderProvider.java
class AnalysisTempFolderProvider (line 27) | public class AnalysisTempFolderProvider {
method provide (line 31) | @Bean("tempFolder")
class NoTempFilesDuringAnalysis (line 36) | private static class NoTempFilesDuringAnalysis implements TempFolder {
method newDir (line 38) | @Override
method newDir (line 43) | @Override
method throwUOEFolder (line 48) | private static UnsupportedOperationException throwUOEFolder() {
method newFile (line 52) | @Override
method throwUOEFiles (line 57) | private static UnsupportedOperationException throwUOEFiles() {
method newFile (line 61) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/IssueListenerHolder.java
class IssueListenerHolder (line 29) | public class IssueListenerHolder {
method IssueListenerHolder (line 32) | public IssueListenerHolder(Consumer<Issue> issueListener) {
method handle (line 36) | public void handle(Issue issue) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/SonarLintPathPattern.java
class SonarLintPathPattern (line 34) | public class SonarLintPathPattern {
method SonarLintPathPattern (line 40) | public SonarLintPathPattern(String pattern) {
method create (line 51) | public static SonarLintPathPattern[] create(String[] s) {
method match (line 59) | public boolean match(InputFile inputFile) {
method match (line 63) | public boolean match(String filePath) {
method match (line 67) | public boolean match(InputFile inputFile, boolean caseSensitiveFileExt...
method match (line 71) | public boolean match(String filePath, boolean caseSensitiveFileExtensi...
method toString (line 83) | @Override
method sanitizeExtension (line 88) | static String sanitizeExtension(@Nullable String suffix) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/AbstractFilePredicate.java
class AbstractFilePredicate (line 31) | public abstract class AbstractFilePredicate implements OptimizedFilePred...
method filter (line 35) | @Override
method get (line 40) | @Override
method priority (line 45) | @Override
method compareTo (line 50) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/AndPredicate.java
class AndPredicate (line 33) | class AndPredicate extends AbstractFilePredicate {
method AndPredicate (line 37) | private AndPredicate() {
method create (line 40) | public static FilePredicate create(Collection<FilePredicate> predicate...
method apply (line 60) | @Override
method filter (line 70) | @Override
method get (line 79) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultFilePredicates.java
class DefaultFilePredicates (line 39) | public class DefaultFilePredicates implements FilePredicates {
method all (line 44) | @Override
method none (line 52) | @Override
method hasAbsolutePath (line 57) | @Override
method hasRelativePath (line 65) | @Override
method hasURI (line 70) | @Override
method matchesPathPattern (line 75) | @Override
method matchesPathPatterns (line 80) | @Override
method doesNotMatchPathPattern (line 92) | @Override
method doesNotMatchPathPatterns (line 97) | @Override
method hasPath (line 105) | @Override
method is (line 110) | @Override
method hasLanguage (line 116) | @Override
method hasLanguages (line 121) | @Override
method hasLanguages (line 130) | @Override
method hasType (line 139) | @Override
method not (line 144) | @Override
method or (line 149) | @Override
method or (line 154) | @Override
method or (line 159) | @Override
method and (line 164) | @Override
method and (line 169) | @Override
method and (line 174) | @Override
method hasFilename (line 179) | @Override
method hasExtension (line 184) | @Override
method hasStatus (line 189) | @Override
method hasAnyStatus (line 194) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultTextPointer.java
class DefaultTextPointer (line 24) | public class DefaultTextPointer implements TextPointer {
method DefaultTextPointer (line 29) | public DefaultTextPointer(int line, int lineOffset) {
method line (line 34) | @Override
method lineOffset (line 39) | @Override
method toString (line 44) | @Override
method equals (line 49) | @Override
method hashCode (line 58) | @Override
method compareTo (line 63) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultTextRange.java
class DefaultTextRange (line 25) | public class DefaultTextRange implements TextRange {
method DefaultTextRange (line 30) | public DefaultTextRange(TextPointer start, TextPointer end) {
method start (line 35) | @Override
method end (line 40) | @Override
method overlap (line 45) | @Override
method toString (line 52) | @Override
method equals (line 57) | @Override
method hashCode (line 66) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FalsePredicate.java
class FalsePredicate (line 27) | class FalsePredicate extends AbstractFilePredicate {
method apply (line 31) | @Override
method filter (line 36) | @Override
method get (line 41) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FileExtensionPredicate.java
class FileExtensionPredicate (line 26) | public class FileExtensionPredicate extends AbstractFilePredicate {
method FileExtensionPredicate (line 30) | public FileExtensionPredicate(String extension) {
method apply (line 34) | @Override
method get (line 39) | @Override
method getExtension (line 44) | public static String getExtension(InputFile inputFile) {
method getExtension (line 48) | static String getExtension(String name) {
method lowercase (line 56) | private static String lowercase(String extension) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FileIndexer.java
class FileIndexer (line 41) | @SonarLintSide
method FileIndexer (line 55) | public FileIndexer(InputFileIndex inputFileCache, InputFileBuilder inp...
method index (line 66) | public void index() {
method pluralizeFiles (line 82) | private static String pluralizeFiles(int count) {
method indexFiles (line 86) | private void indexFiles(InputFileIndex inputFileCache, Progress progre...
method indexFile (line 92) | private void indexFile(InputFileIndex inputFileCache, Progress progres...
method indexFile (line 101) | private void indexFile(final InputFileIndex inputFileCache, final Prog...
method accept (line 106) | private boolean accept(InputFile indexedFile) {
class Progress (line 117) | private class Progress {
method markAsIndexed (line 120) | void markAsIndexed(SonarLintInputFile inputFile) {
method count (line 129) | int count() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FileMetadata.java
class FileMetadata (line 39) | @SonarLintSide
class CharHandler (line 47) | public abstract static class CharHandler {
method handleAll (line 49) | protected void handleAll(char c) {
method handleIgnoreEoL (line 52) | protected void handleIgnoreEoL(char c) {
method newLine (line 55) | protected void newLine() {
method eof (line 58) | protected void eof() {
class LineCounter (line 62) | private static class LineCounter extends CharHandler {
method LineCounter (line 68) | LineCounter(URI fileUri, Charset encoding) {
method handleAll (line 73) | @Override
method newLine (line 83) | @Override
method lines (line 88) | public int lines() {
class LineOffsetCounter (line 94) | private static class LineOffsetCounter extends CharHandler {
method LineOffsetCounter (line 99) | public LineOffsetCounter() {
method handleAll (line 103) | @Override
method newLine (line 108) | @Override
method eof (line 113) | @Override
method getOriginalLineOffsets (line 118) | public List<Integer> getOriginalLineOffsets() {
method getLastValidOffset (line 122) | public int getLastValidOffset() {
method readMetadata (line 132) | public Metadata readMetadata(InputStream stream, Charset encoding, URI...
method read (line 149) | private static void read(Reader reader, CharHandler... handlers) throw...
class Metadata (line 196) | public static class Metadata {
method Metadata (line 201) | public Metadata(int lines, int[] originalLineOffsets, int lastValidO...
method lines (line 207) | public int lines() {
method originalLineOffsets (line 211) | public int[] originalLineOffsets() {
method lastValidOffset (line 215) | public int lastValidOffset() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FilenamePredicate.java
class FilenamePredicate (line 25) | public class FilenamePredicate extends AbstractFilePredicate {
method FilenamePredicate (line 28) | public FilenamePredicate(String filename) {
method apply (line 32) | @Override
method get (line 37) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileBuilder.java
class InputFileBuilder (line 30) | public class InputFileBuilder {
method InputFileBuilder (line 36) | public InputFileBuilder(LanguageDetection langDetection, FileMetadata ...
method create (line 42) | SonarLintInputFile create(ClientInputFile inputFile) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileIndex.java
class InputFileIndex (line 32) | @SonarLintSide
method inputFiles (line 40) | @Override
method doAdd (line 45) | public void doAdd(InputFile inputFile) {
method inputFile (line 54) | @Override
method getFilesByName (line 59) | @Override
method getFilesByExtension (line 64) | @Override
method languages (line 69) | protected SortedSet<String> languages() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/Language.java
class Language (line 25) | public final class Language {
method Language (line 31) | public Language(String key, String name, String... fileSuffixes) {
method key (line 40) | public String key() {
method name (line 47) | public String name() {
method fileSuffixes (line 54) | public Collection<String> fileSuffixes() {
method toString (line 58) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/LanguageDetection.java
class LanguageDetection (line 40) | public class LanguageDetection {
method LanguageDetection (line 49) | public LanguageDetection(Configuration config) {
method language (line 61) | @CheckForNull
method detectLanguage (line 66) | private SonarLanguage detectLanguage(String fileName, URI fileUri) {
method isCandidateForLanguage (line 86) | private static boolean isCandidateForLanguage(String fileName, String[...
method getDetails (line 95) | private String getDetails(SonarLanguage detectedLanguage) {
method sanitizeExtension (line 99) | public static String sanitizeExtension(String suffix) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/LanguagePredicate.java
class LanguagePredicate (line 27) | class LanguagePredicate extends AbstractFilePredicate {
method LanguagePredicate (line 30) | LanguagePredicate(String language) {
method apply (line 34) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/NotPredicate.java
class NotPredicate (line 28) | class NotPredicate extends AbstractFilePredicate {
method NotPredicate (line 32) | NotPredicate(FilePredicate predicate) {
method apply (line 36) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/OptimizedFilePredicate.java
type OptimizedFilePredicate (line 29) | public interface OptimizedFilePredicate extends FilePredicate, Comparabl...
method filter (line 34) | Iterable<InputFile> filter(Iterable<InputFile> inputFiles);
method get (line 39) | Iterable<InputFile> get(FileSystem.Index index);
method priority (line 48) | int priority();
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/OptimizedFilePredicateAdapter.java
class OptimizedFilePredicateAdapter (line 25) | class OptimizedFilePredicateAdapter extends AbstractFilePredicate {
method OptimizedFilePredicateAdapter (line 29) | private OptimizedFilePredicateAdapter(FilePredicate unoptimizedPredica...
method apply (line 33) | @Override
method create (line 38) | public static OptimizedFilePredicate create(FilePredicate predicate) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/OrPredicate.java
class OrPredicate (line 30) | class OrPredicate extends AbstractFilePredicate {
method OrPredicate (line 34) | private OrPredicate() {
method create (line 37) | public static FilePredicate create(Collection<FilePredicate> predicate...
method apply (line 56) | @Override
method predicates (line 66) | Collection<FilePredicate> predicates() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/PathPatternPredicate.java
class PathPatternPredicate (line 28) | class PathPatternPredicate extends AbstractFilePredicate {
method PathPatternPredicate (line 32) | PathPatternPredicate(SonarLintPathPattern pattern) {
method apply (line 36) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/ProgressReport.java
class ProgressReport (line 26) | public class ProgressReport implements Runnable {
method ProgressReport (line 35) | public ProgressReport(String threadName, long period) {
method run (line 41) | @Override
method start (line 56) | public void start(String startMessage) {
method message (line 61) | public void message(Supplier<String> messageSupplier) {
method stop (line 65) | public void stop(@Nullable String stopMessage) {
method log (line 76) | private static void log(String message) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintFileSystem.java
class SonarLintFileSystem (line 35) | public class SonarLintFileSystem implements FileSystem {
method SonarLintFileSystem (line 45) | public SonarLintFileSystem(AnalysisConfiguration analysisConfiguration...
method workDir (line 51) | @Override
method inputDir (line 57) | @Override
method predicates (line 62) | @Override
method baseDir (line 67) | @Override
method setEncoding (line 72) | private SonarLintFileSystem setEncoding(Charset c) {
method encoding (line 78) | @Override
method inputFile (line 89) | @Override
method inputFiles (line 115) | public Iterable<InputFile> inputFiles() {
method inputFiles (line 119) | @Override
method hasFiles (line 124) | @Override
method files (line 129) | @Override
method languages (line 136) | @Override
method resolvePath (line 141) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputDir.java
class SonarLintInputDir (line 31) | public class SonarLintInputDir implements InputDir {
method SonarLintInputDir (line 35) | public SonarLintInputDir(Path path) {
method relativePath (line 39) | @Override
method absolutePath (line 44) | @Override
method file (line 49) | @Override
method path (line 54) | @Override
method key (line 59) | @Override
method uri (line 64) | @Override
method isFile (line 69) | @Override
method equals (line 74) | @Override
method hashCode (line 87) | @Override
method toString (line 92) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputFile.java
class SonarLintInputFile (line 45) | public class SonarLintInputFile implements InputFile {
method SonarLintInputFile (line 57) | public SonarLintInputFile(ClientInputFile clientInputFile, Function<So...
method checkMetadata (line 63) | public void checkMetadata() {
method getClientInputFile (line 69) | public ClientInputFile getClientInputFile() {
method relativePath (line 73) | @Override
method setLanguage (line 78) | public SonarLintInputFile setLanguage(@Nullable SonarLanguage language) {
method setType (line 83) | public SonarLintInputFile setType(Type type) {
method language (line 88) | @CheckForNull
method getLanguage (line 94) | @CheckForNull
method type (line 99) | @Override
method absolutePath (line 107) | @Deprecated(forRemoval = false)
method file (line 116) | @Deprecated
method path (line 125) | @Deprecated
method inputStream (line 131) | @Override
method contents (line 136) | @Override
method status (line 141) | @Override
method key (line 149) | @Override
method uri (line 154) | @Override
method charset (line 159) | @Override
method md5Hash (line 165) | @Override
method equals (line 174) | @Override
method hashCode (line 187) | @Override
method toString (line 192) | @Override
method isFile (line 197) | @Override
method filename (line 202) | @Override
method lines (line 207) | @Override
method isEmpty (line 213) | @Override
method newPointer (line 219) | @Override
method newRange (line 225) | @Override
method newRange (line 231) | @Override
method selectLine (line 239) | @Override
method newRangeValidPointers (line 247) | private static TextRange newRangeValidPointers(TextPointer start, Text...
method lineLength (line 251) | private int lineLength(int line) {
method lastValidGlobalOffsetForLine (line 255) | private int lastValidGlobalOffsetForLine(int line) {
method noSonarAt (line 259) | public void noSonarAt(Set<Integer> noSonarLines) {
method hasNoSonarAt (line 263) | public boolean hasNoSonarAt(int line) {
method isIgnoreAllIssues (line 267) | public boolean isIgnoreAllIssues() {
method setIgnoreAllIssues (line 272) | public void setIgnoreAllIssues(boolean ignoreAllIssues) {
method addIgnoreIssuesOnLineRanges (line 276) | public void addIgnoreIssuesOnLineRanges(Collection<int[]> lineRanges) {
method isIgnoreAllIssuesOnLine (line 283) | public boolean isIgnoreAllIssuesOnLine(@Nullable Integer line) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputProject.java
class SonarLintInputProject (line 25) | public class SonarLintInputProject implements InputModule, InputProject {
method key (line 29) | @Override
method isFile (line 34) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/StatusPredicate.java
class StatusPredicate (line 25) | public class StatusPredicate extends AbstractFilePredicate {
method StatusPredicate (line 29) | StatusPredicate(@Nullable InputFile.Status status) {
method apply (line 33) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/TruePredicate.java
class TruePredicate (line 26) | class TruePredicate extends AbstractFilePredicate {
method apply (line 30) | @Override
method get (line 35) | @Override
method filter (line 40) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/TypePredicate.java
class TypePredicate (line 27) | class TypePredicate extends AbstractFilePredicate {
method TypePredicate (line 31) | TypePredicate(InputFile.Type type) {
method apply (line 35) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/URIPredicate.java
class URIPredicate (line 25) | class URIPredicate extends AbstractFilePredicate {
method URIPredicate (line 29) | URIPredicate(URI uri) {
method apply (line 33) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/DefaultIssueFilterChain.java
class DefaultIssueFilterChain (line 27) | public class DefaultIssueFilterChain implements IssueFilterChain {
method DefaultIssueFilterChain (line 30) | public DefaultIssueFilterChain(List<IssueFilter> filters) {
method accept (line 34) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/IssueFilters.java
class IssueFilters (line 32) | @SonarLintSide
method IssueFilters (line 36) | public IssueFilters(Optional<List<IssueFilter>> exclusionFilters) {
method accept (line 40) | public boolean accept(InputComponent inputComponent, Issue rawIssue) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/SensorInputFileEdit.java
class SensorInputFileEdit (line 31) | public class SensorInputFileEdit implements InputFileEdit, NewInputFileE...
method on (line 37) | @Override
method newTextEdit (line 43) | @Override
method addTextEdit (line 48) | @Override
method addTextEdit (line 54) | @Override
method target (line 61) | @Override
method textEdits (line 66) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/SensorQuickFix.java
class SensorQuickFix (line 29) | public class SensorQuickFix implements QuickFix, NewQuickFix, org.sonars...
method message (line 35) | @Override
method newInputFileEdit (line 41) | @Override
method addInputFileEdit (line 46) | @Override
method addInputFileEdit (line 52) | @Override
method message (line 59) | @Override
method inputFileEdits (line 64) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/SensorTextEdit.java
class SensorTextEdit (line 26) | public class SensorTextEdit implements TextEdit, NewTextEdit, org.sonars...
method at (line 30) | @Override
method withNewText (line 36) | @Override
method range (line 42) | @Override
method newText (line 47) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/TextRangeUtils.java
class TextRangeUtils (line 24) | public class TextRangeUtils {
method TextRangeUtils (line 26) | private TextRangeUtils() {
method convert (line 29) | public static TextRange convert(org.sonar.api.batch.fs.TextRange analy...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/EnforceIssuesFilter.java
class EnforceIssuesFilter (line 34) | public class EnforceIssuesFilter implements IssueFilter {
method EnforceIssuesFilter (line 40) | public EnforceIssuesFilter(IssueInclusionPatternInitializer patternIni...
method accept (line 44) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/IgnoreIssuesFilter.java
class IgnoreIssuesFilter (line 36) | public class IgnoreIssuesFilter implements IssueFilter {
method accept (line 42) | @Override
method addRuleExclusionPatternForComponent (line 55) | public void addRuleExclusionPatternForComponent(SonarLintInputFile inp...
method hasRuleMatchFor (line 63) | private boolean hasRuleMatchFor(InputComponent component, FilterableIs...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/SonarLintNoSonarFilter.java
class SonarLintNoSonarFilter (line 27) | public class SonarLintNoSonarFilter extends NoSonarFilter {
method noSonarInFile (line 29) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/AbstractPatternInitializer.java
class AbstractPatternInitializer (line 28) | public abstract class AbstractPatternInitializer {
method AbstractPatternInitializer (line 36) | protected AbstractPatternInitializer(Configuration config) {
method getSettings (line 41) | protected Configuration getSettings() {
method getMulticriteriaPatterns (line 45) | public List<IssuePattern> getMulticriteriaPatterns() {
method hasConfiguredPatterns (line 49) | public boolean hasConfiguredPatterns() {
method hasMulticriteriaPatterns (line 53) | public boolean hasMulticriteriaPatterns() {
method initPatterns (line 57) | protected final void initPatterns() {
method getMulticriteriaConfigurationKey (line 78) | protected abstract String getMulticriteriaConfigurationKey();
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/BlockIssuePattern.java
class BlockIssuePattern (line 22) | public class BlockIssuePattern {
method BlockIssuePattern (line 26) | public BlockIssuePattern(String beginBlockRegexp, String endBlockRegex...
method getBeginBlockRegexp (line 31) | public String getBeginBlockRegexp() {
method getEndBlockRegexp (line 35) | public String getEndBlockRegexp() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueExclusionPatternInitializer.java
class IssueExclusionPatternInitializer (line 30) | public class IssueExclusionPatternInitializer extends AbstractPatternIni...
method IssueExclusionPatternInitializer (line 45) | public IssueExclusionPatternInitializer(Configuration config) {
method getMulticriteriaConfigurationKey (line 50) | @Override
method hasConfiguredPatterns (line 55) | @Override
method loadFileContentPatterns (line 60) | private void loadFileContentPatterns() {
method nullToEmpty (line 91) | private static String nullToEmpty(@Nullable String str) {
method getBlockPatterns (line 98) | public List<BlockIssuePattern> getBlockPatterns() {
method getAllFilePatterns (line 102) | public List<String> getAllFilePatterns() {
method hasFileContentPattern (line 106) | public boolean hasFileContentPattern() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueInclusionPatternInitializer.java
class IssueInclusionPatternInitializer (line 24) | public class IssueInclusionPatternInitializer extends AbstractPatternIni...
method IssueInclusionPatternInitializer (line 28) | public IssueInclusionPatternInitializer(Configuration config) {
method getMulticriteriaConfigurationKey (line 32) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssuePattern.java
class IssuePattern (line 29) | public class IssuePattern {
method IssuePattern (line 34) | public IssuePattern(String pathPattern, String rulePattern) {
method getRulePattern (line 39) | public WildcardPattern getRulePattern() {
method matchRule (line 43) | public boolean matchRule(RuleKey rule) {
method matchFile (line 47) | public boolean matchFile(@Nullable String filePath) {
method toString (line 51) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsLoader.java
class IssueExclusionsLoader (line 33) | public class IssueExclusionsLoader {
method IssueExclusionsLoader (line 41) | public IssueExclusionsLoader(IssueExclusionPatternInitializer patterns...
method addMulticriteriaPatterns (line 58) | public void addMulticriteriaPatterns(SonarLintInputFile inputFile) {
method createCharHandlerFor (line 66) | @CheckForNull
class DoubleRegexpMatcher (line 74) | public static class DoubleRegexpMatcher {
method DoubleRegexpMatcher (line 79) | DoubleRegexpMatcher(java.util.regex.Pattern firstPattern, java.util....
method matchesFirstPattern (line 84) | boolean matchesFirstPattern(String line) {
method matchesSecondPattern (line 88) | boolean matchesSecondPattern(String line) {
method hasSecondPattern (line 92) | boolean hasSecondPattern() {
method toString (line 97) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsRegexpScanner.java
class IssueExclusionsRegexpScanner (line 33) | public class IssueExclusionsRegexpScanner extends CharHandler {
method IssueExclusionsRegexpScanner (line 48) | IssueExclusionsRegexpScanner(SonarLintInputFile inputFile, List<Patter...
method handleIgnoreEoL (line 55) | @Override
method newLine (line 64) | @Override
method eof (line 75) | @Override
method processLine (line 97) | private void processLine(String line) {
method convertLineExclusionsToLineRanges (line 117) | private Set<LineRange> convertLineExclusionsToLineRanges() {
method checkDoubleRegexps (line 125) | private void checkDoubleRegexps(String line, int lineIndex) {
method startExclusion (line 142) | private void startExclusion(int lineIndex) {
method endExclusion (line 147) | private void endExclusion(int lineIndex) {
class LineExclusion (line 152) | private static class LineExclusion {
method LineExclusion (line 156) | LineExclusion(int start) {
method setEnd (line 161) | void setEnd(int end) {
method toLineRange (line 165) | public LineRange toLineRange(int fileLength) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/LineRange.java
class LineRange (line 26) | public class LineRange {
method LineRange (line 30) | public LineRange(int line) {
method LineRange (line 34) | public LineRange(int from, int to) {
method in (line 43) | public boolean in(int lineId) {
method toLines (line 47) | public Set<Integer> toLines() {
method from (line 55) | public int from() {
method to (line 59) | public int to() {
method toString (line 63) | @Override
method hashCode (line 68) | @Override
method equals (line 73) | @Override
method fieldsDiffer (line 84) | private boolean fieldsDiffer(LineRange other) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorOptimizer.java
class SensorOptimizer (line 29) | @SonarLintSide
method SensorOptimizer (line 38) | public SensorOptimizer(FileSystem fs, ActiveRules activeRules, Configu...
method shouldExecute (line 47) | public boolean shouldExecute(DefaultSensorDescriptor descriptor) {
method settingsCondition (line 63) | private boolean settingsCondition(DefaultSensorDescriptor descriptor) {
method activeRulesCondition (line 70) | private boolean activeRulesCondition(DefaultSensorDescriptor descripto...
method fsCondition (line 82) | private boolean fsCondition(DefaultSensorDescriptor descriptor) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorsExecutor.java
class SensorsExecutor (line 48) | public class SensorsExecutor {
method SensorsExecutor (line 58) | public SensorsExecutor(DefaultSensorContext context, SensorOptimizer s...
method execute (line 65) | public void execute() {
method executeSensors (line 84) | private void executeSensors(List<ProjectSensor> sensors) {
method executeSensor (line 98) | private static void executeSensor(SensorContext context, ProjectSensor...
method describe (line 108) | static String describe(Object o) {
method sort (line 123) | private static <T> Collection<T> sort(Collection<T> extensions) {
method getDependencies (line 146) | private static <T> List<Object> getDependencies(T extension) {
method getDependents (line 153) | private static <T> List<Object> getDependents(T extension) {
method completePhaseDependencies (line 157) | private static void completePhaseDependencies(DirectAcyclicGraph dag, ...
method evaluatePhase (line 169) | private static Phase.Name evaluatePhase(Object extension) {
method evaluateAnnotatedClasses (line 177) | static List<Object> evaluateAnnotatedClasses(Object extension, Class<?...
method evaluateClass (line 188) | private static void evaluateClass(Class<?> extensionClass, Class<? ext...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SonarLintSensorStorage.java
class SonarLintSensorStorage (line 54) | public class SonarLintSensorStorage implements SensorStorage {
method SonarLintSensorStorage (line 61) | public SonarLintSensorStorage(ActiveRules activeRules, IssueFilters fi...
method store (line 68) | @Override
method store (line 73) | @Override
method transform (line 97) | private static List<org.sonarsource.sonarlint.core.analysis.api.QuickF...
method transform (line 101) | private static Map<SoftwareQuality, ImpactSeverity> transform(Map<org....
method transform (line 107) | private static org.sonarsource.sonarlint.core.analysis.api.QuickFix tr...
method noSonar (line 115) | private static boolean noSonar(InputComponent inputComponent, Issue is...
method mapFlows (line 123) | private static List<org.sonarsource.sonarlint.core.analysis.api.Flow> ...
method store (line 130) | @Override
method store (line 135) | @Override
method store (line 140) | @Override
method store (line 145) | @Override
method store (line 150) | @Override
method storeProperty (line 156) | @Override
method store (line 161) | @Override
method store (line 166) | @Override
method store (line 171) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/AnalysisExtensionInstaller.java
class AnalysisExtensionInstaller (line 34) | public class AnalysisExtensionInstaller extends ExtensionInstaller {
method AnalysisExtensionInstaller (line 38) | public AnalysisExtensionInstaller(SonarLintRuntime sonarRuntime, Loade...
method install (line 43) | public void install(ExtensionContainer container, ContainerLifespan li...
method getSonarLintSideLifespan (line 48) | private static ContainerLifespan getSonarLintSideLifespan(Object exten...
method onlySonarSourceSensor (line 65) | private boolean onlySonarSourceSensor(String pluginKey, Object extensi...
method isNotSensor (line 69) | private static boolean isNotSensor(Object extension) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalAnalysisContainer.java
class GlobalAnalysisContainer (line 33) | public class GlobalAnalysisContainer extends SpringComponentContainer {
method GlobalAnalysisContainer (line 41) | public GlobalAnalysisContainer(AnalysisSchedulerConfiguration analysis...
method doBeforeStart (line 46) | @Override
method doAfterStart (line 66) | @Override
method stopComponents (line 74) | @Override
method declarePluginProperties (line 91) | private void declarePluginProperties() {
method getModuleRegistry (line 96) | public ModuleRegistry getModuleRegistry() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalConfigurationProvider.java
class GlobalConfigurationProvider (line 26) | public class GlobalConfigurationProvider {
method provide (line 30) | @Bean("configuration")
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalExtensionContainer.java
class GlobalExtensionContainer (line 28) | public class GlobalExtensionContainer extends SpringComponentContainer {
method GlobalExtensionContainer (line 30) | public GlobalExtensionContainer(SpringComponentContainer parent) {
method doBeforeStart (line 34) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalSettings.java
class GlobalSettings (line 26) | public class GlobalSettings extends MapSettings {
method GlobalSettings (line 28) | public GlobalSettings(AnalysisSchedulerConfiguration config, PropertyD...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalTempFolder.java
class GlobalTempFolder (line 25) | public class GlobalTempFolder extends DefaultTempFolder {
method GlobalTempFolder (line 27) | public GlobalTempFolder(File tempDir, boolean deleteOnExit) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalTempFolderProvider.java
class GlobalTempFolderProvider (line 33) | public class GlobalTempFolderProvider {
method provide (line 41) | @Bean("globalTempFolder")
method cleanAndCreateTempFolder (line 49) | private static GlobalTempFolder cleanAndCreateTempFolder(Path workingP...
method createTempFolder (line 59) | private static Path createTempFolder(Path workingPath) {
method cleanTempFolders (line 73) | private static void cleanTempFolders(Path path) throws IOException {
class CleanFilter (line 83) | private static class CleanFilter implements DirectoryStream.Filter<Pat...
method accept (line 84) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/ModuleRegistry.java
class ModuleRegistry (line 30) | public class ModuleRegistry {
method ModuleRegistry (line 37) | public ModuleRegistry(SpringComponentContainer parent, Function<String...
method getContainerFor (line 42) | public ModuleContainer getContainerFor(String moduleKey) {
method getContainerIfStarted (line 46) | @Nullable
method createContainer (line 51) | private ModuleContainer createContainer(Object moduleKey, @Nullable Cl...
method unregisterModule (line 61) | public void unregisterModule(String moduleKey) {
method stopAll (line 68) | public void stopAll() {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/DefaultModuleFileEvent.java
class DefaultModuleFileEvent (line 25) | public class DefaultModuleFileEvent implements ModuleFileEvent {
method DefaultModuleFileEvent (line 30) | private DefaultModuleFileEvent(InputFile target, Type type) {
method of (line 35) | public static DefaultModuleFileEvent of(InputFile target, Type type) {
method getTarget (line 39) | @Override
method getType (line 44) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleContainer.java
class ModuleContainer (line 41) | public class ModuleContainer extends SpringComponentContainer {
method ModuleContainer (line 45) | public ModuleContainer(SpringComponentContainer parent, boolean isTran...
method doBeforeStart (line 50) | @Override
method isTransient (line 62) | public boolean isTransient() {
method analyze (line 66) | public AnalysisResults analyze(AnalysisConfiguration configuration, Co...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleFileEventNotifier.java
class ModuleFileEventNotifier (line 29) | public class ModuleFileEventNotifier {
method ModuleFileEventNotifier (line 35) | public ModuleFileEventNotifier(Optional<List<ModuleFileListener>> list...
method fireModuleFileEvent (line 40) | public void fireModuleFileEvent(ClientModuleFileEvent event) {
method tryFireModuleFileEvent (line 45) | private static void tryFireModuleFileEvent(ModuleFileListener listener...
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleInputFileBuilder.java
class ModuleInputFileBuilder (line 32) | public class ModuleInputFileBuilder {
method ModuleInputFileBuilder (line 37) | public ModuleInputFileBuilder(LanguageDetection langDetection, FileMet...
method create (line 42) | public SonarLintInputFile create(ClientInputFile inputFile) {
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/ActiveRulesAdapter.java
class ActiveRulesAdapter (line 32) | public class ActiveRulesAdapter implements ActiveRules {
method ActiveRulesAdapter (line 39) | public ActiveRulesAdapter(Collection<ActiveRule> activeRules) {
method find (line 51) | @Override
method findAll (line 57) | @Override
method findByRepository (line 62) | @Override
method findByLanguage (line 67) | @Override
method findByInternalKey (line 72) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultAnalysisError.java
class DefaultAnalysisError (line 32) | public class DefaultAnalysisError extends DefaultStorable implements New...
method DefaultAnalysisError (line 37) | public DefaultAnalysisError() {
method DefaultAnalysisError (line 41) | public DefaultAnalysisError(SensorStorage storage) {
method inputFile (line 45) | @Override
method message (line 50) | @Override
method location (line 55) | @Override
method onFile (line 60) | @Override
method message (line 68) | @Override
method at (line 74) | @Override
method doSave (line 81) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultFilterableIssue.java
class DefaultFilterableIssue (line 32) | public class DefaultFilterableIssue implements FilterableIssue {
method DefaultFilterableIssue (line 36) | public DefaultFilterableIssue(Issue rawIssue, InputComponent component) {
method componentKey (line 41) | @Override
method ruleKey (line 46) | @Override
method severity (line 51) | @Override
method message (line 56) | @Override
method line (line 61) | @Override
method projectKey (line 66) | @Override
method toString (line 71) | @Override
method unsupported (line 76) | private static UnsupportedOperationException unsupported() {
method gap (line 80) | @Override
method getComponent (line 85) | public InputComponent getComponent() {
method textRange (line 89) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultFlow.java
class DefaultFlow (line 29) | public class DefaultFlow implements Issue.Flow {
method DefaultFlow (line 34) | public DefaultFlow(List<IssueLocation> locations, @Nullable String des...
method locations (line 40) | @Override
method description (line 45) | @CheckForNull
method type (line 51) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorContext.java
class DefaultSensorContext (line 56) | public class DefaultSensorContext implements SensorContext {
method DefaultSensorContext (line 73) | public DefaultSensorContext(SonarLintInputProject project, Settings se...
method settings (line 85) | @Override
method config (line 90) | @Override
method fileSystem (line 95) | @Override
method activeRules (line 100) | @Override
method newMeasure (line 105) | @Override
method newIssue (line 110) | @Override
method newHighlighting (line 115) | @Override
method newCoverage (line 120) | @Override
method module (line 125) | @Override
method project (line 130) | @Override
method getSonarQubeVersion (line 135) | @Override
method runtime (line 140) | @Override
method newSymbolTable (line 145) | @Override
method newCpdTokens (line 150) | @Override
method newAnalysisError (line 155) | @Override
method isCancelled (line 160) | @Override
method addContextProperty (line 165) | @Override
method markForPublishing (line 170) | @Override
method markAsUnchanged (line 175) | @Override
method newExternalIssue (line 180) | @Override
method newSignificantCode (line 185) | @Override
method newAdHocRule (line 190) | @Override
method unsupported (line 195) | private static UnsupportedOperationException unsupported() {
method canSkipUnchangedFiles (line 199) | @Override
method isCacheEnabled (line 204) | @Override
method previousCache (line 209) | @Override
method nextCache (line 214) | @Override
method addTelemetryProperty (line 219) | @Override
method addAnalysisData (line 224) | @Override
method isFeatureAvailable (line 230) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorDescriptor.java
class DefaultSensorDescriptor (line 30) | public class DefaultSensorDescriptor implements SensorDescriptor {
method name (line 39) | public String name() {
method languages (line 43) | public Collection<String> languages() {
method type (line 47) | @Nullable
method ruleRepositories (line 52) | public Collection<String> ruleRepositories() {
method configurationPredicate (line 56) | public Predicate<Configuration> configurationPredicate() {
method isGlobal (line 60) | public boolean isGlobal() {
method name (line 64) | @Override
method onlyOnLanguage (line 70) | @Override
method onlyOnLanguages (line 75) | @Override
method onlyOnFileType (line 81) | @Override
method createIssuesForRuleRepository (line 87) | @Override
method createIssuesForRuleRepositories (line 92) | @Override
method global (line 98) | @Override
method onlyWhenConfiguration (line 104) | @Override
method processesFilesIndependently (line 110) | @Override
method processesHiddenFiles (line 116) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSonarLintIssue.java
class DefaultSonarLintIssue (line 51) | public class DefaultSonarLintIssue extends DefaultStorable implements Is...
method DefaultSonarLintIssue (line 64) | public DefaultSonarLintIssue(SonarLintInputProject project, Path baseD...
method newLocation (line 72) | @Override
method setRuleDescriptionContextKey (line 77) | @Override
method setCodeVariants (line 83) | @Override
method addInternalTag (line 89) | @Override
method addInternalTags (line 95) | @Override
method setInternalTags (line 101) | @Override
method forRule (line 110) | @Override
method ruleKey (line 116) | @Override
method gap (line 121) | @Override
method overrideSeverity (line 127) | @Override
method overriddenSeverity (line 133) | @Override
method overrideImpact (line 138) | @Override
method overridenImpacts (line 144) | @Override
method gap (line 149) | @Override
method primaryLocation (line 154) | @Override
method flows (line 159) | @Override
method at (line 164) | @Override
method addLocation (line 170) | @Override
method addFlow (line 175) | @Override
method addFlow (line 180) | @Override
method rewriteLocation (line 190) | private DefaultSonarLintIssueLocation rewriteLocation(DefaultSonarLint...
method doSave (line 214) | @Override
method newQuickFix (line 220) | @Override
method addQuickFix (line 225) | @Override
method addQuickFix (line 232) | @Override
method quickFixes (line 238) | @Override
method codeVariants (line 243) | @CheckForNull
method internalTags (line 249) | @Override
method setQuickFixAvailable (line 254) | @Override
method isQuickFixAvailable (line 260) | @Override
method ruleDescriptionContextKey (line 265) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSonarLintIssueLocation.java
class DefaultSonarLintIssueLocation (line 37) | public class DefaultSonarLintIssueLocation implements NewIssueLocation, ...
method on (line 43) | @Override
method at (line 50) | @Override
method message (line 56) | @Override
method message (line 62) | @Override
method newMessageFormatting (line 68) | @Override
method sanitizeNulls (line 73) | private static String sanitizeNulls(String message) {
method inputComponent (line 77) | @Override
method textRange (line 82) | @Override
method message (line 87) | @Override
method messageFormattings (line 92) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultStorable.java
class DefaultStorable (line 30) | abstract class DefaultStorable {
method DefaultStorable (line 35) | protected DefaultStorable(@Nullable SensorStorage storage) {
method save (line 39) | public final void save() {
method doSave (line 46) | protected abstract void doSave();
method toString (line 48) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultTempFolder.java
class DefaultTempFolder (line 35) | public class DefaultTempFolder implements TempFolder, Startable {
method DefaultTempFolder (line 41) | public DefaultTempFolder(File tempDir) {
method DefaultTempFolder (line 45) | public DefaultTempFolder(File tempDir, boolean deleteOnExit) {
method newDir (line 50) | @Override
method createTempDir (line 55) | private static Path createTempDir(Path baseDir) {
method newDir (line 63) | @Override
method newFile (line 74) | @Override
method newFile (line 79) | @Override
method createTempFile (line 84) | private static Path createTempFile(Path baseDir, @Nullable String pref...
method clean (line 92) | public void clean() {
method start (line 102) | @Override
method stop (line 107) | @Override
class DeleteRecursivelyFileVisitor (line 114) | private static final class DeleteRecursivelyFileVisitor extends Simple...
method visitFile (line 117) | @Override
method postVisitDirectory (line 123) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/SonarLintModuleFileSystem.java
class SonarLintModuleFileSystem (line 28) | public class SonarLintModuleFileSystem implements ModuleFileSystem {
method SonarLintModuleFileSystem (line 33) | public SonarLintModuleFileSystem(ClientModuleFileSystem clientFileSyst...
method files (line 38) | @Override
method files (line 44) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpFileLinesContext.java
class NoOpFileLinesContext (line 24) | public class NoOpFileLinesContext implements FileLinesContext {
method setIntValue (line 26) | @Override
method setStringValue (line 30) | @Override
method save (line 34) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpFileLinesContextFactory.java
class NoOpFileLinesContextFactory (line 26) | public class NoOpFileLinesContextFactory implements FileLinesContextFact...
method createFor (line 28) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCoverage.java
class NoOpNewCoverage (line 25) | public class NoOpNewCoverage implements NewCoverage {
method onFile (line 27) | @Override
method lineHits (line 33) | @Override
method conditions (line 39) | @Override
method save (line 45) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCpdTokens.java
class NoOpNewCpdTokens (line 26) | public class NoOpNewCpdTokens implements NewCpdTokens {
method save (line 27) | @Override
method onFile (line 32) | @Override
method addToken (line 38) | @Override
method addToken (line 44) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewHighlighting.java
class NoOpNewHighlighting (line 27) | public class NoOpNewHighlighting implements NewHighlighting {
method save (line 28) | @Override
method onFile (line 33) | @Override
method highlight (line 39) | @Override
method highlight (line 45) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMeasure.java
class NoOpNewMeasure (line 27) | public class NoOpNewMeasure<G extends Serializable> implements NewMeasur...
method on (line 29) | @Override
method forMetric (line 35) | @Override
method withValue (line 41) | @Override
method save (line 47) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMessageFormatting.java
class NoOpNewMessageFormatting (line 25) | public class NoOpNewMessageFormatting implements NewMessageFormatting {
method start (line 27) | @Override
method end (line 32) | @Override
method type (line 37) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSignificantCode.java
class NoOpNewSignificantCode (line 26) | public class NoOpNewSignificantCode implements NewSignificantCode {
method save (line 28) | @Override
method onFile (line 33) | @Override
method addRange (line 39) | @Override
FILE: backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSymbolTable.java
class NoOpNewSymbolTable (line 27) | public class NoOpNewSymbolTable implements NewSymbolTable, NewSymbol {
method save (line 28) | @Override
method onFile (line 33) | @Override
method newSymbol (line 39) | @Override
method newSymbol (line 45) | @Override
method newReference (line 51) | @Override
method newReference (line 57) | @Override
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/AnalysisQueueTest.java
class AnalysisQueueTest (line 37) | class AnalysisQueueTest {
method it_should_prioritize_unregister_module_commands_over_analyses (line 41) | @Test
method it_should_not_queue_a_canceled_command (line 54) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisConfigurationTests.java
class AnalysisConfigurationTests (line 40) | class AnalysisConfigurationTests {
method init_property (line 42) | @AfterEach
method testToString_and_getters (line 47) | @Test
method testToString_and_getters_when_empty (line 87) | @Test
method testToString_and_getters_when_active_rules_verbose (line 104) | @Test
method testToString_and_getters_when_active_rules_not_verbose (line 128) | @Test
method newActiveRule (line 150) | private static ActiveRule newActiveRule(String ruleKey) {
method newActiveRule (line 154) | private static ActiveRule newActiveRule(String ruleKey, Map<String, St...
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisSchedulerConfigurationTests.java
class AnalysisSchedulerConfigurationTests (line 40) | class AnalysisSchedulerConfigurationTests {
method testDefaults (line 44) | @Test
method extraProps (line 53) | @Test
method effectiveConfig_should_add_nodejs (line 63) | @Test
method overrideDirs (line 74) | @Test
method providePid (line 83) | @Test
method should_not_fail_if_module_supplier_is_not_provided (line 89) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFileTests.java
class ClientInputFileTests (line 31) | class ClientInputFileTests {
method testDefaults (line 33) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/DefaultLocationTests.java
class DefaultLocationTests (line 29) | class DefaultLocationTests {
method verify_accessors (line 30) | @Test
method text_range_can_be_null (line 45) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/IssueLocationTests.java
class IssueLocationTests (line 28) | class IssueLocationTests {
method it_should_return_text_range_details_if_provided (line 30) | @Test
method it_should_return_null_details_if_no_text_range_provided (line 40) | @Test
method newIssueLocation (line 50) | private static IssueLocation newIssueLocation(@Nullable TextRange text...
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/command/AnalyzeCommandTest.java
class AnalyzeCommandTest (line 36) | class AnalyzeCommandTest {
method it_should_cancel_posting_command (line 40) | @Test
method it_should_cancel_posting_command_if_canceled (line 50) | @Test
method it_should_not_cancel_when_files_are_different (line 59) | @Test
method if_should_cancel_task_in_queue_when_canceled (line 68) | @Test
method it_should_not_cancel_task_in_queue_if_not_canceled (line 76) | @Test
method newAnalyzeCommand (line 83) | private static AnalyzeCommand newAnalyzeCommand(Set<URI> files, Map<St...
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisSettingsTest.java
class AnalysisSettingsTest (line 33) | class AnalysisSettingsTest {
method trimAnalysisPropertyKeys (line 37) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisTempFolderProviderTests.java
class AnalysisTempFolderProviderTests (line 26) | class AnalysisTempFolderProviderTests {
method allMethodsShouldThrow (line 28) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/SonarLintPathPatternTests.java
class SonarLintPathPatternTests (line 26) | class SonarLintPathPatternTests {
method constructor_should_add_double_star_prefix_when_not_present (line 28) | @Test
method constructor_should_not_add_double_star_prefix_when_already_present (line 33) | @Test
method create_should_return_array_of_patterns (line 38) | @Test
method create_should_return_empty_array_when_input_is_empty (line 47) | @Test
method match_should_match_java_files (line 52) | @Test
method match_should_match_xml_files (line 62) | @Test
method match_should_match_with_path_patterns (line 71) | @Test
method match_should_match_test_patterns (line 80) | @Test
method match_with_case_sensitive_should_respect_case (line 88) | @Test
method match_should_handle_different_path_separators (line 96) | @Test
method match_should_handle_path_without_extension (line 106) | @Test
method match_should_handle_path_with_dot_but_no_extension (line 115) | @Test
method toString_should_return_pattern_string (line 124) | @Test
method sanitizeExtension_should_handle_null (line 133) | @Test
method sanitizeExtension_should_handle_empty_string (line 138) | @Test
method sanitizeExtension_should_remove_leading_dot (line 143) | @Test
method sanitizeExtension_should_convert_to_lowercase (line 148) | @Test
method sanitizeExtension_should_handle_extension_without_dot (line 153) | @Test
method sanitizeExtension_should_handle_mixed_case_with_dot (line 158) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultFilePredicatesTests.java
class DefaultFilePredicatesTests (line 46) | class DefaultFilePredicatesTests {
method before (line 56) | @BeforeEach
method all (line 69) | @Test
method none (line 74) | @Test
method matches_inclusion_pattern (line 79) | @Test
method matches_inclusion_patterns (line 87) | @Test
method does_not_match_exclusion_pattern (line 94) | @Test
method does_not_match_exclusion_patterns (line 100) | @Test
method has_relative_path_unsupported (line 107) | @Test
method has_uri (line 112) | @Test
method has_name (line 120) | @Test
method has_extension (line 129) | @Test
method has_path (line 139) | @Test
method is_file (line 144) | @Test
method has_language (line 150) | @Test
method has_languages (line 156) | @Test
method has_type (line 165) | @Test
method has_status (line 171) | @Test
method not (line 182) | @Test
method and (line 188) | @Test
method or (line 209) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileBuilderTests.java
class InputFileBuilderTests (line 46) | class InputFileBuilderTests {
method testCreate (line 57) | @Test
method testCreateWithLanguageSet (line 78) | @Test
method testCreate_lazy_error (line 91) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileCacheTests.java
class InputFileCacheTests (line 31) | class InputFileCacheTests {
method setUp (line 34) | @BeforeEach
method testFiles (line 39) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/LanguageDetectionTests.java
class LanguageDetectionTests (line 38) | class LanguageDetectionTests {
method test_sanitizeExtension (line 45) | @Test
method search_by_file_extension (line 53) | @Test
method recognise_yaml_files (line 70) | @Test
method recognise_kts_files (line 83) | @Test
method recognise_css_files (line 93) | @Test
method recognise_go_file (line 104) | @Test
method recognise_terraform_file (line 114) | @Test
method should_not_fail_if_no_language (line 124) | @Test
method fail_if_conflicting_language_suffix (line 130) | @Test
method newInputFile (line 144) | private InputFile newInputFile(String path) {
class MockLanguage (line 148) | static class MockLanguage implements Language {
method MockLanguage (line 152) | MockLanguage(String key, String... extensions) {
method getKey (line 157) | @Override
method getName (line 162) | @Override
method getFileSuffixes (line 167) | @Override
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/ProgressReportTests.java
class ProgressReportTests (line 30) | class ProgressReportTests {
method die_on_stop (line 35) | @Test
method accept_no_stop_msg (line 44) | @Test
method do_not_block_app (line 53) | @Test
method do_log (line 61) | @Test
method isDaemon (line 71) | private static boolean isDaemon(String name) {
method isThreadAlive (line 76) | private static boolean isThreadAlive(String name) {
method getThread (line 81) | private static Thread getThread(String name) {
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintFileSystemTests.java
class SonarLintFileSystemTests (line 36) | class SonarLintFileSystemTests {
method prepare (line 45) | @BeforeEach
method return_fake_workdir (line 50) | @Test
method add_languages (line 55) | @Test
method files (line 65) | @Test
method input_file_returns_null_if_file_not_found (line 100) | @Test
method input_file_fails_if_too_many_results (line 105) | @Test
method input_file_supports_non_indexed_predicates (line 114) | @Test
method unsupported_resolve_path (line 122) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputDirTests.java
class SonarLintInputDirTests (line 31) | class SonarLintInputDirTests {
method setUp (line 35) | @BeforeEach
method testInputDir (line 41) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputFileTests.java
class SonarLintInputFileTests (line 41) | class SonarLintInputFileTests {
method testGetters (line 43) | @Test
method checkValidPointer (line 69) | @Test
method selectLine (line 82) | @Test
method testRangeOverlap (line 101) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/EnforceIssuesFilterTests.java
class EnforceIssuesFilterTests (line 46) | class EnforceIssuesFilterTests {
method init (line 55) | @BeforeEach
method shouldPassToChainIfNoConfiguredPatterns (line 63) | @Test
method shouldPassToChainIfRuleDoesNotMatch (line 70) | @Test
method shouldAcceptIssueIfFullyMatched (line 86) | @Test
method createComponentWithPath (line 105) | private InputComponent createComponentWithPath(String path) {
method shouldRefuseIssueIfRuleMatchesButNotPath (line 110) | @Test
method shouldRefuseIssueIfRuleMatchesAndNotFile (line 131) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/IgnoreIssuesFilterTests.java
class IgnoreIssuesFilterTests (line 38) | class IgnoreIssuesFilterTests {
method prepare (line 48) | @BeforeEach
method shouldPassToChainIfMatcherHasNoPatternForIssue (line 55) | @Test
method shouldRejectIfRulePatternMatches (line 62) | @Test
method shouldAcceptIfRulePatternDoesNotMatch (line 71) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueExclusionPatternInitializerTests.java
class IssueExclusionPatternInitializerTests (line 31) | class IssueExclusionPatternInitializerTests {
method testNoConfiguration (line 35) | @Test
method shouldLogInvalidResourceKey (line 42) | @Test
method shouldLogInvalidRuleKey (line 53) | @Test
method shouldReturnBlockPattern (line 64) | @Test
method shouldLogInvalidStartBlockPattern (line 84) | @Test
method shouldReturnAllFilePattern (line 95) | @Test
method shouldLogInvalidAllFilePattern (line 111) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueInclusionPatternInitializerTests.java
class IssueInclusionPatternInitializerTests (line 30) | class IssueInclusionPatternInitializerTests {
method testNoConfiguration (line 32) | @Test
method shouldHavePatternsBasedOnMulticriteriaPattern (line 39) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssuePatternTests.java
class IssuePatternTests (line 27) | class IssuePatternTests {
method shouldMatchJavaFile (line 29) | @Test
method shouldMatchRule (line 45) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsLoaderTests.java
class IssueExclusionsLoaderTests (line 43) | class IssueExclusionsLoaderTests {
method before (line 52) | @BeforeEach
method createFile (line 59) | private SonarLintInputFile createFile(String path) {
method testToString (line 63) | @Test
method createComputer (line 68) | @Test
method populateRuleExclusionPatterns (line 79) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsRegexpScannerTests.java
class IssueExclusionsRegexpScannerTests (line 47) | class IssueExclusionsRegexpScannerTests {
method init (line 57) | @BeforeEach
method shouldDetectPatternLastLine (line 67) | @Test
method shouldDoNothing (line 75) | @Test
method shouldExcludeAllIssues (line 83) | @Test
method shouldExcludeAllIssuesEvenIfAlsoDoubleRegexps (line 91) | @Test
method shouldExcludeLines (line 99) | @Test
method shouldAddPatternToExcludeLinesTillTheEnd (line 110) | @Test
method shouldAddPatternToExcludeSeveralLineRanges (line 120) | @Test
method shouldAddPatternToExcludeLinesWithWrongOrder (line 132) | @Test
method shouldAddPatternToExcludeLinesWithMess (line 141) | @Test
method getResource (line 151) | private Path getResource(String fileName) throws URISyntaxException {
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/LineRangeTests.java
class LineRangeTests (line 27) | class LineRangeTests {
method lineRangeShouldBeOrdered (line 29) | @Test
method shouldConvertLineRangeToLines (line 34) | @Test
method shouldTestInclusionInRangeOfLines (line 41) | @Test
method testToString (line 53) | @Test
method testEquals (line 58) | @Test
method testHashCode (line 69) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorOptimizerTests.java
class SensorOptimizerTests (line 47) | class SensorOptimizerTests {
method prepare (line 56) | @BeforeEach
method should_run_analyzer_with_no_metadata (line 63) | @Test
method should_optimize_on_language (line 70) | @Test
method should_optimize_on_type (line 80) | @Test
method should_optimize_on_both_type_and_language (line 93) | @Test
method should_optimize_on_repository (line 108) | @Test
method should_optimize_on_settings (line 131) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorsExecutorTests.java
class SensorsExecutorTests (line 42) | class SensorsExecutorTests {
method notifyProgress (line 46) | @Override
method isCanceled (line 51) | @Override
class MyClass (line 57) | private static class MyClass {
method toString (line 58) | @Override
method testDescribe (line 64) | @Test
method testThrowingSensorShouldBeLogged (line 80) | @Test
method shouldRunGlobalSensorLast (line 91) | @Test
class ThrowingSensor (line 107) | private static class ThrowingSensor implements Sensor {
method describe (line 108) | @Override
method execute (line 113) | @Override
class RegularSensor (line 119) | private static class RegularSensor implements Sensor {
method describe (line 120) | @Override
method execute (line 125) | @Override
class GlobalSensor (line 131) | private static class GlobalSensor implements ProjectSensor {
method describe (line 133) | @Override
method execute (line 138) | @Override
class OldGlobalSensor (line 144) | private static class OldGlobalSensor implements Sensor {
method describe (line 145) | @Override
method execute (line 150) | @Override
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SonarLintSensorStorageTests.java
class SonarLintSensorStorageTests (line 50) | @ExtendWith(MockitoExtension.class)
method setUp (line 68) | @BeforeEach
method store_Measure_doesnt_interact_with_its_param (line 73) | @Test
method store_ExternalIssue_doesnt_interact_with_its_param (line 80) | @Test
method store_DefaultSignificantCode_doesnt_interact_with_its_param (line 87) | @Test
method store_DefaultHighlighting_doesnt_interact_with_its_param (line 94) | @Test
method store_DefaultCoverage_doesnt_interact_with_its_param (line 101) | @Test
method store_DefaultCpdTokens_doesnt_interact_with_its_param (line 108) | @Test
method store_DefaultSymbolTable_doesnt_interact_with_its_param (line 115) | @Test
method store_AdHocRule_doesnt_interact_with_its_param (line 122) | @Test
method store_should_throw_exception_for_non_sonarlint_issue (line 129) | @Test
method store_AnalysisError_should_add_failed_analysis_file (line 138) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/global/AnalysisExtensionInstallerTests.java
class AnalysisExtensionInstallerTests (line 50) | class AnalysisExtensionInstallerTests {
method prepare (line 65) | @BeforeEach
method install_sonarlintside_extensions_with_default_lifespan_in_analysis_container_for_compatible_plugins (line 72) | @Test
method install_sonarlintside_extensions_with_single_analysis_lifespan_in_analysis_container_for_compatible_plugins (line 81) | @Test
method install_sonarlintside_extensions_with_multiple_analysis_lifespan_in_global_container_for_compatible_plugins (line 90) | @Test
method install_sonarlintside_extensions_with_instance_lifespan_in_global_container_for_compatible_plugins (line 99) | @Test
method dont_install_sonarlintside_extensions_with_multiple_analysis_lifespan_in_analysis_container_for_compatible_plugins (line 108) | @Test
method dont_install_sonarlintside_extensions_with_single_analysis_lifespan_in_global_container_for_compatible_plugins (line 117) | @Test
method install_sonarlintside_extensions_with_module_lifespan_in_module_container_for_compatible_plugins (line 126) | @Test
method install_sensors_for_sonarsource_plugins_by_language (line 135) | @Test
method install_sensors_for_sonarsource_plugins_by_allowlist (line 144) | @Test
method dont_install_sensors_for_non_sonarsource_plugins (line 154) | @Test
method provide_sonarlint_context_for_plugin_definition (line 163) | @Test
method log_when_plugin_throws (line 176) | @Test
class FakePlugin (line 187) | private static class FakePlugin implements Plugin {
method FakePlugin (line 190) | private FakePlugin() {
method FakePlugin (line 194) | public FakePlugin(Object component) {
method define (line 198) | @Override
class ThrowingPlugin (line 206) | private static class ThrowingPlugin implements Plugin {
method define (line 207) | @Override
class PluginStoringSonarLintPluginApiVersion (line 214) | private static class PluginStoringSonarLintPluginApiVersion implements...
method define (line 218) | @Override
class FakeSonarLintDefaultLifespanComponent (line 228) | @SonarLintSide
class FakeSonarLintSingleAnalysisLifespanComponent (line 232) | @SonarLintSide(lifespan = SonarLintSide.SINGLE_ANALYSIS)
class FakeSonarLintMultipleAnalysisLifespanComponent (line 236) | @SonarLintSide(lifespan = SonarLintSide.MULTIPLE_ANALYSES)
class FakeSonarLintModuleLifespanComponent (line 240) | @SonarLintSide(lifespan = "MODULE")
class FakeSonarLintInstanceLifespanComponent (line 244) | @SonarLintSide(lifespan = "INSTANCE")
class FakeSensor (line 248) | private static class FakeSensor implements Sensor {
method describe (line 250) | @Override
method execute (line 255) | @Override
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalSettingsTests.java
class GlobalSettingsTests (line 32) | class GlobalSettingsTests {
method emptyNodePathPropertyForSonarJS (line 37) | @Test
method customNodePathPropertyForSonarJS (line 46) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalTempFolderProviderTests.java
class GlobalTempFolderProviderTests (line 38) | class GlobalTempFolderProviderTests {
method createTempFolderProps (line 45) | @Test
method cleanUpOld (line 57) | @Test
method getCreatedTempDir (line 75) | private File getCreatedTempDir(Path workingDir) {
method setFileCreationDate (line 81) | private void setFileCreationDate(File f, long time) throws IOException {
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleInputFileBuilderTests.java
class ModuleInputFileBuilderTests (line 46) | class ModuleInputFileBuilderTests {
method testCreate (line 56) | @Test
method testCreateWithLanguageSet (line 75) | @Test
method testCreate_lazy_error (line 88) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/mediumtests/AnalysisSchedulerMediumTests.java
class AnalysisSchedulerMediumTests (line 72) | @ExtendWith(LogTestStartAndEnd.class)
method prepare (line 87) | @BeforeEach
method provideFileSystem (line 100) | private ClientModuleFileSystem provideFileSystem(String moduleKey) {
method cleanUp (line 104) | @AfterEach
method should_analyze_a_file_inside_a_module (line 111) | @Test
method should_fail_the_future_if_the_analyze_command_execution_fails (line 136) | @Test
method should_cancel_progress_monitor_of_executing_analyze_command_when_stopping (line 151) | @Test
method should_cancel_pending_commands_when_stopping (line 178) | @Test
method should_not_fail_next_analysis_on_exception_from_command (line 211) | @Test
method should_not_queue_command_if_already_canceled (line 249) | @Test
method should_interrupt_executing_thread_when_stopping (line 266) | @Test
method should_not_log_any_error_when_stopping (line 301) | @Test
method preparePythonInputFile (line 313) | private ClientInputFile preparePythonInputFile(Path baseDir, String co...
method findPythonJarPath (line 319) | private static Path findPythonJarPath() throws IOException {
method trailingCommentRule (line 328) | private static ActiveRule trailingCommentRule() {
method aModuleFileSystem (line 374) | private static ClientModuleFileSystem aModuleFileSystem() {
method pause (line 388) | private static void pause(long period) {
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultAnalysisErrorTests.java
class DefaultAnalysisErrorTests (line 36) | class DefaultAnalysisErrorTests {
method setUp (line 41) | @BeforeEach
method test_analysis_error (line 48) | @Test
method test_save (line 60) | @Test
method test_no_storage (line 69) | @Test
method test_validation (line 75) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultFilterableIssueTests.java
class DefaultFilterableIssueTests (line 37) | class DefaultFilterableIssueTests {
method delegate_textRange_to_rawIssue (line 39) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorContextTests.java
class DefaultSensorContextTests (line 51) | @ExtendWith(MockitoExtension.class)
method setUp (line 72) | @BeforeEach
method testGetters (line 89) | @Test
method testCancellation (line 130) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorDescriptorTests.java
class DefaultSensorDescriptorTests (line 29) | class DefaultSensorDescriptorTests {
method describe (line 31) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSonarLintIssueTests.java
class DefaultSonarLintIssueTests (line 47) | class DefaultSonarLintIssueTests {
method prepare (line 58) | @BeforeEach
method build_file_issue (line 63) | @Test
method replace_null_characters (line 113) | @Test
method truncate_and_trim (line 129) | @Test
method ignore_formatting_and_keep_unformatted_message (line 147) | @Test
method move_directory_issue_to_project_root (line 164) | @Test
method build_project_issue (line 185) | @Test
method does_not_support_variants (line 205) | @Test
method supports_adding_internal_tags_one_by_one (line 219) | @Test
method supports_adding_many_internal_tags (line 233) | @Test
method supports_setting_many_internal_tags (line 247) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultTempFolderTests.java
class DefaultTempFolderTests (line 33) | class DefaultTempFolderTests {
method createTempFolderAndFile (line 38) | @Test
method createTempFolderWithName (line 50) | @Test
method newDir_throws_ISE_if_name_is_not_valid (line 61) | @Test
method newFile_throws_ISE_if_name_is_not_valid (line 75) | @Test
method clean_deletes_non_empty_directory (line 89) | @Test
method clean_does_not_fail_if_directory_has_already_been_deleted (line 99) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCoverageTests.java
class NoOpNewCoverageTests (line 24) | class NoOpNewCoverageTests {
method test (line 26) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCpdTokensTests.java
class NoOpNewCpdTokensTests (line 24) | class NoOpNewCpdTokensTests {
method improve_coverage (line 26) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewHighlightingTests.java
class NoOpNewHighlightingTests (line 24) | class NoOpNewHighlightingTests {
method improve_coverage (line 26) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMeasureTests.java
class NoOpNewMeasureTests (line 24) | class NoOpNewMeasureTests {
method test (line 25) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMessageFormattingTest.java
class NoOpNewMessageFormattingTest (line 27) | class NoOpNewMessageFormattingTest {
method should_do_nothing_and_return_same_instance (line 28) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSignificantCodeTests.java
class NoOpNewSignificantCodeTests (line 24) | class NoOpNewSignificantCodeTests {
method visit_all_builder_fields (line 25) | @Test
FILE: backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSymbolTableTests.java
class NoOpNewSymbolTableTests (line 24) | class NoOpNewSymbolTableTests {
method improve_coverage (line 26) | @Test
FILE: backend/analysis-engine/src/test/java/testutils/FileUtils.java
class FileUtils (line 25) | public class FileUtils {
method toSonarQubePath (line 35) | public static String toSonarQubePath(String path) {
FILE: backend/analysis-engine/src/test/java/testutils/InMemoryTestClientInputFile.java
class InMemoryTestClientInputFile (line 34) | public class InMemoryTestClientInputFile implements ClientInputFile {
method InMemoryTestClientInputFile (line 41) | public InMemoryTestClientInputFile(String contents, String relativePat...
method getPath (line 49) | @Override
method relativePath (line 57) | @Override
method isTest (line 62) | @Override
method language (line 67) | @Override
method getCharset (line 72) | @Override
method getClientObject (line 77) | @Override
method inputStream (line 82) | @Override
method contents (line 87) | @Override
method uri (line 92) | @Override
FILE: backend/analysis-engine/src/test/java/testutils/OnDiskTestClientInputFile.java
class OnDiskTestClientInputFile (line 32) | public class OnDiskTestClientInputFile implements ClientInputFile {
method OnDiskTestClientInputFile (line 39) | public OnDiskTestClientInputFile(final Path path, String relativePath,...
method OnDiskTestClientInputFile (line 43) | public OnDiskTestClientInputFile(final Path path, String relativePath,...
method getPath (line 51) | @Override
method relativePath (line 56) | @Override
method isTest (line 61) | @Override
method language (line 66) | @Override
method getCharset (line 71) | @Override
method getClientObject (line 76) | @Override
method inputStream (line 81) | @Override
method contents (line 86) | @Override
method uri (line 91) | @Override
FILE: backend/analysis-engine/src/test/java/testutils/TestClientInputFile.java
class TestClientInputFile (line 32) | public class TestClientInputFile implements ClientInputFile {
method TestClientInputFile (line 39) | public TestClientInputFile(final Path baseDir, final Path path, final ...
method getPath (line 47) | @Override
method relativePath (line 52) | @Override
method isTest (line 57) | @Override
method getCharset (line 62) | @Override
method getClientObject (line 67) | @Override
method inputStream (line 72) | @Override
method contents (line 77) | @Override
method language (line 82) | @Override
method uri (line 87) | @Override
FILE: backend/analysis-engine/src/test/java/testutils/TestInputFileBuilder.java
class TestInputFileBuilder (line 53) | public class TestInputFileBuilder {
method TestInputFileBuilder (line 69) | public TestInputFileBuilder(File baseDir, File filePath) {
method TestInputFileBuilder (line 75) | public TestInputFileBuilder(String relativePath) {
method create (line 79) | public static TestInputFileBuilder create(File moduleBaseDir, File fil...
method create (line 83) | public static TestInputFileBuilder create(String relativePath) {
method setBaseDir (line 87) | public TestInputFileBuilder setBaseDir(Path baseDir) {
method setLanguage (line 92) | public TestInputFileBuilder setLanguage(@Nullable SonarLanguage langua...
method setType (line 97) | public TestInputFileBuilder setType(InputFile.Type type) {
method setLines (line 102) | public TestInputFileBuilder setLines(int lines) {
method setContents (line 112) | public TestInputFileBuilder setContents(String content) {
method setLastValidOffset (line 118) | public TestInputFileBuilder setLastValidOffset(int lastValidOffset) {
method setOriginalLineStartOffsets (line 123) | public TestInputFileBuilder setOriginalLineStartOffsets(int[] original...
method setMetadata (line 128) | public TestInputFileBuilder setMetadata(FileMetadata.Metadata metadata) {
method initMetadata (line 135) | public TestInputFileBuilder initMetadata(String content) {
method build (line 140) | public SonarLintInputFile build() {
FILE: backend/cli/src/main/java/org/sonarsource/sonarlint/core/backend/cli/EndOfStreamAwareInputStream.java
class EndOfStreamAwareInputStream (line 26) | public class EndOfStreamAwareInputStream extends InputStream {
method EndOfStreamAwareInputStream (line 30) | public EndOfStreamAwareInputStream(InputStream delegate) {
method onExit (line 34) | public CompletableFuture<Void> onExit() {
method read (line 38) | @Override
method read (line 43) | @Override
method read (line 48) | @Override
method exitIfNegative (line 53) | private int exitIfNegative(SupplierWithIOException<Integer> call) thro...
type SupplierWithIOException (line 63) | @FunctionalInterface
method get (line 68) | T get() throws IOException;
FILE: backend/cli/src/main/java/org/sonarsource/sonarlint/core/backend/cli/SonarLintServerCli.java
class SonarLintServerCli (line 30) | @CommandLine.Command(name = "slcore", mixinStandardHelpOptions = true, d...
method call (line 33) | @Override
method run (line 38) | int run(InputStream originalStdIn, PrintStream originalStdOut) {
method main (line 68) | public static void main(String... args) {
FILE: backend/cli/src/test/java/org/sonarsource/sonarlint/core/backend/cli/EndOfStreamAwareInputStreamTest.java
class EndOfStreamAwareInputStreamTest (line 28) | class EndOfStreamAwareInputStreamTest {
method it_should_complete_onExit_when_reading_single_byte_and_stream_is_empty (line 29) | @Test
method it_should_complete_onExit_when_reading_byte_array_and_stream_is_empty (line 39) | @Test
method it_should_complete_onExit_when_reading_byte_array_slice_and_stream_is_empty (line 49) | @Test
method it_should_not_complete_onExit_if_stream_is_not_empty (line 59) | @Test
FILE: backend/cli/src/test/java/org/sonarsource/sonarlint/core/backend/cli/SonarLintServerCliTest.java
class SonarLintServerCliTest (line 40) | class SonarLintServerCliTest {
method it_should_return_success_exit_code_when_parent_stream_ends (line 41) | @Test
method log_when_client_is_closed (line 48) | @Test
method log_when_connection_canceled (line 63) | @Test
method log_interrupted_exception (line 78) | @Test
method log_other_exceptions (line 95) | @Test
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/CleanCodeAttribute.java
type CleanCodeAttribute (line 27) | public enum CleanCodeAttribute {
method CleanCodeAttribute (line 50) | CleanCodeAttribute(CleanCodeAttributeCategory attributeCategory) {
method getAttributeCategory (line 55) | public CleanCodeAttributeCategory getAttributeCategory() {
method defaultCleanCodeAttribute (line 59) | public static CleanCodeAttribute defaultCleanCodeAttribute() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/CleanCodeAttributeCategory.java
type CleanCodeAttributeCategory (line 22) | public enum CleanCodeAttributeCategory {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/ConnectionKind.java
type ConnectionKind (line 22) | public enum ConnectionKind {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/HotspotReviewStatus.java
type HotspotReviewStatus (line 30) | public enum HotspotReviewStatus {
method HotspotReviewStatus (line 37) | HotspotReviewStatus(Set<ConnectionKind> allowedConnectionKinds) {
method isReviewed (line 41) | public boolean isReviewed() {
method isResolved (line 45) | public boolean isResolved() {
method fromStatusAndResolution (line 50) | public static HotspotReviewStatus fromStatusAndResolution(String statu...
method isAllowedOn (line 65) | private boolean isAllowedOn(ConnectionKind kind) {
method allowedStatusesOn (line 69) | public static List<HotspotReviewStatus> allowedStatusesOn(ConnectionKi...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/IOExceptionUtils.java
class IOExceptionUtils (line 25) | public class IOExceptionUtils {
method tryAndCollectIOException (line 27) | public static void tryAndCollectIOException(IORunnable runnable, Queue...
method throwFirstWithOtherSuppressed (line 35) | public static void throwFirstWithOtherSuppressed(Queue<IOException> ex...
type IORunnable (line 43) | public interface IORunnable {
method run (line 44) | void run() throws IOException;
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/ImpactSeverity.java
type ImpactSeverity (line 22) | public enum ImpactSeverity {
method mapSeverity (line 29) | public static ImpactSeverity mapSeverity(String severity) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/IssueSeverity.java
type IssueSeverity (line 22) | public enum IssueSeverity {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/IssueStatus.java
type IssueStatus (line 27) | public enum IssueStatus {
method parse (line 32) | @CheckForNull
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/KnownFinding.java
class KnownFinding (line 28) | public class KnownFinding {
method KnownFinding (line 37) | public KnownFinding(UUID id, @Nullable String serverKey, @Nullable Tex...
method getId (line 48) | public UUID getId() {
method getServerKey (line 52) | @CheckForNull
method getTextRangeWithHash (line 57) | @CheckForNull
method getLineWithHash (line 62) | @CheckForNull
method getRuleKey (line 67) | public String getRuleKey() {
method getMessage (line 71) | public String getMessage() {
method getIntroductionDate (line 75) | public Instant getIntroductionDate() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/KnownFindingType.java
type KnownFindingType (line 22) | public enum KnownFindingType {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/LineWithHash.java
class LineWithHash (line 22) | public class LineWithHash {
method LineWithHash (line 27) | public LineWithHash(int number, String hash) {
method getNumber (line 32) | public int getNumber() {
method getHash (line 36) | public String getHash() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/LocalOnlyIssue.java
class LocalOnlyIssue (line 29) | public class LocalOnlyIssue {
method LocalOnlyIssue (line 41) | public LocalOnlyIssue(UUID id, Path serverRelativePath, @Nullable Text...
method getId (line 52) | public UUID getId() {
method getServerRelativePath (line 56) | public Path getServerRelativePath() {
method getTextRangeWithHash (line 60) | @CheckForNull
method getLineWithHash (line 65) | @CheckForNull
method getRuleKey (line 70) | public String getRuleKey() {
method getMessage (line 74) | public String getMessage() {
method getResolution (line 78) | @CheckForNull
method resolve (line 83) | public void resolve(IssueStatus newStatus) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/LocalOnlyIssueResolution.java
class LocalOnlyIssueResolution (line 26) | public class LocalOnlyIssueResolution {
method LocalOnlyIssueResolution (line 31) | public LocalOnlyIssueResolution(IssueStatus status, Instant resolution...
method getStatus (line 37) | public IssueStatus getStatus() {
method getResolutionDate (line 41) | public Instant getResolutionDate() {
method getComment (line 45) | @CheckForNull
method setComment (line 50) | public void setComment(String comment) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/MultiFileBlameResult.java
class MultiFileBlameResult (line 33) | public class MultiFileBlameResult {
method MultiFileBlameResult (line 38) | public MultiFileBlameResult(Map<String, BlameResult> blameResultPerFil...
method empty (line 43) | public static MultiFileBlameResult empty(Path gitRepoRelativeProjectBa...
method getLatestChangeDateForLinesInFile (line 52) | public Optional<Instant> getLatestChangeDateForLinesInFile(Path projec...
method getTheLatestChange (line 63) | private static Instant getTheLatestChange(BlameResult blameForFile, Co...
method validateLineNumbersArgument (line 78) | private static void validateLineNumbersArgument(Collection<Integer> li...
method isLineModified (line 85) | private static boolean isLineModified(@Nullable Instant dateForLine) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/NewCodeDefinition.java
type NewCodeDefinition (line 30) | public interface NewCodeDefinition {
method getMode (line 35) | NewCodeMode getMode();
method isOnNewCode (line 37) | boolean isOnNewCode(long creationDate);
method isOnNewCode (line 39) | default boolean isOnNewCode(Instant introductionDate) {
method isSupported (line 43) | boolean isSupported();
method formatEpochToDate (line 45) | static String formatEpochToDate(long epoch) {
method withAlwaysNew (line 49) | static NewCodeDefinition withAlwaysNew() {
method withExactNumberOfDays (line 53) | static NewCodeDefinition withExactNumberOfDays(int days) {
method withNumberOfDaysWithDate (line 61) | static NewCodeDefinition withNumberOfDaysWithDate(int days, long thres...
method withPreviousVersion (line 65) | static NewCodeDefinition withPreviousVersion(long thresholdDate, @Null...
method withReferenceBranch (line 69) | static NewCodeDefinition withReferenceBranch(String referenceBranch) {
method withSpecificAnalysis (line 73) | static NewCodeDefinition withSpecificAnalysis(long thresholdDate) {
method getThresholdDate (line 77) | Instant getThresholdDate();
class NewCodeDefinitionWithDate (line 79) | abstract class NewCodeDefinitionWithDate implements NewCodeDefinition {
method NewCodeDefinitionWithDate (line 82) | protected NewCodeDefinitionWithDate(long thresholdDate) {
method isOnNewCode (line 86) | public boolean isOnNewCode(long creationDate) {
method isSupported (line 90) | public boolean isSupported() {
method getThresholdDate (line 94) | public Instant getThresholdDate() {
class NewCodeExactNumberOfDays (line 99) | class NewCodeExactNumberOfDays implements NewCodeDefinition {
method NewCodeExactNumberOfDays (line 102) | public NewCodeExactNumberOfDays(int days) {
method getMode (line 106) | @Override
method isOnNewCode (line 111) | @Override
method isSupported (line 116) | @Override
method getThresholdDate (line 121) | @Override
method toString (line 127) | @Override
class NewCodeNumberOfDaysWithDate (line 133) | class NewCodeNumberOfDaysWithDate extends NewCodeDefinitionWithDate {
method NewCodeNumberOfDaysWithDate (line 136) | private NewCodeNumberOfDaysWithDate(Integer days, long thresholdDate) {
method toString (line 142) | @Override
method getMode (line 147) | @Override
method getDays (line 152) | public Integer getDays() {
class NewCodePreviousVersion (line 157) | class NewCodePreviousVersion extends NewCodeDefinitionWithDate {
method NewCodePreviousVersion (line 160) | private NewCodePreviousVersion(long thresholdDate, @Nullable String ...
method toString (line 166) | @Override
method getMode (line 172) | @Override
method getVersion (line 177) | @CheckForNull
class NewCodeSpecificAnalysis (line 183) | class NewCodeSpecificAnalysis extends NewCodeDefinitionWithDate {
method NewCodeSpecificAnalysis (line 184) | private NewCodeSpecificAnalysis(long thresholdDate) {
method toString (line 189) | @Override
method getMode (line 194) | @Override
class NewCodeReferenceBranch (line 200) | class NewCodeReferenceBranch implements NewCodeDefinition {
method NewCodeReferenceBranch (line 203) | private NewCodeReferenceBranch(String branchName) {
method getMode (line 207) | @Override
method isOnNewCode (line 212) | @Override
method isSupported (line 217) | @Override
method getBranchName (line 222) | public String getBranchName() {
method getThresholdDate (line 226) | @Override
method toString (line 233) | @Override
class NewCodeAlwaysNew (line 239) | class NewCodeAlwaysNew implements NewCodeDefinition {
method NewCodeAlwaysNew (line 241) | private NewCodeAlwaysNew() {
method getMode (line 245) | @Override
method isOnNewCode (line 250) | @Override
method getThresholdDate (line 255) | @Override
method isSupported (line 261) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/NewCodeMode.java
type NewCodeMode (line 22) | public enum NewCodeMode {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/RuleKey.java
class RuleKey (line 25) | @Immutable
method RuleKey (line 33) | public RuleKey(String repository, String rule) {
method repository (line 38) | public String repository() {
method rule (line 42) | public String rule() {
method parse (line 46) | public static RuleKey parse(String s) {
method toString (line 57) | @Override
method equals (line 62) | @Override
method hashCode (line 75) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/RuleType.java
type RuleType (line 22) | public enum RuleType {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/SoftwareQuality.java
type SoftwareQuality (line 22) | public enum SoftwareQuality {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/SonarLintCoreVersion.java
class SonarLintCoreVersion (line 25) | public class SonarLintCoreVersion {
method SonarLintCoreVersion (line 27) | private SonarLintCoreVersion() {
method get (line 30) | public static String get() {
method getLibraryVersion (line 41) | public static String getLibraryVersion() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/SonarLintException.java
class SonarLintException (line 24) | public class SonarLintException extends RuntimeException {
method SonarLintException (line 26) | public SonarLintException() {
method SonarLintException (line 30) | public SonarLintException(String msg) {
method SonarLintException (line 34) | public SonarLintException(String msg, @Nullable Throwable cause) {
method SonarLintException (line 38) | public SonarLintException(String msg, @Nullable Throwable cause, boole...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/SonarLintGitIgnore.java
class SonarLintGitIgnore (line 25) | public class SonarLintGitIgnore {
method SonarLintGitIgnore (line 28) | public SonarLintGitIgnore(IgnoreNode ignoreNode) {
method isIgnored (line 32) | public boolean isIgnored(Path clientRelativeFilePath) {
method isFileIgnored (line 45) | public boolean isFileIgnored(Path clientFileRelativePath) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/SonarLintUserHome.java
class SonarLintUserHome (line 26) | public class SonarLintUserHome {
method SonarLintUserHome (line 30) | private SonarLintUserHome() {
method get (line 34) | public static Path get() {
method home (line 38) | static Path home(@Nullable String slHome) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/Transition.java
type Transition (line 22) | public enum Transition {
method Transition (line 31) | Transition(String status) {
method getStatus (line 35) | public String getStatus() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/Version.java
class Version (line 24) | public class Version implements Comparable<Version> {
method Version (line 31) | private Version(String version) {
method Version (line 48) | private Version(String name, String nameWithoutQualifier, int[] number...
method getMajor (line 55) | public int getMajor() {
method getMinor (line 59) | public int getMinor() {
method getPatch (line 63) | public int getPatch() {
method getBuild (line 67) | public int getBuild() {
method getName (line 71) | public String getName() {
method getQualifier (line 75) | public String getQualifier() {
method equals (line 79) | @Override
method hashCode (line 94) | @Override
method compareTo (line 104) | @Override
method compareToIgnoreQualifier (line 119) | public int compareToIgnoreQualifier(Version other) {
method toString (line 132) | @Override
method create (line 137) | public static Version create(String version) {
method removeQualifier (line 141) | public Version removeQualifier() {
method satisfiesMinRequirement (line 145) | public boolean satisfiesMinRequirement(Version minRequirement) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/VulnerabilityProbability.java
type VulnerabilityProbability (line 26) | public enum VulnerabilityProbability {
method VulnerabilityProbability (line 33) | VulnerabilityProbability(int index) {
method getScore (line 37) | public int getScore() {
method byScore (line 41) | public static Optional<VulnerabilityProbability> byScore(@Nullable Int...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/api/SonarLanguage.java
type SonarLanguage (line 31) | public enum SonarLanguage {
method initializeMapping (line 86) | private static Map<String, SonarLanguage> initializeMapping() {
method SonarLanguage (line 94) | SonarLanguage(String sonarLanguageKey, SonarPlugin plugin, String name...
method getSonarLanguageKey (line 102) | public String getSonarLanguageKey() {
method getPlugin (line 106) | public SonarPlugin getPlugin() {
method getName (line 110) | public String getName() {
method getDefaultFileSuffixes (line 114) | public String[] getDefaultFileSuffixes() {
method getFileSuffixesPropKey (line 118) | public String getFileSuffixesPropKey() {
method shouldSyncInConnectedMode (line 122) | public boolean shouldSyncInConnectedMode() {
method getLanguageByLanguageKey (line 126) | public static Optional<SonarLanguage> getLanguageByLanguageKey(String ...
method forKey (line 131) | public static Optional<SonarLanguage> forKey(String languageKey) {
class Constants (line 135) | public static class Constants {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/api/TextRange.java
class TextRange (line 24) | public class TextRange {
method TextRange (line 31) | public TextRange(int startLine, int startLineOffset, int endLine, int ...
method getStartLine (line 38) | public int getStartLine() {
method getStartLineOffset (line 42) | public int getStartLineOffset() {
method getEndLine (line 46) | public int getEndLine() {
method getEndLineOffset (line 50) | public int getEndLineOffset() {
method hashCode (line 54) | @Override
method equals (line 59) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/api/TextRangeWithHash.java
class TextRangeWithHash (line 24) | public class TextRangeWithHash extends TextRange {
method TextRangeWithHash (line 28) | public TextRangeWithHash(int startLine, int startLineOffset, int endLi...
method getHash (line 33) | public String getHash() {
method hashCode (line 37) | @Override
method equals (line 45) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/api/progress/CanceledException.java
class CanceledException (line 24) | public class CanceledException extends SonarLintException {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/dogfood/DogfoodEnvironmentDetectionService.java
class DogfoodEnvironmentDetectionService (line 24) | public class DogfoodEnvironmentDetectionService {
method isDogfoodEnvironment (line 27) | public boolean isDogfoodEnvironment() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/log/FormattingTuple.java
class FormattingTuple (line 25) | class FormattingTuple {
method FormattingTuple (line 30) | public FormattingTuple(@Nullable String message) {
method FormattingTuple (line 34) | public FormattingTuple(@Nullable String message, @Nullable Throwable t...
method getMessage (line 39) | @CheckForNull
method getThrowable (line 44) | @CheckForNull
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/log/LogOutput.java
type LogOutput (line 29) | public interface LogOutput {
method log (line 34) | @Deprecated(since = "10.0")
method log (line 39) | default void log(@Nullable String formattedMessage, Level level, @Null...
type Level (line 48) | enum Level {
method isMoreVerboseOrEqual (line 51) | public boolean isMoreVerboseOrEqual(Level targetLevel) {
method stackTraceToString (line 56) | static String stackTraceToString(Throwable t) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/log/MessageFormatter.java
class MessageFormatter (line 95) | final class MessageFormatter {
method MessageFormatter (line 101) | private MessageFormatter() {
method format (line 123) | public static FormattingTuple format(String messagePattern, Object arg) {
method format (line 150) | public static FormattingTuple format(final String messagePattern, Obje...
method arrayFormat (line 154) | public static FormattingTuple arrayFormat(final String messagePattern,...
method arrayFormat (line 163) | public static FormattingTuple arrayFormat(@Nullable final String messa...
method isEscapedDelimiter (line 220) | static boolean isEscapedDelimiter(String messagePattern, int delimiter...
method isDoubleEscaped (line 228) | static boolean isDoubleEscaped(String messagePattern, int delimeterSta...
method deeplyAppendParameter (line 233) | private static void deeplyAppendParameter(StringBuilder sbuf, @Nullabl...
method safeObjectAppend (line 257) | private static void safeObjectAppend(StringBuilder sbuf, Object o) {
method objectArrayAppend (line 266) | private static void objectArrayAppend(StringBuilder sbuf, Object[] a, ...
method booleanArrayAppend (line 285) | private static void booleanArrayAppend(StringBuilder sbuf, boolean[] a) {
method byteArrayAppend (line 297) | private static void byteArrayAppend(StringBuilder sbuf, byte[] a) {
method charArrayAppend (line 309) | private static void charArrayAppend(StringBuilder sbuf, char[] a) {
method shortArrayAppend (line 321) | private static void shortArrayAppend(StringBuilder sbuf, short[] a) {
method intArrayAppend (line 333) | private static void intArrayAppend(StringBuilder sbuf, int[] a) {
method longArrayAppend (line 345) | private static void longArrayAppend(StringBuilder sbuf, long[] a) {
method floatArrayAppend (line 357) | private static void floatArrayAppend(StringBuilder sbuf, float[] a) {
method doubleArrayAppend (line 369) | private static void doubleArrayAppend(StringBuilder sbuf, double[] a) {
method getThrowableCandidate (line 389) | public static Throwable getThrowableCandidate(final Object[] argArray) {
method trimmedCopy (line 401) | public static Object[] trimmedCopy(final Object[] argArray) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/log/NormalizedParameters.java
class NormalizedParameters (line 32) | class NormalizedParameters {
method NormalizedParameters (line 34) | private NormalizedParameters() {
method getThrowableCandidate (line 46) | public static Throwable getThrowableCandidate(@Nullable final Object[]...
method trimmedCopy (line 66) | public static Object[] trimmedCopy(@Nullable final Object[] argArray) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/log/SonarLintLogger.java
class SonarLintLogger (line 32) | public class SonarLintLogger {
method get (line 36) | public static SonarLintLogger get() {
method SonarLintLogger (line 42) | SonarLintLogger() {
method setTarget (line 46) | public void setTarget(@Nullable LogOutput target) {
method getTargetForCopy (line 54) | @CheckForNull
method trace (line 59) | public void trace(String msg) {
method trace (line 63) | public void trace(String msg, @Nullable Object arg) {
method trace (line 67) | public void trace(String msg, @Nullable Object arg1, @Nullable Object ...
method trace (line 71) | public void trace(String msg, Object... args) {
method debug (line 75) | public void debug(String msg) {
method debug (line 79) | public void debug(String msg, @Nullable Object arg) {
method debug (line 83) | public void debug(String msg, @Nullable Object arg1, @Nullable Object ...
method debug (line 87) | public void debug(String msg, Object... args) {
method info (line 91) | public void info(String msg) {
method info (line 95) | public void info(String msg, @Nullable Object arg) {
method info (line 99) | public void info(String msg, @Nullable Object arg1, @Nullable Object a...
method info (line 103) | public void info(String msg, Object... args) {
method warn (line 107) | public void warn(String msg) {
method warn (line 111) | public void warn(String msg, Throwable thrown) {
method warn (line 115) | public void warn(String msg, @Nullable Object arg) {
method warn (line 119) | public void warn(String msg, @Nullable Object arg1, @Nullable Object a...
method warn (line 123) | public void warn(String msg, Object... args) {
method error (line 127) | public void error(String msg) {
method error (line 131) | public void error(String msg, @Nullable Object arg) {
method error (line 135) | public void error(String msg, @Nullable Object arg1, @Nullable Object ...
method error (line 139) | public void error(String msg, Object... args) {
method error (line 143) | public void error(String msg, Throwable thrown) {
method doLogExtractingThrowable (line 147) | private void doLogExtractingThrowable(Level level, String msg, Object[...
method log (line 152) | private void log(@Nullable String formattedMessage, Level level, @Null...
method log (line 159) | private void log(@Nullable String formattedMessage, Level level, @Null...
method getSentryLogLevel (line 171) | private static SentryLogLevel getSentryLogLevel(Level level) {
method singlePlural (line 183) | public static String singlePlural(int count, String singular) {
method setLevel (line 187) | public void setLevel(Level newLevel) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/plugins/Dependency.java
method optional (line 23) | public static Dependency optional(SonarArtifact artifact) {
method required (line 27) | public static Dependency required(SonarArtifact key) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/plugins/SonarArtifact.java
type SonarArtifact (line 25) | public interface SonarArtifact {
method getKey (line 27) | String getKey();
method getLanguages (line 30) | Set<SonarLanguage> getLanguages();
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/plugins/SonarPlugin.java
type SonarPlugin (line 31) | public enum SonarPlugin implements SonarArtifact {
method findByKey (line 67) | public static Optional<SonarPlugin> findByKey(String key) {
method isEnterpriseVariant (line 80) | public static boolean isEnterpriseVariant(String key) {
method basePluginFor (line 91) | public static Optional<SonarPlugin> basePluginFor(String enterpriseKey) {
method baseKeyFor (line 102) | public static Optional<String> baseKeyFor(String enterpriseKey) {
method SonarPlugin (line 121) | SonarPlugin(String key) {
method SonarPlugin (line 129) | SonarPlugin(String key, SonarPlugin... enterpriseVariants) {
method SonarPlugin (line 137) | SonarPlugin(String key, EnterpriseReplacement enterpriseReplacement) {
method SonarPlugin (line 145) | SonarPlugin(String key, Set<Dependency> dependencies) {
method getKey (line 152) | @Override
method getEnterpriseVariants (line 160) | public Set<SonarPlugin> getEnterpriseVariants() {
method getEnterpriseReplacement (line 168) | public Optional<EnterpriseReplacement> getEnterpriseReplacement() {
method getDependencies (line 172) | public Set<Dependency> getDependencies() {
method getLanguages (line 176) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/plugins/SonarPluginDependency.java
type SonarPluginDependency (line 28) | public enum SonarPluginDependency implements SonarArtifact {
method findByKey (line 33) | public static Optional<SonarPluginDependency> findByKey(String key) {
method SonarPluginDependency (line 39) | SonarPluginDependency(String key) {
method getKey (line 43) | @Override
method getLanguages (line 53) | @Override
method getDependents (line 58) | public Set<SonarPlugin> getDependents() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/ExecutorServiceShutdownWatchable.java
class ExecutorServiceShutdownWatchable (line 35) | public class ExecutorServiceShutdownWatchable<E extends ExecutorService>...
method ExecutorServiceShutdownWatchable (line 43) | public ExecutorServiceShutdownWatchable(E wrapped) {
method getWrapped (line 47) | public E getWrapped() {
method cancelOnShutdown (line 51) | public void cancelOnShutdown(SonarLintCancelMonitor monitor) {
method cleanGoneMonitors (line 60) | private void cleanGoneMonitors() {
method shutdown (line 64) | @Override
method shutdownNow (line 70) | @Override
method cancelMonitors (line 77) | private void cancelMonitors() {
method isShutdown (line 90) | @Override
method isTerminated (line 95) | @Override
method awaitTermination (line 100) | @Override
method submit (line 105) | @Override
method submit (line 111) | @Override
method submit (line 117) | @Override
method invokeAll (line 123) | @Override
method invokeAll (line 129) | @Override
method invokeAny (line 135) | @Override
method invokeAny (line 140) | @Override
method execute (line 145) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/NoOpProgressMonitor.java
class NoOpProgressMonitor (line 24) | public class NoOpProgressMonitor implements ProgressMonitor {
method notifyProgress (line 25) | @Override
method isCanceled (line 30) | @Override
method complete (line 36) | @Override
method cancel (line 41) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/ProgressIndicator.java
type ProgressIndicator (line 24) | public interface ProgressIndicator {
method notifyProgress (line 25) | void notifyProgress(@Nullable String message, @Nullable Integer percen...
method isCanceled (line 26) | boolean isCanceled();
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/ProgressMonitor.java
type ProgressMonitor (line 22) | public interface ProgressMonitor extends ProgressIndicator {
method complete (line 23) | void complete();
method cancel (line 24) | void cancel();
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/SonarLintCancelMonitor.java
class SonarLintCancelMonitor (line 26) | public class SonarLintCancelMonitor {
method cancel (line 31) | public synchronized void cancel() {
method isCanceled (line 37) | public boolean isCanceled() {
method checkCanceled (line 41) | public void checkCanceled() {
method onCancel (line 47) | public synchronized void onCancel(Runnable action) {
method watchForShutdown (line 55) | public void watchForShutdown(ExecutorServiceShutdownWatchable<?> execu...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/Task.java
type Task (line 22) | public interface Task {
method run (line 23) | void run(ProgressIndicator indicator);
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/progress/TaskManager.java
class TaskManager (line 27) | public class TaskManager {
method createAndRunTask (line 31) | public final void createAndRunTask(@Nullable String configurationScope...
method runExistingTask (line 38) | public final void runExistingTask(@Nullable String configurationScopeI...
method trackNewTask (line 54) | public final void trackNewTask(UUID taskId, SonarLintCancelMonitor can...
method cancel (line 59) | public void cancel(String taskId) {
method startProgress (line 67) | protected void startProgress(@Nullable String configurationScopeId, UU...
method createProgress (line 72) | protected ProgressMonitor createProgress(UUID taskId, SonarLintCancelM...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/DatabaseExceptionReporter.java
class DatabaseExceptionReporter (line 33) | public final class DatabaseExceptionReporter {
method DatabaseExceptionReporter (line 42) | private DatabaseExceptionReporter() {
method capture (line 53) | public static void capture(Throwable exception, String phase, String o...
method capture (line 87) | public static void capture(Throwable exception, String phase, String o...
method isDuplicate (line 91) | private static boolean isDuplicate(int messageHash) {
method recordException (line 98) | private static void recordException(int messageHash) {
method cleanupOldEntries (line 102) | private static void cleanupOldEntries(long now) {
method getDedupWindowMs (line 106) | private static long getDedupWindowMs() {
method truncateSql (line 118) | private static String truncateSql(String sql) {
method clearRecentExceptions (line 127) | static void clearRecentExceptions() {
method getRecentExceptionsCount (line 132) | static int getRecentExceptionsCount() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/JooqDatabaseExceptionListener.java
class JooqDatabaseExceptionListener (line 29) | public class JooqDatabaseExceptionListener implements ExecuteListener {
method exception (line 31) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/SonarLintDatabase.java
class SonarLintDatabase (line 36) | public final class SonarLintDatabase {
method SonarLintDatabase (line 44) | public SonarLintDatabase(Path storageRoot) {
method deleteLegacyDatabase (line 93) | private static void deleteLegacyDatabase(Path baseDir) {
method dsl (line 101) | public DSLContext dsl() {
method shutdown (line 105) | public void shutdown() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/XodusPurgeUtils.java
class XodusPurgeUtils (line 27) | public class XodusPurgeUtils {
method XodusPurgeUtils (line 29) | private XodusPurgeUtils() {
method deleteInFolderWithPattern (line 35) | public static void deleteInFolderWithPattern(Path folder, String patte...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/adapter/LocalDateAdapter.java
class LocalDateAdapter (line 28) | public class LocalDateAdapter extends TypeAdapter<LocalDate> {
method write (line 30) | @Override
method read (line 39) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/adapter/LocalDateTimeAdapter.java
class LocalDateTimeAdapter (line 30) | public class LocalDateTimeAdapter extends TypeAdapter<LocalDateTime> {
method write (line 32) | @Override
method read (line 46) | @Override
method readTime (line 70) | private static LocalTime readTime(JsonReader jsonReader) throws IOExce...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/adapter/OffsetDateTimeAdapter.java
class OffsetDateTimeAdapter (line 29) | public class OffsetDateTimeAdapter extends TypeAdapter<OffsetDateTime> {
method write (line 33) | @Override
method read (line 38) | @Override
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/local/FileStorageManager.java
class FileStorageManager (line 43) | public class FileStorageManager<T extends LocalStorage> {
method FileStorageManager (line 54) | public FileStorageManager(Path path, Supplier<T> defaultSupplier, Clas...
method getStorage (line 66) | public T getStorage() {
method isCacheInvalid (line 76) | public boolean isCacheInvalid() {
method invalidateCache (line 85) | public void invalidateCache() {
method refreshInMemoryStorage (line 89) | public synchronized void refreshInMemoryStorage() {
method updateLastModified (line 100) | public void updateLastModified() throws IOException {
method read (line 104) | public T read() throws IOException {
method tryUpdateAtomically (line 110) | public void tryUpdateAtomically(Consumer<T> updater) {
method updateAtomically (line 119) | private synchronized void updateAtomically(Consumer<T> updater) throws...
method read (line 132) | private T read(FileChannel fileChannel) {
method writeAtomically (line 151) | private void writeAtomically(FileChannel fileChannel, T newData) throw...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/storage/local/LocalStorage.java
type LocalStorage (line 22) | public interface LocalStorage {
method validateAndMigrate (line 23) | default void validateAndMigrate() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/tracing/Span.java
class Span (line 25) | public class Span {
method Span (line 29) | Span(ISpan sentrySpan) {
method finishExceptionally (line 33) | public void finishExceptionally(Throwable throwable) {
method finishSuccessfully (line 38) | public void finishSuccessfully() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/tracing/Step.java
class Step (line 25) | public class Step {
method Step (line 30) | public Step(String task, Runnable operation) {
method execute (line 35) | public void execute() {
method executeTransaction (line 39) | public void executeTransaction(ITransaction transaction, @Nullable Str...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/tracing/Trace.java
class Trace (line 29) | public class Trace {
method Trace (line 33) | private Trace(ITransaction transaction) {
method begin (line 37) | public static Trace begin(String name, String operation) {
method startChild (line 41) | public static <T> T startChild(@Nullable Trace trace, String task, @Nu...
method startChild (line 56) | public static void startChild(@Nullable Trace trace, String task, @Nul...
method startChildren (line 71) | public static void startChildren(@Nullable Trace trace, @Nullable Stri...
method setData (line 79) | public void setData(String key, Object value) {
method setThrowable (line 83) | public void setThrowable(Throwable throwable) {
method finishExceptionally (line 87) | public void finishExceptionally(Throwable throwable) {
method finishSuccessfully (line 93) | public void finishSuccessfully() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/FailSafeExecutors.java
class FailSafeExecutors (line 40) | public class FailSafeExecutors {
method FailSafeExecutors (line 43) | private FailSafeExecutors() {
method newSingleThreadExecutor (line 47) | public static ExecutorService newSingleThreadExecutor(String threadNam...
method newSingleThreadScheduledExecutor (line 60) | public static ScheduledExecutorService newSingleThreadScheduledExecuto...
method newCachedThreadPool (line 73) | public static ExecutorService newCachedThreadPool(ThreadFactory thread...
method extractThrowable (line 86) | @CheckForNull
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/FileUtils.java
class FileUtils (line 25) | public class FileUtils {
method getFilePathFromUri (line 27) | public static Path getFilePathFromUri(URI uri) {
method FileUtils (line 36) | private FileUtils() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/StringUtils.java
class StringUtils (line 24) | public class StringUtils {
method pluralize (line 28) | public static String pluralize(long count, String word) {
method sanitizeAgainstRTLO (line 33) | public static String sanitizeAgainstRTLO(@Nullable String input) {
method StringUtils (line 40) | private StringUtils() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/GitBlameReader.java
class GitBlameReader (line 27) | public class GitBlameReader {
method readLine (line 35) | public void readLine(String line) {
method getResult (line 45) | public BlameResult getResult() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/GitService.java
class GitService (line 61) | public class GitService {
method GitService (line 67) | GitService(NativeGitLocator nativeGitLocator) {
method create (line 71) | public static GitService create() {
method getBlameResult (line 75) | public MultiFileBlameResult getBlameResult(Path projectBaseDir, Set<Pa...
method getVCSChangedFiles (line 87) | public static Set<URI> getVCSChangedFiles(@Nullable Path baseDir) {
method getRemoteUrl (line 114) | @CheckForNull
method blameWithGitFilesBlameLibrary (line 132) | public static MultiFileBlameResult blameWithGitFilesBlameLibrary(Path ...
method getRelativePath (line 168) | private static Path getRelativePath(Repository gitRepo, Path projectBa...
method buildGitRepository (line 173) | private static Repository buildGitRepository(Path basedir) {
method createSonarLintGitIgnore (line 196) | public static SonarLintGitIgnore createSonarLintGitIgnore(@Nullable Pa...
method buildIgnoreNode (line 214) | private static IgnoreNode buildIgnoreNode(Repository repository) throw...
method readGitIgnoreFileFromBareRepo (line 224) | private static void readGitIgnoreFileFromBareRepo(Repository repositor...
method readIgnoreFileFromNonBareRepo (line 233) | private static void readIgnoreFileFromNonBareRepo(Repository repositor...
method adaptToPlatformBasedPath (line 241) | private static UnaryOperator<String> adaptToPlatformBasedPath(UnaryOpe...
method readFileContentFromGitRepo (line 248) | private static Optional<ObjectLoader> readFileContentFromGitRepo(Repos...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/NativeGit.java
class NativeGit (line 40) | public class NativeGit {
method NativeGit (line 47) | public NativeGit(String executable) {
method isSupportedVersion (line 51) | public boolean isSupportedVersion() {
method version (line 57) | private Optional<Version> version() {
method parseGitVersionOutput (line 63) | static Optional<Version> parseGitVersionOutput(List<String> lines) {
method tryCreateVersion (line 78) | private static Optional<Version> tryCreateVersion(String[] versionPart...
method blame (line 88) | public MultiFileBlameResult blame(Path projectBaseDir, Set<URI> fileUr...
method executeGitCommand (line 109) | private static boolean executeGitCommand(@Nullable Path workingDir, Co...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/NativeGitLocator.java
class NativeGitLocator (line 29) | public class NativeGitLocator {
method getNativeGitExecutable (line 39) | public Optional<NativeGit> getNativeGitExecutable() {
method getGitExecutable (line 52) | Optional<String> getGitExecutable() {
method locateGitOnWindows (line 56) | private static Optional<String> locateGitOnWindows() {
method locateGitOnWindows (line 62) | static Optional<String> locateGitOnWindows(ProcessWrapperFactory.Proce...
method callWhereTool (line 75) | private static ProcessWrapperFactory.ProcessExecutionResult callWhereT...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/ProcessWrapperFactory.java
class ProcessWrapperFactory (line 35) | public class ProcessWrapperFactory {
method ProcessWrapperFactory (line 38) | public ProcessWrapperFactory() {
method create (line 42) | public ProcessWrapper create(@Nullable Path baseDir, Consumer<String> ...
class ProcessWrapper (line 46) | public static class ProcessWrapper {
method ProcessWrapper (line 52) | ProcessWrapper(@Nullable Path baseDir, Consumer<String> lineConsumer...
method processInputStream (line 58) | void processInputStream(InputStream inputStream, Consumer<String> st...
method execute (line 67) | public ProcessExecutionResult execute() {
method createProcess (line 88) | Process createProcess() throws IOException {
method runProcessAndGetOutput (line 95) | ProcessExecutionResult runProcessAndGetOutput(Process p) throws Inte...
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/exceptions/GitException.java
class GitException (line 22) | public class GitException extends RuntimeException {
method GitException (line 25) | public GitException(String path) {
method getPath (line 29) | public String getPath() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/exceptions/GitRepoNotFoundException.java
class GitRepoNotFoundException (line 22) | public class GitRepoNotFoundException extends GitException {
method GitRepoNotFoundException (line 24) | public GitRepoNotFoundException(String path) {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/validation/InvalidFields.java
class InvalidFields (line 25) | public class InvalidFields {
method add (line 29) | public void add(String name) {
method getNames (line 33) | public String[] getNames() {
method hasInvalidFields (line 37) | public boolean hasInvalidFields() {
FILE: backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/validation/RegexpValidator.java
class RegexpValidator (line 25) | public class RegexpValidator {
method RegexpValidator (line 29) | public RegexpValidator(String regexp) {
method validateAll (line 33) | public InvalidFields validateAll(Map<String, String> namedValues) {
method isInvalid (line 42) | private boolean isInvalid(Map.Entry<String, String> nameValue) {
FILE: backend/commons/src/main/resources/db/migration/V1__init_database.sql
type AI_CODEFIX_SETTINGS (line 1) | CREATE TABLE IF NOT EXISTS AI_CODEFIX_SETTINGS (
type KNOWN_FINDINGS (line 10) | CREATE TABLE IF NOT EXISTS KNOWN_FINDINGS (
type SERVER_FINDINGS (line 31) | CREATE TABLE IF NOT EXISTS SERVER_FINDINGS (
type SERVER_BRANCHES (line 66) | CREATE TABLE IF NOT EXISTS SERVER_BRANCHES (
type SERVER_DEPENDENCY_RISKS (line 79) | CREATE TABLE IF NOT EXISTS SERVER_DEPENDENCY_RISKS (
FILE: backend/commons/src/main/resources/db/migration/V2__create_local_only_issues_table.sql
type LOCAL_ONLY_ISSUES (line 4) | CREATE TABLE IF NOT EXISTS LOCAL_ONLY_ISSUES (
type idx_local_only_issues_config_scope_file (line 25) | CREATE INDEX IF NOT EXISTS idx_local_only_issues_config_scope_file
type idx_local_only_issues_resolution_date (line 28) | CREATE INDEX IF NOT EXISTS idx_local_only_issues_resolution_date
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/HotspotReviewStatusTest.java
class HotspotReviewStatusTest (line 26) | class HotspotReviewStatusTest {
method should_be_resolved_when_fixed_or_safe (line 27) | @Test
method should_be_reviewed_when_fixed_or_safe_or_acknowledged (line 34) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/IOExceptionUtilsTests.java
class IOExceptionUtilsTests (line 33) | class IOExceptionUtilsTests {
method test_tryAndCollectIOException_no_exceptions (line 35) | @Test
method test_tryAndCollectIOException_one_exception (line 43) | @Test
method test_tryAndCollectIOException_multiple_exceptions (line 52) | @Test
method test_throwFirstWithOtherSuppressed_no_exceptions (line 64) | @Test
method test_throwFirstWithOtherSuppressed_one_exception (line 69) | @Test
method test_throwFirstWithOtherSuppressed_multiple_exceptions (line 75) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/LogTestStartAndEnd.java
class LogTestStartAndEnd (line 26) | public class LogTestStartAndEnd implements BeforeEachCallback, AfterEach...
method beforeEach (line 27) | @Override
method afterEach (line 32) | @Override
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/MultiFileBlameResultTest.java
class MultiFileBlameResultTest (line 51) | class MultiFileBlameResultTest {
method prepare (line 59) | @BeforeEach
method cleanup (line 64) | @AfterEach
method it_should_return_correct_latest_changed_date_for_file_lines (line 69) | @Test
method it_should_handle_all_line_modified (line 96) | @Test
method it_should_return_latest_change_date (line 110) | @Test
method it_should_handle_end_of_line_modified (line 128) | @Test
method it_should_handle_dodgy_input (line 142) | @Test
method it_should_raise_exception_if_wrong_line_numbering_provided (line 155) | @Test
method it_should_handle_files_within_inner_dir (line 166) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/NewCodeDefinitionTests.java
class NewCodeDefinitionTests (line 27) | class NewCodeDefinitionTests {
method isOnNewCodeTest (line 28) | @Test
method toStringTest (line 41) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/RuleKeyTests.java
class RuleKeyTests (line 27) | class RuleKeyTests {
method test_ruleKey_accessors (line 29) | @Test
method ruleKey_equals_and_hashcode (line 40) | @Test
method ruleKey_equals_to_its_parsed_from_toString (line 56) | @Test
method parse_throws_for_illegal_format (line 66) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/SonarLintCoreVersionTests.java
class SonarLintCoreVersionTests (line 27) | class SonarLintCoreVersionTests {
method testVersionFallback (line 29) | @Test
method testVersion (line 35) | @Test
method testVersionAssert (line 41) | @Test
method isVersion (line 51) | private boolean isVersion(String version) {
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/SonarLintUserHomeTests.java
class SonarLintUserHomeTests (line 27) | class SonarLintUserHomeTests {
method env_setting_should_override_default_home (line 29) | @Test
method default_home_should_be_in_user_home (line 35) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/StringUtilsTests.java
class StringUtilsTests (line 28) | class StringUtilsTests {
method should_pluralize_words (line 30) | @Test
method should_sanitize_against_rtlo (line 37) | @Test
method should_sanitize_with_null (line 42) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/TextRangeTests.java
class TextRangeTests (line 27) | class TextRangeTests {
method test_getters (line 29) | @Test
method test_equals_hashcode (line 38) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/TextRangeWithHashTests.java
class TextRangeWithHashTests (line 28) | class TextRangeWithHashTests {
method test_getters (line 30) | @Test
method test_equals_hashcode (line 36) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/VersionTests.java
class VersionTests (line 26) | class VersionTests {
method test_fields_of_snapshot_versions (line 28) | @Test
method test_fields_of_releases (line 38) | @Test
method compare_releases (line 48) | @Test
method compare_snapshots (line 61) | @Test
method compare_release_candidates (line 74) | @Test
method testTrim (line 88) | @Test
method testDefaultNumberIsZero (line 96) | @Test
method testCompareOnTwoDigits (line 105) | @Test
method testFields (line 116) | @Test
method testPatchFieldsEquals (line 128) | @Test
method removeQualifier (line 141) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/log/ConcurrentListAppender.java
class ConcurrentListAppender (line 26) | public class ConcurrentListAppender<E> extends AppenderBase<E> {
method append (line 29) | protected void append(E e) {
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/log/MessageFormatterTests.java
class MessageFormatterTests (line 30) | class MessageFormatterTests {
method testNull (line 40) | @Test
method testParamaterContainingAnAnchor (line 46) | @Test
method nullParametersShouldBeHandledWithoutBarfing (line 55) | @Test
method verifyOneParameterIsHandledCorrectly (line 79) | @Test
method testTwoParameters (line 116) | @Test
method testExceptionIn_toString (line 146) | @Test
method testNullArray (line 159) | @Test
method testArrayFormat (line 182) | @Test
method testArrayValues (line 206) | @Test
method testMultiDimensionalArrayValues (line 252) | @Test
method testCyclicArrays (line 275) | @Test
method testArrayThrowable (line 292) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/log/SonarLintLogTester.java
class SonarLintLogTester (line 67) | public class SonarLintLogTester implements AfterTestExecutionCallback, B...
method SonarLintLogTester (line 75) | public SonarLintLogTester(boolean writeToStdOut) {
method SonarLintLogTester (line 98) | public SonarLintLogTester() {
method afterTestExecution (line 102) | @Override
method clear (line 107) | public void clear() {
method getLogOutput (line 113) | public LogOutput getLogOutput() {
method logs (line 120) | public List<String> logs() {
method logs (line 128) | public List<String> logs(Level level) {
method afterAll (line 132) | @Override
method beforeAll (line 140) | @Override
method getRootLogger (line 148) | private static ch.qos.logback.classic.Logger getRootLogger() {
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/log/SonarLintLoggerTests.java
class SonarLintLoggerTests (line 32) | class SonarLintLoggerTests {
method prepare (line 37) | @BeforeEach
method should_log_error (line 43) | @Test
method should_log_warn (line 66) | @Test
method should_log_info (line 89) | @Test
method should_log_debug (line 110) | @Test
method should_log_trace (line 131) | @Test
method extract_throwable_from_format_params (line 153) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/progress/ExecutorServiceShutdownWatchableTests.java
class ExecutorServiceShutdownWatchableTests (line 29) | class ExecutorServiceShutdownWatchableTests {
method should_cancel_all_monitors (line 31) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/storage/DatabaseExceptionReporterTests.java
class DatabaseExceptionReporterTests (line 43) | class DatabaseExceptionReporterTests {
method setUp (line 50) | @BeforeEach
method tearDown (line 57) | @AfterEach
method should_capture_generic_exception (line 64) | @Test
method should_capture_sql_exception_with_details (line 76) | @Test
method should_capture_exception_without_sql (line 88) | @Test
method should_deduplicate_same_message_within_window (line 99) | @Test
method should_not_deduplicate_different_exceptions (line 111) | @Test
method should_deduplicate_same_message_even_with_different_phase (line 124) | @Test
method should_always_report_null_message_exceptions_without_deduplication (line 136) | @Test
method should_truncate_long_sql (line 149) | @Test
method should_cleanup_old_entries_after_dedup_window (line 161) | @Test
method should_set_scope_tags_for_generic_exception (line 177) | @Test
method should_set_scope_tags_for_sql_exception_with_sql_state (line 195) | @Test
method should_not_set_sql_state_tag_when_null (line 215) | @Test
method should_set_sql_extra_when_provided (line 233) | @Test
method should_not_set_sql_extra_when_empty (line 249) | @Test
method should_truncate_sql_in_extra_when_exceeds_1000_chars (line 265) | @Test
method should_use_default_dedup_window_when_property_is_invalid (line 285) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/storage/JooqDatabaseExceptionListenerTests.java
class JooqDatabaseExceptionListenerTests (line 42) | class JooqDatabaseExceptionListenerTests {
method setUp (line 50) | @BeforeEach
method tearDown (line 58) | @AfterEach
method should_report_sql_exception_from_context (line 64) | @Test
method should_report_runtime_exception_when_no_sql_exception (line 82) | @Test
method should_not_report_when_no_exception (line 98) | @Test
method should_handle_null_sql (line 109) | @Test
method should_prefer_sql_exception_over_runtime_exception (line 125) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/storage/SonarLintDatabaseExceptionTests.java
class SonarLintDatabaseExceptionTests (line 44) | class SonarLintDatabaseExceptionTests {
method setUp (line 52) | @BeforeEach
method tearDown (line 59) | @AfterEach
method should_report_runtime_sql_exception_via_listener (line 68) | @Test
method should_report_invalid_sql_syntax_exception (line 86) | @Test
method should_report_constraint_violation_exception (line 103) | @Test
method should_initialize_database_successfully (line 124) | @Test
method should_shutdown_database_successfully (line 133) | @Test
method should_execute_valid_queries_without_exception_reporting (line 144) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/storage/local/FileStorageManagerTest.java
class FileStorageManagerTest (line 55) | class FileStorageManagerTest {
method setUp (line 59) | @BeforeEach
method should_update (line 64) | @Test
method supportConcurrentUpdates (line 79) | @Test
method tryUpdateAtomically_should_not_crash_if_too_many_read_write_requests (line 110) | @Test
method tryRead_should_be_aware_of_file_deletion (line 127) | @Test
method tryRead_should_be_aware_of_file_modification (line 144) | @Test
method writeToLocalStorageFile (line 161) | private void writeToLocalStorageFile(Object newStorage) throws IOExcep...
method writeToLocalStorageFile (line 171) | private void writeToLocalStorageFile(byte[] encoded) throws IOException {
method tryRead_returns_default_local_storage_if_file_is_empty (line 175) | @Test
class Dummy (line 185) | private static class Dummy implements LocalStorage {
method Dummy (line 190) | Dummy() {
method Dummy (line 194) | Dummy(String data) {
method getCounter (line 198) | public int getCounter() {
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/testutils/GitUtils.java
class GitUtils (line 39) | public class GitUtils {
method GitUtils (line 41) | private GitUtils() {
method createRepository (line 45) | public static Git createRepository(Path worktree) throws GitAPIExcepti...
method createEmptyGitIgnoreFile (line 53) | private static void createEmptyGitIgnoreFile(Git git) throws GitAPIExc...
method addFileToGitIgnoreAndCommit (line 61) | public static void addFileToGitIgnoreAndCommit(Git git, String filePat...
method getGitIgnoreFile (line 70) | private static File getGitIgnoreFile(Git git) {
method commit (line 74) | public static Instant commit(Git git, String... paths) throws GitAPIEx...
method commit (line 78) | public static Instant commit(Git git, Instant commitDate, String... pa...
method commitObject (line 82) | private static RevCommit commitObject(Git git, Instant commitDate, Str...
method commitAtDate (line 93) | public static Instant commitAtDate(Git git, Instant commitDate, String...
method createFile (line 109) | public static void createFile(Path worktree, String relativePath, Stri...
method appendFile (line 116) | public static void appendFile(Path file, String... lines) throws IOExc...
method modifyFile (line 121) | public static void modifyFile(Path file, String... lines) throws IOExc...
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/testutils/MockWebServerExtension.java
class MockWebServerExtension (line 37) | public class MockWebServerExtension implements BeforeEachCallback, After...
method beforeEach (line 42) | @Override
method start (line 49) | public void start() {
method afterEach (line 69) | @Override
method shutdown (line 74) | public void shutdown() {
method addStringResponse (line 82) | public void addStringResponse(String path, String body) {
method removeResponse (line 86) | public void removeResponse(String path) {
method addResponse (line 90) | public void addResponse(String path, MockResponse response) {
method getRequestCount (line 94) | public int getRequestCount() {
method takeRequest (line 98) | public RecordedRequest takeRequest() {
method url (line 107) | public String url(String path) {
method addResponseFromResource (line 111) | public void addResponseFromResource(String path, String responseResour...
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/util/git/BlameParserTests.java
class BlameParserTests (line 27) | class BlameParserTests {
method shouldNotPopulateGitBlameResultForEmptyBlameOutput (line 29) | @Test
method shouldSplitBlameOutputCorrectlyWhenLinesContainSplitPattern (line 39) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/util/git/GitServiceTests.java
class GitServiceTests (line 67) | @ExtendWith(LogTestStartAndEnd.class)
method beforeAll (line 80) | @BeforeAll
method afterAll (line 89) | @AfterAll
method setUpBareRepo (line 99) | private static void setUpBareRepo(Map<String, String> filePathContentM...
method prepare (line 128) | @BeforeEach
method cleanup (line 133) | @AfterEach
method it_should_blame_file (line 138) | @Test
method it_should_not_blame_new_file (line 150) | @Test
method it_should_fallback_to_jgit_blame (line 162) | @Test
method it_should_blame_with_given_contents_within_inner_dir (line 177) | @Test
method it_should_blame_file_within_inner_dir (line 192) | @Test
method it_should_blame_project_files_when_project_base_is_sub_folder_of_git_repo (line 204) | @Test
method it_should_get_uncommitted_files_including_untracked_ones (line 218) | @Test
method it_should_get_uncommited_file_in_sub_base_dir (line 256) | @Test
method it_should_return_empty_list_if_base_dir_not_resolved (line 269) | @Test
method it_should_return_empty_list_on_git_exception (line 274) | @Test
method should_filter_ignored_files (line 279) | @Test
method should_filter_ignored_directories (line 302) | @Test
method should_consider_all_files_not_ignored_on_gitignore (line 325) | @Test
method should_continue_normally_with_null_basedir (line 348) | @Test
method should_consider_files_ignored_when_git_root_above_project_root (line 355) | @Test
method should_respect_gitignore_rules (line 369) | @Test
method createSonarLintGitIgnore_works_for_bare_repos_too (line 379) | @Test
method nonAsciiCharacterFileName (line 388) | @Test
method should_not_read_git_ignore_on_bare_repo_with_no_commit (line 396) | @Test
method git_blame_works_for_bare_repos_too (line 406) | @Test
method should_return_empty_blame_result_if_no_commits_in_repo (line 416) | @Test
method it_should_only_return_files_under_baseDir (line 429) | @Test
method it_should_get_remote_url (line 457) | @Test
method it_should_return_null_when_no_origin_remote (line 471) | @Test
method it_should_return_null_for_null_base_dir (line 478) | @Test
method it_should_return_null_for_non_git_directory (line 485) | @Test
method it_should_get_remote_url_from_subdirectory (line 494) | @Test
method it_should_return_null_when_config_access_fails (line 510) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/util/git/NativeGitLocatorTests.java
class NativeGitLocatorTests (line 45) | class NativeGitLocatorTests {
method prepare (line 52) | @BeforeEach
method cleanup (line 57) | @AfterEach
method shouldConsiderNativeGitNotAvailableOnNull (line 62) | @Test
method should_return_first_git_location (line 69) | @EnabledOnOs(WINDOWS)
method gitLocations (line 78) | private static Stream<Arguments> gitLocations() {
method result (line 87) | private static TestData result(int code, String output) {
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/util/git/NativeGitTest.java
class NativeGitTest (line 47) | class NativeGitTest {
method prepare (line 55) | @BeforeEach
method it_should_default_to_instant_now_git_blame_history_limit_if_older_than_one_year (line 60) | @Test
method it_should_blame_file_since_effective_blame_period (line 101) | @Test
method it_should_not_blame_file_on_git_command_error (line 145) | @Test
method it_should_successfully_parse_windows_like_output (line 158) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/util/git/ProcessWrapperFactoryTests.java
class ProcessWrapperFactoryTests (line 35) | class ProcessWrapperFactoryTests {
method it_should_execute_git (line 39) | @Test
method it_should_return_output_for_invalid_command (line 49) | @Test
method it_should_gracefully_return_output_for_interrupted_exception (line 59) | @Test
method it_should_gracefully_return_output_for_exception (line 72) | @Test
method it_should_gracefully_return_output_when_not_able_to_create_process (line 85) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/validation/InvalidFieldsTest.java
class InvalidFieldsTest (line 26) | class InvalidFieldsTest {
method should_have_no_invalid_fields_initially (line 30) | @Test
method should_have_invalid_fields_after_adding_one (line 37) | @Test
method should_include_all_added_fields (line 46) | @Test
FILE: backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/validation/RegexpValidatorTest.java
class RegexpValidatorTest (line 29) | class RegexpValidatorTest {
method should_throw_exception_on_invalid_regexp (line 33) | @Test
method should_return_empty_invalid_fields (line 39) | @Test
method should_return_one_invalid_field (line 53) | @Test
method should_return_all_invalid_fields (line 68) | @Test
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingCandidatesFinder.java
class BindingCandidatesFinder (line 36) | public class BindingCandidatesFinder {
method BindingCandidatesFinder (line 43) | @Inject
method findConfigScopesToBind (line 50) | public Set<ConfigurationScopeSharedContext> findConfigScopesToBind(Str...
method checkIfScopeIsGoodCandidateForBinding (line 68) | private Optional<ConfigurationScopeSharedContext> checkIfScopeIsGoodCa...
method filterOutLeafCandidates (line 101) | private static Set<ConfigurationScopeSharedContext> filterOutLeafCandi...
method isConfigScopeNameCloseEnoughToSonarProject (line 110) | private boolean isConfigScopeNameCloseEnoughToSonarProject(String conf...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingClueProvider.java
class BindingClueProvider (line 50) | public class BindingClueProvider {
method BindingClueProvider (line 62) | public BindingClueProvider(ConnectionConfigurationRepository connectio...
method collectBindingCluesWithConnections (line 68) | public List<BindingClueWithConnections> collectBindingCluesWithConnect...
method matchConnections (line 73) | private List<BindingClueWithConnections> matchConnections(List<Binding...
class BindingClueWithConnections (line 86) | public static class BindingClueWithConnections {
method BindingClueWithConnections (line 90) | BindingClueWithConnections(BindingClue bindingClue, Set<String> conn...
method getBindingClue (line 95) | public BindingClue getBindingClue() {
method getConnectionIds (line 99) | public Set<String> getConnectionIds() {
method collectBindingClues (line 104) | public List<BindingClue> collectBindingClues(String checkedConfigScope...
method collectFromFiles (line 127) | private List<BindingClue> collectFromFiles(List<ClientFile> files, Son...
method hasBlankValues (line 146) | private static boolean hasBlankValues(BindingProperties scannerProps) {
method isEmptySqConfig (line 156) | private static boolean isEmptySqConfig(@Nullable String projectKey, @N...
method isEmptyScConfig (line 160) | private static boolean isEmptyScConfig(@Nullable String projectKey, @N...
method matchConnections (line 164) | private Set<String> matchConnections(BindingClue bindingClue, Set<Stri...
method extractSonarLintConfiguration (line 186) | @CheckForNull
method extractConnectionProperties (line 211) | @CheckForNull
method getAndTrim (line 229) | @CheckForNull
class BindingProperties (line 234) | private static class BindingProperties {
method BindingProperties (line 241) | private BindingProperties(@Nullable String projectKey, @Nullable Str...
method computeBindingClue (line 258) | @CheckForNull
type BindingClue (line 279) | public interface BindingClue {
method getSonarProjectKey (line 281) | @CheckForNull
method getOrigin (line 284) | BindingSuggestionOrigin getOrigin();
class UnknownBindingClue (line 288) | public static class UnknownBindingClue implements BindingClue {
method UnknownBindingClue (line 292) | UnknownBindingClue(String sonarProjectKey, BindingSuggestionOrigin o...
method getSonarProjectKey (line 297) | @Override
method getOrigin (line 302) | @Override
class SonarQubeBindingClue (line 308) | public static class SonarQubeBindingClue implements BindingClue {
method SonarQubeBindingClue (line 313) | SonarQubeBindingClue(@Nullable String sonarProjectKey, String server...
method getSonarProjectKey (line 319) | @Override
method getOrigin (line 324) | @Override
method getServerUrl (line 329) | public String getServerUrl() {
class SonarCloudBindingClue (line 335) | public static class SonarCloudBindingClue implements BindingClue {
method SonarCloudBindingClue (line 342) | SonarCloudBindingClue(@Nullable String sonarProjectKey, @Nullable St...
method getSonarProjectKey (line 350) | @Override
method getOrigin (line 355) | @Override
method getOrganization (line 360) | public String getOrganization() {
method getRegion (line 364) | public SonarCloudRegion getRegion() {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingSuggestionProvider.java
class BindingSuggestionProvider (line 62) | public class BindingSuggestionProvider {
method BindingSuggestionProvider (line 76) | @Inject
method bindingConfigChanged (line 90) | @EventListener
method suggestBindingForGivenScopesAndAllConnections (line 98) | public void suggestBindingForGivenScopesAndAllConnections(Set<String> ...
method connectionAdded (line 110) | @EventListener
method getBindingSuggestions (line 122) | public Map<String, List<BindingSuggestionDto>> getBindingSuggestions(S...
method queueBindingSuggestionComputation (line 126) | private void queueBindingSuggestionComputation(Set<String> configScope...
method computeAndNotifyBindingSuggestions (line 138) | private void computeAndNotifyBindingSuggestions(Set<String> configScop...
method computeBindingSuggestions (line 145) | private Map<String, List<BindingSuggestionDto>> computeBindingSuggesti...
method suggestBindingForEligibleScope (line 172) | private List<BindingSuggestionDto> suggestBindingForEligibleScope(Stri...
method searchGoodMatchInConnections (line 209) | private void searchGoodMatchInConnections(List<BindingSuggestionDto> s...
method searchByRemoteUrlInConnections (line 216) | private void searchByRemoteUrlInConnections(List<BindingSuggestionDto>...
method getBindingSuggestionByRemoteUrl (line 236) | @NotNull
method searchGoodMatchInConnection (line 258) | private void searchGoodMatchInConnection(List<BindingSuggestionDto> su...
method isScopeEligibleForBindingSuggestion (line 276) | private boolean isScopeEligibleForBindingSuggestion(String configScope...
method isValidBinding (line 299) | private boolean isValidBinding(BindingConfiguration bindingConfigurati...
method shutdown (line 304) | @PreDestroy
method disable (line 311) | public void disable() {
method enable (line 315) | public void enable() {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/ConfigurationScopeSharedContext.java
class ConfigurationScopeSharedContext (line 25) | public class ConfigurationScopeSharedContext {
method ConfigurationScopeSharedContext (line 30) | ConfigurationScopeSharedContext(ConfigurationScope configurationScope,...
method getConfigurationScope (line 35) | public ConfigurationScope getConfigurationScope() {
method getOrigin (line 39) | public BindingSuggestionOrigin getOrigin() {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/ConfigurationService.java
class ConfigurationService (line 40) | public class ConfigurationService {
method ConfigurationService (line 47) | public ConfigurationService(ApplicationEventPublisher applicationEvent...
method didAddConfigurationScopes (line 52) | public void didAddConfigurationScopes(List<ConfigurationScopeDto> adde...
method adapt (line 71) | private static BindingConfiguration adapt(@Nullable BindingConfigurati...
method adapt (line 78) | private static ConfigurationScope adapt(ConfigurationScopeDto dto) {
method didRemoveConfigurationScope (line 82) | public void didRemoveConfigurationScope(String removedId) {
method didUpdateBinding (line 92) | public void didUpdateBinding(String configScopeId, BindingConfiguratio...
method connectionRemoved (line 100) | @EventListener
method bind (line 108) | @CheckForNull
method createChangedEventIfNeeded (line 121) | @CheckForNull
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/ConnectionService.java
class ConnectionService (line 61) | public class ConnectionService {
method ConnectionService (line 75) | @Inject
method ConnectionService (line 82) | ConnectionService(ApplicationEventPublisher applicationEventPublisher,...
method adapt (line 98) | private static SonarQubeConnectionConfiguration adapt(SonarQubeConnect...
method adapt (line 102) | private SonarCloudConnectionConfiguration adapt(SonarCloudConnectionCo...
method putAndLogIfDuplicateId (line 108) | private static void putAndLogIfDuplicateId(Map<String, AbstractConnect...
method didUpdateConnections (line 114) | public void didUpdateConnections(List<SonarQubeConnectionConfiguration...
method didChangeCredentials (line 137) | public void didChangeCredentials(String connectionId) {
method addConnection (line 141) | private void addConnection(AbstractConnectionConfiguration connectionC...
method removeConnection (line 147) | private void removeConnection(String removedConnectionId) {
method updateConnection (line 157) | private void updateConnection(AbstractConnectionConfiguration connecti...
method validateConnection (line 169) | public ValidateConnectionResponse validateConnection(Either<TransientS...
method helpGenerateUserToken (line 192) | public HelpGenerateUserTokenResponse helpGenerateUserToken(String serv...
method validateUtm (line 205) | private static InvalidFields validateUtm(HelpGenerateUserTokenParams.U...
method getAllProjects (line 213) | public List<SonarProjectDto> getAllProjects(Either<TransientSonarQubeC...
method getProjectNamesByKey (line 225) | public Map<String, String> getProjectNamesByKey(Either<TransientSonarQ...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/ConnectionSuggestionProvider.java
class ConnectionSuggestionProvider (line 53) | public class ConnectionSuggestionProvider {
method ConnectionSuggestionProvider (line 65) | @Inject
method filesystemUpdated (line 77) | @EventListener
method configurationScopesAdded (line 87) | @EventListener
method queueConnectionSuggestion (line 103) | private void queueConnectionSuggestion(Set<String> listConfigScopeIds) {
method suggestConnectionAndBindingForGivenScopes (line 111) | private void suggestConnectionAndBindingForGivenScopes(Set<String> con...
method computeConnectionAndBindingSuggestions (line 118) | private @NotNull ConnectionAndBindingSuggestions computeConnectionAndB...
method handleBindingClue (line 147) | private Optional<Either<String, String>> handleBindingClue(BindingClue...
method suggestConnectionToClientIfAny (line 170) | private void suggestConnectionToClientIfAny(Map<String, List<Connectio...
method computeBindingSuggestionIfAny (line 178) | private void computeBindingSuggestionIfAny(Set<String> bindingSuggesti...
method getConnectionSuggestions (line 185) | public List<ConnectionSuggestionDto> getConnectionSuggestions(String c...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/DtoMapper.java
class DtoMapper (line 35) | public class DtoMapper {
method DtoMapper (line 37) | private DtoMapper() {
method toRaisedIssueDto (line 41) | public static RaisedIssueDto toRaisedIssueDto(TrackedIssue issue, NewC...
method toRaisedHotspotDto (line 53) | public static RaisedHotspotDto toRaisedHotspotDto(TrackedIssue issue, ...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/MCPServerConfigurationProvider.java
class MCPServerConfigurationProvider (line 32) | public class MCPServerConfigurationProvider {
method MCPServerConfigurationProvider (line 86) | public MCPServerConfigurationProvider(ConnectionConfigurationRepositor...
method getMCPServerConfigurationJSON (line 92) | public String getMCPServerConfigurationJSON(String connectionId, Strin...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/OrganizationsCache.java
class OrganizationsCache (line 44) | public class OrganizationsCache {
method OrganizationsCache (line 53) | public OrganizationsCache(SonarQubeClientManager sonarQubeClientManage...
method fuzzySearchOrganizations (line 57) | public List<OrganizationDto> fuzzySearchOrganizations(TransientSonarCl...
method getTextSearchIndex (line 68) | public TextSearchIndex<OrganizationDto> getTextSearchIndex(TransientSo...
method listUserOrganizations (line 96) | public List<OrganizationDto> listUserOrganizations(TransientSonarCloud...
method getOrganization (line 101) | @CheckForNull
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/ServerFileExclusions.java
class ServerFileExclusions (line 29) | public class ServerFileExclusions {
method ServerFileExclusions (line 40) | public ServerFileExclusions(Configuration configuration) {
method prepare (line 44) | public void prepare() {
method log (line 55) | private static void log(String title, SonarLintPathPattern[] patterns) {
method accept (line 64) | public boolean accept(String relativePath, InputFile.Type type) {
method prepareMainInclusions (line 96) | SonarLintPathPattern[] prepareMainInclusions() {
method prepareTestInclusions (line 104) | SonarLintPathPattern[] prepareTestInclusions() {
method computeTestInclusions (line 108) | private String[] computeTestInclusions() {
method prepareMainExclusions (line 116) | SonarLintPathPattern[] prepareMainExclusions() {
method prepareTestExclusions (line 122) | SonarLintPathPattern[] prepareTestExclusions() {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SharedConnectedModeSettingsProvider.java
class SharedConnectedModeSettingsProvider (line 33) | public class SharedConnectedModeSettingsProvider {
method SharedConnectedModeSettingsProvider (line 51) | public SharedConnectedModeSettingsProvider(ConfigurationRepository con...
method getSharedConnectedModeConfigFileContents (line 58) | public String getSharedConnectedModeConfigFileContents(String configSc...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudActiveEnvironment.java
class SonarCloudActiveEnvironment (line 30) | public class SonarCloudActiveEnvironment {
method prod (line 33) | public static SonarCloudActiveEnvironment prod() {
method SonarCloudActiveEnvironment (line 37) | public SonarCloudActiveEnvironment(Map<org.sonarsource.sonarlint.core....
method getUri (line 42) | public URI getUri(SonarCloudRegion region) {
method getApiUri (line 49) | public URI getApiUri(SonarCloudRegion region) {
method getWebSocketsEndpointUri (line 56) | public URI getWebSocketsEndpointUri(SonarCloudRegion region) {
method isSonarQubeCloud (line 63) | public boolean isSonarQubeCloud(String uri) {
method getRegionOrThrow (line 70) | public SonarCloudRegion getRegionOrThrow(String uri) {
method getRegionByUri (line 79) | private Optional<SonarCloudRegion> getRegionByUri(String uri) {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudRegion.java
type SonarCloudRegion (line 25) | public enum SonarCloudRegion {
method SonarCloudRegion (line 38) | SonarCloudRegion(String productionUri, String apiProductionUri, String...
method getProductionUri (line 44) | public URI getProductionUri() {
method getApiProductionUri (line 48) | public URI getApiProductionUri() {
method getWebSocketUri (line 52) | public URI getWebSocketUri() {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCodeContextService.java
class SonarCodeContextService (line 51) | public class SonarCodeContextService {
method SonarCodeContextService (line 70) | public SonarCodeContextService(DogfoodEnvironmentDetectionService dogf...
method onConfigurationScopesAdded (line 85) | @EventListener
method onBindingChanged (line 103) | @EventListener
method handleGeneration (line 117) | private void handleGeneration(String configScopeId, Path baseDir, Bind...
method prepareCliParams (line 138) | private Optional<CliParams> prepareCliParams(Binding binding, String c...
method getTokenForConnection (line 152) | private Optional<String> getTokenForConnection(String connectionId) {
method runInit (line 166) | private void runInit(Path baseDir) {
method runGenerateGuidelines (line 175) | private void runGenerateGuidelines(Path baseDir, CliParams params) {
method runMergeMd (line 189) | private void runMergeMd(Path baseDir) {
method runInstall (line 200) | private void runInstall(Path baseDir) {
method execute (line 209) | private void execute(Path baseDir, List<String> command) {
method computeWorkingBaseDir (line 218) | private static Path computeWorkingBaseDir(Path baseDir) {
method resolveCliExecutable (line 233) | private static String resolveCliExecutable() {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarLintMDC.java
class SonarLintMDC (line 25) | public class SonarLintMDC {
method SonarLintMDC (line 29) | private SonarLintMDC() {
method putConfigScopeId (line 33) | public static void putConfigScopeId(@Nullable String configScopeId) {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarProjectsCache.java
class SonarProjectsCache (line 41) | public class SonarProjectsCache {
method SonarProjectsCache (line 54) | public SonarProjectsCache(SonarQubeClientManager sonarQubeClientManage...
method fuzzySearchProjects (line 58) | public List<SonarProjectDto> fuzzySearchProjects(String connectionId, ...
class SonarProjectKey (line 69) | private static class SonarProjectKey {
method SonarProjectKey (line 73) | private SonarProjectKey(String connectionId, String projectKey) {
method equals (line 78) | @Override
method hashCode (line 90) | @Override
method connectionRemoved (line 96) | @EventListener
method connectionUpdated (line 101) | @EventListener
method evictAll (line 107) | private void evictAll(String connectionId) {
method getSonarProject (line 113) | public Optional<ServerProject> getSonarProject(String connectionId, St...
method getTextSearchIndex (line 130) | public TextSearchIndex<ServerProject> getTextSearchIndex(String connec...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarQubeClientManager.java
class SonarQubeClientManager (line 54) | public class SonarQubeClientManager {
method SonarQubeClientManager (line 63) | public SonarQubeClientManager(ConnectionConfigurationRepository connec...
method getValidClientOrThrow (line 74) | public SonarQubeClient getValidClientOrThrow(String connectionId) {
method withActiveClient (line 79) | public void withActiveClient(String connectionId, Consumer<ServerApi> ...
method withActiveClientAndReturn (line 83) | public <T> Optional<T> withActiveClientAndReturn(String connectionId, ...
method withActiveClientFlatMapOptionalAndReturn (line 87) | public <T> Optional<T> withActiveClientFlatMapOptionalAndReturn(String...
method getValidClient (line 91) | private Optional<SonarQubeClient> getValidClient(String connectionId) {
method createSonarQubeClient (line 96) | private Optional<SonarQubeClient> createSonarQubeClient(String connect...
method isConnectionActive (line 115) | private static boolean isConnectionActive(String connectionId, SonarQu...
method getForTransientConnection (line 123) | public ServerApi getForTransientConnection(Either<TransientSonarQubeCo...
method getValidWebSocketClient (line 141) | public Optional<WebSocketClient> getValidWebSocketClient(String connec...
method checkIfBearerIsSupported (line 153) | private boolean checkIfBearerIsSupported(EndpointParams params) {
method getValidCredentialsFromClient (line 164) | private Optional<Either<TokenDto, UsernamePasswordDto>> getValidCreden...
method validateCredentials (line 170) | private static Optional<Either<TokenDto, UsernamePasswordDto>> validat...
method isNullOrEmpty (line 198) | private static boolean isNullOrEmpty(@Nullable String s) {
method onConnectionRemoved (line 202) | @EventListener
method onConnectionUpdated (line 207) | @EventListener
method onCredentialsChanged (line 212) | @EventListener
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/TextSearchIndex.java
class TextSearchIndex (line 47) | public class TextSearchIndex<T> {
method TextSearchIndex (line 57) | public TextSearchIndex() {
method size (line 62) | public int size() {
method isEmpty (line 66) | public boolean isEmpty() {
method index (line 70) | public void index(T obj, String text) {
method search (line 90) | public Map<T, Double> search(String query) {
method matchPositional (line 116) | private List<SearchResult> matchPositional(List<SearchResult> previous...
method prepareResult (line 135) | private Map<T, Double> prepareResult(List<SearchResult> entries) {
method searchTerm (line 155) | private List<SearchResult> searchTerm(String termPrefix) {
method addToDictionary (line 172) | private void addToDictionary(String token, int tokenIndex, T obj) {
method tokenize (line 177) | private List<String> tokenize(String text) {
method getAll (line 190) | public List<T> getAll() {
class SearchResult (line 194) | private class SearchResult {
method SearchResult (line 199) | public SearchResult(double score, T obj, int lastIdx) {
class DictEntry (line 206) | private class DictEntry {
method DictEntry (line 210) | public DictEntry(T obj, int tokenIndex) {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/TokenGeneratorHelper.java
class TokenGeneratorHelper (line 36) | public class TokenGeneratorHelper {
method TokenGeneratorHelper (line 44) | public TokenGeneratorHelper(SonarLintRpcClient client, EmbeddedServer ...
method helpGenerateUserToken (line 52) | public HelpGenerateUserTokenResponse helpGenerateUserToken(String serv...
method getUserTokenGenerationRelativeUrlToOpen (line 65) | private String getUserTokenGenerationRelativeUrlToOpen(@Nullable HelpG...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/UserPaths.java
class UserPaths (line 31) | public class UserPaths {
method from (line 33) | public static UserPaths from(InitializeParams initializeParams) {
method computeUserHome (line 43) | static Path computeUserHome(@Nullable String clientUserHome) {
method createFolderIfNeeded (line 50) | private static void createFolderIfNeeded(Path path) {
method UserPaths (line 63) | private UserPaths(Path userHome, Path workDir, Path storageRoot, Strin...
method getUserHome (line 70) | public Path getUserHome() {
method getWorkDir (line 74) | public Path getWorkDir() {
method getStorageRoot (line 78) | public Path getStorageRoot() {
method getHomeIdeSpecificDir (line 82) | public Path getHomeIdeSpecificDir(String intermediateDir) {
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/VersionSoonUnsupportedHelper.java
class VersionSoonUnsupportedHelper (line 45) | public class VersionSoonUnsupportedHelper {
method VersionSoonUnsupportedHelper (line 59) | public VersionSoonUnsupportedHelper(SonarLintRpcClient client, Configu...
method configurationScopesAdded (line 69) | @EventListener
method bindingConfigChanged (line 75) | @EventListener
method checkIfSoonUnsupportedOncePerConnection (line 84) | private void checkIfSoonUnsupportedOncePerConnection(Set<String> confi...
method queueCheckIfSoonUnsupported (line 97) | private void queueCheckIfSoonUnsupported(String connectionId, String c...
method shutdown (line 125) | @PreDestroy
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/active/rules/ActiveRuleDetails.java
method ruleKey (line 51) | @Override
method severity (line 56) | @Override
method language (line 61) | @Override
method param (line 66) | @Override
method internalKey (line 71) | @Override
method templateRuleKey (line 77) | @Override
method qpKey (line 87) | @Override
method toString (line 92) | @Override
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/active/rules/ActiveRulesService.java
class ActiveRulesService (line 83) | public class ActiveRulesService {
method ActiveRulesService (line 101) | public ActiveRulesService(ConfigurationRepository configurationReposit...
method updateStandaloneRulesConfiguration (line 116) | public void updateStandaloneRulesConfiguration(Map<String, StandaloneR...
method getStandaloneRuleConfig (line 123) | public Map<String, StandaloneRuleConfigDto> getStandaloneRuleConfig() {
method getStandaloneRuleDescription (line 127) | public GetStandaloneRuleDescriptionResponse getStandaloneRuleDescripti...
method getStandaloneActiveRules (line 139) | public synchronized List<ActiveRuleDetails> getStandaloneActiveRules() {
method buildStandaloneActiveRules (line 146) | private List<ActiveRuleDetails> buildStandaloneActiveRules() {
method getConnectedActiveRules (line 182) | public List<ActiveRuleDetails> getConnectedActiveRules(Binding binding) {
method buildConnectedActiveRules (line 186) | private List<ActiveRuleDetails> buildConnectedActiveRules(Binding bind...
method buildActiveRule (line 233) | public ActiveRuleDetails buildActiveRule(SonarLintRuleDefinition ruleO...
method getEffectiveParams (line 243) | private static Map<String, String> getEffectiveParams(SonarLintRuleDef...
method shouldIncludeRuleForAnalysis (line 255) | private boolean shouldIncludeRuleForAnalysis(String connectionId, Sona...
method isHotspotTrackingPossible (line 260) | private boolean isHotspotTrackingPossible(String connectionId) {
method isExcludedByConfiguration (line 270) | private static Predicate<? super SonarLintRuleDefinition> isExcludedBy...
method isIncludedByConfiguration (line 285) | private static Predicate<? super SonarLintRuleDefinition> isIncludedBy...
method evictFor (line 300) | public void evictFor(String connectionId) {
method settingsChanged (line 307) | @EventListener
method onBindingUpdated (line 314) | @EventListener
method onAnalyzerConfigurationSynchronized (line 326) | @EventListener
method onServerEventReceived (line 332) | @EventListener
method updateStorage (line 345) | private void updateStorage(String connectionId, RuleSetChangedEvent ev...
method incorporate (line 352) | private static Map<String, RuleSet> incorporate(RuleSetChangedEvent ev...
method activate (line 359) | private static void activate(RuleSetChangedEvent.ActiveRule activatedR...
method deactivate (line 373) | private static void deactivate(String deactivatedRuleKey, Map<String, ...
method getEffectiveRuleDetails (line 388) | public EffectiveRuleDetailsDto getEffectiveRuleDetails(String configur...
method getActiveRuleDetails (line 394) | public RuleDetails getActiveRuleDetails(String configurationScopeId, S...
method evictStandalone (line 409) | public synchronized void evictStandalone() {
method getActiveRuleForBinding (line 414) | private RuleDetails getActiveRuleForBinding(String ruleKey, Binding bi...
method findServerActiveRuleInStorage (line 428) | private Optional<ServerActiveRule> findServerActiveRuleInStorage(Bindi...
method tryConvertDeprecatedKeys (line 442) | private ServerActiveRule tryConvertDeprecatedKeys(String connectionId,...
method hydrateDetailsWithServer (line 466) | private RuleDetails hydrateDetailsWithServer(String connectionId, Serv...
method fetchRuleFromServer (line 486) | private static ServerRule fetchRuleFromServer(String connectionId, Str...
method ruleDefinitionNotFound (line 490) | private static ResponseErrorException ruleDefinitionNotFound(String te...
method ruleNotFoundInPlugins (line 495) | @NotNull
method ruleNotFoundOnServer (line 502) | private static ResponseErrorException ruleNotFoundOnServer(String rule...
FILE: backend/core/src/main/java/org/sonarsource/sonarlint/core/active/rules/StandaloneRulesConfigurationChanged.java
class StandaloneRulesConfigu
Condensed preview — 1983 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,906K chars).
[
{
"path": ".gitattributes",
"chars": 12,
"preview": "*.pb binary\n"
},
{
"path": ".github/CODEOWNERS",
"chars": 65,
"preview": ".github/CODEOWNERS @SonarSource/remediation-ide-experience-squad\n"
},
{
"path": ".github/renovate.json",
"chars": 142,
"preview": "{\n \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n \"extends\": [\n \"github>SonarSource/renovate-conf"
},
{
"path": ".github/workflows/PullRequestClosed.yml",
"chars": 924,
"preview": "name: Pull Request Closed\n\non:\n pull_request:\n types: [closed]\n\njobs:\n PullRequestClosed_job:\n name: Pull Reques"
},
{
"path": ".github/workflows/PullRequestCreated.yml",
"chars": 1060,
"preview": "name: Pull Request Created\n\non:\n pull_request:\n types: [\"opened\"]\n\njobs:\n PullRequestCreated_job:\n name: Pull Re"
},
{
"path": ".github/workflows/RequestReview.yml",
"chars": 1015,
"preview": "name: Request review\n\non:\n pull_request:\n types: [\"review_requested\"]\n\njobs:\n RequestReview_job:\n name: Request "
},
{
"path": ".github/workflows/SubmitReview.yml",
"chars": 1028,
"preview": "name: Submit Review\n\non:\n pull_request_review:\n types: [submitted]\n\njobs:\n SubmitReview_job:\n name: Submit Revie"
},
{
"path": ".github/workflows/build.yml",
"chars": 12843,
"preview": "name: Build\non:\n push:\n branches:\n - master\n - branch-*\n - dogfood-*\n pull_request:\n merge_group:\n "
},
{
"path": ".github/workflows/full-release.yml",
"chars": 2173,
"preview": "name: Full release\n\non:\n workflow_dispatch:\n inputs:\n short-description:\n description: 'A short descript"
},
{
"path": ".github/workflows/notify-failure.yml",
"chars": 1373,
"preview": "name: Notify Failure\non:\n workflow_run:\n workflows: [ \"Build\" ]\n types:\n - completed\n branches:\n - m"
},
{
"path": ".github/workflows/releasability.yml",
"chars": 772,
"preview": "name: Releasability Status\non:\n workflow_run:\n workflows: [ \"Build\" ] # Name must match the name of the build"
},
{
"path": ".github/workflows/release.yml",
"chars": 833,
"preview": "name: sonar-release\n\non:\n workflow_dispatch:\n inputs:\n version:\n type: string\n description: Versi"
},
{
"path": ".github/workflows/shadow_scans.yml",
"chars": 1436,
"preview": "name: Shadow scans\non:\n schedule:\n # Run the workflow every day at 04:00 UTC\n - cron: '0 4 * * *'\n workflow_disp"
},
{
"path": ".gitignore",
"chars": 1002,
"preview": "# The following should be moved in related sub-directories\nserver/sonar-web/src/main/webapp/stylesheets/sonar-colorizer."
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 168,
"preview": "wrapperVersion=3.3.4\ndistributionType=only-script\ndistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/"
},
{
"path": ".sonarlint/connectedMode.json",
"chars": 141,
"preview": "{\n \"sonarQubeUri\": \"https://next.sonarqube.com/sonarqube\",\n \"projectKey\": \"org.sonarsource.sonarlint.core:sonarlin"
},
{
"path": "API_CHANGES.md",
"chars": 52573,
"preview": "# 10.48\n\n## New features\n\n* Add `label` to `org.sonarsource.sonarlint.core.rpc.protocol.backend.plugin.PluginStateDto`.\n"
},
{
"path": "LICENSE.txt",
"chars": 7652,
"preview": " GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007"
},
{
"path": "NOTICE.txt",
"chars": 169,
"preview": "SonarLint Core\nCopyright (C) SonarSource Sàrl\nmailto:info AT sonarsource DOT com\n\nThis product includes software develop"
},
{
"path": "README.md",
"chars": 2987,
"preview": "SonarLint Core\n==============\nThe core library to run SonarQube for IDE analysis (used by SonarQube for IDE Eclipse, Int"
},
{
"path": "SECURITY.md",
"chars": 1184,
"preview": "# Reporting Security Issues\n\nA mature software vulnerability treatment process is a cornerstone of a robust information "
},
{
"path": "backend/analysis-engine/pom.xml",
"chars": 3975,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocat"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisQueue.java",
"chars": 9081,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisScheduler.java",
"chars": 4924,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/SchedulerResetConfiguration.java",
"chars": 1413,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisConfiguration.java",
"chars": 5869,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisResults.java",
"chars": 2360,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisSchedulerConfiguration.java",
"chars": 3714,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFile.java",
"chars": 2863,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFileEdit.java",
"chars": 1324,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleFileEvent.java",
"chars": 1519,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleFileSystem.java",
"chars": 1134,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/ClientModuleInfo.java",
"chars": 1309,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/DefaultLocation.java",
"chars": 1790,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/Flow.java",
"chars": 1681,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/Issue.java",
"chars": 3603,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/IssueLocation.java",
"chars": 1147,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/QuickFix.java",
"chars": 1345,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/TextEdit.java",
"chars": 1280,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/TriggerType.java",
"chars": 1269,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/WithTextRange.java",
"chars": 2065,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/api/package-info.java",
"chars": 998,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/AnalyzeCommand.java",
"chars": 11327,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/Command.java",
"chars": 1637,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/NotifyModuleEventCommand.java",
"chars": 1729,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/ResetPluginsCommand.java",
"chars": 2395,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/UnregisterModuleCommand.java",
"chars": 1564,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/command/package-info.java",
"chars": 1002,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/ContainerLifespan.java",
"chars": 981,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisConfigurationProvider.java",
"chars": 1415,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisContainer.java",
"chars": 5244,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisSettings.java",
"chars": 1808,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisTempFolderProvider.java",
"chars": 2068,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/IssueListenerHolder.java",
"chars": 1334,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/SonarLintPathPattern.java",
"chars": 3028,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/AbstractFilePredicate.java",
"chars": 1806,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/AndPredicate.java",
"chars": 2896,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultFilePredicates.java",
"chars": 5412,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultTextPointer.java",
"chars": 2002,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultTextRange.java",
"chars": 2031,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FalsePredicate.java",
"chars": 1519,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FileExtensionPredicate.java",
"chars": 1895,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FileIndexer.java",
"chars": 5045,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FileMetadata.java",
"chars": 6359,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/FilenamePredicate.java",
"chars": 1434,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileBuilder.java",
"chars": 2841,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileIndex.java",
"chars": 2586,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/Language.java",
"chars": 1641,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/LanguageDetection.java",
"chars": 3949,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/LanguagePredicate.java",
"chars": 1264,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/NotPredicate.java",
"chars": 1309,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/OptimizedFilePredicate.java",
"chars": 2045,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/OptimizedFilePredicateAdapter.java",
"chars": 1670,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/OrPredicate.java",
"chars": 2146,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/PathPatternPredicate.java",
"chars": 1371,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/ProgressReport.java",
"chars": 2323,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintFileSystem.java",
"chars": 4215,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputDir.java",
"chars": 2207,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputFile.java",
"chars": 7776,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputProject.java",
"chars": 1320,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/StatusPredicate.java",
"chars": 1312,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/TruePredicate.java",
"chars": 1463,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/TypePredicate.java",
"chars": 1245,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/URIPredicate.java",
"chars": 1218,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/package-info.java",
"chars": 1133,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/DefaultIssueFilterChain.java",
"chars": 1571,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/IssueFilters.java",
"chars": 1877,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/SensorInputFileEdit.java",
"chars": 2390,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/SensorQuickFix.java",
"chars": 2301,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/SensorTextEdit.java",
"chars": 1609,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/TextRangeUtils.java",
"chars": 1350,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/EnforceIssuesFilter.java",
"chars": 3019,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/IgnoreIssuesFilter.java",
"chars": 2990,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/SonarLintNoSonarFilter.java",
"chars": 1389,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/package-info.java",
"chars": 1026,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/AbstractPatternInitializer.java",
"chars": 2899,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/BlockIssuePattern.java",
"chars": 1377,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueExclusionPatternInitializer.java",
"chars": 4343,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueInclusionPatternInitializer.java",
"chars": 1369,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssuePattern.java",
"chars": 2001,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/package-info.java",
"chars": 1034,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsLoader.java",
"chars": 4213,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsRegexpScanner.java",
"chars": 5598,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/LineRange.java",
"chars": 2282,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/package-info.java",
"chars": 1034,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/package-info.java",
"chars": 1019,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/package-info.java",
"chars": 1013,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorOptimizer.java",
"chars": 3405,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorsExecutor.java",
"chars": 7008,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SonarLintSensorStorage.java",
"chars": 7012,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/package-info.java",
"chars": 1020,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/AnalysisExtensionInstaller.java",
"chars": 3207,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalAnalysisContainer.java",
"chars": 3741,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalConfigurationProvider.java",
"chars": 1401,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalExtensionContainer.java",
"chars": 1473,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalSettings.java",
"chars": 1360,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalTempFolder.java",
"chars": 1186,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalTempFolderProvider.java",
"chars": 3830,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/ModuleRegistry.java",
"chars": 2953,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/global/package-info.java",
"chars": 1011,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/DefaultModuleFileEvent.java",
"chars": 1562,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleContainer.java",
"chars": 3639,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleFileEventNotifier.java",
"chars": 2186,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleInputFileBuilder.java",
"chars": 2838,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/module/package-info.java",
"chars": 1011,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/container/package-info.java",
"chars": 1004,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/package-info.java",
"chars": 994,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/ActiveRulesAdapter.java",
"chars": 3236,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultAnalysisError.java",
"chars": 2593,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultFilterableIssue.java",
"chars": 2959,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultFlow.java",
"chars": 1783,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorContext.java",
"chars": 6870,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorDescriptor.java",
"chars": 3327,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSonarLintIssue.java",
"chars": 8223,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSonarLintIssueLocation.java",
"chars": 3043,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultStorable.java",
"chars": 1801,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultTempFolder.java",
"chars": 3870,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/SonarLintModuleFileSystem.java",
"chars": 1932,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpFileLinesContext.java",
"chars": 1252,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpFileLinesContextFactory.java",
"chars": 1263,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCoverage.java",
"chars": 1456,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCpdTokens.java",
"chars": 1571,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewHighlighting.java",
"chars": 1677,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMeasure.java",
"chars": 1565,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMessageFormatting.java",
"chars": 1392,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSignificantCode.java",
"chars": 1390,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSymbolTable.java",
"chars": 1899,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/package-info.java",
"chars": 969,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/main/java/org/sonarsource/sonarlint/core/analysis/sonarapi/package-info.java",
"chars": 1003,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/AnalysisQueueTest.java",
"chars": 3215,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisConfigurationTests.java",
"chars": 7525,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/AnalysisSchedulerConfigurationTests.java",
"chars": 3763,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/ClientInputFileTests.java",
"chars": 2208,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/DefaultLocationTests.java",
"chars": 2275,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/api/IssueLocationTests.java",
"chars": 2263,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/command/AnalyzeCommandTest.java",
"chars": 3385,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisSettingsTest.java",
"chars": 2029,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/AnalysisTempFolderProviderTests.java",
"chars": 1935,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/SonarLintPathPatternTests.java",
"chars": 5288,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/DefaultFilePredicatesTests.java",
"chars": 9700,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileBuilderTests.java",
"chars": 4530,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/InputFileCacheTests.java",
"chars": 2184,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/LanguageDetectionTests.java",
"chars": 6863,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/ProgressReportTests.java",
"chars": 3038,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintFileSystemTests.java",
"chars": 5313,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputDirTests.java",
"chars": 2012,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/filesystem/SonarLintInputFileTests.java",
"chars": 5306,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/EnforceIssuesFilterTests.java",
"chars": 6233,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/IgnoreIssuesFilterTests.java",
"chars": 3147,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueExclusionPatternInitializerTests.java",
"chars": 6767,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssueInclusionPatternInitializerTests.java",
"chars": 2475,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/pattern/IssuePatternTests.java",
"chars": 2811,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsLoaderTests.java",
"chars": 4338,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/IssueExclusionsRegexpScannerTests.java",
"chars": 7349,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/issue/ignore/scanner/LineRangeTests.java",
"chars": 2285,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorOptimizerTests.java",
"chars": 5973,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SensorsExecutorTests.java",
"chars": 5256,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/analysis/sensor/SonarLintSensorStorageTests.java",
"chars": 5145,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/global/AnalysisExtensionInstallerTests.java",
"chars": 10154,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalSettingsTests.java",
"chars": 2213,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/global/GlobalTempFolderProviderTests.java",
"chars": 3192,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/container/module/ModuleInputFileBuilderTests.java",
"chars": 4343,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/mediumtests/AnalysisSchedulerMediumTests.java",
"chars": 15489,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultAnalysisErrorTests.java",
"chars": 3119,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultFilterableIssueTests.java",
"chars": 2151,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorContextTests.java",
"chars": 5304,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSensorDescriptorTests.java",
"chars": 2148,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultSonarLintIssueTests.java",
"chars": 9873,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/DefaultTempFolderTests.java",
"chars": 3794,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCoverageTests.java",
"chars": 1128,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewCpdTokensTests.java",
"chars": 1158,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewHighlightingTests.java",
"chars": 1157,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMeasureTests.java",
"chars": 1122,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewMessageFormattingTest.java",
"chars": 1449,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSignificantCodeTests.java",
"chars": 1136,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/org/sonarsource/sonarlint/core/analysis/sonarapi/noop/NoOpNewSymbolTableTests.java",
"chars": 1208,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/testutils/FileUtils.java",
"chars": 1362,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/testutils/InMemoryTestClientInputFile.java",
"chars": 2780,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/testutils/OnDiskTestClientInputFile.java",
"chars": 2661,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
},
{
"path": "backend/analysis-engine/src/test/java/testutils/TestClientInputFile.java",
"chars": 2474,
"preview": "/*\n * SonarLint Core - Analysis Engine\n * Copyright (C) SonarSource Sàrl\n * mailto:info AT sonarsource DOT com\n *\n * Thi"
}
]
// ... and 1783 more files (download for full content)
About this extraction
This page contains the full source code of the SonarSource/sonarlint-core GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1983 files (7.1 MB), approximately 2.0M tokens, and a symbol index with 11309 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.