aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-scanner-engine
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2019-06-19 13:56:51 -0500
committerSonarTech <sonartech@sonarsource.com>2019-07-12 20:21:14 +0200
commit93dc9770902dc7e168869d88b5ad731bfc0bedd9 (patch)
tree97ba885661d5cd9a2115fe212df31bacec9f9947 /sonar-scanner-engine
parent7c7d9b6b90244d2c974207862071caccdb2c9bb5 (diff)
downloadsonarqube-93dc9770902dc7e168869d88b5ad731bfc0bedd9.tar.gz
sonarqube-93dc9770902dc7e168869d88b5ad731bfc0bedd9.zip
Extract implementation from plugin API and create new module sonar-plugin-api-impl
Diffstat (limited to 'sonar-scanner-engine')
-rw-r--r--sonar-scanner-engine/build.gradle2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/DefaultFileLinesContext.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/analysis/AnalysisTempFolderProvider.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/DefaultScannerWsClient.java151
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ExtensionInstaller.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalContainer.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/PluginFiles.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerPluginInstaller.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClient.java129
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClientProvider.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdSettings.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensor.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/index/SonarCpdBlockIndex.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultCoverageBlock.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestCase.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestable.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestPlanBuilder.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestableBuilder.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/AbstractProjectOrModule.java161
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultFileSystem.java246
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultIndexedFile.java162
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputComponent.java72
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputDir.java122
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputFile.java440
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputModule.java81
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputProject.java39
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextPointer.java74
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextRange.java74
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/FileMetadata.java162
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/InputModuleHierarchy.java1
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/TestInputFileBuilder.java280
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/CharHandler.java35
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/FileHashComputer.java81
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/IntArrayList.java117
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineCounter.java82
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineHashComputer.java81
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineOffsetCounter.java74
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/package-info.java24
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbsolutePathPredicate.java63
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbstractFilePredicate.java57
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AndPredicate.java103
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/DefaultFilePredicates.java214
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FalsePredicate.java45
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FileExtensionPredicate.java62
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FilenamePredicate.java45
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/LanguagePredicate.java38
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/NotPredicate.java50
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OperatorPredicate.java32
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicate.java49
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicateAdapter.java46
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OrPredicate.java76
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/PathPatternPredicate.java42
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/RelativePathPredicate.java69
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/StatusPredicate.java43
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TruePredicate.java44
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TypePredicate.java40
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/URIPredicate.java65
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/AbstractDefaultIssue.java122
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultFilterableIssue.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssue.java93
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssueLocation.java92
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultNoSonarFilter.java32
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssueFilters.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilter.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilter.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScanner.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/AnalysisResult.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/platform/DefaultServer.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/DefaultPostJobDescriptor.java56
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobOptimizer.java1
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobWrapper.java1
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ActiveRulesPublisher.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/AnalysisContextReportPublisher.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ChangedLinesPublisher.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/MetadataPublisher.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java8
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/SourcePublisher.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/report/TestExecutionPublisher.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoader.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoader.java8
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultQualityProfileLoader.java12
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/ProjectRepositories.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/AbstractSettingsLoader.java8
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoader.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoader.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesBuilder.java49
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesLoader.java1
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesProvider.java3
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRule.java101
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRules.java83
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRulesLoader.java13
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRule.java112
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRuleParam.java48
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRules.java89
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRulesLoader.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/LoadedActiveRule.java111
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewActiveRule.java130
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRule.java92
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRuleParam.java36
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesBuilder.java50
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesProvider.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/DefaultInputModuleHierarchy.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputModuleHierarchyProvider.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputProjectProvider.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfigurationProvider.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleIndexer.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfigurationProvider.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectLock.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectReactorBuilder.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectScanContainer.java8
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ScanProperties.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/WorkDirectoriesInitializer.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractCoverageAndDuplicationExclusions.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractExclusionFilters.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicates.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultModuleFileSystem.java7
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultProjectFileSystem.java7
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java10
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/InputComponentStore.java8
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/MetadataGenerator.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleCoverageAndDuplicationExclusions.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStore.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectCoverageAndDuplicationExclusions.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectFileIndexer.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/StatusDetection.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/DefaultBlameOutput.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmPublisher.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorOptimizer.java1
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorWrapper.java1
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAdHocRule.java126
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAnalysisError.java87
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCoverage.java157
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCpdTokens.java136
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultExternalIssue.java135
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultHighlighting.java126
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultMeasure.java139
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorDescriptor.java123
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorStorage.java12
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSignificantCode.java75
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultStorable.java57
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSymbolTable.java148
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/InMemorySensorStorage.java146
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorsExecutor.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java14
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SensorContextTester.java399
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SyntaxHighlightingRule.java53
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/source/ZeroCoverageSensor.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/util/ScannerUtils.java73
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/DefaultFileLinesContextTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/ProjectInfoTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/WsTestUtil.java16
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/analysis/AnalysisTempFolderProviderTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/DefaultScannerWsClientTest.java (renamed from sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientTest.java)18
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ExtensionInstallerTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ModuleSensorExtensionDictionnaryTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PluginFilesTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PostJobExtensionDictionnaryTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerPluginInstallerTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientProviderTest.java8
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/ci/CiConfigurationProviderTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdExecutorTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdSettingsTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensorTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultFileSystemTest.java139
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputDirTest.java64
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputFileTest.java315
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputModuleTest.java110
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputProjectTest.java86
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/FileMetadataTest.java308
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/TestInputFileBuilderTest.java72
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/charhandler/IntArrayListTest.java55
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/AndPredicateTest.java76
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/DefaultFilePredicatesTest.java245
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FileExtensionPredicateTest.java72
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FilenamePredicateTest.java63
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/OrPredicateTest.java66
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/RelativePathPredicateTest.java53
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageReportParserTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionReportParserTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/DefaultFilterableIssueTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java16
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilterTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilterTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueExclusionPatternInitializerTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueInclusionPatternInitializerTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScannerTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/ScannerMediumTester.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/BranchMediumTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/DeprecatedBranchMediumTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/ChecksMediumTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/IssuesMediumTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleCoverageAndDuplicationExclusionsTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleSensorsExecutorTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ProjectCoverageExclusionsTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java12
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/PostJobOptimizerTest.java3
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ActiveRulesPublisherTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/AnalysisContextReportPublisherTest.java62
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ChangedLinesPublisherTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/MetadataPublisherTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ReportPublisherTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/report/SourcePublisherTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoaderTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java8
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultQualityProfileLoaderTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoaderTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoaderTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesBuilderTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesProviderTest.java1
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultActiveRulesLoaderTest.java7
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesLoaderTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesTest.java73
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/NewActiveRuleTest.java87
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/QProfileVerifierTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/RulesBuilderTest.java112
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/DefaultInputModuleHierarchyTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleIndexerTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectLockTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ScanPropertiesTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/WorkDirectoriesInitializerTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicatesTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/InputComponentStoreTest.java8
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java3
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/MetadataGeneratorTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStoreTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/StatusDetectionTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/DefaultBlameOutputTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java2
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAdHocRuleTest.java156
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAnalysisErrorTest.java114
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultCpdTokensTest.java170
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultExternalIssueTest.java160
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultHighlightingTest.java126
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueLocationTest.java108
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueTest.java159
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultMeasureTest.java92
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorDescriptorTest.java51
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorStorageTest.java21
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSignificantCodeTest.java82
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSymbolTableTest.java73
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/InMemorySensorStorageTest.java59
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java10
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorOptimizerTest.java11
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/SensorContextTesterTest.java375
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/util/ScannerUtilsTest.java1
-rw-r--r--sonar-scanner-engine/src/test/resources/org/sonar/scanner/fs/glyphicons-halflings-regular.woffbin16448 -> 0 bytes
263 files changed, 518 insertions, 11098 deletions
diff --git a/sonar-scanner-engine/build.gradle b/sonar-scanner-engine/build.gradle
index 68880e4ae0a..65821d1555a 100644
--- a/sonar-scanner-engine/build.gradle
+++ b/sonar-scanner-engine/build.gradle
@@ -30,6 +30,7 @@ dependencies {
compile project(':sonar-scanner-protocol')
compile project(':sonar-ws')
compile project(':sonar-duplications')
+ compile project(':sonar-plugin-api-impl')
runtime project(path: ':sonar-plugin-api', configuration: 'shadow')
compileOnly project(path: ':sonar-plugin-api')
@@ -44,7 +45,6 @@ dependencies {
testCompile 'org.mockito:mockito-core'
testCompile project(':plugins:sonar-xoo-plugin')
testCompile project(':sonar-plugin-api').sourceSets.test.output
- testCompile project(':server:sonar-server')
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/DefaultFileLinesContext.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/DefaultFileLinesContext.java
index be5b715891f..e0481cfb52d 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/DefaultFileLinesContext.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/DefaultFileLinesContext.java
@@ -28,7 +28,7 @@ import java.util.Map.Entry;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.sensor.DefaultMeasure;
+import org.sonar.api.impl.sensor.DefaultMeasure;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.FileLinesContext;
import org.sonar.api.utils.KeyValueFormat;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/analysis/AnalysisTempFolderProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/analysis/AnalysisTempFolderProvider.java
index dee0cc79aa7..8848449b2f3 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/analysis/AnalysisTempFolderProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/analysis/AnalysisTempFolderProvider.java
@@ -25,9 +25,9 @@ import java.nio.file.Path;
import org.picocontainer.ComponentLifecycle;
import org.picocontainer.PicoContainer;
import org.picocontainer.injectors.ProviderAdapter;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.utils.DefaultTempFolder;
import org.sonar.api.utils.TempFolder;
-import org.sonar.api.utils.internal.DefaultTempFolder;
-import org.sonar.scanner.fs.DefaultInputProject;
public class AnalysisTempFolderProvider extends ProviderAdapter implements ComponentLifecycle<TempFolder> {
static final String TMP_NAME = ".sonartmp";
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/DefaultScannerWsClient.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/DefaultScannerWsClient.java
new file mode 100644
index 00000000000..2cf094ee807
--- /dev/null
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/DefaultScannerWsClient.java
@@ -0,0 +1,151 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2019 SonarSource SA
+ * 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.sonar.scanner.bootstrap;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.utils.MessageException;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
+import org.sonar.api.utils.log.Profiler;
+import org.sonarqube.ws.client.HttpException;
+import org.sonarqube.ws.client.WsClient;
+import org.sonarqube.ws.client.WsConnector;
+import org.sonarqube.ws.client.WsRequest;
+import org.sonarqube.ws.client.WsResponse;
+
+import static java.lang.String.format;
+import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
+import static java.net.HttpURLConnection.HTTP_FORBIDDEN;
+import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
+import static org.sonar.api.utils.Preconditions.checkState;
+
+public class DefaultScannerWsClient implements ScannerWsClient {
+ private static final int MAX_ERROR_MSG_LEN = 128;
+ private static final Logger LOG = Loggers.get(DefaultScannerWsClient.class);
+
+ private final WsClient target;
+ private final boolean hasCredentials;
+ private final GlobalAnalysisMode globalMode;
+
+ public DefaultScannerWsClient(WsClient target, boolean hasCredentials, GlobalAnalysisMode globalMode) {
+ this.target = target;
+ this.hasCredentials = hasCredentials;
+ this.globalMode = globalMode;
+ }
+
+ /**
+ * If an exception is not thrown, the response needs to be closed by either calling close() directly, or closing the
+ * body content's stream/reader.
+ *
+ * @throws IllegalStateException if the request could not be executed due to a connectivity problem or timeout. Because networks can
+ * fail during an exchange, it is possible that the remote server accepted the request before the failure
+ * @throws MessageException if there was a problem with authentication or if a error message was parsed from the response.
+ * @throws HttpException if the response code is not in range [200..300). Consider using {@link #createErrorMessage(HttpException)} to create more relevant messages for the users.
+ */
+ public WsResponse call(WsRequest request) {
+ checkState(!globalMode.isMediumTest(), "No WS call should be made in medium test mode");
+ Profiler profiler = Profiler.createIfDebug(LOG).start();
+ WsResponse response = target.wsConnector().call(request);
+ profiler.stopDebug(format("%s %d %s", request.getMethod(), response.code(), response.requestUrl()));
+ failIfUnauthorized(response);
+ return response;
+ }
+
+ public String baseUrl() {
+ return target.wsConnector().baseUrl();
+ }
+
+ WsConnector wsConnector() {
+ return target.wsConnector();
+ }
+
+ private void failIfUnauthorized(WsResponse response) {
+ int code = response.code();
+ if (code == HTTP_UNAUTHORIZED) {
+ response.close();
+ if (hasCredentials) {
+ // credentials are not valid
+ throw MessageException.of(format("Not authorized. Please check the properties %s and %s.",
+ CoreProperties.LOGIN, CoreProperties.PASSWORD));
+ }
+ // not authenticated - see https://jira.sonarsource.com/browse/SONAR-4048
+ throw MessageException.of(format("Not authorized. Analyzing this project requires to be authenticated. " +
+ "Please provide the values of the properties %s and %s.", CoreProperties.LOGIN, CoreProperties.PASSWORD));
+
+ }
+ if (code == HTTP_FORBIDDEN) {
+ throw MessageException.of("You're not authorized to run analysis. Please contact the project administrator.");
+ }
+ if (code == HTTP_BAD_REQUEST) {
+ String jsonMsg = tryParseAsJsonError(response.content());
+ if (jsonMsg != null) {
+ throw MessageException.of(jsonMsg);
+ }
+ }
+
+ // if failed, throws an HttpException
+ response.failIfNotSuccessful();
+ }
+
+ /**
+ * Tries to form a short and relevant error message from the exception, to be displayed in the console.
+ */
+ public static String createErrorMessage(HttpException exception) {
+ String json = tryParseAsJsonError(exception.content());
+ if (json != null) {
+ return json;
+ }
+
+ String msg = "HTTP code " + exception.code();
+ if (isHtml(exception.content())) {
+ return msg;
+ }
+
+ return msg + ": " + StringUtils.left(exception.content(), MAX_ERROR_MSG_LEN);
+ }
+
+ @CheckForNull
+ private static String tryParseAsJsonError(String responseContent) {
+ try {
+ JsonParser parser = new JsonParser();
+ JsonObject obj = parser.parse(responseContent).getAsJsonObject();
+ JsonArray errors = obj.getAsJsonArray("errors");
+ List<String> errorMessages = new ArrayList<>();
+ for (JsonElement e : errors) {
+ errorMessages.add(e.getAsJsonObject().get("msg").getAsString());
+ }
+ return String.join(", ", errorMessages);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ private static boolean isHtml(String responseContent) {
+ return StringUtils.stripToEmpty(responseContent).startsWith("<!DOCTYPE html>");
+ }
+}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ExtensionInstaller.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ExtensionInstaller.java
index cf39ff12cdf..7c93cfa4ce4 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ExtensionInstaller.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ExtensionInstaller.java
@@ -25,7 +25,7 @@ import org.sonar.api.ExtensionProvider;
import org.sonar.api.Plugin;
import org.sonar.api.SonarRuntime;
import org.sonar.api.config.Configuration;
-import org.sonar.api.internal.PluginContextImpl;
+import org.sonar.api.impl.context.PluginContextImpl;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalContainer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalContainer.java
index 87f69aad2a8..5903adcbf67 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalContainer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalContainer.java
@@ -29,8 +29,8 @@ import org.sonar.api.SonarEdition;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.SonarQubeVersion;
import org.sonar.api.SonarRuntime;
-import org.sonar.api.internal.MetadataLoader;
-import org.sonar.api.internal.SonarRuntimeImpl;
+import org.sonar.api.impl.context.MetadataLoader;
+import org.sonar.api.impl.context.SonarRuntimeImpl;
import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.UriReader;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java
index ad49d737425..33ff6234a22 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/GlobalTempFolderProvider.java
@@ -31,9 +31,9 @@ import org.picocontainer.ComponentLifecycle;
import org.picocontainer.PicoContainer;
import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.CoreProperties;
+import org.sonar.api.impl.utils.DefaultTempFolder;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.TempFolder;
-import org.sonar.api.utils.internal.DefaultTempFolder;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/PluginFiles.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/PluginFiles.java
index e6b12f2cf85..406e82b0671 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/PluginFiles.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/PluginFiles.java
@@ -52,11 +52,11 @@ public class PluginFiles {
private static final String PACK200 = "pack200";
private static final String UNCOMPRESSED_MD5_HEADER = "Sonar-UncompressedMD5";
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
private final File cacheDir;
private final File tempDir;
- public PluginFiles(ScannerWsClient wsClient, Configuration configuration) {
+ public PluginFiles(DefaultScannerWsClient wsClient, Configuration configuration) {
this.wsClient = wsClient;
File home = locateHomeDir(configuration);
this.cacheDir = mkdir(new File(home, "cache"), "user cache");
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerPluginInstaller.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerPluginInstaller.java
index db02b02d440..d80a52a26e9 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerPluginInstaller.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerPluginInstaller.java
@@ -45,9 +45,9 @@ public class ScannerPluginInstaller implements PluginInstaller {
private static final String PLUGINS_WS_URL = "api/plugins/installed";
private final PluginFiles pluginFiles;
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
- public ScannerPluginInstaller(PluginFiles pluginFiles, ScannerWsClient wsClient) {
+ public ScannerPluginInstaller(PluginFiles pluginFiles, DefaultScannerWsClient wsClient) {
this.pluginFiles = pluginFiles;
this.wsClient = wsClient;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClient.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClient.java
index e04de9c05d9..3d13b6e3139 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClient.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClient.java
@@ -19,136 +19,13 @@
*/
package org.sonar.scanner.bootstrap;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.CheckForNull;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.utils.MessageException;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-import org.sonar.api.utils.log.Profiler;
-import org.sonarqube.ws.client.HttpException;
-import org.sonarqube.ws.client.WsClient;
-import org.sonarqube.ws.client.WsConnector;
import org.sonarqube.ws.client.WsRequest;
import org.sonarqube.ws.client.WsResponse;
-import static java.lang.String.format;
-import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
-import static java.net.HttpURLConnection.HTTP_FORBIDDEN;
-import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
+public interface ScannerWsClient {
+ WsResponse call(WsRequest request);
-public class ScannerWsClient {
- private static final int MAX_ERROR_MSG_LEN = 128;
- private static final Logger LOG = Loggers.get(ScannerWsClient.class);
+ String baseUrl();
- private final WsClient target;
- private final boolean hasCredentials;
- private final GlobalAnalysisMode globalMode;
- public ScannerWsClient(WsClient target, boolean hasCredentials, GlobalAnalysisMode globalMode) {
- this.target = target;
- this.hasCredentials = hasCredentials;
- this.globalMode = globalMode;
- }
-
- /**
- * If an exception is not thrown, the response needs to be closed by either calling close() directly, or closing the
- * body content's stream/reader.
- *
- * @throws IllegalStateException if the request could not be executed due to a connectivity problem or timeout. Because networks can
- * fail during an exchange, it is possible that the remote server accepted the request before the failure
- * @throws MessageException if there was a problem with authentication or if a error message was parsed from the response.
- * @throws HttpException if the response code is not in range [200..300). Consider using {@link #createErrorMessage(HttpException)} to create more relevant messages for the users.
- */
- public WsResponse call(WsRequest request) {
- Preconditions.checkState(!globalMode.isMediumTest(), "No WS call should be made in medium test mode");
- Profiler profiler = Profiler.createIfDebug(LOG).start();
- WsResponse response = target.wsConnector().call(request);
- profiler.stopDebug(format("%s %d %s", request.getMethod(), response.code(), response.requestUrl()));
- failIfUnauthorized(response);
- return response;
- }
-
- public String baseUrl() {
- return target.wsConnector().baseUrl();
- }
-
- @VisibleForTesting
- WsConnector wsConnector() {
- return target.wsConnector();
- }
-
- private void failIfUnauthorized(WsResponse response) {
- int code = response.code();
- if (code == HTTP_UNAUTHORIZED) {
- response.close();
- if (hasCredentials) {
- // credentials are not valid
- throw MessageException.of(format("Not authorized. Please check the properties %s and %s.",
- CoreProperties.LOGIN, CoreProperties.PASSWORD));
- }
- // not authenticated - see https://jira.sonarsource.com/browse/SONAR-4048
- throw MessageException.of(format("Not authorized. Analyzing this project requires to be authenticated. " +
- "Please provide the values of the properties %s and %s.", CoreProperties.LOGIN, CoreProperties.PASSWORD));
-
- }
- if (code == HTTP_FORBIDDEN) {
- throw MessageException.of("You're not authorized to run analysis. Please contact the project administrator.");
- }
- if (code == HTTP_BAD_REQUEST) {
- String jsonMsg = tryParseAsJsonError(response.content());
- if (jsonMsg != null) {
- throw MessageException.of(jsonMsg);
- }
- }
-
- // if failed, throws an HttpException
- response.failIfNotSuccessful();
- }
-
- /**
- * Tries to form a short and relevant error message from the exception, to be displayed in the console.
- */
- public static String createErrorMessage(HttpException exception) {
- String json = tryParseAsJsonError(exception.content());
- if (json != null) {
- return json;
- }
-
- String msg = "HTTP code " + exception.code();
- if (isHtml(exception.content())) {
- return msg;
- }
-
- return msg + ": " + StringUtils.left(exception.content(), MAX_ERROR_MSG_LEN);
- }
-
- @CheckForNull
- private static String tryParseAsJsonError(String responseContent) {
- try {
- JsonParser parser = new JsonParser();
- JsonObject obj = parser.parse(responseContent).getAsJsonObject();
- JsonArray errors = obj.getAsJsonArray("errors");
- List<String> errorMessages = new ArrayList<>();
- for (JsonElement e : errors) {
- errorMessages.add(e.getAsJsonObject().get("msg").getAsString());
- }
- return Joiner.on(", ").join(errorMessages);
- } catch (Exception e) {
- return null;
- }
- }
-
- private static boolean isHtml(String responseContent) {
- return StringUtils.stripToEmpty(responseContent).startsWith("<!DOCTYPE html>");
- }
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClientProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClientProvider.java
index 7f619482ab1..2161973c494 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClientProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/bootstrap/ScannerWsClientProvider.java
@@ -36,9 +36,9 @@ public class ScannerWsClientProvider extends ProviderAdapter {
static final String READ_TIMEOUT_SEC_PROPERTY = "sonar.ws.timeout";
static final int DEFAULT_READ_TIMEOUT_SEC = 60;
- private ScannerWsClient wsClient;
+ private DefaultScannerWsClient wsClient;
- public synchronized ScannerWsClient provide(final RawScannerProperties scannerProps,
+ public synchronized DefaultScannerWsClient provide(final RawScannerProperties scannerProps,
final EnvironmentInformation env, GlobalAnalysisMode globalMode, System2 system) {
if (wsClient == null) {
String url = defaultIfBlank(scannerProps.property("sonar.host.url"), CoreProperties.SERVER_BASE_URL_DEFAULT_VALUE);
@@ -60,7 +60,7 @@ public class ScannerWsClientProvider extends ProviderAdapter {
connectorBuilder.proxyCredentials(proxyUser, System.getProperty("http.proxyPassword"));
}
- wsClient = new ScannerWsClient(WsClientFactories.getDefault().newClient(connectorBuilder.build()), login != null, globalMode);
+ wsClient = new DefaultScannerWsClient(WsClientFactories.getDefault().newClient(connectorBuilder.build()), login != null, globalMode);
}
return wsClient;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java
index d57b46c7994..8c392cfed46 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/config/DefaultConfiguration.java
@@ -34,7 +34,7 @@ import org.sonar.api.utils.log.Loggers;
import static java.util.Objects.requireNonNull;
import static org.apache.commons.lang.StringUtils.trim;
-import static org.sonar.api.config.internal.MultivalueProperty.parseAsCsv;
+import static org.sonar.api.impl.config.MultivalueProperty.parseAsCsv;
@Immutable
public abstract class DefaultConfiguration implements Configuration {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java
index c5c1112317d..74684a0019b 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdExecutor.java
@@ -42,8 +42,8 @@ import org.sonar.duplications.index.CloneGroup;
import org.sonar.duplications.index.ClonePart;
import org.sonar.duplications.index.PackedMemoryCloneIndex.ResourceBlocks;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
-import org.sonar.scanner.fs.DefaultInputComponent;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputComponent;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Duplicate;
import org.sonar.scanner.protocol.output.ScannerReport.Duplication;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdSettings.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdSettings.java
index f40e5d107bd..82ee99a37ee 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdSettings.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/CpdSettings.java
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties;
import org.sonar.api.config.Configuration;
import org.sonar.duplications.block.BlockChunker;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
public class CpdSettings {
private final Configuration settings;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensor.java
index a66df96bbed..69645b6c05d 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensor.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensor.java
@@ -43,7 +43,7 @@ import org.sonar.duplications.statement.Statement;
import org.sonar.duplications.statement.StatementChunker;
import org.sonar.duplications.token.TokenChunker;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
/**
* Special case for Java that use a dedicated block indexer.
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/index/SonarCpdBlockIndex.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/index/SonarCpdBlockIndex.java
index 645d9fab4b1..44b419f26ff 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/index/SonarCpdBlockIndex.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/cpd/index/SonarCpdBlockIndex.java
@@ -34,7 +34,7 @@ import org.sonar.duplications.index.CloneIndex;
import org.sonar.duplications.index.PackedMemoryCloneIndex;
import org.sonar.duplications.index.PackedMemoryCloneIndex.ResourceBlocks;
import org.sonar.scanner.cpd.CpdSettings;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.FileStructure;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.report.ReportPublisher;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultCoverageBlock.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultCoverageBlock.java
index 364544377ed..be9e3686cdf 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultCoverageBlock.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultCoverageBlock.java
@@ -23,7 +23,7 @@ import java.util.List;
import org.sonar.api.test.CoverageBlock;
import org.sonar.api.test.TestCase;
import org.sonar.api.test.Testable;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
public class DefaultCoverageBlock implements CoverageBlock {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestCase.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestCase.java
index 960a6cf03b5..74113b9ed68 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestCase.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestCase.java
@@ -32,7 +32,7 @@ import org.sonar.api.test.TestPlan;
import org.sonar.api.test.Testable;
import org.sonar.api.test.exception.CoverageAlreadyExistsException;
import org.sonar.api.test.exception.IllegalDurationException;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
public class DefaultTestCase implements MutableTestCase {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestable.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestable.java
index 20a0abfec50..5219368da91 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestable.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/DefaultTestable.java
@@ -25,7 +25,7 @@ import java.util.SortedSet;
import org.sonar.api.test.CoverageBlock;
import org.sonar.api.test.MutableTestable;
import org.sonar.api.test.TestCase;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
public class DefaultTestable implements MutableTestable {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestPlanBuilder.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestPlanBuilder.java
index 615ebd2f5cf..c4c52865907 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestPlanBuilder.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestPlanBuilder.java
@@ -27,7 +27,7 @@ import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.test.MutableTestPlan;
import org.sonar.scanner.deprecated.perspectives.PerspectiveBuilder;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
public class TestPlanBuilder extends PerspectiveBuilder<MutableTestPlan> {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestableBuilder.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestableBuilder.java
index 84f74e12ff5..4498f0b4d93 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestableBuilder.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/deprecated/test/TestableBuilder.java
@@ -25,7 +25,7 @@ import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.test.MutableTestable;
import org.sonar.scanner.deprecated.perspectives.PerspectiveBuilder;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
public class TestableBuilder extends PerspectiveBuilder<MutableTestable> {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/AbstractProjectOrModule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/AbstractProjectOrModule.java
deleted file mode 100644
index 9fc2d130f4a..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/AbstractProjectOrModule.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.CheckForNull;
-import javax.annotation.concurrent.Immutable;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.SystemUtils;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-
-@Immutable
-public abstract class AbstractProjectOrModule extends DefaultInputComponent {
- private static final Logger LOGGER = Loggers.get(AbstractProjectOrModule.class);
- private final Path baseDir;
- private final Path workDir;
- private final String name;
- private final String originalName;
- private final String description;
- private final String keyWithBranch;
- private final String branch;
- private final Map<String, String> properties;
-
- private final String key;
- private final ProjectDefinition definition;
- private final Charset encoding;
-
- public AbstractProjectOrModule(ProjectDefinition definition, int scannerComponentId) {
- super(scannerComponentId);
- this.baseDir = initBaseDir(definition);
- this.workDir = initWorkingDir(definition);
- this.name = definition.getName();
- this.originalName = definition.getOriginalName();
- this.description = definition.getDescription();
- this.keyWithBranch = definition.getKeyWithBranch();
- this.branch = definition.getBranch();
- this.properties = Collections.unmodifiableMap(new HashMap<>(definition.properties()));
-
- this.definition = definition;
- this.key = definition.getKey();
- this.encoding = initEncoding(definition);
- }
-
- private static Charset initEncoding(ProjectDefinition module) {
- String encodingStr = module.properties().get(CoreProperties.ENCODING_PROPERTY);
- Charset result;
- if (StringUtils.isNotEmpty(encodingStr)) {
- result = Charset.forName(StringUtils.trim(encodingStr));
- } else {
- result = Charset.defaultCharset();
- }
- return result;
- }
-
- private static Path initBaseDir(ProjectDefinition module) {
- Path result;
- try {
- result = module.getBaseDir().toPath().toRealPath(LinkOption.NOFOLLOW_LINKS);
- } catch (IOException e) {
- throw new IllegalStateException("Unable to resolve module baseDir", e);
- }
- return result;
- }
-
- private static Path initWorkingDir(ProjectDefinition module) {
- File workingDirAsFile = module.getWorkDir();
- Path workingDir = workingDirAsFile.getAbsoluteFile().toPath().normalize();
- if (SystemUtils.IS_OS_WINDOWS) {
- try {
- Files.createDirectories(workingDir);
- Files.setAttribute(workingDir, "dos:hidden", true, LinkOption.NOFOLLOW_LINKS);
- } catch (IOException e) {
- LOGGER.warn("Failed to set working directory hidden: {}", e.getMessage());
- }
- }
- return workingDir;
- }
-
- /**
- * Module key without branch
- */
- @Override
- public String key() {
- return key;
- }
-
- @Override
- public boolean isFile() {
- return false;
- }
-
- public ProjectDefinition definition() {
- return definition;
- }
-
- public Path getBaseDir() {
- return baseDir;
- }
-
- public Path getWorkDir() {
- return workDir;
- }
-
- public String getKeyWithBranch() {
- return keyWithBranch;
- }
-
- @CheckForNull
- public String getBranch() {
- return branch;
- }
-
- public Map<String, String> properties() {
- return properties;
- }
-
- @CheckForNull
- public String getOriginalName() {
- return originalName;
- }
-
- public String getName() {
- return name;
- }
-
- public String getDescription() {
- return description;
- }
-
- public Charset getEncoding() {
- return encoding;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultFileSystem.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultFileSystem.java
deleted file mode 100644
index 1c1729634e1..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultFileSystem.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.stream.StreamSupport;
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.FilePredicates;
-import org.sonar.api.batch.fs.FileSystem;
-import org.sonar.api.batch.fs.InputDir;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.scan.filesystem.PathResolver;
-import org.sonar.api.utils.PathUtils;
-import org.sonar.scanner.fs.predicates.DefaultFilePredicates;
-import org.sonar.scanner.fs.predicates.FileExtensionPredicate;
-import org.sonar.scanner.fs.predicates.OptimizedFilePredicateAdapter;
-
-/**
- * @since 4.2
- */
-public class DefaultFileSystem implements FileSystem {
-
- private final Cache cache;
- private final Path baseDir;
- private Path workDir;
- private Charset encoding;
- protected final FilePredicates predicates;
-
- /**
- * Only for testing
- */
- public DefaultFileSystem(Path baseDir) {
- this(baseDir, new MapCache());
- }
-
- /**
- * Only for testing
- */
- public DefaultFileSystem(File baseDir) {
- this(baseDir.toPath(), new MapCache());
- }
-
- protected DefaultFileSystem(Path baseDir, Cache cache) {
- this.baseDir = baseDir;
- this.cache = cache;
- this.predicates = new DefaultFilePredicates(this.baseDir);
- }
-
- public Path baseDirPath() {
- return baseDir;
- }
-
- @Override
- public File baseDir() {
- return baseDir.toFile();
- }
-
- public DefaultFileSystem setEncoding(Charset e) {
- this.encoding = e;
- return this;
- }
-
- @Override
- public Charset encoding() {
- return encoding;
- }
-
- public DefaultFileSystem setWorkDir(Path d) {
- this.workDir = d;
- return this;
- }
-
- @Override
- public File workDir() {
- return workDir.toFile();
- }
-
- @Override
- public InputFile inputFile(FilePredicate predicate) {
- Iterable<InputFile> files = inputFiles(predicate);
- Iterator<InputFile> iterator = files.iterator();
- if (!iterator.hasNext()) {
- return null;
- }
- InputFile first = iterator.next();
- if (!iterator.hasNext()) {
- return first;
- }
-
- StringBuilder sb = new StringBuilder();
- sb.append("expected one element but was: <" + first);
- for (int i = 0; i < 4 && iterator.hasNext(); i++) {
- sb.append(", " + iterator.next());
- }
- if (iterator.hasNext()) {
- sb.append(", ...");
- }
- sb.append('>');
-
- throw new IllegalArgumentException(sb.toString());
-
- }
-
- public Iterable<InputFile> inputFiles() {
- return inputFiles(predicates.all());
- }
-
- @Override
- public Iterable<InputFile> inputFiles(FilePredicate predicate) {
- return OptimizedFilePredicateAdapter.create(predicate).get(cache);
- }
-
- @Override
- public boolean hasFiles(FilePredicate predicate) {
- return inputFiles(predicate).iterator().hasNext();
- }
-
- @Override
- public Iterable<File> files(FilePredicate predicate) {
- return () -> StreamSupport.stream(inputFiles(predicate).spliterator(), false)
- .map(InputFile::file)
- .iterator();
- }
-
- @Override
- public InputDir inputDir(File dir) {
- String relativePath = PathUtils.sanitize(new PathResolver().relativePath(baseDir.toFile(), dir));
- if (relativePath == null) {
- return null;
- }
- // Issues on InputDir are moved to the project, so we just return a fake InputDir for backward compatibility
- return new DefaultInputDir("unused", relativePath).setModuleBaseDir(baseDir);
- }
-
- public DefaultFileSystem add(InputFile inputFile) {
- cache.add(inputFile);
- return this;
- }
-
- @Override
- public SortedSet<String> languages() {
- return cache.languages();
- }
-
- @Override
- public FilePredicates predicates() {
- return predicates;
- }
-
- public abstract static class Cache implements Index {
-
- protected abstract void doAdd(InputFile inputFile);
-
- final void add(InputFile inputFile) {
- doAdd(inputFile);
- }
-
- protected abstract SortedSet<String> languages();
- }
-
- /**
- * Used only for testing
- */
- private static class MapCache extends Cache {
- private final Map<String, InputFile> fileMap = new HashMap<>();
- private final Map<String, Set<InputFile>> filesByNameCache = new HashMap<>();
- private final Map<String, Set<InputFile>> filesByExtensionCache = new HashMap<>();
- private SortedSet<String> languages = new TreeSet<>();
-
- @Override
- public Iterable<InputFile> inputFiles() {
- return new ArrayList<>(fileMap.values());
- }
-
- @Override
- public InputFile inputFile(String relativePath) {
- return fileMap.get(relativePath);
- }
-
- @Override
- public Iterable<InputFile> getFilesByName(String filename) {
- return filesByNameCache.get(filename);
- }
-
- @Override
- public Iterable<InputFile> getFilesByExtension(String extension) {
- return filesByExtensionCache.get(extension);
- }
-
- @Override
- protected void doAdd(InputFile inputFile) {
- if (inputFile.language() != null) {
- languages.add(inputFile.language());
- }
- fileMap.put(inputFile.relativePath(), inputFile);
- filesByNameCache.computeIfAbsent(inputFile.filename(), x -> new HashSet<>()).add(inputFile);
- filesByExtensionCache.computeIfAbsent(FileExtensionPredicate.getExtension(inputFile), x -> new HashSet<>()).add(inputFile);
- }
-
- @Override
- protected SortedSet<String> languages() {
- return languages;
- }
- }
-
- @Override
- public File resolvePath(String path) {
- File file = new File(path);
- if (!file.isAbsolute()) {
- try {
- file = new File(baseDir(), path).getCanonicalFile();
- } catch (IOException e) {
- throw new IllegalArgumentException("Unable to resolve path '" + path + "'", e);
- }
- }
- return file;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultIndexedFile.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultIndexedFile.java
deleted file mode 100644
index e52e0b46e1f..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultIndexedFile.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.concurrent.atomic.AtomicInteger;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.fs.IndexedFile;
-import org.sonar.api.batch.fs.InputFile.Type;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
-import org.sonar.api.utils.PathUtils;
-
-/**
- * @since 6.3
- */
-@Immutable
-public class DefaultIndexedFile extends DefaultInputComponent implements IndexedFile {
- private static AtomicInteger intGenerator = new AtomicInteger(0);
-
- private final String projectRelativePath;
- private final String moduleRelativePath;
- private final String projectKey;
- private final String language;
- private final Type type;
- private final Path absolutePath;
- private final SensorStrategy sensorStrategy;
-
- /**
- * Testing purposes only!
- */
- public DefaultIndexedFile(String projectKey, Path baseDir, String relativePath, @Nullable String language) {
- this(baseDir.resolve(relativePath), projectKey, relativePath, relativePath, Type.MAIN, language, intGenerator.getAndIncrement(),
- new SensorStrategy());
- }
-
- public DefaultIndexedFile(Path absolutePath, String projectKey, String projectRelativePath, String moduleRelativePath, Type type, @Nullable String language, int batchId,
- SensorStrategy sensorStrategy) {
- super(batchId);
- this.projectKey = projectKey;
- this.projectRelativePath = PathUtils.sanitize(projectRelativePath);
- this.moduleRelativePath = PathUtils.sanitize(moduleRelativePath);
- this.type = type;
- this.language = language;
- this.sensorStrategy = sensorStrategy;
- this.absolutePath = absolutePath;
- }
-
- @Override
- public String relativePath() {
- return sensorStrategy.isGlobal() ? projectRelativePath : moduleRelativePath;
- }
-
- public String getModuleRelativePath() {
- return moduleRelativePath;
- }
-
- public String getProjectRelativePath() {
- return projectRelativePath;
- }
-
- @Override
- public String absolutePath() {
- return PathUtils.sanitize(path().toString());
- }
-
- @Override
- public File file() {
- return path().toFile();
- }
-
- @Override
- public Path path() {
- return absolutePath;
- }
-
- @Override
- public InputStream inputStream() throws IOException {
- return Files.newInputStream(path());
- }
-
- @CheckForNull
- @Override
- public String language() {
- return language;
- }
-
- @Override
- public Type type() {
- return type;
- }
-
- /**
- * Component key (without branch).
- */
- @Override
- public String key() {
- return new StringBuilder().append(projectKey).append(":").append(projectRelativePath).toString();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
-
- if (!(o instanceof DefaultIndexedFile)) {
- return false;
- }
-
- DefaultIndexedFile that = (DefaultIndexedFile) o;
- return projectRelativePath.equals(that.projectRelativePath);
- }
-
- @Override
- public int hashCode() {
- return projectRelativePath.hashCode();
- }
-
- @Override
- public String toString() {
- return projectRelativePath;
- }
-
- @Override
- public boolean isFile() {
- return true;
- }
-
- @Override
- public String filename() {
- return path().getFileName().toString();
- }
-
- @Override
- public URI uri() {
- return path().toUri();
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputComponent.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputComponent.java
deleted file mode 100644
index 11601e0265f..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputComponent.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.util.HashSet;
-import java.util.Set;
-import org.sonar.api.batch.fs.InputComponent;
-import org.sonar.api.batch.measure.Metric;
-
-/**
- * @since 5.2
- */
-public abstract class DefaultInputComponent implements InputComponent {
- private int id;
- private Set<String> storedMetricKeys = new HashSet<>();
-
- public DefaultInputComponent(int scannerId) {
- this.id = scannerId;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || this.getClass() != o.getClass()) {
- return false;
- }
-
- DefaultInputComponent that = (DefaultInputComponent) o;
- return key().equals(that.key());
- }
-
- public int scannerId() {
- return id;
- }
-
- @Override
- public int hashCode() {
- return key().hashCode();
- }
-
- @Override
- public String toString() {
- return "[key=" + key() + "]";
- }
-
- public void setHasMeasureFor(Metric metric) {
- storedMetricKeys.add(metric.key());
- }
-
- public boolean hasMeasureFor(Metric metric) {
- return storedMetricKeys.contains(metric.key());
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputDir.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputDir.java
deleted file mode 100644
index 13eb77be1c4..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputDir.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.net.URI;
-import java.nio.file.Path;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.batch.fs.InputDir;
-import org.sonar.api.utils.PathUtils;
-
-/**
- * @since 4.5
- */
-public class DefaultInputDir extends DefaultInputComponent implements InputDir {
-
- private final String relativePath;
- private final String moduleKey;
- private Path moduleBaseDir;
-
- public DefaultInputDir(String moduleKey, String relativePath) {
- super(-1);
- this.moduleKey = moduleKey;
- this.relativePath = PathUtils.sanitize(relativePath);
- }
-
- @Override
- public String relativePath() {
- return relativePath;
- }
-
- @Override
- public String absolutePath() {
- return PathUtils.sanitize(path().toString());
- }
-
- @Override
- public File file() {
- return path().toFile();
- }
-
- @Override
- public Path path() {
- if (moduleBaseDir == null) {
- throw new IllegalStateException("Can not return the java.nio.file.Path because module baseDir is not set (see method setModuleBaseDir(java.io.File))");
- }
- return moduleBaseDir.resolve(relativePath);
- }
-
- public String moduleKey() {
- return moduleKey;
- }
-
- @Override
- public String key() {
- StringBuilder sb = new StringBuilder().append(moduleKey).append(":");
- if (StringUtils.isEmpty(relativePath)) {
- sb.append("/");
- } else {
- sb.append(relativePath);
- }
- return sb.toString();
- }
-
- /**
- * For testing purpose. Will be automatically set when dir is added to {@link DefaultFileSystem}
- */
- public DefaultInputDir setModuleBaseDir(Path moduleBaseDir) {
- this.moduleBaseDir = moduleBaseDir.normalize();
- return this;
- }
-
- @Override
- public boolean isFile() {
- return false;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || this.getClass() != o.getClass()) {
- return false;
- }
-
- DefaultInputDir that = (DefaultInputDir) o;
- return moduleKey.equals(that.moduleKey) && relativePath.equals(that.relativePath);
- }
-
- @Override
- public int hashCode() {
- return moduleKey.hashCode() + relativePath.hashCode() * 13;
- }
-
- @Override
- public String toString() {
- return "[moduleKey=" + moduleKey + ", relative=" + relativePath + ", basedir=" + moduleBaseDir + "]";
- }
-
- @Override
- public URI uri() {
- return path().toUri();
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputFile.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputFile.java
deleted file mode 100644
index c74f1c41296..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputFile.java
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.BitSet;
-import java.util.Collection;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import org.apache.commons.io.ByteOrderMark;
-import org.apache.commons.io.input.BOMInputStream;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextPointer;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.fs.internal.Metadata;
-
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-/**
- * @since 4.2
- * To create {@link InputFile} in tests, use TestInputFileBuilder.
- */
-public class DefaultInputFile extends DefaultInputComponent implements InputFile {
-
- private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
-
- private final DefaultIndexedFile indexedFile;
- private final String contents;
- private final Consumer<DefaultInputFile> metadataGenerator;
-
- private boolean published;
- private boolean excludedForCoverage;
- private boolean excludedForDuplication;
- private boolean ignoreAllIssues;
- // Lazy init to save memory
- private BitSet noSonarLines;
- private Status status;
- private Charset charset;
- private Metadata metadata;
- private Collection<int[]> ignoreIssuesOnlineRanges;
- private BitSet executableLines;
-
- public DefaultInputFile(DefaultIndexedFile indexedFile, Consumer<DefaultInputFile> metadataGenerator) {
- this(indexedFile, metadataGenerator, null);
- }
-
- // For testing
- public DefaultInputFile(DefaultIndexedFile indexedFile, Consumer<DefaultInputFile> metadataGenerator, @Nullable String contents) {
- super(indexedFile.scannerId());
- this.indexedFile = indexedFile;
- this.metadataGenerator = metadataGenerator;
- this.metadata = null;
- this.published = false;
- this.excludedForCoverage = false;
- this.contents = contents;
- }
-
- public void checkMetadata() {
- if (metadata == null) {
- metadataGenerator.accept(this);
- }
- }
-
- @Override
- public InputStream inputStream() throws IOException {
- return contents != null ? new ByteArrayInputStream(contents.getBytes(charset()))
- : new BOMInputStream(Files.newInputStream(path()),
- ByteOrderMark.UTF_8, ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE, ByteOrderMark.UTF_32LE, ByteOrderMark.UTF_32BE);
- }
-
- @Override
- public String contents() throws IOException {
- if (contents != null) {
- return contents;
- } else {
- ByteArrayOutputStream result = new ByteArrayOutputStream();
- try (InputStream inputStream = inputStream()) {
- byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
- int length;
- while ((length = inputStream.read(buffer)) != -1) {
- result.write(buffer, 0, length);
- }
- }
- return result.toString(charset().name());
- }
- }
-
- public DefaultInputFile setPublished(boolean published) {
- this.published = published;
- return this;
- }
-
- public boolean isPublished() {
- return published;
- }
-
- public DefaultInputFile setExcludedForCoverage(boolean excludedForCoverage) {
- this.excludedForCoverage = excludedForCoverage;
- return this;
- }
-
- public boolean isExcludedForCoverage() {
- return excludedForCoverage;
- }
-
- public DefaultInputFile setExcludedForDuplication(boolean excludedForDuplication) {
- this.excludedForDuplication = excludedForDuplication;
- return this;
- }
-
- public boolean isExcludedForDuplication() {
- return excludedForDuplication;
- }
-
- /**
- * @deprecated since 6.6
- */
- @Deprecated
- @Override
- public String relativePath() {
- return indexedFile.relativePath();
- }
-
- public String getModuleRelativePath() {
- return indexedFile.getModuleRelativePath();
- }
-
- public String getProjectRelativePath() {
- return indexedFile.getProjectRelativePath();
- }
-
- @Override
- public String absolutePath() {
- return indexedFile.absolutePath();
- }
-
- @Override
- public File file() {
- return indexedFile.file();
- }
-
- @Override
- public Path path() {
- return indexedFile.path();
- }
-
- @CheckForNull
- @Override
- public String language() {
- return indexedFile.language();
- }
-
- @Override
- public Type type() {
- return indexedFile.type();
- }
-
- /**
- * Component key (without branch).
- */
- @Override
- public String key() {
- return indexedFile.key();
- }
-
- @Override
- public int hashCode() {
- return indexedFile.hashCode();
- }
-
- @Override
- public String toString() {
- return indexedFile.toString();
- }
-
- /**
- * {@link #setStatus(Status)}
- */
- @Override
- public Status status() {
- checkMetadata();
- return status;
- }
-
- @Override
- public int lines() {
- checkMetadata();
- return metadata.lines();
- }
-
- @Override
- public boolean isEmpty() {
- checkMetadata();
- return metadata.isEmpty();
- }
-
- @Override
- public Charset charset() {
- checkMetadata();
- return charset;
- }
-
- public int lastValidOffset() {
- checkMetadata();
- return metadata.lastValidOffset();
- }
-
- /**
- * Digest hash of the file.
- */
- public String hash() {
- checkMetadata();
- return metadata.hash();
- }
-
- public int nonBlankLines() {
- checkMetadata();
- return metadata.nonBlankLines();
- }
-
- public int[] originalLineStartOffsets() {
- checkMetadata();
- checkState(metadata.originalLineStartOffsets() != null, "InputFile is not properly initialized.");
- checkState(metadata.originalLineStartOffsets().length == metadata.lines(),
- "InputFile is not properly initialized. 'originalLineStartOffsets' property length should be equal to 'lines'");
- return metadata.originalLineStartOffsets();
- }
-
- public int[] originalLineEndOffsets() {
- checkMetadata();
- checkState(metadata.originalLineEndOffsets() != null, "InputFile is not properly initialized.");
- checkState(metadata.originalLineEndOffsets().length == metadata.lines(),
- "InputFile is not properly initialized. 'originalLineEndOffsets' property length should be equal to 'lines'");
- return metadata.originalLineEndOffsets();
- }
-
- @Override
- public TextPointer newPointer(int line, int lineOffset) {
- checkMetadata();
- DefaultTextPointer textPointer = new DefaultTextPointer(line, lineOffset);
- checkValid(textPointer, "pointer");
- return textPointer;
- }
-
- @Override
- public TextRange newRange(TextPointer start, TextPointer end) {
- checkMetadata();
- checkValid(start, "start pointer");
- checkValid(end, "end pointer");
- return newRangeValidPointers(start, end, false);
- }
-
- @Override
- public TextRange newRange(int startLine, int startLineOffset, int endLine, int endLineOffset) {
- checkMetadata();
- TextPointer start = newPointer(startLine, startLineOffset);
- TextPointer end = newPointer(endLine, endLineOffset);
- return newRangeValidPointers(start, end, false);
- }
-
- @Override
- public TextRange selectLine(int line) {
- checkMetadata();
- TextPointer startPointer = newPointer(line, 0);
- TextPointer endPointer = newPointer(line, lineLength(line));
- return newRangeValidPointers(startPointer, endPointer, true);
- }
-
- public void validate(TextRange range) {
- checkMetadata();
- checkValid(range.start(), "start pointer");
- checkValid(range.end(), "end pointer");
- }
-
- /**
- * Create Range from global offsets. Used for backward compatibility with older API.
- */
- public TextRange newRange(int startOffset, int endOffset) {
- checkMetadata();
- return newRangeValidPointers(newPointer(startOffset), newPointer(endOffset), false);
- }
-
- public TextPointer newPointer(int globalOffset) {
- checkMetadata();
- checkArgument(globalOffset >= 0, "%s is not a valid offset for a file", globalOffset);
- checkArgument(globalOffset <= lastValidOffset(), "%s is not a valid offset for file %s. Max offset is %s", globalOffset, this, lastValidOffset());
- int line = findLine(globalOffset);
- int startLineOffset = originalLineStartOffsets()[line - 1];
- // In case the global offset is between \r and \n, move the pointer to a valid location
- return new DefaultTextPointer(line, Math.min(globalOffset, originalLineEndOffsets()[line - 1]) - startLineOffset);
- }
-
- public DefaultInputFile setStatus(Status status) {
- this.status = status;
- return this;
- }
-
- public DefaultInputFile setCharset(Charset charset) {
- this.charset = charset;
- return this;
- }
-
- private void checkValid(TextPointer pointer, String owner) {
- checkArgument(pointer.line() >= 1, "%s is not a valid line for a file", pointer.line());
- checkArgument(pointer.line() <= this.metadata.lines(), "%s is not a valid line for %s. File %s has %s line(s)", pointer.line(), owner, this, metadata.lines());
- checkArgument(pointer.lineOffset() >= 0, "%s is not a valid line offset for a file", pointer.lineOffset());
- int lineLength = lineLength(pointer.line());
- checkArgument(pointer.lineOffset() <= lineLength,
- "%s is not a valid line offset for %s. File %s has %s character(s) at line %s", pointer.lineOffset(), owner, this, lineLength, pointer.line());
- }
-
- private int lineLength(int line) {
- return originalLineEndOffsets()[line - 1] - originalLineStartOffsets()[line - 1];
- }
-
- private static TextRange newRangeValidPointers(TextPointer start, TextPointer end, boolean acceptEmptyRange) {
- checkArgument(acceptEmptyRange ? (start.compareTo(end) <= 0) : (start.compareTo(end) < 0),
- "Start pointer %s should be before end pointer %s", start, end);
- return new DefaultTextRange(start, end);
- }
-
- private int findLine(int globalOffset) {
- return Math.abs(Arrays.binarySearch(originalLineStartOffsets(), globalOffset) + 1);
- }
-
- public DefaultInputFile setMetadata(Metadata metadata) {
- this.metadata = metadata;
- return this;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
-
- if (this.getClass() != obj.getClass()) {
- return false;
- }
-
- DefaultInputFile that = (DefaultInputFile) obj;
- return this.getProjectRelativePath().equals(that.getProjectRelativePath());
- }
-
- @Override
- public boolean isFile() {
- return true;
- }
-
- @Override
- public String filename() {
- return indexedFile.filename();
- }
-
- @Override
- public URI uri() {
- return indexedFile.uri();
- }
-
- public void noSonarAt(Set<Integer> noSonarLines) {
- if (this.noSonarLines == null) {
- this.noSonarLines = new BitSet(lines());
- }
- noSonarLines.forEach(l -> this.noSonarLines.set(l - 1));
- }
-
- public boolean hasNoSonarAt(int line) {
- if (this.noSonarLines == null) {
- return false;
- }
- return this.noSonarLines.get(line - 1);
- }
-
- public boolean isIgnoreAllIssues() {
- return ignoreAllIssues;
- }
-
- public void setIgnoreAllIssues(boolean ignoreAllIssues) {
- this.ignoreAllIssues = ignoreAllIssues;
- }
-
- public void addIgnoreIssuesOnLineRanges(Collection<int[]> lineRanges) {
- if (this.ignoreIssuesOnlineRanges == null) {
- this.ignoreIssuesOnlineRanges = new ArrayList<>();
- }
- this.ignoreIssuesOnlineRanges.addAll(lineRanges);
- }
-
- public boolean isIgnoreAllIssuesOnLine(@Nullable Integer line) {
- if (line == null || ignoreIssuesOnlineRanges == null) {
- return false;
- }
- return ignoreIssuesOnlineRanges.stream().anyMatch(r -> r[0] <= line && line <= r[1]);
- }
-
- public void setExecutableLines(Set<Integer> executableLines) {
- checkState(this.executableLines == null, "Executable lines have already been saved for file: {}", this.toString());
- this.executableLines = new BitSet(lines());
- executableLines.forEach(l -> this.executableLines.set(l - 1));
- }
-
- public Optional<Set<Integer>> getExecutableLines() {
- if (this.executableLines == null) {
- return Optional.empty();
- }
- return Optional.of(this.executableLines.stream().map(i -> i + 1).boxed().collect(Collectors.toSet()));
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputModule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputModule.java
deleted file mode 100644
index a729bff7856..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputModule.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import javax.annotation.CheckForNull;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.fs.InputModule;
-import org.sonar.api.scan.filesystem.PathResolver;
-
-import static org.sonar.api.config.internal.MultivalueProperty.parseAsCsv;
-
-@Immutable
-public class DefaultInputModule extends AbstractProjectOrModule implements InputModule {
-
- private final List<Path> sourceDirsOrFiles;
- private final List<Path> testDirsOrFiles;
-
- /**
- * For testing only!
- */
- public DefaultInputModule(ProjectDefinition definition) {
- this(definition, 0);
- }
-
- public DefaultInputModule(ProjectDefinition definition, int scannerComponentId) {
- super(definition, scannerComponentId);
-
- this.sourceDirsOrFiles = initSources(definition, ProjectDefinition.SOURCES_PROPERTY);
- this.testDirsOrFiles = initSources(definition, ProjectDefinition.TESTS_PROPERTY);
- }
-
- @CheckForNull
- private List<Path> initSources(ProjectDefinition module, String propertyKey) {
- if (!module.properties().containsKey(propertyKey)) {
- return null;
- }
- List<Path> result = new ArrayList<>();
- PathResolver pathResolver = new PathResolver();
- String srcPropValue = module.properties().get(propertyKey);
- if (srcPropValue != null) {
- for (String sourcePath : parseAsCsv(propertyKey, srcPropValue)) {
- File dirOrFile = pathResolver.relativeFile(getBaseDir().toFile(), sourcePath);
- if (dirOrFile.exists()) {
- result.add(dirOrFile.toPath());
- }
- }
- }
- return result;
- }
-
- public Optional<List<Path>> getSourceDirsOrFiles() {
- return Optional.ofNullable(sourceDirsOrFiles);
- }
-
- public Optional<List<Path>> getTestDirsOrFiles() {
- return Optional.ofNullable(testDirsOrFiles);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputProject.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputProject.java
deleted file mode 100644
index 9dcd0254b00..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultInputProject.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.scanner.fs.InputProject;
-
-@Immutable
-public class DefaultInputProject extends AbstractProjectOrModule implements InputProject {
-
- /**
- * For testing only!
- */
- public DefaultInputProject(ProjectDefinition definition) {
- super(definition, 0);
- }
-
- public DefaultInputProject(ProjectDefinition definition, int scannerComponentId) {
- super(definition, scannerComponentId);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextPointer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextPointer.java
deleted file mode 100644
index 5cfc84fc712..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextPointer.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import org.sonar.api.batch.fs.TextPointer;
-
-/**
- * @since 5.2
- */
-public class DefaultTextPointer implements TextPointer {
-
- private final int line;
- private final int lineOffset;
-
- public DefaultTextPointer(int line, int lineOffset) {
- this.line = line;
- this.lineOffset = lineOffset;
- }
-
- @Override
- public int line() {
- return line;
- }
-
- @Override
- public int lineOffset() {
- return lineOffset;
- }
-
- @Override
- public String toString() {
- return "[line=" + line + ", lineOffset=" + lineOffset + "]";
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof DefaultTextPointer)) {
- return false;
- }
- DefaultTextPointer other = (DefaultTextPointer) obj;
- return other.line == this.line && other.lineOffset == this.lineOffset;
- }
-
- @Override
- public int hashCode() {
- return 37 * this.line + lineOffset;
- }
-
- @Override
- public int compareTo(TextPointer o) {
- if (this.line == o.line()) {
- return Integer.compare(this.lineOffset, o.lineOffset());
- }
- return Integer.compare(this.line, o.line());
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextRange.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextRange.java
deleted file mode 100644
index f83c330e7ea..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/DefaultTextRange.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import org.sonar.api.batch.fs.TextPointer;
-import org.sonar.api.batch.fs.TextRange;
-
-/**
- * @since 5.2
- */
-public class DefaultTextRange implements TextRange {
-
- private final TextPointer start;
- private final TextPointer end;
-
- public DefaultTextRange(TextPointer start, TextPointer end) {
- this.start = start;
- this.end = end;
- }
-
- @Override
- public TextPointer start() {
- return start;
- }
-
- @Override
- public TextPointer end() {
- return end;
- }
-
- @Override
- public boolean overlap(TextRange another) {
- // [A,B] and [C,D]
- // B > C && D > A
- return this.end.compareTo(another.start()) > 0 && another.end().compareTo(this.start) > 0;
- }
-
- @Override
- public String toString() {
- return "Range[from " + start + " to " + end + "]";
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof DefaultTextRange)) {
- return false;
- }
- DefaultTextRange other = (DefaultTextRange) obj;
- return start.equals(other.start) && end.equals(other.end);
- }
-
- @Override
- public int hashCode() {
- return start.hashCode() * 17 + end.hashCode();
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/FileMetadata.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/FileMetadata.java
deleted file mode 100644
index 1b984168d51..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/FileMetadata.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.Metadata;
-import org.sonar.scanner.fs.charhandler.CharHandler;
-import org.sonar.scanner.fs.charhandler.FileHashComputer;
-import org.sonar.scanner.fs.charhandler.LineCounter;
-import org.sonar.scanner.fs.charhandler.LineHashComputer;
-import org.sonar.scanner.fs.charhandler.LineOffsetCounter;
-
-/**
- * Computes hash of files. Ends of Lines are ignored, so files with
- * same content but different EOL encoding have the same hash.
- */
-@Immutable
-public class FileMetadata {
- private static final char LINE_FEED = '\n';
- private static final char CARRIAGE_RETURN = '\r';
-
- /**
- * Compute hash of a file ignoring line ends differences.
- * Maximum performance is needed.
- */
- public Metadata readMetadata(InputStream stream, Charset encoding, String filePath, @Nullable CharHandler otherHandler) {
- LineCounter lineCounter = new LineCounter(filePath, encoding);
- FileHashComputer fileHashComputer = new FileHashComputer(filePath);
- LineOffsetCounter lineOffsetCounter = new LineOffsetCounter();
-
- if (otherHandler != null) {
- CharHandler[] handlers = {lineCounter, fileHashComputer, lineOffsetCounter, otherHandler};
- readFile(stream, encoding, filePath, handlers);
- } else {
- CharHandler[] handlers = {lineCounter, fileHashComputer, lineOffsetCounter};
- readFile(stream, encoding, filePath, handlers);
- }
- return new Metadata(lineCounter.lines(), lineCounter.nonBlankLines(), fileHashComputer.getHash(), lineOffsetCounter.getOriginalLineStartOffsets(),
- lineOffsetCounter.getOriginalLineEndOffsets(),
- lineOffsetCounter.getLastValidOffset());
- }
-
- public Metadata readMetadata(InputStream stream, Charset encoding, String filePath) {
- return readMetadata(stream, encoding, filePath, null);
- }
-
- /**
- * For testing purpose
- */
- public Metadata readMetadata(Reader reader) {
- LineCounter lineCounter = new LineCounter("fromString", StandardCharsets.UTF_16);
- FileHashComputer fileHashComputer = new FileHashComputer("fromString");
- LineOffsetCounter lineOffsetCounter = new LineOffsetCounter();
- CharHandler[] handlers = {lineCounter, fileHashComputer, lineOffsetCounter};
-
- try {
- read(reader, handlers);
- } catch (IOException e) {
- throw new IllegalStateException("Should never occur", e);
- }
- return new Metadata(lineCounter.lines(), lineCounter.nonBlankLines(), fileHashComputer.getHash(), lineOffsetCounter.getOriginalLineStartOffsets(),
- lineOffsetCounter.getOriginalLineEndOffsets(),
- lineOffsetCounter.getLastValidOffset());
- }
-
- public static void readFile(InputStream stream, Charset encoding, String filePath, CharHandler[] handlers) {
- try (Reader reader = new BufferedReader(new InputStreamReader(stream, encoding))) {
- read(reader, handlers);
- } catch (IOException e) {
- throw new IllegalStateException(String.format("Fail to read file '%s' with encoding '%s'", filePath, encoding), e);
- }
- }
-
- private static void read(Reader reader, CharHandler[] handlers) throws IOException {
- char c;
- int i = reader.read();
- boolean afterCR = false;
- while (i != -1) {
- c = (char) i;
- if (afterCR) {
- for (CharHandler handler : handlers) {
- if (c == CARRIAGE_RETURN) {
- handler.newLine();
- handler.handleAll(c);
- } else if (c == LINE_FEED) {
- handler.handleAll(c);
- handler.newLine();
- } else {
- handler.newLine();
- handler.handleIgnoreEoL(c);
- handler.handleAll(c);
- }
- }
- afterCR = c == CARRIAGE_RETURN;
- } else if (c == LINE_FEED) {
- for (CharHandler handler : handlers) {
- handler.handleAll(c);
- handler.newLine();
- }
- } else if (c == CARRIAGE_RETURN) {
- afterCR = true;
- for (CharHandler handler : handlers) {
- handler.handleAll(c);
- }
- } else {
- for (CharHandler handler : handlers) {
- handler.handleIgnoreEoL(c);
- handler.handleAll(c);
- }
- }
- i = reader.read();
- }
- for (CharHandler handler : handlers) {
- if (afterCR) {
- handler.newLine();
- }
- handler.eof();
- }
- }
-
- @FunctionalInterface
- public interface LineHashConsumer {
- void consume(int lineIdx, @Nullable byte[] hash);
- }
-
- /**
- * Compute a MD5 hash of each line of the file after removing of all blank chars
- */
- public static void computeLineHashesForIssueTracking(InputFile f, LineHashConsumer consumer) {
- try {
- readFile(f.inputStream(), f.charset(), f.absolutePath(), new CharHandler[] {new LineHashComputer(consumer, f.file())});
- } catch (IOException e) {
- throw new IllegalStateException("Failed to compute line hashes for " + f.absolutePath(), e);
- }
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/InputModuleHierarchy.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/InputModuleHierarchy.java
index 9048824f032..ef1124cbcc9 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/InputModuleHierarchy.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/InputModuleHierarchy.java
@@ -22,6 +22,7 @@ package org.sonar.scanner.fs;
import java.util.Collection;
import javax.annotation.CheckForNull;
import javax.annotation.concurrent.Immutable;
+import org.sonar.api.impl.fs.DefaultInputModule;
@Immutable
public interface InputModuleHierarchy {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/TestInputFileBuilder.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/TestInputFileBuilder.java
deleted file mode 100644
index 6764b6180d5..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/TestInputFileBuilder.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.Metadata;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
-import org.sonar.api.utils.PathUtils;
-
-/**
- * Intended to be used in unit tests that need to create {@link InputFile}s.
- * An InputFile is unambiguously identified by a <b>module key</b> and a <b>relative path</b>, so these parameters are mandatory.
- * <p>
- * A module base directory is only needed to construct absolute paths.
- * <p>
- * Examples of usage of the constructors:
- *
- * <pre>
- * InputFile file1 = TestInputFileBuilder.create("module1", "myfile.java").build();
- * InputFile file2 = TestInputFileBuilder.create("", fs.baseDir(), myfile).build();
- * </pre>
- * <p>
- * file1 will have the "module1" as both module key and module base directory.
- * file2 has an empty string as module key, and a relative path which is the path from the filesystem base directory to myfile.
- *
- * @since 6.3
- */
-public class TestInputFileBuilder {
- private static int batchId = 1;
-
- private final int id;
- private final String relativePath;
- private final String projectKey;
- @CheckForNull
- private Path projectBaseDir;
- private Path moduleBaseDir;
- private String language;
- private InputFile.Type type = InputFile.Type.MAIN;
- private InputFile.Status status;
- private int lines = -1;
- private Charset charset;
- private String hash;
- private int nonBlankLines;
- private int[] originalLineStartOffsets = new int[0];
- private int[] originalLineEndOffsets = new int[0];
- private int lastValidOffset = -1;
- private boolean publish = true;
- private String contents;
-
- /**
- * Create a InputFile identified by the given project key and relative path.
- */
- public TestInputFileBuilder(String projectKey, String relativePath) {
- this(projectKey, relativePath, batchId++);
- }
-
- /**
- * Create a InputFile with a given module key and module base directory.
- * The relative path is generated comparing the file path to the module base directory.
- * filePath must point to a file that is within the module base directory.
- */
- public TestInputFileBuilder(String projectKey, File moduleBaseDir, File filePath) {
- String relativePath = moduleBaseDir.toPath().relativize(filePath.toPath()).toString();
- this.projectKey = projectKey;
- setModuleBaseDir(moduleBaseDir.toPath());
- this.relativePath = PathUtils.sanitize(relativePath);
- this.id = batchId++;
- }
-
- public TestInputFileBuilder(String projectKey, String relativePath, int id) {
- this.projectKey = projectKey;
- setModuleBaseDir(Paths.get(projectKey));
- this.relativePath = PathUtils.sanitize(relativePath);
- this.id = id;
- }
-
- public static TestInputFileBuilder create(String moduleKey, File moduleBaseDir, File filePath) {
- return new TestInputFileBuilder(moduleKey, moduleBaseDir, filePath);
- }
-
- public static TestInputFileBuilder create(String moduleKey, String relativePath) {
- return new TestInputFileBuilder(moduleKey, relativePath);
- }
-
- public static int nextBatchId() {
- return batchId++;
- }
-
- public TestInputFileBuilder setProjectBaseDir(Path projectBaseDir) {
- this.projectBaseDir = normalize(projectBaseDir);
- return this;
- }
-
- public TestInputFileBuilder setModuleBaseDir(Path moduleBaseDir) {
- this.moduleBaseDir = normalize(moduleBaseDir);
- return this;
- }
-
- private static Path normalize(Path path) {
- try {
- return path.normalize().toRealPath(LinkOption.NOFOLLOW_LINKS);
- } catch (IOException e) {
- return path.normalize();
- }
- }
-
- public TestInputFileBuilder setLanguage(@Nullable String language) {
- this.language = language;
- return this;
- }
-
- public TestInputFileBuilder setType(InputFile.Type type) {
- this.type = type;
- return this;
- }
-
- public TestInputFileBuilder setStatus(InputFile.Status status) {
- this.status = status;
- return this;
- }
-
- public TestInputFileBuilder setLines(int lines) {
- this.lines = lines;
- return this;
- }
-
- public TestInputFileBuilder setCharset(Charset charset) {
- this.charset = charset;
- return this;
- }
-
- public TestInputFileBuilder setHash(String hash) {
- this.hash = hash;
- return this;
- }
-
- /**
- * Set contents of the file and calculates metadata from it.
- * The contents will be returned by {@link InputFile#contents()} and {@link InputFile#inputStream()} and can be
- * inconsistent with the actual physical file pointed by {@link InputFile#path()}, {@link InputFile#absolutePath()}, etc.
- */
- public TestInputFileBuilder setContents(String content) {
- this.contents = content;
- initMetadata(content);
- return this;
- }
-
- public TestInputFileBuilder setNonBlankLines(int nonBlankLines) {
- this.nonBlankLines = nonBlankLines;
- return this;
- }
-
- public TestInputFileBuilder setLastValidOffset(int lastValidOffset) {
- this.lastValidOffset = lastValidOffset;
- return this;
- }
-
- public TestInputFileBuilder setOriginalLineStartOffsets(int[] originalLineStartOffsets) {
- this.originalLineStartOffsets = originalLineStartOffsets;
- return this;
- }
-
- public TestInputFileBuilder setOriginalLineEndOffsets(int[] originalLineEndOffsets) {
- this.originalLineEndOffsets = originalLineEndOffsets;
- return this;
- }
-
- public TestInputFileBuilder setPublish(boolean publish) {
- this.publish = publish;
- return this;
- }
-
- public TestInputFileBuilder setMetadata(Metadata metadata) {
- this.setLines(metadata.lines());
- this.setLastValidOffset(metadata.lastValidOffset());
- this.setNonBlankLines(metadata.nonBlankLines());
- this.setHash(metadata.hash());
- this.setOriginalLineStartOffsets(metadata.originalLineStartOffsets());
- this.setOriginalLineEndOffsets(metadata.originalLineEndOffsets());
- return this;
- }
-
- public TestInputFileBuilder initMetadata(String content) {
- return setMetadata(new FileMetadata().readMetadata(new StringReader(content)));
- }
-
- public DefaultInputFile build() {
- Path absolutePath = moduleBaseDir.resolve(relativePath);
- if (projectBaseDir == null) {
- projectBaseDir = moduleBaseDir;
- }
- String projectRelativePath = projectBaseDir.relativize(absolutePath).toString();
- DefaultIndexedFile indexedFile = new DefaultIndexedFile(absolutePath, projectKey, projectRelativePath, relativePath, type, language, id, new SensorStrategy());
- DefaultInputFile inputFile = new DefaultInputFile(indexedFile,
- f -> f.setMetadata(new Metadata(lines, nonBlankLines, hash, originalLineStartOffsets, originalLineEndOffsets, lastValidOffset)),
- contents);
- inputFile.setStatus(status);
- inputFile.setCharset(charset);
- inputFile.setPublished(publish);
- return inputFile;
- }
-
- public static DefaultInputModule newDefaultInputModule(String moduleKey, File baseDir) {
- ProjectDefinition definition = ProjectDefinition.create()
- .setKey(moduleKey)
- .setBaseDir(baseDir)
- .setWorkDir(new File(baseDir, ".sonar"));
- return newDefaultInputModule(definition);
- }
-
- public static DefaultInputModule newDefaultInputModule(ProjectDefinition projectDefinition) {
- return new DefaultInputModule(projectDefinition, TestInputFileBuilder.nextBatchId());
- }
-
- public static DefaultInputModule newDefaultInputModule(AbstractProjectOrModule parent, String key) throws IOException {
- Path basedir = parent.getBaseDir().resolve(key);
- Files.createDirectory(basedir);
- return newDefaultInputModule(key, basedir.toFile());
- }
-
- public static DefaultInputProject newDefaultInputProject(String projectKey, File baseDir) {
- ProjectDefinition definition = ProjectDefinition.create()
- .setKey(projectKey)
- .setBaseDir(baseDir)
- .setWorkDir(new File(baseDir, ".sonar"));
- return newDefaultInputProject(definition);
- }
-
- public static DefaultInputProject newDefaultInputProject(ProjectDefinition projectDefinition) {
- return new DefaultInputProject(projectDefinition, TestInputFileBuilder.nextBatchId());
- }
-
- public static DefaultInputProject newDefaultInputProject(String key, Path baseDir) throws IOException {
- Files.createDirectory(baseDir);
- return newDefaultInputProject(key, baseDir.toFile());
- }
-
- public static DefaultInputDir newDefaultInputDir(AbstractProjectOrModule module, String relativePath) throws IOException {
- Path basedir = module.getBaseDir().resolve(relativePath);
- Files.createDirectory(basedir);
- return new DefaultInputDir(module.key(), relativePath)
- .setModuleBaseDir(module.getBaseDir());
- }
-
- public static DefaultInputFile newDefaultInputFile(Path projectBaseDir, AbstractProjectOrModule module, String relativePath) {
- return new TestInputFileBuilder(module.key(), relativePath)
- .setStatus(InputFile.Status.SAME)
- .setProjectBaseDir(projectBaseDir)
- .setModuleBaseDir(module.getBaseDir())
- .build();
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/CharHandler.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/CharHandler.java
deleted file mode 100644
index 737f6c29071..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/CharHandler.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-public abstract class CharHandler {
-
- public void handleAll(char c) {
- }
-
- public void handleIgnoreEoL(char c) {
- }
-
- public void newLine() {
- }
-
- public void eof() {
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/FileHashComputer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/FileHashComputer.java
deleted file mode 100644
index 46229a5c70b..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/FileHashComputer.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CodingErrorAction;
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.codec.digest.DigestUtils;
-
-public class FileHashComputer extends CharHandler {
- private static final char LINE_FEED = '\n';
-
-
- private MessageDigest globalMd5Digest = DigestUtils.getMd5Digest();
- private StringBuilder sb = new StringBuilder();
- private final CharsetEncoder encoder;
- private final String filePath;
-
- public FileHashComputer(String filePath) {
- encoder = StandardCharsets.UTF_8.newEncoder()
- .onMalformedInput(CodingErrorAction.REPLACE)
- .onUnmappableCharacter(CodingErrorAction.REPLACE);
- this.filePath = filePath;
- }
-
- @Override
- public void handleIgnoreEoL(char c) {
- sb.append(c);
- }
-
- @Override
- public void newLine() {
- sb.append(LINE_FEED);
- processBuffer();
- sb.setLength(0);
- }
-
- @Override
- public void eof() {
- if (sb.length() > 0) {
- processBuffer();
- }
- }
-
- private void processBuffer() {
- try {
- if (sb.length() > 0) {
- ByteBuffer encoded = encoder.encode(CharBuffer.wrap(sb));
- globalMd5Digest.update(encoded.array(), 0, encoded.limit());
- }
- } catch (CharacterCodingException e) {
- throw new IllegalStateException("Error encoding line hash in file: " + filePath, e);
- }
- }
-
- public String getHash() {
- return Hex.encodeHexString(globalMd5Digest.digest());
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/IntArrayList.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/IntArrayList.java
deleted file mode 100644
index 12674145399..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/IntArrayList.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-import java.util.Arrays;
-import java.util.Collection;
-
-/**
- * Specialization of {@link java.util.ArrayList} to create a list of int (only append elements) and then produce an int[].
- */
-class IntArrayList {
-
- /**
- * Default initial capacity.
- */
- private static final int DEFAULT_CAPACITY = 10;
-
- /**
- * Shared empty array instance used for default sized empty instances. We
- * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
- * first element is added.
- */
- private static final int[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
-
- /**
- * The array buffer into which the elements of the ArrayList are stored.
- * The capacity of the IntArrayList is the length of this array buffer. Any
- * empty IntArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
- * will be expanded to DEFAULT_CAPACITY when the first element is added.
- */
- private int[] elementData;
-
- /**
- * The size of the IntArrayList (the number of elements it contains).
- */
- private int size;
-
- /**
- * Constructs an empty list with an initial capacity of ten.
- */
- public IntArrayList() {
- this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
- }
-
- /**
- * Trims the capacity of this <tt>IntArrayList</tt> instance to be the
- * list's current size and return the internal array. An application can use this operation to minimize
- * the storage of an <tt>IntArrayList</tt> instance.
- */
- public int[] trimAndGet() {
- if (size < elementData.length) {
- elementData = Arrays.copyOf(elementData, size);
- }
- return elementData;
- }
-
- private void ensureCapacityInternal(int minCapacity) {
- int capacity = minCapacity;
- if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
- capacity = Math.max(DEFAULT_CAPACITY, minCapacity);
- }
-
- ensureExplicitCapacity(capacity);
- }
-
- private void ensureExplicitCapacity(int minCapacity) {
- if (minCapacity - elementData.length > 0) {
- grow(minCapacity);
- }
- }
-
- /**
- * Increases the capacity to ensure that it can hold at least the
- * number of elements specified by the minimum capacity argument.
- *
- * @param minCapacity the desired minimum capacity
- */
- private void grow(int minCapacity) {
- int oldCapacity = elementData.length;
- int newCapacity = oldCapacity + (oldCapacity >> 1);
- if (newCapacity - minCapacity < 0) {
- newCapacity = minCapacity;
- }
- elementData = Arrays.copyOf(elementData, newCapacity);
- }
-
- /**
- * Appends the specified element to the end of this list.
- *
- * @param e element to be appended to this list
- * @return <tt>true</tt> (as specified by {@link Collection#add})
- */
- public boolean add(int e) {
- ensureCapacityInternal(size + 1);
- elementData[size] = e;
- size++;
- return true;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineCounter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineCounter.java
deleted file mode 100644
index 7cac0f2b0a0..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineCounter.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-import java.nio.charset.Charset;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-
-public class LineCounter extends CharHandler {
- private static final Logger LOG = Loggers.get(LineCounter.class);
-
- private int lines = 1;
- private int nonBlankLines = 0;
- private boolean blankLine = true;
- boolean alreadyLoggedInvalidCharacter = false;
- private final String filePath;
- private final Charset encoding;
-
- public LineCounter(String filePath, Charset encoding) {
- this.filePath = filePath;
- this.encoding = encoding;
- }
-
- @Override
- public void handleAll(char c) {
- if (!alreadyLoggedInvalidCharacter && c == '\ufffd') {
- LOG.warn("Invalid character encountered in file {} at line {} for encoding {}. Please fix file content or configure the encoding to be used using property '{}'.", filePath,
- lines, encoding, CoreProperties.ENCODING_PROPERTY);
- alreadyLoggedInvalidCharacter = true;
- }
- }
-
- @Override
- public void newLine() {
- lines++;
- if (!blankLine) {
- nonBlankLines++;
- }
- blankLine = true;
- }
-
- @Override
- public void handleIgnoreEoL(char c) {
- if (!Character.isWhitespace(c)) {
- blankLine = false;
- }
- }
-
- @Override
- public void eof() {
- if (!blankLine) {
- nonBlankLines++;
- }
- }
-
- public int lines() {
- return lines;
- }
-
- public int nonBlankLines() {
- return nonBlankLines;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineHashComputer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineHashComputer.java
deleted file mode 100644
index 5435499e505..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineHashComputer.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-import java.io.File;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CodingErrorAction;
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.sonar.scanner.fs.FileMetadata;
-
-public class LineHashComputer extends CharHandler {
- private final MessageDigest lineMd5Digest = DigestUtils.getMd5Digest();
- private final CharsetEncoder encoder;
- private final StringBuilder sb = new StringBuilder();
- private final FileMetadata.LineHashConsumer consumer;
- private final File file;
- private int line = 1;
-
- public LineHashComputer(FileMetadata.LineHashConsumer consumer, File f) {
- this.consumer = consumer;
- this.file = f;
- this.encoder = StandardCharsets.UTF_8.newEncoder()
- .onMalformedInput(CodingErrorAction.REPLACE)
- .onUnmappableCharacter(CodingErrorAction.REPLACE);
- }
-
- @Override
- public void handleIgnoreEoL(char c) {
- if (!Character.isWhitespace(c)) {
- sb.append(c);
- }
- }
-
- @Override
- public void newLine() {
- processBuffer();
- sb.setLength(0);
- line++;
- }
-
- @Override
- public void eof() {
- if (this.line > 0) {
- processBuffer();
- }
- }
-
- private void processBuffer() {
- try {
- if (sb.length() > 0) {
- ByteBuffer encoded = encoder.encode(CharBuffer.wrap(sb));
- lineMd5Digest.update(encoded.array(), 0, encoded.limit());
- consumer.consume(line, lineMd5Digest.digest());
- }
- } catch (CharacterCodingException e) {
- throw new IllegalStateException("Error encoding line hash in file: " + file.getAbsolutePath(), e);
- }
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineOffsetCounter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineOffsetCounter.java
deleted file mode 100644
index 74b7f4867ba..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/LineOffsetCounter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-public class LineOffsetCounter extends CharHandler {
- private long currentOriginalLineStartOffset = 0;
- private long currentOriginalLineEndOffset = 0;
- private final IntArrayList originalLineStartOffsets = new IntArrayList();
- private final IntArrayList originalLineEndOffsets = new IntArrayList();
- private long lastValidOffset = 0;
-
- public LineOffsetCounter() {
- originalLineStartOffsets.add(0);
- }
-
- @Override
- public void handleAll(char c) {
- currentOriginalLineStartOffset++;
- }
-
- @Override
- public void handleIgnoreEoL(char c) {
- currentOriginalLineEndOffset++;
- }
-
- @Override
- public void newLine() {
- if (currentOriginalLineStartOffset > Integer.MAX_VALUE) {
- throw new IllegalStateException("File is too big: " + currentOriginalLineStartOffset);
- }
- originalLineStartOffsets.add((int) currentOriginalLineStartOffset);
- originalLineEndOffsets.add((int) currentOriginalLineEndOffset);
- currentOriginalLineEndOffset = currentOriginalLineStartOffset;
- }
-
- @Override
- public void eof() {
- originalLineEndOffsets.add((int) currentOriginalLineEndOffset);
- lastValidOffset = currentOriginalLineStartOffset;
- }
-
- public int[] getOriginalLineStartOffsets() {
- return originalLineStartOffsets.trimAndGet();
- }
-
- public int[] getOriginalLineEndOffsets() {
- return originalLineEndOffsets.trimAndGet();
- }
-
- public int getLastValidOffset() {
- if (lastValidOffset > Integer.MAX_VALUE) {
- throw new IllegalStateException("File is too big: " + lastValidOffset);
- }
- return (int) lastValidOffset;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/package-info.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/package-info.java
deleted file mode 100644
index 4e5375fc17f..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/charhandler/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-import javax.annotation.ParametersAreNonnullByDefault;
-
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbsolutePathPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbsolutePathPredicate.java
deleted file mode 100644
index c55099a8884..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbsolutePathPredicate.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.io.File;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.Collections;
-import org.sonar.api.batch.fs.FileSystem.Index;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.scan.filesystem.PathResolver;
-import org.sonar.api.utils.PathUtils;
-
-/**
- * @since 4.2
- */
-class AbsolutePathPredicate extends AbstractFilePredicate {
-
- private final String path;
- private final Path baseDir;
-
- AbsolutePathPredicate(String path, Path baseDir) {
- this.baseDir = baseDir;
- this.path = PathUtils.sanitize(path);
- }
-
- @Override
- public boolean apply(InputFile f) {
- return path.equals(f.absolutePath());
- }
-
- @Override
- public Iterable<InputFile> get(Index index) {
- String relative = PathUtils.sanitize(new PathResolver().relativePath(baseDir.toFile(), new File(path)));
- if (relative == null) {
- return Collections.emptyList();
- }
- InputFile f = index.inputFile(relative);
- return f != null ? Arrays.asList(f) : Collections.<InputFile>emptyList();
- }
-
- @Override
- public int priority() {
- return USE_INDEX;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbstractFilePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbstractFilePredicate.java
deleted file mode 100644
index 4f6952611d7..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AbstractFilePredicate.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.stream.StreamSupport;
-import org.sonar.api.batch.fs.FileSystem.Index;
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * Partial implementation of {@link OptimizedFilePredicate}.
- * @since 5.1
- */
-public abstract class AbstractFilePredicate implements OptimizedFilePredicate {
-
- protected static final int DEFAULT_PRIORITY = 10;
- protected static final int USE_INDEX = 20;
-
- @Override
- public Iterable<InputFile> filter(Iterable<InputFile> target) {
- return () -> StreamSupport.stream(target.spliterator(), false)
- .filter(this::apply)
- .iterator();
- }
-
- @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();
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AndPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AndPredicate.java
deleted file mode 100644
index 024964256ba..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/AndPredicate.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-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;
-
-import static java.util.stream.Collectors.toList;
-
-/**
- * @since 4.2
- */
-class AndPredicate extends AbstractFilePredicate implements OperatorPredicate {
-
- private final List<OptimizedFilePredicate> predicates = new ArrayList<>();
-
- private AndPredicate() {
- }
-
- public static FilePredicate create(Collection<FilePredicate> predicates) {
- if (predicates.isEmpty()) {
- return TruePredicate.TRUE;
- }
- AndPredicate 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) {
- result.predicates.addAll(((AndPredicate) filePredicate).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) {
- Iterable<InputFile> 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
- Iterable<InputFile> result = predicates.get(0).get(index);
- for (int i = 1; i < predicates.size(); i++) {
- result = predicates.get(i).filter(result);
- }
- return result;
- }
-
- Collection<OptimizedFilePredicate> predicates() {
- return predicates;
- }
-
- @Override
- public List<FilePredicate> operands() {
- return predicates.stream().map(p -> (FilePredicate) p).collect(toList());
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/DefaultFilePredicates.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/DefaultFilePredicates.java
deleted file mode 100644
index bcda1ac7351..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/DefaultFilePredicates.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.io.File;
-import java.net.URI;
-import java.nio.file.Path;
-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.sonar.api.batch.fs.internal.PathPattern;
-
-/**
- * Factory of {@link FilePredicate}
- *
- * @since 4.2
- */
-public class DefaultFilePredicates implements FilePredicates {
-
- private final Path baseDir;
-
- /**
- * Client code should use {@link org.sonar.api.batch.fs.FileSystem#predicates()} to get an instance
- */
- public DefaultFilePredicates(Path baseDir) {
- this.baseDir = baseDir;
- }
-
- /**
- * 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) {
- return new AbsolutePathPredicate(s, baseDir);
- }
-
- /**
- * non-normalized path and Windows-style path are supported
- */
- @Override
- public FilePredicate hasRelativePath(String s) {
- return new RelativePathPredicate(s);
- }
-
- @Override
- public FilePredicate hasFilename(String s) {
- return new FilenamePredicate(s);
- }
-
- @Override
- public FilePredicate hasExtension(String s) {
- return new FileExtensionPredicate(s);
- }
-
- @Override
- public FilePredicate hasURI(URI uri) {
- return new URIPredicate(uri, baseDir);
- }
-
- @Override
- public FilePredicate matchesPathPattern(String inclusionPattern) {
- return new PathPatternPredicate(PathPattern.create(inclusionPattern));
- }
-
- @Override
- public FilePredicate matchesPathPatterns(String[] inclusionPatterns) {
- if (inclusionPatterns.length == 0) {
- return TruePredicate.TRUE;
- }
- FilePredicate[] predicates = new FilePredicate[inclusionPatterns.length];
- for (int i = 0; i < inclusionPatterns.length; i++) {
- predicates[i] = new PathPatternPredicate(PathPattern.create(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) {
- File file = new File(s);
- if (file.isAbsolute()) {
- return hasAbsolutePath(s);
- }
- return hasRelativePath(s);
- }
-
- @Override
- public FilePredicate is(File ioFile) {
- if (ioFile.isAbsolute()) {
- return hasAbsolutePath(ioFile.getAbsolutePath());
- }
- return hasRelativePath(ioFile.getPath());
- }
-
- @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 and(FilePredicate first, FilePredicate second) {
- return AndPredicate.create(Arrays.asList(first, second));
- }
-
- @Override
- public FilePredicate hasStatus(Status status) {
- return new StatusPredicate(status);
- }
-
- @Override
- public FilePredicate hasAnyStatus() {
- return new StatusPredicate(null);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FalsePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FalsePredicate.java
deleted file mode 100644
index e76bb84e6ae..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FalsePredicate.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.Collections;
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.FileSystem.Index;
-import org.sonar.api.batch.fs.InputFile;
-
-class FalsePredicate extends AbstractFilePredicate {
-
- static final FilePredicate FALSE = new FalsePredicate();
-
- @Override
- public boolean apply(InputFile inputFile) {
- return false;
- }
-
- @Override
- public Iterable<InputFile> filter(Iterable<InputFile> target) {
- return Collections.emptyList();
- }
-
- @Override
- public Iterable<InputFile> get(Index index) {
- return Collections.emptyList();
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FileExtensionPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FileExtensionPredicate.java
deleted file mode 100644
index 46f257f25a4..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FileExtensionPredicate.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.Locale;
-import org.sonar.api.batch.fs.FileSystem;
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * @since 6.3
- */
-public class FileExtensionPredicate extends AbstractFilePredicate {
-
- private final String extension;
-
- public FileExtensionPredicate(String extension) {
- this.extension = lowercase(extension);
- }
-
- @Override
- public boolean apply(InputFile inputFile) {
- return extension.equals(getExtension(inputFile));
- }
-
- @Override
- public Iterable<InputFile> get(FileSystem.Index index) {
- return index.getFilesByExtension(extension);
- }
-
- public static String getExtension(InputFile inputFile) {
- return getExtension(inputFile.filename());
- }
-
- static String getExtension(String name) {
- int index = name.lastIndexOf('.');
- if (index < 0) {
- return "";
- }
- return lowercase(name.substring(index + 1));
- }
-
- private static String lowercase(String extension) {
- return extension.toLowerCase(Locale.ENGLISH);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FilenamePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FilenamePredicate.java
deleted file mode 100644
index a99d9314c77..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/FilenamePredicate.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.sonar.api.batch.fs.FileSystem;
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * @since 6.3
- */
-public class FilenamePredicate extends AbstractFilePredicate {
- private final String filename;
-
- public FilenamePredicate(String filename) {
- this.filename = filename;
- }
-
- @Override
- public boolean apply(InputFile inputFile) {
- return filename.equals(inputFile.filename());
- }
-
- @Override
- public Iterable<InputFile> get(FileSystem.Index index) {
- return index.getFilesByName(filename);
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/LanguagePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/LanguagePredicate.java
deleted file mode 100644
index 5492e224558..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/LanguagePredicate.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * @since 4.2
- */
-class LanguagePredicate extends AbstractFilePredicate {
- private final String language;
-
- LanguagePredicate(String language) {
- this.language = language;
- }
-
- @Override
- public boolean apply(InputFile f) {
- return language.equals(f.language());
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/NotPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/NotPredicate.java
deleted file mode 100644
index 5bc68adfbe7..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/NotPredicate.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.Arrays;
-import java.util.List;
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.predicates.AbstractFilePredicate;
-import org.sonar.scanner.fs.predicates.OperatorPredicate;
-
-/**
- * @since 4.2
- */
-class NotPredicate extends AbstractFilePredicate implements OperatorPredicate {
-
- private final FilePredicate predicate;
-
- NotPredicate(FilePredicate predicate) {
- this.predicate = predicate;
- }
-
- @Override
- public boolean apply(InputFile f) {
- return !predicate.apply(f);
- }
-
- @Override
- public List<FilePredicate> operands() {
- return Arrays.asList(predicate);
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OperatorPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OperatorPredicate.java
deleted file mode 100644
index c4493091865..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OperatorPredicate.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.List;
-import org.sonar.api.batch.fs.FilePredicate;
-
-/**
- * A predicate that associate other predicates
- */
-public interface OperatorPredicate extends FilePredicate {
-
- List<FilePredicate> operands();
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicate.java
deleted file mode 100644
index 9b5216d5549..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicate.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.FileSystem;
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * Optimized version of FilePredicate allowing to speed up query by looking at InputFile by index.
- */
-public interface OptimizedFilePredicate extends FilePredicate, Comparable<OptimizedFilePredicate> {
-
- /**
- * Filter provided files to keep only the ones that are valid for this predicate
- */
- Iterable<InputFile> filter(Iterable<InputFile> inputFiles);
-
- /**
- * Get all files that are valid for this predicate.
- */
- Iterable<InputFile> get(FileSystem.Index index);
-
- /**
- * For optimization. FilePredicates will be applied in priority order. For example when doing
- * p.and(p1, p2, p3) then p1, p2 and p3 will be applied according to their priority value. Higher priority value
- * are applied first.
- * Assign a high priority when the predicate will likely highly reduce the set of InputFiles to filter. Also
- * {@link RelativePathPredicate} and AbsolutePathPredicate have a high priority since they are using cache index.
- */
- int priority();
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicateAdapter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicateAdapter.java
deleted file mode 100644
index ba46aff6847..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OptimizedFilePredicateAdapter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.InputFile;
-
-public class OptimizedFilePredicateAdapter extends AbstractFilePredicate {
-
- private FilePredicate unoptimizedPredicate;
-
- private OptimizedFilePredicateAdapter(FilePredicate unoptimizedPredicate) {
- this.unoptimizedPredicate = unoptimizedPredicate;
- }
-
- @Override
- public boolean apply(InputFile inputFile) {
- return unoptimizedPredicate.apply(inputFile);
- }
-
- public static OptimizedFilePredicate create(FilePredicate predicate) {
- if (predicate instanceof OptimizedFilePredicate) {
- return (OptimizedFilePredicate) predicate;
- } else {
- return new OptimizedFilePredicateAdapter(predicate);
- }
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OrPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OrPredicate.java
deleted file mode 100644
index 2690a1261d9..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/OrPredicate.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * @since 4.2
- */
-class OrPredicate extends AbstractFilePredicate implements OperatorPredicate {
-
- private final List<FilePredicate> predicates = new ArrayList<>();
-
- private OrPredicate() {
- }
-
- public static FilePredicate create(Collection<FilePredicate> predicates) {
- if (predicates.isEmpty()) {
- return TruePredicate.TRUE;
- }
- OrPredicate result = new OrPredicate();
- for (FilePredicate filePredicate : predicates) {
- if (filePredicate == TruePredicate.TRUE) {
- return TruePredicate.TRUE;
- } else if (filePredicate == FalsePredicate.FALSE) {
- continue;
- } else if (filePredicate instanceof OrPredicate) {
- result.predicates.addAll(((OrPredicate) filePredicate).predicates);
- } else {
- result.predicates.add(filePredicate);
- }
- }
- return result;
- }
-
- @Override
- public boolean apply(InputFile f) {
- for (FilePredicate predicate : predicates) {
- if (predicate.apply(f)) {
- return true;
- }
- }
- return false;
- }
-
- Collection<FilePredicate> predicates() {
- return predicates;
- }
-
- @Override
- public List<FilePredicate> operands() {
- return predicates;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/PathPatternPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/PathPatternPredicate.java
deleted file mode 100644
index 032d820919b..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/PathPatternPredicate.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.nio.file.Paths;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.PathPattern;
-
-/**
- * @since 4.2
- */
-class PathPatternPredicate extends AbstractFilePredicate {
-
- private final PathPattern pattern;
-
- PathPatternPredicate(PathPattern pattern) {
- this.pattern = pattern;
- }
-
- @Override
- public boolean apply(InputFile f) {
- return pattern.match(f.path(), Paths.get(f.relativePath()));
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/RelativePathPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/RelativePathPredicate.java
deleted file mode 100644
index d79221ea7f3..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/RelativePathPredicate.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.util.Collections;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.FileSystem.Index;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.utils.PathUtils;
-
-/**
- * @since 4.2
- */
-public class RelativePathPredicate extends AbstractFilePredicate {
-
- @Nullable
- private final String path;
-
- RelativePathPredicate(String path) {
- this.path = PathUtils.sanitize(path);
- }
-
- public String path() {
- return path;
- }
-
- @Override
- public boolean apply(InputFile f) {
- if (path == null) {
- return false;
- }
-
- return path.equals(f.relativePath());
- }
-
- @Override
- public Iterable<InputFile> get(Index index) {
- if (path != null) {
- InputFile f = index.inputFile(this.path);
- if (f != null) {
- return Collections.singletonList(f);
- }
- }
- return Collections.emptyList();
- }
-
- @Override
- public int priority() {
- return USE_INDEX;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/StatusPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/StatusPredicate.java
deleted file mode 100644
index fb88b965a07..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/StatusPredicate.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.predicates.AbstractFilePredicate;
-
-/**
- * @deprecated since 7.8
- */
-@Deprecated
-public class StatusPredicate extends AbstractFilePredicate {
-
- private final InputFile.Status status;
-
- StatusPredicate(@Nullable InputFile.Status status) {
- this.status = status;
- }
-
- @Override
- public boolean apply(InputFile f) {
- return status == null || status == f.status();
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TruePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TruePredicate.java
deleted file mode 100644
index 562515ce06e..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TruePredicate.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.sonar.api.batch.fs.FilePredicate;
-import org.sonar.api.batch.fs.FileSystem.Index;
-import org.sonar.api.batch.fs.InputFile;
-
-class TruePredicate extends AbstractFilePredicate {
-
- static final FilePredicate TRUE = new TruePredicate();
-
- @Override
- public boolean apply(InputFile inputFile) {
- return true;
- }
-
- @Override
- public Iterable<InputFile> get(Index index) {
- return index.inputFiles();
- }
-
- @Override
- public Iterable<InputFile> filter(Iterable<InputFile> target) {
- return target;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TypePredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TypePredicate.java
deleted file mode 100644
index 3cddc59ad17..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/TypePredicate.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.sonar.api.batch.fs.InputFile;
-
-/**
- * @since 4.2
- */
-class TypePredicate extends AbstractFilePredicate {
-
- private final InputFile.Type type;
-
- TypePredicate(InputFile.Type type) {
- this.type = type;
- }
-
- @Override
- public boolean apply(InputFile f) {
- return type == f.type();
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/URIPredicate.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/URIPredicate.java
deleted file mode 100644
index 9e25267de05..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/fs/predicates/URIPredicate.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.net.URI;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Optional;
-import org.sonar.api.batch.fs.FileSystem.Index;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.scan.filesystem.PathResolver;
-
-/**
- * @since 6.6
- */
-class URIPredicate extends AbstractFilePredicate {
-
- private final URI uri;
- private final Path baseDir;
-
- URIPredicate(URI uri, Path baseDir) {
- this.baseDir = baseDir;
- this.uri = uri;
- }
-
- @Override
- public boolean apply(InputFile f) {
- return uri.equals(f.uri());
- }
-
- @Override
- public Iterable<InputFile> get(Index index) {
- Path path = Paths.get(uri);
- Optional<String> relative = PathResolver.relativize(baseDir, path);
- if (!relative.isPresent()) {
- return Collections.emptyList();
- }
- InputFile f = index.inputFile(relative.get());
- return f != null ? Arrays.asList(f) : Collections.<InputFile>emptyList();
- }
-
- @Override
- public int priority() {
- return USE_INDEX;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/AbstractDefaultIssue.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/AbstractDefaultIssue.java
deleted file mode 100644
index 4b13e2016d1..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/AbstractDefaultIssue.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.issue;
-
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.InputComponent;
-import org.sonar.scanner.sensor.DefaultStorable;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.issue.Issue.Flow;
-import org.sonar.api.batch.sensor.issue.IssueLocation;
-import org.sonar.api.batch.sensor.issue.NewIssueLocation;
-import org.sonar.api.utils.PathUtils;
-import org.sonar.scanner.fs.DefaultInputDir;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
-
-import static java.util.Collections.unmodifiableList;
-import static java.util.stream.Collectors.toList;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public abstract class AbstractDefaultIssue<T extends AbstractDefaultIssue> extends DefaultStorable {
- protected IssueLocation primaryLocation;
- protected List<List<IssueLocation>> flows = new ArrayList<>();
- protected DefaultInputProject project;
-
- protected AbstractDefaultIssue(DefaultInputProject project) {
- this(project, null);
- }
-
- public AbstractDefaultIssue(DefaultInputProject project, @Nullable SensorStorage storage) {
- super(storage);
- this.project = project;
- }
-
- public IssueLocation primaryLocation() {
- return primaryLocation;
- }
-
- public List<Flow> flows() {
- return this.flows.stream()
- .<Flow>map(l -> () -> unmodifiableList(new ArrayList<>(l)))
- .collect(toList());
- }
-
- public NewIssueLocation newLocation() {
- return new DefaultIssueLocation();
- }
-
- public T at(NewIssueLocation primaryLocation) {
- checkArgument(primaryLocation != null, "Cannot use a location that is null");
- checkState(this.primaryLocation == null, "at() already called");
- this.primaryLocation = rewriteLocation((DefaultIssueLocation) primaryLocation);
- checkArgument(this.primaryLocation.inputComponent() != null, "Cannot use a location with no input component");
- return (T) this;
- }
-
- public T addLocation(NewIssueLocation secondaryLocation) {
- flows.add(Collections.singletonList(rewriteLocation((DefaultIssueLocation) secondaryLocation)));
- return (T) this;
- }
-
- public T addFlow(Iterable<NewIssueLocation> locations) {
- List<IssueLocation> flowAsList = new ArrayList<>();
- for (NewIssueLocation issueLocation : locations) {
- flowAsList.add(rewriteLocation((DefaultIssueLocation) issueLocation));
- }
- flows.add(flowAsList);
- return (T) this;
- }
-
- private DefaultIssueLocation rewriteLocation(DefaultIssueLocation location) {
- InputComponent component = location.inputComponent();
- Optional<Path> dirOrModulePath = Optional.empty();
-
- if (component instanceof DefaultInputDir) {
- DefaultInputDir dirComponent = (DefaultInputDir) component;
- dirOrModulePath = Optional.of(project.getBaseDir().relativize(dirComponent.path()));
- } else if (component instanceof DefaultInputModule && !Objects.equals(project.key(), component.key())) {
- DefaultInputModule moduleComponent = (DefaultInputModule) component;
- dirOrModulePath = Optional.of(project.getBaseDir().relativize(moduleComponent.getBaseDir()));
- }
-
- if (dirOrModulePath.isPresent()) {
- String path = PathUtils.sanitize(dirOrModulePath.get().toString());
- DefaultIssueLocation fixedLocation = new DefaultIssueLocation();
- fixedLocation.on(project);
- StringBuilder fullMessage = new StringBuilder();
- if (path != null && !path.isEmpty()) {
- fullMessage.append("[").append(path).append("] ");
- }
- fullMessage.append(location.message());
- fixedLocation.message(fullMessage.toString());
- return fixedLocation;
- } else {
- return location;
- }
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultFilterableIssue.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultFilterableIssue.java
index 5485c348c87..5d107da2d76 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultFilterableIssue.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultFilterableIssue.java
@@ -28,9 +28,9 @@ import org.sonar.api.batch.fs.TextRange;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.scan.issue.filter.FilterableIssue;
import org.sonar.scanner.ProjectInfo;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.DefaultTextPointer;
-import org.sonar.scanner.fs.DefaultTextRange;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultTextPointer;
+import org.sonar.api.impl.fs.DefaultTextRange;
import org.sonar.scanner.protocol.output.ScannerReport.Issue;
@ThreadSafe
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssue.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssue.java
deleted file mode 100644
index 154dfc91c81..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssue.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.issue;
-
-import javax.annotation.Nullable;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.issue.Issue;
-import org.sonar.api.batch.sensor.issue.IssueLocation;
-import org.sonar.api.batch.sensor.issue.NewIssue;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.scanner.fs.DefaultInputProject;
-
-import static java.lang.String.format;
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultIssue extends AbstractDefaultIssue<DefaultIssue> implements Issue, NewIssue {
- private RuleKey ruleKey;
- private Double gap;
- private Severity overriddenSeverity;
-
- public DefaultIssue(DefaultInputProject project) {
- this(project, null);
- }
-
- public DefaultIssue(DefaultInputProject project, @Nullable SensorStorage storage) {
- super(project, storage);
- }
-
- public DefaultIssue forRule(RuleKey ruleKey) {
- this.ruleKey = ruleKey;
- return this;
- }
-
- public RuleKey ruleKey() {
- return this.ruleKey;
- }
-
- @Override
- public DefaultIssue gap(@Nullable Double gap) {
- checkArgument(gap == null || gap >= 0, format("Gap must be greater than or equal 0 (got %s)", gap));
- this.gap = gap;
- return this;
- }
-
- @Override
- public DefaultIssue overrideSeverity(@Nullable Severity severity) {
- this.overriddenSeverity = severity;
- return this;
- }
-
- @Override
- public Severity overriddenSeverity() {
- return this.overriddenSeverity;
- }
-
- @Override
- public Double gap() {
- return this.gap;
- }
-
- @Override
- public IssueLocation primaryLocation() {
- return primaryLocation;
- }
-
- @Override
- public void doSave() {
- requireNonNull(this.ruleKey, "ruleKey is mandatory on issue");
- checkState(primaryLocation != null, "Primary location is mandatory on every issue");
- storage.store(this);
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssueLocation.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssueLocation.java
deleted file mode 100644
index 33018bbcc8f..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultIssueLocation.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.issue;
-
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.InputComponent;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.issue.IssueLocation;
-import org.sonar.api.batch.sensor.issue.NewIssueLocation;
-import org.sonar.scanner.fs.DefaultInputFile;
-
-import static java.util.Objects.requireNonNull;
-import static org.apache.commons.lang.StringUtils.abbreviate;
-import static org.apache.commons.lang.StringUtils.trim;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultIssueLocation implements NewIssueLocation, IssueLocation {
-
- private InputComponent component;
- private TextRange textRange;
- private String message;
-
- @Override
- public DefaultIssueLocation on(InputComponent component) {
- checkArgument(component != null, "Component can't be null");
- checkState(this.component == null, "on() already called");
- this.component = component;
- return this;
- }
-
- @Override
- public DefaultIssueLocation at(TextRange location) {
- checkState(this.component != null, "at() should be called after on()");
- checkState(this.component.isFile(), "at() should be called only for an InputFile.");
- DefaultInputFile file = (DefaultInputFile) this.component;
- file.validate(location);
- this.textRange = location;
- return this;
- }
-
- @Override
- public DefaultIssueLocation message(String message) {
- requireNonNull(message, "Message can't be null");
- if (message.contains("\u0000")) {
- throw new IllegalArgumentException(unsupportedCharacterError(message, component));
- }
- this.message = abbreviate(trim(message), MESSAGE_MAX_SIZE);
- return this;
- }
-
- private static String unsupportedCharacterError(String message, @Nullable InputComponent component) {
- String error = "Character \\u0000 is not supported in issue message '" + message + "'";
- if (component != null) {
- error += ", on component: " + component.toString();
- }
- return error;
- }
-
- @Override
- public InputComponent inputComponent() {
- return this.component;
- }
-
- @Override
- public TextRange textRange() {
- return textRange;
- }
-
- @Override
- public String message() {
- return this.message;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultNoSonarFilter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultNoSonarFilter.java
deleted file mode 100644
index 00d3ba518f1..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/DefaultNoSonarFilter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.issue;
-
-import java.util.Set;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.issue.NoSonarFilter;
-import org.sonar.scanner.fs.DefaultInputFile;
-
-public class DefaultNoSonarFilter extends NoSonarFilter {
- public NoSonarFilter noSonarInFile(InputFile inputFile, Set<Integer> noSonarLines) {
- ((DefaultInputFile) inputFile).noSonarAt(noSonarLines);
- return this;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssueFilters.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssueFilters.java
index 87a4846a81a..3b887b024ef 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssueFilters.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssueFilters.java
@@ -24,7 +24,7 @@ import org.sonar.api.scan.issue.filter.FilterableIssue;
import org.sonar.api.scan.issue.filter.IssueFilter;
import org.sonar.api.scan.issue.filter.IssueFilterChain;
import org.sonar.scanner.ProjectInfo;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.protocol.output.ScannerReport;
/**
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java
index ac02497f474..1bbf26f6bd1 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java
@@ -29,8 +29,8 @@ import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.issue.ExternalIssue;
import org.sonar.api.batch.sensor.issue.Issue;
import org.sonar.api.batch.sensor.issue.Issue.Flow;
-import org.sonar.scanner.fs.DefaultInputComponent;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputComponent;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.Constants.Severity;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.IssueLocation;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilter.java
index e518408f13b..3faefb38407 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilter.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilter.java
@@ -30,7 +30,7 @@ import org.sonar.api.scan.issue.filter.IssueFilter;
import org.sonar.api.scan.issue.filter.IssueFilterChain;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.issue.DefaultFilterableIssue;
import org.sonar.scanner.issue.ignore.pattern.IssueInclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.pattern.IssuePattern;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilter.java
index 8d825944b84..2a961ee65ad 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilter.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilter.java
@@ -28,7 +28,7 @@ import org.sonar.api.scan.issue.filter.IssueFilterChain;
import org.sonar.api.utils.WildcardPattern;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.issue.DefaultFilterableIssue;
public class IgnoreIssuesFilter implements IssueFilter {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java
index 4c3117835ca..ad9b431b5d3 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoader.java
@@ -26,8 +26,8 @@ import org.apache.commons.lang.StringUtils;
import org.sonar.api.notifications.AnalysisWarnings;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.charhandler.CharHandler;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.charhandler.CharHandler;
import org.sonar.scanner.issue.ignore.IgnoreIssuesFilter;
import org.sonar.scanner.issue.ignore.pattern.BlockIssuePattern;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScanner.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScanner.java
index 2ab767f7f3b..345db834790 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScanner.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScanner.java
@@ -27,8 +27,8 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.charhandler.CharHandler;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.charhandler.CharHandler;
import org.sonar.scanner.issue.ignore.pattern.LineRange;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsLoader.DoubleRegexpMatcher;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/AnalysisResult.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/AnalysisResult.java
index c75da29f0ed..0e851054801 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/AnalysisResult.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/mediumtest/AnalysisResult.java
@@ -37,8 +37,8 @@ import org.sonar.api.batch.fs.TextRange;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
import org.sonar.api.scanner.fs.InputProject;
import org.sonar.core.util.CloseableIterator;
-import org.sonar.scanner.fs.DefaultInputComponent;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputComponent;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Component;
import org.sonar.scanner.protocol.output.ScannerReport.Symbol;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/platform/DefaultServer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/platform/DefaultServer.java
index dfe4993d31b..72837700b07 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/platform/DefaultServer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/platform/DefaultServer.java
@@ -27,17 +27,17 @@ import org.sonar.api.SonarRuntime;
import org.sonar.api.config.Configuration;
import org.sonar.api.platform.Server;
import org.sonar.api.utils.DateUtils;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import static org.apache.commons.lang.StringUtils.trimToEmpty;
public class DefaultServer extends Server {
private final Configuration settings;
- private final ScannerWsClient client;
+ private final DefaultScannerWsClient client;
private final SonarRuntime runtime;
- public DefaultServer(Configuration settings, ScannerWsClient client, SonarRuntime runtime) {
+ public DefaultServer(Configuration settings, DefaultScannerWsClient client, SonarRuntime runtime) {
this.settings = settings;
this.client = client;
this.runtime = runtime;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/DefaultPostJobDescriptor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/DefaultPostJobDescriptor.java
deleted file mode 100644
index 1292e10612f..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/DefaultPostJobDescriptor.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.postjob;
-
-import java.util.Arrays;
-import java.util.Collection;
-import org.sonar.api.batch.postjob.PostJobDescriptor;
-
-public class DefaultPostJobDescriptor implements PostJobDescriptor {
-
- private String name;
- private String[] properties = new String[0];
-
- public String name() {
- return name;
- }
-
- public Collection<String> properties() {
- return Arrays.asList(properties);
- }
-
- @Override
- public DefaultPostJobDescriptor name(String name) {
- this.name = name;
- return this;
- }
-
- @Override
- public DefaultPostJobDescriptor requireProperty(String... propertyKey) {
- return requireProperties(propertyKey);
- }
-
- @Override
- public DefaultPostJobDescriptor requireProperties(String... propertyKeys) {
- this.properties = propertyKeys;
- return this;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobOptimizer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobOptimizer.java
index cd68e1694fe..ea9acd22d34 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobOptimizer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobOptimizer.java
@@ -22,6 +22,7 @@ package org.sonar.scanner.postjob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.config.Configuration;
+import org.sonar.api.impl.sensor.DefaultPostJobDescriptor;
public class PostJobOptimizer {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobWrapper.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobWrapper.java
index 60ea2882163..9df6f4cd892 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobWrapper.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/postjob/PostJobWrapper.java
@@ -21,6 +21,7 @@ package org.sonar.scanner.postjob;
import org.sonar.api.batch.postjob.PostJob;
import org.sonar.api.batch.postjob.PostJobContext;
+import org.sonar.api.impl.sensor.DefaultPostJobDescriptor;
public class PostJobWrapper {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ActiveRulesPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ActiveRulesPublisher.java
index f0f8991c073..174659fe796 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ActiveRulesPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ActiveRulesPublisher.java
@@ -20,7 +20,7 @@
package org.sonar.scanner.report;
import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.scanner.rule.DefaultActiveRule;
+import org.sonar.api.batch.rule.DefaultActiveRule;
import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/AnalysisContextReportPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/AnalysisContextReportPublisher.java
index 25780591679..5c6daad40b8 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/AnalysisContextReportPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/AnalysisContextReportPublisher.java
@@ -30,13 +30,13 @@ import java.util.Map;
import java.util.TreeSet;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties;
-import org.sonar.api.batch.fs.internal.AbstractProjectOrModule;
-import org.sonar.api.batch.fs.internal.DefaultInputModule;
-import org.sonar.api.batch.fs.internal.InputModuleHierarchy;
+import org.sonar.api.impl.fs.AbstractProjectOrModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.api.utils.System2;
import org.sonar.core.platform.PluginInfo;
import org.sonar.scanner.bootstrap.GlobalServerSettings;
import org.sonar.scanner.bootstrap.ScannerPluginRepository;
+import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.ProjectServerSettings;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ChangedLinesPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ChangedLinesPublisher.java
index 00d8bed5abf..db7d22baf08 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ChangedLinesPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ChangedLinesPublisher.java
@@ -29,14 +29,14 @@ import org.sonar.api.batch.scm.ScmProvider;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
import org.sonar.scanner.scm.ScmConfiguration;
-import org.sonar.scanner.util.ScannerUtils;
+import org.sonar.api.impl.utils.ScannerUtils;
public class ChangedLinesPublisher implements ReportPublisherStep {
private static final Logger LOG = Loggers.get(ChangedLinesPublisher.class);
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java
index 597785f7632..b66fc8e8a93 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ComponentsPublisher.java
@@ -25,9 +25,9 @@ import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Status;
-import org.sonar.scanner.fs.AbstractProjectOrModule;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.AbstractProjectOrModule;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
import org.sonar.scanner.protocol.output.ScannerReport.Component.FileStatus;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/MetadataPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/MetadataPublisher.java
index be1e838b810..f238735d3cb 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/MetadataPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/MetadataPublisher.java
@@ -32,8 +32,8 @@ import org.sonar.scanner.ProjectInfo;
import org.sonar.scanner.bootstrap.ScannerPlugin;
import org.sonar.scanner.bootstrap.ScannerPluginRepository;
import org.sonar.scanner.cpd.CpdSettings;
-import org.sonar.scanner.fs.AbstractProjectOrModule;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.AbstractProjectOrModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Metadata.BranchType;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java
index c2afdc1baf2..46078b34f84 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/ReportPublisher.java
@@ -43,7 +43,7 @@ import org.sonar.api.utils.ZipUtils;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.scanner.bootstrap.GlobalAnalysisMode;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
@@ -72,7 +72,7 @@ public class ReportPublisher implements Startable {
private static final String ID = "id";
private static final String RESOLVED = "resolved";
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
private final AnalysisContextReportPublisher contextPublisher;
private final InputModuleHierarchy moduleHierarchy;
private final GlobalAnalysisMode analysisMode;
@@ -86,7 +86,7 @@ public class ReportPublisher implements Startable {
private ScannerReportWriter writer;
private ScannerReportReader reader;
- public ReportPublisher(ScanProperties properties, ScannerWsClient wsClient, Server server, AnalysisContextReportPublisher contextPublisher,
+ public ReportPublisher(ScanProperties properties, DefaultScannerWsClient wsClient, Server server, AnalysisContextReportPublisher contextPublisher,
InputModuleHierarchy moduleHierarchy, GlobalAnalysisMode analysisMode, TempFolder temp, ReportPublisherStep[] publishers, BranchConfiguration branchConfiguration) {
this.wsClient = wsClient;
this.server = server;
@@ -195,7 +195,7 @@ public class ReportPublisher implements Startable {
try {
response = wsClient.call(post).failIfNotSuccessful();
} catch (HttpException e) {
- throw MessageException.of(String.format("Failed to upload report - %s", ScannerWsClient.createErrorMessage(e)));
+ throw MessageException.of(String.format("Failed to upload report - %s", DefaultScannerWsClient.createErrorMessage(e)));
}
try (InputStream protobuf = response.contentStream()) {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/SourcePublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/SourcePublisher.java
index 765ac95da04..f18549f81df 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/SourcePublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/SourcePublisher.java
@@ -29,7 +29,7 @@ import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/TestExecutionPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/TestExecutionPublisher.java
index f04f204bf2b..2aa1802f814 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/TestExecutionPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/report/TestExecutionPublisher.java
@@ -24,16 +24,16 @@ import java.util.Objects;
import java.util.stream.StreamSupport;
import org.sonar.api.batch.fs.InputComponent;
import org.sonar.api.batch.fs.InputFile;
+import org.sonar.api.impl.fs.DefaultInputComponent;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.sensor.DefaultMeasure;
import org.sonar.api.test.MutableTestPlan;
import org.sonar.api.test.TestCase;
import org.sonar.api.test.TestCase.Status;
import org.sonar.scanner.deprecated.test.TestPlanBuilder;
-import org.sonar.scanner.fs.DefaultInputComponent;
-import org.sonar.scanner.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
-import org.sonar.scanner.sensor.DefaultMeasure;
import static org.sonar.api.measures.CoreMetrics.SKIPPED_TESTS;
import static org.sonar.api.measures.CoreMetrics.TESTS;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoader.java
index 64482589fec..7afc0c68587 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoader.java
@@ -25,16 +25,16 @@ import java.util.ArrayList;
import java.util.List;
import org.sonar.api.measures.Metric;
import org.sonar.api.measures.Metric.ValueType;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonar.scanner.protocol.GsonHelper;
import org.sonarqube.ws.client.GetRequest;
public class DefaultMetricsRepositoryLoader implements MetricsRepositoryLoader {
private static final String METRICS_SEARCH_URL = "/api/metrics/search?f=name,description,direction,qualitative,custom&ps=500&p=";
- private ScannerWsClient wsClient;
+ private DefaultScannerWsClient wsClient;
- public DefaultMetricsRepositoryLoader(ScannerWsClient wsClient) {
+ public DefaultMetricsRepositoryLoader(DefaultScannerWsClient wsClient) {
this.wsClient = wsClient;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoader.java
index f5136784e43..3c7e7ad5484 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoader.java
@@ -28,8 +28,8 @@ import java.util.Map;
import javax.annotation.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
-import org.sonar.scanner.util.ScannerUtils;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
+import org.sonar.api.impl.utils.ScannerUtils;
import org.sonarqube.ws.Batch.WsProjectResponse;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.HttpException;
@@ -38,9 +38,9 @@ import org.sonarqube.ws.client.WsResponse;
public class DefaultProjectRepositoriesLoader implements ProjectRepositoriesLoader {
private static final Logger LOG = LoggerFactory.getLogger(DefaultProjectRepositoriesLoader.class);
private static final String BATCH_PROJECT_URL = "/batch/project.protobuf";
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
- public DefaultProjectRepositoriesLoader(ScannerWsClient wsClient) {
+ public DefaultProjectRepositoriesLoader(DefaultScannerWsClient wsClient) {
this.wsClient = wsClient;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultQualityProfileLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultQualityProfileLoader.java
index 361eeab3e6d..7bf41b77a93 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultQualityProfileLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/DefaultQualityProfileLoader.java
@@ -28,7 +28,7 @@ import java.util.Map;
import java.util.function.BinaryOperator;
import java.util.function.Supplier;
import org.sonar.api.utils.MessageException;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonar.scanner.scan.ScanProperties;
import org.sonarqube.ws.Qualityprofiles.SearchWsResponse;
import org.sonarqube.ws.Qualityprofiles.SearchWsResponse.QualityProfile;
@@ -37,15 +37,15 @@ import org.sonarqube.ws.client.HttpException;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
-import static org.sonar.scanner.util.ScannerUtils.encodeForUrl;
+import static org.sonar.api.impl.utils.ScannerUtils.encodeForUrl;
public class DefaultQualityProfileLoader implements QualityProfileLoader {
private static final String WS_URL = "/api/qualityprofiles/search.protobuf";
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
private final ScanProperties properties;
- public DefaultQualityProfileLoader(ScanProperties properties, ScannerWsClient wsClient) {
+ public DefaultQualityProfileLoader(ScanProperties properties, DefaultScannerWsClient wsClient) {
this.properties = properties;
this.wsClient = wsClient;
}
@@ -69,10 +69,10 @@ public class DefaultQualityProfileLoader implements QualityProfileLoader {
if (tryLoadDefault) {
return loadDefault();
} else {
- throw MessageException.of(errorMsg.get() + ": " + ScannerWsClient.createErrorMessage(e));
+ throw MessageException.of(errorMsg.get() + ": " + DefaultScannerWsClient.createErrorMessage(e));
}
}
- throw new IllegalStateException(errorMsg.get() + ": " + ScannerWsClient.createErrorMessage(e));
+ throw new IllegalStateException(errorMsg.get() + ": " + DefaultScannerWsClient.createErrorMessage(e));
} catch (MessageException e) {
throw e;
} catch (Exception e) {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/ProjectRepositories.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/ProjectRepositories.java
index d1a7a30080c..ad817fd2a47 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/ProjectRepositories.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/ProjectRepositories.java
@@ -21,7 +21,7 @@ package org.sonar.scanner.repository;
import javax.annotation.CheckForNull;
import javax.annotation.concurrent.Immutable;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
@Immutable
public abstract class ProjectRepositories {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/AbstractSettingsLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/AbstractSettingsLoader.java
index 797acbfcdb9..795a217b5a1 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/AbstractSettingsLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/AbstractSettingsLoader.java
@@ -34,8 +34,8 @@ import org.apache.commons.lang.StringEscapeUtils;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
-import org.sonar.scanner.util.ScannerUtils;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
+import org.sonar.api.impl.utils.ScannerUtils;
import org.sonarqube.ws.Settings;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.HttpException;
@@ -43,9 +43,9 @@ import org.sonarqube.ws.client.HttpException;
public abstract class AbstractSettingsLoader {
private static final Logger LOG = Loggers.get(AbstractSettingsLoader.class);
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
- public AbstractSettingsLoader(final ScannerWsClient wsClient) {
+ public AbstractSettingsLoader(final DefaultScannerWsClient wsClient) {
this.wsClient = wsClient;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoader.java
index cd616563730..8e3e34cf90a 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoader.java
@@ -20,11 +20,11 @@
package org.sonar.scanner.repository.settings;
import java.util.Map;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
public class DefaultGlobalSettingsLoader extends AbstractSettingsLoader implements GlobalSettingsLoader {
- public DefaultGlobalSettingsLoader(final ScannerWsClient wsClient) {
+ public DefaultGlobalSettingsLoader(final DefaultScannerWsClient wsClient) {
super(wsClient);
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoader.java
index 4274772cc8c..32d41243f93 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoader.java
@@ -21,12 +21,12 @@ package org.sonar.scanner.repository.settings;
import java.util.Map;
import org.sonar.scanner.bootstrap.ProcessedScannerProperties;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
public class DefaultProjectSettingsLoader extends AbstractSettingsLoader implements ProjectSettingsLoader {
private final ProcessedScannerProperties scannerProperties;
- public DefaultProjectSettingsLoader(final ScannerWsClient wsClient, final ProcessedScannerProperties scannerProperties) {
+ public DefaultProjectSettingsLoader(final DefaultScannerWsClient wsClient, final ProcessedScannerProperties scannerProperties) {
super(wsClient);
this.scannerProperties = scannerProperties;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesBuilder.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesBuilder.java
deleted file mode 100644
index ce5885836a2..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesBuilder.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.rule.RuleKey;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * Builds instances of {@link org.sonar.api.batch.rule.ActiveRules}.
- * <b>For unit testing and internal use only</b>.
- *
- * @since 4.2
- */
-public class ActiveRulesBuilder {
-
- private final Map<RuleKey, NewActiveRule> map = new LinkedHashMap<>();
-
- public ActiveRulesBuilder addRule(NewActiveRule newActiveRule) {
- if (map.containsKey(newActiveRule.ruleKey)) {
- throw new IllegalStateException(String.format("Rule '%s' is already activated", newActiveRule.ruleKey));
- }
- map.put(newActiveRule.ruleKey, newActiveRule);
- return this;
- }
-
- public ActiveRules build() {
- return new DefaultActiveRules(map.values());
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesLoader.java
index e9bd8897dc8..0cf793876f4 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesLoader.java
@@ -20,6 +20,7 @@
package org.sonar.scanner.rule;
import java.util.List;
+import org.sonar.api.batch.rule.LoadedActiveRule;
public interface ActiveRulesLoader {
List<LoadedActiveRule> load(String qualityProfileKey);
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesProvider.java
index f918a847f2b..dbf8ec440a2 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/ActiveRulesProvider.java
@@ -27,6 +27,9 @@ import java.util.Map;
import java.util.Set;
import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.batch.rule.ActiveRules;
+import org.sonar.api.impl.rule.ActiveRulesBuilder;
+import org.sonar.api.batch.rule.LoadedActiveRule;
+import org.sonar.api.batch.rule.NewActiveRule;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRule.java
deleted file mode 100644
index 68bdf1ed3af..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRule.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.rule.ActiveRule;
-import org.sonar.api.rule.RuleKey;
-
-@Immutable
-public class DefaultActiveRule implements ActiveRule {
- private final RuleKey ruleKey;
- private final String severity;
- private final String internalKey;
- private final String language;
- private final String templateRuleKey;
- private final Map<String, String> params;
- private final long createdAt;
- private final long updatedAt;
- private final String qProfileKey;
-
- DefaultActiveRule(NewActiveRule newActiveRule) {
- this.severity = newActiveRule.severity;
- this.internalKey = newActiveRule.internalKey;
- this.templateRuleKey = newActiveRule.templateRuleKey;
- this.ruleKey = newActiveRule.ruleKey;
- this.params = Collections.unmodifiableMap(new HashMap<>(newActiveRule.params));
- this.language = newActiveRule.language;
- this.createdAt = newActiveRule.createdAt;
- this.updatedAt = newActiveRule.updatedAt;
- this.qProfileKey = newActiveRule.qProfileKey;
- }
-
- @Override
- public RuleKey ruleKey() {
- return ruleKey;
- }
-
- @Override
- public String severity() {
- return severity;
- }
-
- @Override
- public String language() {
- return language;
- }
-
- @Override
- public String param(String key) {
- return params.get(key);
- }
-
- @Override
- public Map<String, String> params() {
- // already immutable
- return params;
- }
-
- @Override
- public String internalKey() {
- return internalKey;
- }
-
- @Override
- public String templateRuleKey() {
- return templateRuleKey;
- }
-
- public long createdAt() {
- return createdAt;
- }
-
- public long updatedAt() {
- return updatedAt;
- }
-
- @Override
- public String qpKey() {
- return qProfileKey;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRules.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRules.java
deleted file mode 100644
index 77a278772cc..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRules.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-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 java.util.stream.Collectors;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.rule.ActiveRule;
-import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.rule.RuleKey;
-
-@Immutable
-public class DefaultActiveRules implements ActiveRules {
- private final Map<String, List<ActiveRule>> activeRulesByRepository = new HashMap<>();
- private final Map<String, Map<String, ActiveRule>> activeRulesByRepositoryAndKey = new HashMap<>();
- private final Map<String, Map<String, ActiveRule>> activeRulesByRepositoryAndInternalKey = new HashMap<>();
- private final Map<String, List<ActiveRule>> activeRulesByLanguage = new HashMap<>();
-
- public DefaultActiveRules(Collection<NewActiveRule> newActiveRules) {
- for (NewActiveRule newAR : newActiveRules) {
- DefaultActiveRule ar = new DefaultActiveRule(newAR);
- String repo = ar.ruleKey().repository();
- activeRulesByRepository.computeIfAbsent(repo, x -> new ArrayList<>()).add(ar);
- if (ar.language() != null) {
- activeRulesByLanguage.computeIfAbsent(ar.language(), x -> new ArrayList<>()).add(ar);
- }
-
- activeRulesByRepositoryAndKey.computeIfAbsent(repo, r -> new HashMap<>()).put(ar.ruleKey().rule(), ar);
- String internalKey = ar.internalKey();
- if (internalKey != null) {
- activeRulesByRepositoryAndInternalKey.computeIfAbsent(repo, r -> new HashMap<>()).put(internalKey, ar);
- }
- }
- }
-
- @Override
- public ActiveRule find(RuleKey ruleKey) {
- return activeRulesByRepositoryAndKey.getOrDefault(ruleKey.repository(), Collections.emptyMap())
- .get(ruleKey.rule());
- }
-
- @Override
- public Collection<ActiveRule> findAll() {
- return activeRulesByRepository.entrySet().stream().flatMap(x -> x.getValue().stream()).collect(Collectors.toList());
- }
-
- @Override
- public Collection<ActiveRule> findByRepository(String repository) {
- return activeRulesByRepository.getOrDefault(repository, Collections.emptyList());
- }
-
- @Override
- public Collection<ActiveRule> findByLanguage(String language) {
- return activeRulesByLanguage.getOrDefault(language, Collections.emptyList());
- }
-
- @Override
- public ActiveRule findByInternalKey(String repository, String internalKey) {
- return activeRulesByRepositoryAndInternalKey.containsKey(repository) ? activeRulesByRepositoryAndInternalKey.get(repository).get(internalKey) : null;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRulesLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRulesLoader.java
index 3f6cb897aaf..e7d2cb63f86 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRulesLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultActiveRulesLoader.java
@@ -26,9 +26,11 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.IOUtils;
-import org.sonar.api.rule.RuleKey;
import org.sonar.scanner.bootstrap.ScannerWsClient;
-import org.sonar.scanner.util.ScannerUtils;
+import org.sonar.api.impl.utils.ScannerUtils;
+import org.sonar.api.batch.rule.LoadedActiveRule;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.api.utils.DateUtils;
import org.sonarqube.ws.Rules;
import org.sonarqube.ws.Rules.Active;
import org.sonarqube.ws.Rules.Active.Param;
@@ -37,9 +39,6 @@ import org.sonarqube.ws.Rules.Rule;
import org.sonarqube.ws.Rules.SearchResponse;
import org.sonarqube.ws.client.GetRequest;
-import static org.sonar.api.utils.DateUtils.dateToLong;
-import static org.sonar.api.utils.DateUtils.parseDateTime;
-
public class DefaultActiveRulesLoader implements ActiveRulesLoader {
private static final String RULES_SEARCH_URL = "/api/rules/search.protobuf?f=repo,name,severity,lang,internalKey,templateKey,params,actives,createdAt,updatedAt&activation=true";
@@ -106,8 +105,8 @@ public class DefaultActiveRulesLoader implements ActiveRulesLoader {
loadedRule.setRuleKey(RuleKey.parse(r.getKey()));
loadedRule.setName(r.getName());
loadedRule.setSeverity(active.getSeverity());
- loadedRule.setCreatedAt(dateToLong(parseDateTime(active.getCreatedAt())));
- loadedRule.setUpdatedAt(dateToLong(parseDateTime(active.getUpdatedAt())));
+ loadedRule.setCreatedAt(DateUtils.dateToLong(DateUtils.parseDateTime(active.getCreatedAt())));
+ loadedRule.setUpdatedAt(DateUtils.dateToLong(DateUtils.parseDateTime(active.getUpdatedAt())));
loadedRule.setLanguage(r.getLang());
loadedRule.setInternalKey(r.getInternalKey());
if (r.hasTemplateKey()) {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRule.java
deleted file mode 100644
index d53859ad348..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRule.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.CheckForNull;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.rule.Rule;
-import org.sonar.api.batch.rule.RuleParam;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rule.RuleStatus;
-
-@Immutable
-public class DefaultRule implements Rule {
-
- private final RuleKey key;
- private final Integer id;
- private final String name;
- private final String severity;
- private final String type;
- private final String description;
- private final String internalKey;
- private final RuleStatus status;
- private final Map<String, RuleParam> params;
-
- DefaultRule(NewRule newRule) {
- this.key = newRule.key;
- this.id = newRule.id;
- this.name = newRule.name;
- this.severity = newRule.severity;
- this.type = newRule.type;
- this.description = newRule.description;
- this.internalKey = newRule.internalKey;
- this.status = newRule.status;
-
- Map<String, RuleParam> builder = new HashMap<>();
- for (NewRuleParam newRuleParam : newRule.params.values()) {
- builder.put(newRuleParam.key, new DefaultRuleParam(newRuleParam));
- }
- params = Collections.unmodifiableMap(builder);
- }
-
- @Override
- public RuleKey key() {
- return key;
- }
-
- @CheckForNull
- public Integer id() {
- return id;
- }
-
- @Override
- public String name() {
- return name;
- }
-
- @Override
- public String severity() {
- return severity;
- }
-
- @CheckForNull
- public String type() {
- return type;
- }
-
- @Override
- public String description() {
- return description;
- }
-
- @Override
- public String internalKey() {
- return internalKey;
- }
-
- @Override
- public RuleStatus status() {
- return status;
- }
-
- @Override
- public RuleParam param(String paramKey) {
- return params.get(paramKey);
- }
-
- @Override
- public Collection<RuleParam> params() {
- return params.values();
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRuleParam.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRuleParam.java
deleted file mode 100644
index 31fed46d547..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRuleParam.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import org.sonar.api.batch.rule.RuleParam;
-
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-
-@Immutable
-class DefaultRuleParam implements RuleParam {
-
- private final String key;
- private final String description;
-
- DefaultRuleParam(NewRuleParam p) {
- this.key = p.key;
- this.description = p.description;
- }
-
- @Override
- public String key() {
- return key;
- }
-
- @Override
- @Nullable
- public String description() {
- return description;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRules.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRules.java
deleted file mode 100644
index efcc7104b6e..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRules.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-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 java.util.stream.Collectors;
-import javax.annotation.concurrent.Immutable;
-import org.sonar.api.batch.rule.Rule;
-import org.sonar.api.batch.rule.Rules;
-import org.sonar.api.rule.RuleKey;
-
-@Immutable
-class DefaultRules implements Rules {
- private final Map<String, List<Rule>> rulesByRepository;
- private final Map<String, Map<String, List<Rule>>> rulesByRepositoryAndInternalKey;
- private final Map<RuleKey, Rule> rulesByRuleKey;
-
- DefaultRules(Collection<NewRule> newRules) {
- Map<String, List<Rule>> rulesByRepositoryBuilder = new HashMap<>();
- Map<String, Map<String, List<Rule>>> rulesByRepositoryAndInternalKeyBuilder = new HashMap<>();
- Map<RuleKey, Rule> rulesByRuleKeyBuilder = new HashMap<>();
-
- for (NewRule newRule : newRules) {
- DefaultRule r = new DefaultRule(newRule);
- rulesByRuleKeyBuilder.put(r.key(), r);
- rulesByRepositoryBuilder.computeIfAbsent(r.key().repository(), x -> new ArrayList<>()).add(r);
- addToTable(rulesByRepositoryAndInternalKeyBuilder, r);
- }
-
- rulesByRuleKey = Collections.unmodifiableMap(rulesByRuleKeyBuilder);
- rulesByRepository = Collections.unmodifiableMap(rulesByRepositoryBuilder);
- rulesByRepositoryAndInternalKey = Collections.unmodifiableMap(rulesByRepositoryAndInternalKeyBuilder);
- }
-
- private static void addToTable(Map<String, Map<String, List<Rule>>> rulesByRepositoryAndInternalKeyBuilder, DefaultRule r) {
- if (r.internalKey() == null) {
- return;
- }
-
- rulesByRepositoryAndInternalKeyBuilder
- .computeIfAbsent(r.key().repository(), x -> new HashMap<>())
- .computeIfAbsent(r.internalKey(), x -> new ArrayList<>())
- .add(r);
- }
-
- @Override
- public Rule find(RuleKey ruleKey) {
- return rulesByRuleKey.get(ruleKey);
- }
-
- @Override
- public Collection<Rule> findAll() {
- return rulesByRepository.values().stream().flatMap(List::stream).collect(Collectors.toList());
- }
-
- @Override
- public Collection<Rule> findByRepository(String repository) {
- return rulesByRepository.getOrDefault(repository, Collections.emptyList());
- }
-
- @Override
- public Collection<Rule> findByInternalKey(String repository, String internalKey) {
- return rulesByRepositoryAndInternalKey
- .getOrDefault(repository, Collections.emptyMap())
- .getOrDefault(internalKey, Collections.emptyList());
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRulesLoader.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRulesLoader.java
index 61a97e00921..cc745877ae9 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRulesLoader.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/DefaultRulesLoader.java
@@ -23,7 +23,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.commons.io.IOUtils;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonarqube.ws.Rules.ListResponse;
import org.sonarqube.ws.Rules.ListResponse.Rule;
import org.sonarqube.ws.client.GetRequest;
@@ -31,9 +31,9 @@ import org.sonarqube.ws.client.GetRequest;
public class DefaultRulesLoader implements RulesLoader {
private static final String RULES_SEARCH_URL = "/api/rules/list.protobuf";
- private final ScannerWsClient wsClient;
+ private final DefaultScannerWsClient wsClient;
- public DefaultRulesLoader(ScannerWsClient wsClient) {
+ public DefaultRulesLoader(DefaultScannerWsClient wsClient) {
this.wsClient = wsClient;
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/LoadedActiveRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/LoadedActiveRule.java
deleted file mode 100644
index cb50dade254..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/LoadedActiveRule.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import java.util.Map;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import org.sonar.api.rule.RuleKey;
-
-public class LoadedActiveRule {
- private RuleKey ruleKey;
- private String severity;
- private String name;
- private String language;
- private Map<String, String> params;
- private long createdAt;
- private long updatedAt;
- private String templateRuleKey;
- private String internalKey;
-
- public RuleKey getRuleKey() {
- return ruleKey;
- }
-
- public void setRuleKey(RuleKey ruleKey) {
- this.ruleKey = ruleKey;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getSeverity() {
- return severity;
- }
-
- public void setSeverity(String severity) {
- this.severity = severity;
- }
-
- public String getLanguage() {
- return language;
- }
-
- public void setLanguage(String language) {
- this.language = language;
- }
-
- public Map<String, String> getParams() {
- return params;
- }
-
- public void setParams(Map<String, String> params) {
- this.params = params;
- }
-
- public long getCreatedAt() {
- return createdAt;
- }
-
- public void setCreatedAt(long createdAt) {
- this.createdAt = createdAt;
- }
-
- public long getUpdatedAt() {
- return updatedAt;
- }
-
- public void setUpdatedAt(long updatedAt) {
- this.updatedAt = updatedAt;
- }
-
- @CheckForNull
- public String getTemplateRuleKey() {
- return templateRuleKey;
- }
-
- public void setTemplateRuleKey(@Nullable String templateRuleKey) {
- this.templateRuleKey = templateRuleKey;
- }
-
- public String getInternalKey() {
- return internalKey;
- }
-
- public void setInternalKey(String internalKey) {
- this.internalKey = internalKey;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewActiveRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewActiveRule.java
deleted file mode 100644
index 10867a5b29d..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewActiveRule.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.Immutable;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rule.Severity;
-
-/**
- * @since 4.2
- */
-@Immutable
-public class NewActiveRule {
- final RuleKey ruleKey;
- final String name;
- final String severity;
- final Map<String, String> params;
- final long createdAt;
- final long updatedAt;
- final String internalKey;
- final String language;
- final String templateRuleKey;
- final String qProfileKey;
-
- NewActiveRule(Builder builder) {
- this.ruleKey = builder.ruleKey;
- this.name = builder.name;
- this.severity = builder.severity;
- this.params = builder.params;
- this.createdAt = builder.createdAt;
- this.updatedAt = builder.updatedAt;
- this.internalKey = builder.internalKey;
- this.language = builder.language;
- this.templateRuleKey = builder.templateRuleKey;
- this.qProfileKey = builder.qProfileKey;
- }
-
- public static class Builder {
- private RuleKey ruleKey;
- private String name;
- private String severity = Severity.defaultSeverity();
- private Map<String, String> params = new HashMap<>();
- private long createdAt;
- private long updatedAt;
- private String internalKey;
- private String language;
- private String templateRuleKey;
- private String qProfileKey;
-
- public Builder setRuleKey(RuleKey ruleKey) {
- this.ruleKey = ruleKey;
- return this;
- }
-
- public Builder setName(String name) {
- this.name = name;
- return this;
- }
-
- public Builder setSeverity(@Nullable String severity) {
- this.severity = StringUtils.defaultIfBlank(severity, Severity.defaultSeverity());
- return this;
- }
-
- public Builder setParam(String key, @Nullable String value) {
- // possible improvement : check that the param key exists in rule definition
- if (value == null) {
- params.remove(key);
- } else {
- params.put(key, value);
- }
- return this;
- }
-
- public Builder setCreatedAt(long createdAt) {
- this.createdAt = createdAt;
- return this;
- }
-
- public Builder setUpdatedAt(long updatedAt) {
- this.updatedAt = updatedAt;
- return this;
- }
-
- public Builder setInternalKey(@Nullable String internalKey) {
- this.internalKey = internalKey;
- return this;
- }
-
- public Builder setLanguage(@Nullable String language) {
- this.language = language;
- return this;
- }
-
- public Builder setTemplateRuleKey(@Nullable String templateRuleKey) {
- this.templateRuleKey = templateRuleKey;
- return this;
- }
-
- public Builder setQProfileKey(String qProfileKey) {
- this.qProfileKey = qProfileKey;
- return this;
- }
-
- public NewActiveRule build() {
- return new NewActiveRule(this);
- }
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRule.java
deleted file mode 100644
index 179768d1c7b..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRule.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.Nullable;
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rule.RuleStatus;
-import org.sonar.api.rule.Severity;
-
-public class NewRule {
-
- private static final String DEFAULT_SEVERITY = Severity.defaultSeverity();
-
- final RuleKey key;
- Integer id;
- String name;
- String description;
- String severity = DEFAULT_SEVERITY;
- String type;
- String internalKey;
- RuleStatus status = RuleStatus.defaultStatus();
- Map<String, NewRuleParam> params = new HashMap<>();
-
- public NewRule(RuleKey key) {
- this.key = key;
- }
-
- public NewRule setId(@Nullable Integer id) {
- this.id = id;
- return this;
- }
-
- public NewRule setDescription(@Nullable String description) {
- this.description = description;
- return this;
- }
-
- public NewRule setName(@Nullable String s) {
- this.name = s;
- return this;
- }
-
- public NewRule setSeverity(@Nullable String severity) {
- this.severity = StringUtils.defaultIfBlank(severity, DEFAULT_SEVERITY);
- return this;
- }
-
- public NewRule setType(@Nullable String type) {
- this.type = type;
- return this;
- }
-
- public NewRule setStatus(@Nullable RuleStatus s) {
- this.status = (RuleStatus) ObjectUtils.defaultIfNull(s, RuleStatus.defaultStatus());
- return this;
- }
-
- public NewRule setInternalKey(@Nullable String s) {
- this.internalKey = s;
- return this;
- }
-
- public NewRuleParam addParam(String paramKey) {
- if (params.containsKey(paramKey)) {
- throw new IllegalStateException(String.format("Parameter '%s' already exists on rule '%s'", paramKey, key));
- }
- NewRuleParam param = new NewRuleParam(paramKey);
- params.put(paramKey, param);
- return param;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRuleParam.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRuleParam.java
deleted file mode 100644
index 9fa482553c5..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/NewRuleParam.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import javax.annotation.Nullable;
-
-public class NewRuleParam {
- final String key;
- String description;
-
- NewRuleParam(String key) {
- this.key = key;
- }
-
- public NewRuleParam setDescription(@Nullable String s) {
- description = s;
- return this;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesBuilder.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesBuilder.java
deleted file mode 100644
index 3d1ccb33db5..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesBuilder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import org.sonar.api.batch.rule.Rules;
-import org.sonar.api.rule.RuleKey;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * For unit testing and internal use only.
- *
- * @since 4.2
- */
-
-public class RulesBuilder {
-
- private final Map<RuleKey, NewRule> map = new HashMap<>();
-
- public NewRule add(RuleKey key) {
- if (map.containsKey(key)) {
- throw new IllegalStateException(String.format("Rule '%s' already exists", key));
- }
- NewRule newRule = new NewRule(key);
- map.put(key, newRule);
- return newRule;
- }
-
- public Rules build() {
- return new DefaultRules(map.values());
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesProvider.java
index a0c89c2d6f0..3b365ac3c71 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/rule/RulesProvider.java
@@ -21,7 +21,9 @@ package org.sonar.scanner.rule;
import java.util.List;
import org.picocontainer.injectors.ProviderAdapter;
+import org.sonar.api.batch.rule.NewRule;
import org.sonar.api.batch.rule.Rules;
+import org.sonar.api.impl.rule.RulesBuilder;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/DefaultInputModuleHierarchy.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/DefaultInputModuleHierarchy.java
index aa6cbeb0db1..108a6dc7285 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/DefaultInputModuleHierarchy.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/DefaultInputModuleHierarchy.java
@@ -28,8 +28,8 @@ import java.util.Map;
import javax.annotation.CheckForNull;
import javax.annotation.concurrent.Immutable;
import org.sonar.api.scan.filesystem.PathResolver;
-import org.sonar.scanner.fs.AbstractProjectOrModule;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.AbstractProjectOrModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
@Immutable
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputModuleHierarchyProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputModuleHierarchyProvider.java
index da0b8781dde..ef806c5b2ab 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputModuleHierarchyProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputModuleHierarchyProvider.java
@@ -26,8 +26,8 @@ import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.scan.filesystem.ScannerComponentIdGenerator;
public class InputModuleHierarchyProvider extends ProviderAdapter {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputProjectProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputProjectProvider.java
index 1219f2871dd..9500e47d8f7 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputProjectProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/InputProjectProvider.java
@@ -24,7 +24,7 @@ import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.scan.filesystem.ScannerComponentIdGenerator;
public class InputProjectProvider extends ProviderAdapter {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfigurationProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfigurationProvider.java
index 21d241c23f4..dab9cc531fd 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfigurationProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleConfigurationProvider.java
@@ -27,7 +27,7 @@ import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.scanner.bootstrap.GlobalConfiguration;
import org.sonar.scanner.bootstrap.GlobalServerSettings;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
public class ModuleConfigurationProvider extends ProviderAdapter {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleIndexer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleIndexer.java
index 1bc1611097f..c307a20aafc 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleIndexer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleIndexer.java
@@ -20,7 +20,7 @@
package org.sonar.scanner.scan;
import org.picocontainer.Startable;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java
index 1a7a78f93cf..f573dd47e4d 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ModuleScanContainer.java
@@ -23,7 +23,7 @@ import org.sonar.api.scan.filesystem.FileExclusions;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.scanner.bootstrap.ExtensionInstaller;
import org.sonar.scanner.deprecated.perspectives.ScannerPerspectives;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.scan.filesystem.DefaultModuleFileSystem;
import org.sonar.scanner.scan.filesystem.ModuleInputComponentStore;
import org.sonar.scanner.sensor.ModuleSensorContext;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfigurationProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfigurationProvider.java
index 0d17b4a8114..1903ad736eb 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfigurationProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectConfigurationProvider.java
@@ -24,7 +24,7 @@ import java.util.Map;
import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.scanner.bootstrap.GlobalConfiguration;
import org.sonar.scanner.bootstrap.GlobalServerSettings;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
public class ProjectConfigurationProvider extends ProviderAdapter {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectLock.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectLock.java
index 9bf6bf73115..d024d47f7cb 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectLock.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectLock.java
@@ -24,7 +24,7 @@ import java.nio.channels.OverlappingFileLockException;
import java.nio.file.Files;
import java.nio.file.Path;
import org.picocontainer.Startable;
-import org.sonar.scanner.fs.AbstractProjectOrModule;
+import org.sonar.api.impl.fs.AbstractProjectOrModule;
public class ProjectLock implements Startable {
private final DirectoryLock lock;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectReactorBuilder.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectReactorBuilder.java
index 01f181d55f0..e15525df2d2 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectReactorBuilder.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectReactorBuilder.java
@@ -49,11 +49,11 @@ import org.sonar.core.config.IssueExclusionProperties;
import org.sonar.scanner.bootstrap.ProcessedScannerProperties;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.pattern.IssueInclusionPatternInitializer;
-import org.sonar.scanner.util.ScannerUtils;
+import org.sonar.api.impl.utils.ScannerUtils;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
-import static org.sonar.api.config.internal.MultivalueProperty.parseAsCsv;
+import static org.sonar.api.impl.config.MultivalueProperty.parseAsCsv;
/**
* Class that creates a project definition based on a set of properties.
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectScanContainer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectScanContainer.java
index 8cd93d031c4..3fd76637dd5 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectScanContainer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ProjectScanContainer.java
@@ -23,8 +23,11 @@ import com.google.common.annotations.VisibleForTesting;
import javax.annotation.Nullable;
import org.sonar.api.SonarEdition;
import org.sonar.api.SonarRuntime;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
import org.sonar.api.batch.rule.CheckFactory;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.FileMetadata;
+import org.sonar.api.impl.fs.SensorStrategy;
+import org.sonar.api.impl.issue.DefaultNoSonarFilter;
import org.sonar.api.resources.Languages;
import org.sonar.api.resources.ResourceTypes;
import org.sonar.api.scan.filesystem.PathResolver;
@@ -63,10 +66,7 @@ import org.sonar.scanner.cpd.CpdSettings;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
import org.sonar.scanner.deprecated.test.TestPlanBuilder;
import org.sonar.scanner.deprecated.test.TestableBuilder;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.FileMetadata;
import org.sonar.scanner.fs.InputModuleHierarchy;
-import org.sonar.scanner.issue.DefaultNoSonarFilter;
import org.sonar.scanner.issue.IssueFilters;
import org.sonar.scanner.issue.IssuePublisher;
import org.sonar.scanner.issue.ignore.EnforceIssuesFilter;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ScanProperties.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ScanProperties.java
index 2fa3bbeaf02..6beb97470af 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ScanProperties.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/ScanProperties.java
@@ -24,7 +24,7 @@ import java.nio.file.Paths;
import java.util.Optional;
import org.sonar.api.config.Configuration;
import org.sonar.api.utils.MessageException;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import static org.sonar.core.config.ScannerProperties.BRANCH_NAME;
import static org.sonar.core.config.ScannerProperties.ORGANIZATION;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/WorkDirectoriesInitializer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/WorkDirectoriesInitializer.java
index 8c5b01e4b2b..03b39315cc0 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/WorkDirectoriesInitializer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/WorkDirectoriesInitializer.java
@@ -25,7 +25,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Iterator;
import org.sonar.core.util.FileUtils;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
/**
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractCoverageAndDuplicationExclusions.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractCoverageAndDuplicationExclusions.java
index 1bcbad7f75a..495b65448d4 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractCoverageAndDuplicationExclusions.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractCoverageAndDuplicationExclusions.java
@@ -28,7 +28,7 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.utils.WildcardPattern;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import static java.util.stream.Collectors.toList;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractExclusionFilters.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractExclusionFilters.java
index 9a348fee7f5..65aca8bd046 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractExclusionFilters.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AbstractExclusionFilters.java
@@ -28,7 +28,7 @@ import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.internal.PathPattern;
+import org.sonar.api.impl.fs.PathPattern;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicates.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicates.java
index 6c1bb65332a..299cb5a268c 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicates.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicates.java
@@ -20,7 +20,7 @@
package org.sonar.scanner.scan.filesystem;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.predicates.AbstractFilePredicate;
+import org.sonar.api.impl.fs.predicates.AbstractFilePredicate;
/**
* Additional {@link org.sonar.api.batch.fs.FilePredicate}s that are
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultModuleFileSystem.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultModuleFileSystem.java
index d25948764dd..3792a52e8a2 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultModuleFileSystem.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultModuleFileSystem.java
@@ -20,13 +20,14 @@
package org.sonar.scanner.scan.filesystem;
import com.google.common.annotations.VisibleForTesting;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultFileSystem;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.predicates.DefaultFilePredicates;
public class DefaultModuleFileSystem extends DefaultFileSystem {
public DefaultModuleFileSystem(ModuleInputComponentStore moduleInputFileCache, DefaultInputModule module) {
- super(module.getBaseDir(), moduleInputFileCache);
+ super(module.getBaseDir(), moduleInputFileCache, new DefaultFilePredicates(module.getBaseDir()));
initFields(module);
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultProjectFileSystem.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultProjectFileSystem.java
index 294b0b946d1..d7892ce887b 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultProjectFileSystem.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/DefaultProjectFileSystem.java
@@ -20,13 +20,14 @@
package org.sonar.scanner.scan.filesystem;
import com.google.common.annotations.VisibleForTesting;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultFileSystem;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.predicates.DefaultFilePredicates;
public class DefaultProjectFileSystem extends DefaultFileSystem {
public DefaultProjectFileSystem(InputComponentStore inputComponentStore, DefaultInputProject project) {
- super(project.getBaseDir(), inputComponentStore);
+ super(project.getBaseDir(), inputComponentStore, new DefaultFilePredicates(project.getBaseDir()));
setFields(project);
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java
index 56c21333962..c01df402b00 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java
@@ -30,16 +30,16 @@ import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.batch.fs.InputFileFilter;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
+import org.sonar.api.impl.fs.SensorStrategy;
import org.sonar.api.batch.scm.IgnoreCommand;
import org.sonar.api.notifications.AnalysisWarnings;
import org.sonar.api.utils.MessageException;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultIndexedFile;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultIndexedFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsLoader;
import org.sonar.scanner.scan.ScanProperties;
import org.sonar.scanner.util.ProgressReport;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/InputComponentStore.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/InputComponentStore.java
index 4eab927136d..eb33beb7e53 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/InputComponentStore.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/InputComponentStore.java
@@ -35,10 +35,10 @@ import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import org.sonar.api.batch.fs.InputComponent;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.predicates.FileExtensionPredicate;
+import org.sonar.api.impl.fs.DefaultFileSystem;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.predicates.FileExtensionPredicate;
import org.sonar.scanner.scan.branch.BranchConfiguration;
/**
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java
index 57fbb86e23d..7b699f2befd 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java
@@ -32,7 +32,7 @@ import javax.annotation.concurrent.ThreadSafe;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.sonar.api.batch.fs.internal.PathPattern;
+import org.sonar.api.impl.fs.PathPattern;
import org.sonar.api.config.Configuration;
import org.sonar.api.utils.MessageException;
import org.sonar.scanner.repository.language.Language;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/MetadataGenerator.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/MetadataGenerator.java
index 2da2f6db0c4..c15c9cdb5c6 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/MetadataGenerator.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/MetadataGenerator.java
@@ -23,11 +23,11 @@ import com.google.common.annotations.VisibleForTesting;
import java.io.InputStream;
import java.nio.charset.Charset;
import org.sonar.api.batch.fs.InputFile.Type;
-import org.sonar.api.batch.fs.internal.Metadata;
+import org.sonar.api.impl.fs.Metadata;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.FileMetadata;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.FileMetadata;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsLoader;
public class MetadataGenerator {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleCoverageAndDuplicationExclusions.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleCoverageAndDuplicationExclusions.java
index 3ef961f83e2..2eb7d6805f4 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleCoverageAndDuplicationExclusions.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleCoverageAndDuplicationExclusions.java
@@ -20,7 +20,7 @@
package org.sonar.scanner.scan.filesystem;
import javax.annotation.concurrent.Immutable;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.scan.ModuleConfiguration;
@Immutable
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStore.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStore.java
index e6d52849c63..23d7e257731 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStore.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStore.java
@@ -23,8 +23,8 @@ import java.util.SortedSet;
import org.sonar.api.batch.ScannerSide;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputModule;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
-import org.sonar.scanner.fs.DefaultFileSystem;
+import org.sonar.api.impl.fs.SensorStrategy;
+import org.sonar.api.impl.fs.DefaultFileSystem;
@ScannerSide
public class ModuleInputComponentStore extends DefaultFileSystem.Cache {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectCoverageAndDuplicationExclusions.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectCoverageAndDuplicationExclusions.java
index 4ab146afb27..e52ab6cc1bb 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectCoverageAndDuplicationExclusions.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectCoverageAndDuplicationExclusions.java
@@ -20,7 +20,7 @@
package org.sonar.scanner.scan.filesystem;
import javax.annotation.concurrent.Immutable;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.scan.ProjectConfiguration;
@Immutable
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectFileIndexer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectFileIndexer.java
index 118b3eb5567..b5633d772eb 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectFileIndexer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/ProjectFileIndexer.java
@@ -45,7 +45,7 @@ import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.scanner.bootstrap.GlobalConfiguration;
import org.sonar.scanner.bootstrap.GlobalServerSettings;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.scan.ModuleConfiguration;
import org.sonar.scanner.scan.ModuleConfigurationProvider;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/StatusDetection.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/StatusDetection.java
index 2cd3f8d5240..9de8b028234 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/StatusDetection.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/StatusDetection.java
@@ -22,7 +22,7 @@ package org.sonar.scanner.scan.filesystem;
import javax.annotation.concurrent.Immutable;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.repository.FileData;
import org.sonar.scanner.repository.ProjectRepositoriesSupplier;
import org.sonar.scanner.scm.ScmChangedFiles;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/DefaultBlameOutput.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/DefaultBlameOutput.java
index e2742ea4d3a..885de1be663 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/DefaultBlameOutput.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/DefaultBlameOutput.java
@@ -34,7 +34,7 @@ import org.sonar.api.batch.scm.BlameCommand.BlameOutput;
import org.sonar.api.batch.scm.BlameLine;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Changesets.Builder;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java
index 6e93b9d4ad6..4c65b2843e8 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmChangedFilesProvider.java
@@ -27,9 +27,9 @@ import org.sonar.api.batch.scm.ScmProvider;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.api.utils.log.Profiler;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.scan.branch.BranchConfiguration;
-import org.sonar.scanner.util.ScannerUtils;
+import org.sonar.api.impl.utils.ScannerUtils;
public class ScmChangedFilesProvider extends ProviderAdapter {
private static final Logger LOG = Loggers.get(ScmChangedFilesProvider.class);
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmPublisher.java
index 7b048096dab..834d224ec82 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/scm/ScmPublisher.java
@@ -29,7 +29,7 @@ import org.sonar.api.batch.fs.InputFile.Status;
import org.sonar.api.batch.scm.ScmProvider;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Changesets.Builder;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorOptimizer.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorOptimizer.java
index 95b473e05ce..cc089182c6b 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorOptimizer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorOptimizer.java
@@ -25,6 +25,7 @@ import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.FileSystem;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.config.Configuration;
+import org.sonar.api.impl.sensor.DefaultSensorDescriptor;
public abstract class AbstractSensorOptimizer {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorWrapper.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorWrapper.java
index caba9bc9101..d5109c87943 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorWrapper.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/AbstractSensorWrapper.java
@@ -20,6 +20,7 @@
package org.sonar.scanner.sensor;
import org.sonar.api.batch.sensor.SensorContext;
+import org.sonar.api.impl.sensor.DefaultSensorDescriptor;
import org.sonar.api.scanner.sensor.ProjectSensor;
public abstract class AbstractSensorWrapper<G extends ProjectSensor> {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAdHocRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAdHocRule.java
deleted file mode 100644
index 1dde73e2c5c..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAdHocRule.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.rule.AdHocRule;
-import org.sonar.api.batch.sensor.rule.NewAdHocRule;
-import org.sonar.api.rules.RuleType;
-
-import static org.apache.commons.lang.StringUtils.isNotBlank;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultAdHocRule extends DefaultStorable implements AdHocRule, NewAdHocRule {
- private Severity severity;
- private RuleType type;
- private String name;
- private String description;
- private String engineId;
- private String ruleId;
-
- public DefaultAdHocRule() {
- super(null);
- }
-
- public DefaultAdHocRule(@Nullable SensorStorage storage) {
- super(storage);
- }
-
- @Override
- public DefaultAdHocRule severity(Severity severity) {
- this.severity = severity;
- return this;
- }
-
- @Override
- public String engineId() {
- return engineId;
- }
-
- @Override
- public String ruleId() {
- return ruleId;
- }
-
- @Override
- public String name() {
- return name;
- }
-
- @CheckForNull
- @Override
- public String description() {
- return description;
- }
-
- @Override
- public Severity severity() {
- return this.severity;
- }
-
- @Override
- public void doSave() {
- checkState(isNotBlank(engineId), "Engine id is mandatory on ad hoc rule");
- checkState(isNotBlank(ruleId), "Rule id is mandatory on ad hoc rule");
- checkState(isNotBlank(name), "Name is mandatory on every ad hoc rule");
- checkState(severity != null, "Severity is mandatory on every ad hoc rule");
- checkState(type != null, "Type is mandatory on every ad hoc rule");
- storage.store(this);
- }
-
- @Override
- public RuleType type() {
- return type;
- }
-
- @Override
- public DefaultAdHocRule engineId(String engineId) {
- this.engineId = engineId;
- return this;
- }
-
- @Override
- public DefaultAdHocRule ruleId(String ruleId) {
- this.ruleId = ruleId;
- return this;
- }
-
- @Override
- public DefaultAdHocRule name(String name) {
- this.name = name;
- return this;
- }
-
- @Override
- public DefaultAdHocRule description(@Nullable String description) {
- this.description = description;
- return this;
- }
-
- @Override
- public DefaultAdHocRule type(RuleType type) {
- this.type = type;
- return this;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAnalysisError.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAnalysisError.java
deleted file mode 100644
index 3da46d831d7..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultAnalysisError.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextPointer;
-import org.sonar.api.batch.sensor.error.AnalysisError;
-import org.sonar.api.batch.sensor.error.NewAnalysisError;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultAnalysisError extends DefaultStorable implements NewAnalysisError, AnalysisError {
- private InputFile inputFile;
- private String message;
- private TextPointer location;
-
- public DefaultAnalysisError() {
- super(null);
- }
-
- public DefaultAnalysisError(SensorStorage storage) {
- super(storage);
- }
-
- @Override
- public InputFile inputFile() {
- return inputFile;
- }
-
- @Override
- public String message() {
- return message;
- }
-
- @Override
- public TextPointer location() {
- return location;
- }
-
- @Override
- public NewAnalysisError onFile(InputFile inputFile) {
- checkArgument(inputFile != null, "Cannot use a inputFile that is null");
- checkState(this.inputFile == null, "onFile() already called");
- this.inputFile = inputFile;
- return this;
- }
-
- @Override
- public NewAnalysisError message(String message) {
- this.message = message;
- return this;
- }
-
- @Override
- public NewAnalysisError at(TextPointer location) {
- checkState(this.location == null, "at() already called");
- this.location = location;
- return this;
- }
-
- @Override
- protected void doSave() {
- requireNonNull(this.inputFile, "inputFile is mandatory on AnalysisError");
- storage.store(this);
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCoverage.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCoverage.java
deleted file mode 100644
index 5a2f04811b0..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCoverage.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.Collections;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.sensor.coverage.CoverageType;
-import org.sonar.api.batch.sensor.coverage.NewCoverage;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.DefaultInputFile;
-
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultCoverage extends DefaultStorable implements NewCoverage {
-
- private InputFile inputFile;
- private CoverageType type;
- private int totalCoveredLines = 0;
- private int totalConditions = 0;
- private int totalCoveredConditions = 0;
- private SortedMap<Integer, Integer> hitsByLine = new TreeMap<>();
- private SortedMap<Integer, Integer> conditionsByLine = new TreeMap<>();
- private SortedMap<Integer, Integer> coveredConditionsByLine = new TreeMap<>();
-
- public DefaultCoverage() {
- super();
- }
-
- public DefaultCoverage(@Nullable SensorStorage storage) {
- super(storage);
- }
-
- @Override
- public DefaultCoverage onFile(InputFile inputFile) {
- this.inputFile = inputFile;
- return this;
- }
-
- public InputFile inputFile() {
- return inputFile;
- }
-
- @Override
- public NewCoverage ofType(CoverageType type) {
- this.type = requireNonNull(type, "type can't be null");
- return this;
- }
-
- public CoverageType type() {
- return type;
- }
-
- @Override
- public NewCoverage lineHits(int line, int hits) {
- validateFile();
- if (isExcluded()) {
- return this;
- }
- validateLine(line);
-
- if (!hitsByLine.containsKey(line)) {
- hitsByLine.put(line, hits);
- if (hits > 0) {
- totalCoveredLines += 1;
- }
- }
- return this;
- }
-
- private void validateLine(int line) {
- checkState(line <= inputFile.lines(), "Line %s is out of range in the file %s (lines: %s)", line, inputFile, inputFile.lines());
- checkState(line > 0, "Line number must be strictly positive: %s", line);
- }
-
- private void validateFile() {
- requireNonNull(inputFile, "Call onFile() first");
- }
-
- @Override
- public NewCoverage conditions(int line, int conditions, int coveredConditions) {
- validateFile();
- if (isExcluded()) {
- return this;
- }
- validateLine(line);
-
- if (conditions > 0 && !conditionsByLine.containsKey(line)) {
- totalConditions += conditions;
- totalCoveredConditions += coveredConditions;
- conditionsByLine.put(line, conditions);
- coveredConditionsByLine.put(line, coveredConditions);
- }
- return this;
- }
-
- public int coveredLines() {
- return totalCoveredLines;
- }
-
- public int linesToCover() {
- return hitsByLine.size();
- }
-
- public int conditions() {
- return totalConditions;
- }
-
- public int coveredConditions() {
- return totalCoveredConditions;
- }
-
- public SortedMap<Integer, Integer> hitsByLine() {
- return Collections.unmodifiableSortedMap(hitsByLine);
- }
-
- public SortedMap<Integer, Integer> conditionsByLine() {
- return Collections.unmodifiableSortedMap(conditionsByLine);
- }
-
- public SortedMap<Integer, Integer> coveredConditionsByLine() {
- return Collections.unmodifiableSortedMap(coveredConditionsByLine);
- }
-
- @Override
- public void doSave() {
- validateFile();
- if (!isExcluded()) {
- storage.store(this);
- }
- }
-
- private boolean isExcluded() {
- return ((DefaultInputFile) inputFile).isExcludedForCoverage();
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCpdTokens.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCpdTokens.java
deleted file mode 100644
index d470ab7c6c1..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultCpdTokens.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.cpd.NewCpdTokens;
-import org.sonar.api.batch.sensor.cpd.internal.TokensLine;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.utils.log.Logger;
-import org.sonar.api.utils.log.Loggers;
-import org.sonar.scanner.fs.DefaultInputFile;
-
-import static java.util.Collections.unmodifiableList;
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultCpdTokens extends DefaultStorable implements NewCpdTokens {
- private static final Logger LOG = Loggers.get(DefaultCpdTokens.class);
- private final List<TokensLine> result = new ArrayList<>();
- private DefaultInputFile inputFile;
- private int startLine = Integer.MIN_VALUE;
- private int startIndex = 0;
- private int currentIndex = 0;
- private StringBuilder sb = new StringBuilder();
- private TextRange lastRange;
- private boolean loggedTestCpdWarning = false;
-
- public DefaultCpdTokens(SensorStorage storage) {
- super(storage);
- }
-
- @Override
- public DefaultCpdTokens onFile(InputFile inputFile) {
- this.inputFile = (DefaultInputFile) requireNonNull(inputFile, "file can't be null");
- return this;
- }
-
- public InputFile inputFile() {
- return inputFile;
- }
-
- @Override
- public NewCpdTokens addToken(int startLine, int startLineOffset, int endLine, int endLineOffset, String image) {
- checkInputFileNotNull();
- TextRange newRange;
- try {
- newRange = inputFile.newRange(startLine, startLineOffset, endLine, endLineOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to register token in file " + inputFile, e);
- }
- return addToken(newRange, image);
- }
-
- @Override
- public DefaultCpdTokens addToken(TextRange range, String image) {
- requireNonNull(range, "Range should not be null");
- requireNonNull(image, "Image should not be null");
- checkInputFileNotNull();
- if (isExcludedForDuplication()) {
- return this;
- }
- checkState(lastRange == null || lastRange.end().compareTo(range.start()) <= 0,
- "Tokens of file %s should be provided in order.\nPrevious token: %s\nLast token: %s", inputFile, lastRange, range);
-
- int line = range.start().line();
- if (line != startLine) {
- addNewTokensLine(result, startIndex, currentIndex, startLine, sb);
- startIndex = currentIndex + 1;
- startLine = line;
- }
- currentIndex++;
- sb.append(image);
- lastRange = range;
-
- return this;
- }
-
- private boolean isExcludedForDuplication() {
- if (inputFile.isExcludedForDuplication()) {
- return true;
- }
- if (inputFile.type() == InputFile.Type.TEST) {
- if (!loggedTestCpdWarning) {
- LOG.warn("Duplication reported for '{}' will be ignored because it's a test file.", inputFile);
- loggedTestCpdWarning = true;
- }
- return true;
- }
- return false;
- }
-
- public List<TokensLine> getTokenLines() {
- return unmodifiableList(new ArrayList<>(result));
- }
-
- private static void addNewTokensLine(List<TokensLine> result, int startUnit, int endUnit, int startLine, StringBuilder sb) {
- if (sb.length() != 0) {
- result.add(new TokensLine(startUnit, endUnit, startLine, sb.toString()));
- sb.setLength(0);
- }
- }
-
- @Override
- protected void doSave() {
- checkState(inputFile != null, "Call onFile() first");
- if (isExcludedForDuplication()) {
- return;
- }
- addNewTokensLine(result, startIndex, currentIndex, startLine, sb);
- storage.store(this);
- }
-
- private void checkInputFileNotNull() {
- checkState(inputFile != null, "Call onFile() first");
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultExternalIssue.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultExternalIssue.java
deleted file mode 100644
index 7141a3ec39d..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultExternalIssue.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import javax.annotation.Nullable;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.issue.ExternalIssue;
-import org.sonar.api.batch.sensor.issue.NewExternalIssue;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rules.RuleType;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.issue.AbstractDefaultIssue;
-
-import static java.lang.String.format;
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultExternalIssue extends AbstractDefaultIssue<DefaultExternalIssue> implements ExternalIssue, NewExternalIssue {
- private Long effort;
- private Severity severity;
- private RuleType type;
- private String engineId;
- private String ruleId;
-
- public DefaultExternalIssue(DefaultInputProject project) {
- this(project, null);
- }
-
- public DefaultExternalIssue(DefaultInputProject project, @Nullable SensorStorage storage) {
- super(project, storage);
- }
-
- @Override
- public DefaultExternalIssue remediationEffortMinutes(@Nullable Long effort) {
- checkArgument(effort == null || effort >= 0, format("effort must be greater than or equal 0 (got %s)", effort));
- this.effort = effort;
- return this;
- }
-
- @Override
- public DefaultExternalIssue severity(Severity severity) {
- this.severity = severity;
- return this;
- }
-
- @Override
- public String engineId() {
- return engineId;
- }
-
- @Override
- public String ruleId() {
- return ruleId;
- }
-
- @Override
- public Severity severity() {
- return this.severity;
- }
-
- @Override
- public Long remediationEffort() {
- return this.effort;
- }
-
- @Override
- public void doSave() {
- requireNonNull(this.engineId, "Engine id is mandatory on external issue");
- requireNonNull(this.ruleId, "Rule id is mandatory on external issue");
- checkState(primaryLocation != null, "Primary location is mandatory on every external issue");
- checkState(primaryLocation.inputComponent().isFile(), "External issues must be located in files");
- checkState(primaryLocation.message() != null, "External issues must have a message");
- checkState(severity != null, "Severity is mandatory on every external issue");
- checkState(type != null, "Type is mandatory on every external issue");
- storage.store(this);
- }
-
- @Override
- public RuleType type() {
- return type;
- }
-
- @Override
- public NewExternalIssue engineId(String engineId) {
- this.engineId = engineId;
- return this;
- }
-
- @Override
- public NewExternalIssue ruleId(String ruleId) {
- this.ruleId = ruleId;
- return this;
- }
-
- @Override
- public DefaultExternalIssue forRule(RuleKey ruleKey) {
- this.engineId = ruleKey.repository();
- this.ruleId = ruleKey.rule();
- return this;
- }
-
- @Override
- public RuleKey ruleKey() {
- if (engineId != null && ruleId != null) {
- return RuleKey.of(RuleKey.EXTERNAL_RULE_REPO_PREFIX + engineId, ruleId);
- }
- return null;
- }
-
- @Override
- public DefaultExternalIssue type(RuleType type) {
- this.type = type;
- return this;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultHighlighting.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultHighlighting.java
deleted file mode 100644
index 0f972804991..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultHighlighting.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
-import org.sonar.api.batch.sensor.highlighting.TypeOfText;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.DefaultInputFile;
-
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultHighlighting extends DefaultStorable implements NewHighlighting {
-
- private final List<SyntaxHighlightingRule> syntaxHighlightingRules;
- private DefaultInputFile inputFile;
-
- public DefaultHighlighting(SensorStorage storage) {
- super(storage);
- syntaxHighlightingRules = new ArrayList<>();
- }
-
- public List<SyntaxHighlightingRule> getSyntaxHighlightingRuleSet() {
- return syntaxHighlightingRules;
- }
-
- private void checkOverlappingBoundaries() {
- if (syntaxHighlightingRules.size() > 1) {
- Iterator<SyntaxHighlightingRule> it = syntaxHighlightingRules.iterator();
- SyntaxHighlightingRule previous = it.next();
- while (it.hasNext()) {
- SyntaxHighlightingRule current = it.next();
- if (previous.range().end().compareTo(current.range().start()) > 0 && (previous.range().end().compareTo(current.range().end()) < 0)) {
- String errorMsg = String.format("Cannot register highlighting rule for characters at %s as it " +
- "overlaps at least one existing rule", current.range());
- throw new IllegalStateException(errorMsg);
- }
- previous = current;
- }
- }
- }
-
- @Override
- public DefaultHighlighting onFile(InputFile inputFile) {
- requireNonNull(inputFile, "file can't be null");
- this.inputFile = (DefaultInputFile) inputFile;
- return this;
- }
-
- public InputFile inputFile() {
- return inputFile;
- }
-
- @Override
- public DefaultHighlighting highlight(int startOffset, int endOffset, TypeOfText typeOfText) {
- checkInputFileNotNull();
- TextRange newRange;
- try {
- newRange = inputFile.newRange(startOffset, endOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to highlight file " + inputFile, e);
- }
- return highlight(newRange, typeOfText);
- }
-
- @Override
- public DefaultHighlighting highlight(int startLine, int startLineOffset, int endLine, int endLineOffset, TypeOfText typeOfText) {
- checkInputFileNotNull();
- TextRange newRange;
- try {
- newRange = inputFile.newRange(startLine, startLineOffset, endLine, endLineOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to highlight file " + inputFile, e);
- }
- return highlight(newRange, typeOfText);
- }
-
- @Override
- public DefaultHighlighting highlight(TextRange range, TypeOfText typeOfText) {
- SyntaxHighlightingRule syntaxHighlightingRule = SyntaxHighlightingRule.create(range, typeOfText);
- this.syntaxHighlightingRules.add(syntaxHighlightingRule);
- return this;
- }
-
- @Override
- protected void doSave() {
- checkInputFileNotNull();
- // Sort rules to avoid variation during consecutive runs
- Collections.sort(syntaxHighlightingRules, (left, right) -> {
- int result = left.range().start().compareTo(right.range().start());
- if (result == 0) {
- result = right.range().end().compareTo(left.range().end());
- }
- return result;
- });
- checkOverlappingBoundaries();
- storage.store(this);
- }
-
- private void checkInputFileNotNull() {
- checkState(inputFile != null, "Call onFile() first");
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultMeasure.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultMeasure.java
deleted file mode 100644
index 1ad7b83ce99..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultMeasure.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.io.Serializable;
-import javax.annotation.Nullable;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.sonar.api.batch.fs.InputComponent;
-import org.sonar.api.batch.measure.Metric;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.measure.Measure;
-import org.sonar.api.batch.sensor.measure.NewMeasure;
-
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultMeasure<G extends Serializable> extends DefaultStorable implements Measure<G>, NewMeasure<G> {
-
- private InputComponent component;
- private Metric<G> metric;
- private G value;
- private boolean fromCore = false;
-
- public DefaultMeasure() {
- super();
- }
-
- public DefaultMeasure(@Nullable SensorStorage storage) {
- super(storage);
- }
-
- @Override
- public DefaultMeasure<G> on(InputComponent component) {
- checkArgument(component != null, "Component can't be null");
- checkState(this.component == null, "on() already called");
- this.component = component;
- return this;
- }
-
- @Override
- public DefaultMeasure<G> forMetric(Metric<G> metric) {
- checkState(this.metric == null, "Metric already defined");
- requireNonNull(metric, "metric should be non null");
- this.metric = metric;
- return this;
- }
-
- @Override
- public DefaultMeasure<G> withValue(G value) {
- checkState(this.value == null, "Measure value already defined");
- requireNonNull(value, "Measure value can't be null");
- this.value = value;
- return this;
- }
-
- /**
- * For internal use.
- */
- public boolean isFromCore() {
- return fromCore;
- }
-
- /**
- * For internal use. Used by core components to bypass check that prevent a plugin to store core measures.
- */
- public DefaultMeasure<G> setFromCore() {
- this.fromCore = true;
- return this;
- }
-
- @Override
- public void doSave() {
- requireNonNull(this.value, "Measure value can't be null");
- requireNonNull(this.metric, "Measure metric can't be null");
- checkState(this.metric.valueType().equals(this.value.getClass()), "Measure value should be of type %s", this.metric.valueType());
- storage.store(this);
- }
-
- @Override
- public Metric<G> metric() {
- return metric;
- }
-
- @Override
- public InputComponent inputComponent() {
- return component;
- }
-
- @Override
- public G value() {
- return value;
- }
-
- // For testing purpose
-
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
- if (obj == this) {
- return true;
- }
- if (obj.getClass() != getClass()) {
- return false;
- }
- DefaultMeasure<?> rhs = (DefaultMeasure<?>) obj;
- return new EqualsBuilder()
- .append(component, rhs.component)
- .append(metric, rhs.metric)
- .append(value, rhs.value)
- .isEquals();
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(27, 45).append(component).append(metric).append(value).toHashCode();
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorDescriptor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorDescriptor.java
deleted file mode 100644
index 1bb74666aaf..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorDescriptor.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.function.Predicate;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.sensor.SensorDescriptor;
-import org.sonar.api.config.Configuration;
-
-import static java.util.Arrays.asList;
-
-public class DefaultSensorDescriptor implements SensorDescriptor {
-
- private String name;
- private String[] languages = new String[0];
- private InputFile.Type type = null;
- private String[] ruleRepositories = new String[0];
- private boolean global = false;
- private Predicate<Configuration> configurationPredicate;
-
- public String name() {
- return name;
- }
-
- public Collection<String> languages() {
- return Arrays.asList(languages);
- }
-
- @Nullable
- public InputFile.Type type() {
- return type;
- }
-
- public Collection<String> ruleRepositories() {
- return Arrays.asList(ruleRepositories);
- }
-
- public Predicate<Configuration> configurationPredicate() {
- return configurationPredicate;
- }
-
- public boolean isGlobal() {
- return global;
- }
-
- @Override
- public DefaultSensorDescriptor name(String name) {
- this.name = name;
- return this;
- }
-
- @Override
- public DefaultSensorDescriptor onlyOnLanguage(String languageKey) {
- return onlyOnLanguages(languageKey);
- }
-
- @Override
- public DefaultSensorDescriptor onlyOnLanguages(String... languageKeys) {
- this.languages = languageKeys;
- return this;
- }
-
- @Override
- public DefaultSensorDescriptor onlyOnFileType(InputFile.Type type) {
- this.type = type;
- return this;
- }
-
- @Override
- public DefaultSensorDescriptor createIssuesForRuleRepository(String... repositoryKey) {
- return createIssuesForRuleRepositories(repositoryKey);
- }
-
- @Override
- public DefaultSensorDescriptor createIssuesForRuleRepositories(String... repositoryKeys) {
- this.ruleRepositories = repositoryKeys;
- return this;
- }
-
- @Override
- public DefaultSensorDescriptor requireProperty(String... propertyKey) {
- return requireProperties(propertyKey);
- }
-
- @Override
- public DefaultSensorDescriptor requireProperties(String... propertyKeys) {
- this.configurationPredicate = config -> asList(propertyKeys).stream().allMatch(config::hasKey);
- return this;
- }
-
- @Override
- public SensorDescriptor global() {
- this.global = true;
- return this;
- }
-
- @Override
- public SensorDescriptor onlyWhenConfiguration(Predicate<Configuration> configurationPredicate) {
- this.configurationPredicate = configurationPredicate;
- return this;
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorStorage.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorStorage.java
index 13b72b07f7b..8cece1eba14 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorStorage.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSensorStorage.java
@@ -46,6 +46,15 @@ import org.sonar.api.batch.sensor.measure.Measure;
import org.sonar.api.batch.sensor.rule.AdHocRule;
import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
import org.sonar.api.config.Configuration;
+import org.sonar.api.impl.fs.DefaultInputComponent;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.sensor.DefaultCoverage;
+import org.sonar.api.impl.sensor.DefaultCpdTokens;
+import org.sonar.api.impl.sensor.DefaultHighlighting;
+import org.sonar.api.impl.sensor.DefaultMeasure;
+import org.sonar.api.impl.sensor.DefaultSignificantCode;
+import org.sonar.api.impl.sensor.DefaultSymbolTable;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.utils.KeyValueFormat;
import org.sonar.api.utils.log.Logger;
@@ -55,9 +64,6 @@ import org.sonar.core.util.CloseableIterator;
import org.sonar.duplications.block.Block;
import org.sonar.duplications.internal.pmd.PmdBlockChunker;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
-import org.sonar.scanner.fs.DefaultInputComponent;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
import org.sonar.scanner.issue.IssuePublisher;
import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.FileStructure;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSignificantCode.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSignificantCode.java
deleted file mode 100644
index 04ff5f16e0b..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSignificantCode.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.SortedMap;
-import java.util.TreeMap;
-import javax.annotation.Nullable;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.code.NewSignificantCode;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.utils.Preconditions;
-
-public class DefaultSignificantCode extends DefaultStorable implements NewSignificantCode {
- private SortedMap<Integer, TextRange> significantCodePerLine = new TreeMap<>();
- private InputFile inputFile;
-
- public DefaultSignificantCode() {
- super();
- }
-
- public DefaultSignificantCode(@Nullable SensorStorage storage) {
- super(storage);
- }
-
- @Override
- public DefaultSignificantCode onFile(InputFile inputFile) {
- this.inputFile = inputFile;
- return this;
- }
-
- @Override
- public DefaultSignificantCode addRange(TextRange range) {
- Preconditions.checkState(this.inputFile != null, "addRange() should be called after on()");
-
- int line = range.start().line();
-
- Preconditions.checkArgument(line == range.end().line(), "Ranges of significant code must be located in a single line");
- Preconditions.checkState(!significantCodePerLine.containsKey(line), "Significant code was already reported for line '%s'. Can only report once per line.", line);
-
- significantCodePerLine.put(line, range);
- return this;
- }
-
- @Override
- protected void doSave() {
- Preconditions.checkState(inputFile != null, "Call onFile() first");
- storage.store(this);
- }
-
- public InputFile inputFile() {
- return inputFile;
- }
-
- public SortedMap<Integer, TextRange> significantCodePerLine() {
- return significantCodePerLine;
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultStorable.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultStorable.java
deleted file mode 100644
index 23b989ca09d..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultStorable.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import javax.annotation.Nullable;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public abstract class DefaultStorable {
-
- protected final transient SensorStorage storage;
- private transient boolean saved = false;
-
- public DefaultStorable() {
- this.storage = null;
- }
-
- public DefaultStorable(@Nullable SensorStorage storage) {
- this.storage = storage;
- }
-
- public final void save() {
- requireNonNull(this.storage, "No persister on this object");
- checkState(!saved, "This object was already saved");
- doSave();
- this.saved = true;
- }
-
- protected abstract void doSave();
-
- @Override
- public String toString() {
- return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
- }
-
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSymbolTable.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSymbolTable.java
deleted file mode 100644
index ca8b162f6a4..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/DefaultSymbolTable.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.symbol.NewSymbol;
-import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
-import org.sonar.scanner.fs.DefaultInputFile;
-
-import static java.util.Objects.requireNonNull;
-import static org.sonar.api.utils.Preconditions.checkArgument;
-import static org.sonar.api.utils.Preconditions.checkState;
-
-public class DefaultSymbolTable extends DefaultStorable implements NewSymbolTable {
-
- private final Map<TextRange, Set<TextRange>> referencesBySymbol;
- private DefaultInputFile inputFile;
-
- public DefaultSymbolTable(SensorStorage storage) {
- super(storage);
- referencesBySymbol = new LinkedHashMap<>();
- }
-
- public Map<TextRange, Set<TextRange>> getReferencesBySymbol() {
- return referencesBySymbol;
- }
-
- @Override
- public DefaultSymbolTable onFile(InputFile inputFile) {
- requireNonNull(inputFile, "file can't be null");
- this.inputFile = (DefaultInputFile) inputFile;
- return this;
- }
-
- public InputFile inputFile() {
- return inputFile;
- }
-
- @Override
- public NewSymbol newSymbol(int startLine, int startLineOffset, int endLine, int endLineOffset) {
- checkInputFileNotNull();
- TextRange declarationRange;
- try {
- declarationRange = inputFile.newRange(startLine, startLineOffset, endLine, endLineOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to create symbol on file " + inputFile, e);
- }
- return newSymbol(declarationRange);
- }
-
- @Override
- public NewSymbol newSymbol(int startOffset, int endOffset) {
- checkInputFileNotNull();
- TextRange declarationRange;
- try {
- declarationRange = inputFile.newRange(startOffset, endOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to create symbol on file " + inputFile, e);
- }
- return newSymbol(declarationRange);
- }
-
- @Override
- public NewSymbol newSymbol(TextRange range) {
- checkInputFileNotNull();
- TreeSet<TextRange> references = new TreeSet<>((o1, o2) -> o1.start().compareTo(o2.start()));
- referencesBySymbol.put(range, references);
- return new DefaultSymbol(inputFile, range, references);
- }
-
- private static class DefaultSymbol implements NewSymbol {
-
- private final Collection<TextRange> references;
- private final DefaultInputFile inputFile;
- private final TextRange declaration;
-
- public DefaultSymbol(DefaultInputFile inputFile, TextRange declaration, Collection<TextRange> references) {
- this.inputFile = inputFile;
- this.declaration = declaration;
- this.references = references;
- }
-
- @Override
- public NewSymbol newReference(int startOffset, int endOffset) {
- TextRange referenceRange;
- try {
- referenceRange = inputFile.newRange(startOffset, endOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to create symbol reference on file " + inputFile, e);
- }
- return newReference(referenceRange);
- }
-
- @Override
- public NewSymbol newReference(int startLine, int startLineOffset, int endLine, int endLineOffset) {
- TextRange referenceRange;
- try {
- referenceRange = inputFile.newRange(startLine, startLineOffset, endLine, endLineOffset);
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to create symbol reference on file " + inputFile, e);
- }
- return newReference(referenceRange);
- }
-
- @Override
- public NewSymbol newReference(TextRange range) {
- requireNonNull(range, "Provided range is null");
- checkArgument(!declaration.overlap(range), "Overlapping symbol declaration and reference for symbol at %s", declaration);
- references.add(range);
- return this;
- }
-
- }
-
- @Override
- protected void doSave() {
- checkInputFileNotNull();
- storage.store(this);
- }
-
- private void checkInputFileNotNull() {
- checkState(inputFile != null, "Call onFile() first");
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/InMemorySensorStorage.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/InMemorySensorStorage.java
deleted file mode 100644
index 472537df959..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/InMemorySensorStorage.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-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 org.sonar.api.batch.sensor.code.NewSignificantCode;
-import org.sonar.api.batch.sensor.coverage.NewCoverage;
-import org.sonar.api.batch.sensor.cpd.NewCpdTokens;
-import org.sonar.api.batch.sensor.error.AnalysisError;
-import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.issue.ExternalIssue;
-import org.sonar.api.batch.sensor.issue.Issue;
-import org.sonar.api.batch.sensor.measure.Measure;
-import org.sonar.api.batch.sensor.rule.AdHocRule;
-import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
-
-import static org.sonar.api.utils.Preconditions.checkArgument;
-
-class InMemorySensorStorage implements SensorStorage {
-
- Map<String, Map<String, Measure>> measuresByComponentAndMetric = new HashMap<>();
-
- Collection<Issue> allIssues = new ArrayList<>();
- Collection<ExternalIssue> allExternalIssues = new ArrayList<>();
- Collection<AdHocRule> allAdHocRules = new ArrayList<>();
- Collection<AnalysisError> allAnalysisErrors = new ArrayList<>();
-
- Map<String, NewHighlighting> highlightingByComponent = new HashMap<>();
- Map<String, DefaultCpdTokens> cpdTokensByComponent = new HashMap<>();
- Map<String, List<DefaultCoverage>> coverageByComponent = new HashMap<>();
- Map<String, DefaultSymbolTable> symbolsPerComponent = new HashMap<>();
- Map<String, String> contextProperties = new HashMap<>();
- Map<String, DefaultSignificantCode> significantCodePerComponent = new HashMap<>();
-
- @Override
- public void store(Measure measure) {
- // Emulate duplicate measure check
- String componentKey = measure.inputComponent().key();
- String metricKey = measure.metric().key();
- if (measuresByComponentAndMetric.getOrDefault(componentKey, Collections.emptyMap()).containsKey(metricKey)) {
- throw new IllegalStateException("Can not add the same measure twice");
- }
- measuresByComponentAndMetric.computeIfAbsent(componentKey, x -> new HashMap<>()).put(metricKey, measure);
- }
-
- @Override
- public void store(Issue issue) {
- allIssues.add(issue);
- }
-
- @Override
- public void store(AdHocRule adHocRule) {
- allAdHocRules.add(adHocRule);
- }
-
- @Override
- public void store(NewHighlighting newHighlighting) {
- DefaultHighlighting highlighting = (DefaultHighlighting) newHighlighting;
- String fileKey = highlighting.inputFile().key();
- // Emulate duplicate storage check
- if (highlightingByComponent.containsKey(fileKey)) {
- throw new UnsupportedOperationException("Trying to save highlighting twice for the same file is not supported: " + highlighting.inputFile());
- }
- highlightingByComponent.put(fileKey, highlighting);
- }
-
- @Override
- public void store(NewCoverage coverage) {
- DefaultCoverage defaultCoverage = (DefaultCoverage) coverage;
- String fileKey = defaultCoverage.inputFile().key();
- coverageByComponent.computeIfAbsent(fileKey, x -> new ArrayList<>()).add(defaultCoverage);
- }
-
- @Override
- public void store(NewCpdTokens cpdTokens) {
- DefaultCpdTokens defaultCpdTokens = (DefaultCpdTokens) cpdTokens;
- String fileKey = defaultCpdTokens.inputFile().key();
- // Emulate duplicate storage check
- if (cpdTokensByComponent.containsKey(fileKey)) {
- throw new UnsupportedOperationException("Trying to save CPD tokens twice for the same file is not supported: " + defaultCpdTokens.inputFile());
- }
- cpdTokensByComponent.put(fileKey, defaultCpdTokens);
- }
-
- @Override
- public void store(NewSymbolTable newSymbolTable) {
- DefaultSymbolTable symbolTable = (DefaultSymbolTable) newSymbolTable;
- String fileKey = symbolTable.inputFile().key();
- // Emulate duplicate storage check
- if (symbolsPerComponent.containsKey(fileKey)) {
- throw new UnsupportedOperationException("Trying to save symbol table twice for the same file is not supported: " + symbolTable.inputFile());
- }
- symbolsPerComponent.put(fileKey, symbolTable);
- }
-
- @Override
- public void store(AnalysisError analysisError) {
- allAnalysisErrors.add(analysisError);
- }
-
- @Override
- public void storeProperty(String key, String value) {
- checkArgument(key != null, "Key of context property must not be null");
- checkArgument(value != null, "Value of context property must not be null");
- contextProperties.put(key, value);
- }
-
- @Override
- public void store(ExternalIssue issue) {
- allExternalIssues.add(issue);
- }
-
- @Override
- public void store(NewSignificantCode newSignificantCode) {
- DefaultSignificantCode significantCode = (DefaultSignificantCode) newSignificantCode;
- String fileKey = significantCode.inputFile().key();
- // Emulate duplicate storage check
- if (significantCodePerComponent.containsKey(fileKey)) {
- throw new UnsupportedOperationException("Trying to save significant code information twice for the same file is not supported: " + significantCode.inputFile());
- }
- significantCodePerComponent.put(fileKey, significantCode);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java
index 1e8f6009f8d..783c4b2720f 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorContext.java
@@ -27,7 +27,7 @@ import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.internal.SensorStorage;
import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
@ThreadSafe
public class ModuleSensorContext extends ProjectSensorContext {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorsExecutor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorsExecutor.java
index ec3d21f6613..7c627f3d502 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorsExecutor.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ModuleSensorsExecutor.java
@@ -23,12 +23,12 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
+import org.sonar.api.impl.fs.SensorStrategy;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.core.util.logs.Profiler;
import org.sonar.scanner.bootstrap.ScannerPluginRepository;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
public class ModuleSensorsExecutor {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java
index 8a244510328..eae821692a0 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/ProjectSensorContext.java
@@ -40,11 +40,19 @@ import org.sonar.api.batch.sensor.rule.NewAdHocRule;
import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
import org.sonar.api.config.Configuration;
import org.sonar.api.config.Settings;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.issue.DefaultIssue;
+import org.sonar.api.impl.sensor.DefaultAdHocRule;
+import org.sonar.api.impl.sensor.DefaultCoverage;
+import org.sonar.api.impl.sensor.DefaultCpdTokens;
+import org.sonar.api.impl.sensor.DefaultExternalIssue;
+import org.sonar.api.impl.sensor.DefaultHighlighting;
+import org.sonar.api.impl.sensor.DefaultMeasure;
+import org.sonar.api.impl.sensor.DefaultSignificantCode;
+import org.sonar.api.impl.sensor.DefaultSymbolTable;
import org.sonar.api.scanner.fs.InputProject;
import org.sonar.api.utils.Version;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.issue.DefaultIssue;
import org.sonar.scanner.sensor.noop.NoOpNewAnalysisError;
@ThreadSafe
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SensorContextTester.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SensorContextTester.java
deleted file mode 100644
index e3ffc324ede..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SensorContextTester.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.io.File;
-import java.io.Serializable;
-import java.nio.charset.Charset;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Stream;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import org.sonar.api.SonarQubeSide;
-import org.sonar.api.SonarRuntime;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.InputModule;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.batch.sensor.Sensor;
-import org.sonar.api.batch.sensor.SensorContext;
-import org.sonar.api.batch.sensor.code.NewSignificantCode;
-import org.sonar.api.batch.sensor.coverage.NewCoverage;
-import org.sonar.api.batch.sensor.cpd.NewCpdTokens;
-import org.sonar.api.batch.sensor.cpd.internal.TokensLine;
-import org.sonar.api.batch.sensor.error.AnalysisError;
-import org.sonar.api.batch.sensor.error.NewAnalysisError;
-import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
-import org.sonar.api.batch.sensor.highlighting.TypeOfText;
-import org.sonar.api.batch.sensor.issue.ExternalIssue;
-import org.sonar.api.batch.sensor.issue.Issue;
-import org.sonar.api.batch.sensor.issue.NewExternalIssue;
-import org.sonar.api.batch.sensor.issue.NewIssue;
-import org.sonar.api.batch.sensor.measure.Measure;
-import org.sonar.api.batch.sensor.measure.NewMeasure;
-import org.sonar.api.batch.sensor.rule.AdHocRule;
-import org.sonar.api.batch.sensor.rule.NewAdHocRule;
-import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
-import org.sonar.api.config.Configuration;
-import org.sonar.api.config.Settings;
-import org.sonar.api.config.internal.ConfigurationBridge;
-import org.sonar.api.config.internal.MapSettings;
-import org.sonar.api.internal.MetadataLoader;
-import org.sonar.api.internal.SonarRuntimeImpl;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.scanner.fs.InputProject;
-import org.sonar.api.utils.System2;
-import org.sonar.api.utils.Version;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.DefaultTextPointer;
-import org.sonar.scanner.issue.DefaultIssue;
-import org.sonar.scanner.rule.ActiveRulesBuilder;
-
-import static java.util.Collections.unmodifiableMap;
-
-/**
- * Utility class to help testing {@link Sensor}. This is not an API and method signature may evolve.
- * <p>
- * Usage: call {@link #create(File)} to create an "in memory" implementation of {@link SensorContext} with a filesystem initialized with provided baseDir.
- * <p>
- * You have to manually register inputFiles using:
- * <pre>
- * sensorContextTester.fileSystem().add(new DefaultInputFile("myProjectKey", "src/Foo.java")
- * .setLanguage("java")
- * .initMetadata("public class Foo {\n}"));
- * </pre>
- * <p>
- * Then pass it to your {@link Sensor}. You can then query elements provided by your sensor using methods {@link #allIssues()}, ...
- */
-public class SensorContextTester implements SensorContext {
-
- private Settings settings;
- private DefaultFileSystem fs;
- private ActiveRules activeRules;
- private InMemorySensorStorage sensorStorage;
- private DefaultInputProject project;
- private DefaultInputModule module;
- private SonarRuntime runtime;
- private boolean cancelled;
-
- private SensorContextTester(Path moduleBaseDir) {
- this.settings = new MapSettings();
- this.fs = new DefaultFileSystem(moduleBaseDir).setEncoding(Charset.defaultCharset());
- this.activeRules = new ActiveRulesBuilder().build();
- this.sensorStorage = new InMemorySensorStorage();
- this.project = new DefaultInputProject(ProjectDefinition.create().setKey("projectKey").setBaseDir(moduleBaseDir.toFile()).setWorkDir(moduleBaseDir.resolve(".sonar").toFile()));
- this.module = new DefaultInputModule(ProjectDefinition.create().setKey("projectKey").setBaseDir(moduleBaseDir.toFile()).setWorkDir(moduleBaseDir.resolve(".sonar").toFile()));
- this.runtime = SonarRuntimeImpl.forSonarQube(MetadataLoader.loadVersion(System2.INSTANCE), SonarQubeSide.SCANNER, MetadataLoader.loadEdition(System2.INSTANCE));
- }
-
- public static SensorContextTester create(File moduleBaseDir) {
- return new SensorContextTester(moduleBaseDir.toPath());
- }
-
- public static SensorContextTester create(Path moduleBaseDir) {
- return new SensorContextTester(moduleBaseDir);
- }
-
- @Override
- public Settings settings() {
- return settings;
- }
-
- @Override
- public Configuration config() {
- return new ConfigurationBridge(settings);
- }
-
- public SensorContextTester setSettings(Settings settings) {
- this.settings = settings;
- return this;
- }
-
- @Override
- public DefaultFileSystem fileSystem() {
- return fs;
- }
-
- public SensorContextTester setFileSystem(DefaultFileSystem fs) {
- this.fs = fs;
- return this;
- }
-
- @Override
- public ActiveRules activeRules() {
- return activeRules;
- }
-
- public SensorContextTester setActiveRules(ActiveRules activeRules) {
- this.activeRules = activeRules;
- return this;
- }
-
- /**
- * Default value is the version of this API at compilation time. You can override it
- * using {@link #setRuntime(SonarRuntime)} to test your Sensor behaviour.
- */
- @Override
- public Version getSonarQubeVersion() {
- return runtime().getApiVersion();
- }
-
- /**
- * @see #setRuntime(SonarRuntime) to override defaults (SonarQube scanner with version
- * of this API as used at compilation time).
- */
- @Override
- public SonarRuntime runtime() {
- return runtime;
- }
-
- public SensorContextTester setRuntime(SonarRuntime runtime) {
- this.runtime = runtime;
- return this;
- }
-
- @Override
- public boolean isCancelled() {
- return cancelled;
- }
-
- public void setCancelled(boolean cancelled) {
- this.cancelled = cancelled;
- }
-
- @Override
- public InputModule module() {
- return module;
- }
-
- @Override
- public InputProject project() {
- return project;
- }
-
- @Override
- public <G extends Serializable> NewMeasure<G> newMeasure() {
- return new DefaultMeasure<>(sensorStorage);
- }
-
- public Collection<Measure> measures(String componentKey) {
- return sensorStorage.measuresByComponentAndMetric.getOrDefault(componentKey, Collections.emptyMap()).values();
- }
-
- public <G extends Serializable> Measure<G> measure(String componentKey, Metric<G> metric) {
- return measure(componentKey, metric.key());
- }
-
- public <G extends Serializable> Measure<G> measure(String componentKey, String metricKey) {
- return sensorStorage.measuresByComponentAndMetric.getOrDefault(componentKey, Collections.emptyMap()).get(metricKey);
- }
-
- @Override
- public NewIssue newIssue() {
- return new DefaultIssue(project, sensorStorage);
- }
-
- public Collection<Issue> allIssues() {
- return sensorStorage.allIssues;
- }
-
- @Override
- public NewExternalIssue newExternalIssue() {
- return new DefaultExternalIssue(project, sensorStorage);
- }
-
- @Override
- public NewAdHocRule newAdHocRule() {
- return new DefaultAdHocRule(sensorStorage);
- }
-
- public Collection<ExternalIssue> allExternalIssues() {
- return sensorStorage.allExternalIssues;
- }
-
- public Collection<AdHocRule> allAdHocRules() {
- return sensorStorage.allAdHocRules;
- }
-
- public Collection<AnalysisError> allAnalysisErrors() {
- return sensorStorage.allAnalysisErrors;
- }
-
- @CheckForNull
- public Integer lineHits(String fileKey, int line) {
- return sensorStorage.coverageByComponent.getOrDefault(fileKey, Collections.emptyList()).stream()
- .map(c -> c.hitsByLine().get(line))
- .flatMap(Stream::of)
- .filter(Objects::nonNull)
- .reduce(null, SensorContextTester::sumOrNull);
- }
-
- @CheckForNull
- public static Integer sumOrNull(@Nullable Integer o1, @Nullable Integer o2) {
- return o1 == null ? o2 : (o1 + o2);
- }
-
- @CheckForNull
- public Integer conditions(String fileKey, int line) {
- return sensorStorage.coverageByComponent.getOrDefault(fileKey, Collections.emptyList()).stream()
- .map(c -> c.conditionsByLine().get(line))
- .flatMap(Stream::of)
- .filter(Objects::nonNull)
- .reduce(null, SensorContextTester::maxOrNull);
- }
-
- @CheckForNull
- public Integer coveredConditions(String fileKey, int line) {
- return sensorStorage.coverageByComponent.getOrDefault(fileKey, Collections.emptyList()).stream()
- .map(c -> c.coveredConditionsByLine().get(line))
- .flatMap(Stream::of)
- .filter(Objects::nonNull)
- .reduce(null, SensorContextTester::maxOrNull);
- }
-
- @CheckForNull
- public TextRange significantCodeTextRange(String fileKey, int line) {
- if (sensorStorage.significantCodePerComponent.containsKey(fileKey)) {
- return sensorStorage.significantCodePerComponent.get(fileKey)
- .significantCodePerLine()
- .get(line);
- }
- return null;
-
- }
-
- @CheckForNull
- public static Integer maxOrNull(@Nullable Integer o1, @Nullable Integer o2) {
- return o1 == null ? o2 : Math.max(o1, o2);
- }
-
- @CheckForNull
- public List<TokensLine> cpdTokens(String componentKey) {
- DefaultCpdTokens defaultCpdTokens = sensorStorage.cpdTokensByComponent.get(componentKey);
- return defaultCpdTokens != null ? defaultCpdTokens.getTokenLines() : null;
- }
-
- @Override
- public NewHighlighting newHighlighting() {
- return new DefaultHighlighting(sensorStorage);
- }
-
- @Override
- public NewCoverage newCoverage() {
- return new DefaultCoverage(sensorStorage);
- }
-
- @Override
- public NewCpdTokens newCpdTokens() {
- return new DefaultCpdTokens(sensorStorage);
- }
-
- @Override
- public NewSymbolTable newSymbolTable() {
- return new DefaultSymbolTable(sensorStorage);
- }
-
- @Override
- public NewAnalysisError newAnalysisError() {
- return new DefaultAnalysisError(sensorStorage);
- }
-
- /**
- * Return list of syntax highlighting applied for a given position in a file. The result is a list because in theory you
- * can apply several styles to the same range.
- *
- * @param componentKey Key of the file like 'myProjectKey:src/foo.php'
- * @param line Line you want to query
- * @param lineOffset Offset you want to query.
- * @return List of styles applied to this position or empty list if there is no highlighting at this position.
- */
- public List<TypeOfText> highlightingTypeAt(String componentKey, int line, int lineOffset) {
- DefaultHighlighting syntaxHighlightingData = (DefaultHighlighting) sensorStorage.highlightingByComponent.get(componentKey);
- if (syntaxHighlightingData == null) {
- return Collections.emptyList();
- }
- List<TypeOfText> result = new ArrayList<>();
- DefaultTextPointer location = new DefaultTextPointer(line, lineOffset);
- for (SyntaxHighlightingRule sortedRule : syntaxHighlightingData.getSyntaxHighlightingRuleSet()) {
- if (sortedRule.range().start().compareTo(location) <= 0 && sortedRule.range().end().compareTo(location) > 0) {
- result.add(sortedRule.getTextType());
- }
- }
- return result;
- }
-
- /**
- * Return list of symbol references ranges for the symbol at a given position in a file.
- *
- * @param componentKey Key of the file like 'myProjectKey:src/foo.php'
- * @param line Line you want to query
- * @param lineOffset Offset you want to query.
- * @return List of references for the symbol (potentially empty) or null if there is no symbol at this position.
- */
- @CheckForNull
- public Collection<TextRange> referencesForSymbolAt(String componentKey, int line, int lineOffset) {
- DefaultSymbolTable symbolTable = sensorStorage.symbolsPerComponent.get(componentKey);
- if (symbolTable == null) {
- return null;
- }
- DefaultTextPointer location = new DefaultTextPointer(line, lineOffset);
- for (Map.Entry<TextRange, Set<TextRange>> symbol : symbolTable.getReferencesBySymbol().entrySet()) {
- if (symbol.getKey().start().compareTo(location) <= 0 && symbol.getKey().end().compareTo(location) > 0) {
- return symbol.getValue();
- }
- }
- return null;
- }
-
- @Override
- public void addContextProperty(String key, String value) {
- sensorStorage.storeProperty(key, value);
- }
-
- /**
- * @return an immutable map of the context properties defined with {@link SensorContext#addContextProperty(String, String)}.
- * @since 6.1
- */
- public Map<String, String> getContextProperties() {
- return unmodifiableMap(sensorStorage.contextProperties);
- }
-
- @Override
- public void markForPublishing(InputFile inputFile) {
- DefaultInputFile file = (DefaultInputFile) inputFile;
- file.setPublished(true);
- }
-
- @Override
- public NewSignificantCode newSignificantCode() {
- return new DefaultSignificantCode(sensorStorage);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SyntaxHighlightingRule.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SyntaxHighlightingRule.java
deleted file mode 100644
index cded69e4bf5..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sensor/SyntaxHighlightingRule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.apache.commons.lang.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.highlighting.TypeOfText;
-
-public class SyntaxHighlightingRule {
-
- private final TextRange range;
- private final TypeOfText textType;
-
- private SyntaxHighlightingRule(TextRange range, TypeOfText textType) {
- this.range = range;
- this.textType = textType;
- }
-
- public static SyntaxHighlightingRule create(TextRange range, TypeOfText textType) {
- return new SyntaxHighlightingRule(range, textType);
- }
-
- public TextRange range() {
- return range;
- }
-
- public TypeOfText getTextType() {
- return textType;
- }
-
- @Override
- public String toString() {
- return ReflectionToStringBuilder.toString(this, ToStringStyle.SIMPLE_STYLE);
- }
-}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/source/ZeroCoverageSensor.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/source/ZeroCoverageSensor.java
index 54bf590d758..20b3d3e5869 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/source/ZeroCoverageSensor.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/source/ZeroCoverageSensor.java
@@ -28,7 +28,7 @@ import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.coverage.NewCoverage;
import org.sonar.api.scanner.sensor.ProjectSensor;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.report.ReportPublisher;
@Phase(name = Phase.Name.POST)
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/util/ScannerUtils.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/util/ScannerUtils.java
deleted file mode 100644
index d22f0ea19eb..00000000000
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/util/ScannerUtils.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.util;
-
-import com.google.common.base.Strings;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import javax.annotation.Nullable;
-import org.apache.commons.lang.StringUtils;
-
-public class ScannerUtils {
-
- private ScannerUtils() {
- }
-
- /**
- * Clean provided string to remove chars that are not valid as file name.
- * @param projectKey e.g. my:file
- */
- public static String cleanKeyForFilename(String projectKey) {
- String cleanKey = StringUtils.deleteWhitespace(projectKey);
- return StringUtils.replace(cleanKey, ":", "_");
- }
-
- public static String encodeForUrl(@Nullable String url) {
- try {
- return URLEncoder.encode(Strings.nullToEmpty(url), "UTF-8");
-
- } catch (UnsupportedEncodingException e) {
- throw new IllegalStateException("Encoding not supported", e);
- }
- }
-
- public static String describe(Object o) {
- try {
- if (o.getClass().getMethod("toString").getDeclaringClass() != Object.class) {
- String str = o.toString();
- if (str != null) {
- return str;
- }
- }
- } catch (Exception e) {
- // fallback
- }
-
- return o.getClass().getName();
- }
-
- public static String pluralize(String str, int i) {
- if (i == 1) {
- return str;
- }
- return str + "s";
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/DefaultFileLinesContextTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/DefaultFileLinesContextTest.java
index f6e59a75f9a..5f789670c6a 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/DefaultFileLinesContextTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/DefaultFileLinesContextTest.java
@@ -27,10 +27,10 @@ import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.batch.sensor.internal.SensorStorage;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.DefaultMeasure;
import org.sonar.api.measures.CoreMetrics;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.sensor.DefaultMeasure;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/ProjectInfoTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/ProjectInfoTest.java
index a882ca0afcf..b43f101cdd1 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/ProjectInfoTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/ProjectInfoTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.sonar.api.CoreProperties;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.api.utils.MessageException;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/WsTestUtil.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/WsTestUtil.java
index 29f806c9b0f..091d4899e8e 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/WsTestUtil.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/WsTestUtil.java
@@ -24,7 +24,7 @@ import java.io.Reader;
import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
import org.mockito.ArgumentMatcher;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonarqube.ws.client.WsRequest;
import org.sonarqube.ws.client.WsResponse;
@@ -35,25 +35,25 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class WsTestUtil {
- public static void mockStream(ScannerWsClient mock, String path, InputStream is) {
+ public static void mockStream(DefaultScannerWsClient mock, String path, InputStream is) {
WsResponse response = mock(WsResponse.class);
when(response.contentStream()).thenReturn(is);
when(mock.call(argThat(new RequestMatcher(path)))).thenReturn(response);
}
- public static void mockStream(ScannerWsClient mock, InputStream is) {
+ public static void mockStream(DefaultScannerWsClient mock, InputStream is) {
WsResponse response = mock(WsResponse.class);
when(response.contentStream()).thenReturn(is);
when(mock.call(any(WsRequest.class))).thenReturn(response);
}
- public static void mockReader(ScannerWsClient mock, Reader reader) {
+ public static void mockReader(DefaultScannerWsClient mock, Reader reader) {
WsResponse response = mock(WsResponse.class);
when(response.contentReader()).thenReturn(reader);
when(mock.call(any(WsRequest.class))).thenReturn(response);
}
- public static void mockReader(ScannerWsClient mock, String path, Reader reader, Reader... others) {
+ public static void mockReader(DefaultScannerWsClient mock, String path, Reader reader, Reader... others) {
WsResponse response = mock(WsResponse.class);
when(response.contentReader()).thenReturn(reader);
WsResponse[] otherResponses = new WsResponse[others.length];
@@ -66,15 +66,15 @@ public class WsTestUtil {
when(mock.call(argThat(new RequestMatcher(path)))).thenReturn(response, otherResponses);
}
- public static void mockException(ScannerWsClient mock, Exception e) {
+ public static void mockException(DefaultScannerWsClient mock, Exception e) {
when(mock.call(any(WsRequest.class))).thenThrow(e);
}
- public static void mockException(ScannerWsClient mock, String path, Exception e) {
+ public static void mockException(DefaultScannerWsClient mock, String path, Exception e) {
when(mock.call(argThat(new RequestMatcher(path)))).thenThrow(e);
}
- public static void verifyCall(ScannerWsClient mock, String path) {
+ public static void verifyCall(DefaultScannerWsClient mock, String path) {
verify(mock).call(argThat(new RequestMatcher(path)));
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/analysis/AnalysisTempFolderProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/analysis/AnalysisTempFolderProviderTest.java
index d625da5f8df..620e3f703c1 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/analysis/AnalysisTempFolderProviderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/analysis/AnalysisTempFolderProviderTest.java
@@ -25,7 +25,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.utils.TempFolder;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/DefaultScannerWsClientTest.java
index abe99ed2c15..bbc55bb0758 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/DefaultScannerWsClientTest.java
@@ -40,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public class ScannerWsClientTest {
+public class DefaultScannerWsClientTest {
@Rule
public LogTester logTester = new LogTester();
@@ -57,7 +57,7 @@ public class ScannerWsClientTest {
when(wsClient.wsConnector().call(request)).thenReturn(response);
logTester.setLevel(LoggerLevel.DEBUG);
- ScannerWsClient underTest = new ScannerWsClient(wsClient, false, new GlobalAnalysisMode(
+ DefaultScannerWsClient underTest = new DefaultScannerWsClient(wsClient, false, new GlobalAnalysisMode(
new RawScannerProperties(Collections.emptyMap())));
WsResponse result = underTest.call(request);
@@ -74,19 +74,19 @@ public class ScannerWsClientTest {
@Test
public void create_error_msg_from_json() {
String content = "{\"errors\":[{\"msg\":\"missing scan permission\"}, {\"msg\":\"missing another permission\"}]}";
- assertThat(ScannerWsClient.createErrorMessage(new HttpException("url", 400, content))).isEqualTo("missing scan permission, missing another permission");
+ assertThat(DefaultScannerWsClient.createErrorMessage(new HttpException("url", 400, content))).isEqualTo("missing scan permission, missing another permission");
}
@Test
public void create_error_msg_from_html() {
String content = "<!DOCTYPE html><html>something</html>";
- assertThat(ScannerWsClient.createErrorMessage(new HttpException("url", 400, content))).isEqualTo("HTTP code 400");
+ assertThat(DefaultScannerWsClient.createErrorMessage(new HttpException("url", 400, content))).isEqualTo("HTTP code 400");
}
@Test
public void create_error_msg_from_long_content() {
String content = StringUtils.repeat("mystring", 1000);
- assertThat(ScannerWsClient.createErrorMessage(new HttpException("url", 400, content))).hasSize(15 + 128);
+ assertThat(DefaultScannerWsClient.createErrorMessage(new HttpException("url", 400, content))).hasSize(15 + 128);
}
@Test
@@ -99,7 +99,7 @@ public class ScannerWsClientTest {
WsResponse response = newResponse().setCode(401);
when(wsClient.wsConnector().call(request)).thenReturn(response);
- new ScannerWsClient(wsClient, false, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
+ new DefaultScannerWsClient(wsClient, false, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
}
@Test
@@ -111,7 +111,7 @@ public class ScannerWsClientTest {
WsResponse response = newResponse().setCode(401);
when(wsClient.wsConnector().call(request)).thenReturn(response);
- new ScannerWsClient(wsClient, /* credentials are configured */true, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
+ new DefaultScannerWsClient(wsClient, /* credentials are configured */true, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
}
@Test
@@ -124,7 +124,7 @@ public class ScannerWsClientTest {
.setCode(403);
when(wsClient.wsConnector().call(request)).thenReturn(response);
- new ScannerWsClient(wsClient, true, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
+ new DefaultScannerWsClient(wsClient, true, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
}
@Test
@@ -138,7 +138,7 @@ public class ScannerWsClientTest {
.setContent("{\"errors\":[{\"msg\":\"Boo! bad request! bad!\"}]}");
when(wsClient.wsConnector().call(request)).thenReturn(response);
- new ScannerWsClient(wsClient, true, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
+ new DefaultScannerWsClient(wsClient, true, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()))).call(request);
}
private MockWsResponse newResponse() {
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ExtensionInstallerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ExtensionInstallerTest.java
index d060367750d..17e4b72f4b0 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ExtensionInstallerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ExtensionInstallerTest.java
@@ -26,7 +26,7 @@ import org.sonar.api.ExtensionProvider;
import org.sonar.api.Plugin;
import org.sonar.api.SonarRuntime;
import org.sonar.api.batch.ScannerSide;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.core.platform.ComponentContainer;
import org.sonar.core.platform.PluginInfo;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ModuleSensorExtensionDictionnaryTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ModuleSensorExtensionDictionnaryTest.java
index 2c4ed265b27..68070e636b5 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ModuleSensorExtensionDictionnaryTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ModuleSensorExtensionDictionnaryTest.java
@@ -33,8 +33,8 @@ import org.sonar.api.batch.ScannerSide;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
+import org.sonar.api.impl.sensor.DefaultSensorDescriptor;
import org.sonar.core.platform.ComponentContainer;
-import org.sonar.scanner.sensor.DefaultSensorDescriptor;
import org.sonar.scanner.sensor.ModuleSensorContext;
import org.sonar.scanner.sensor.ModuleSensorExtensionDictionnary;
import org.sonar.scanner.sensor.ModuleSensorOptimizer;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PluginFilesTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PluginFilesTest.java
index 9a7ebb0e127..004528a98eb 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PluginFilesTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PluginFilesTest.java
@@ -50,7 +50,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.scanner.bootstrap.ScannerPluginInstaller.InstalledPlugin;
import org.sonarqube.ws.client.HttpConnector;
import org.sonarqube.ws.client.WsClientFactories;
@@ -74,7 +74,7 @@ public class PluginFilesTest {
public void setUp() throws Exception {
HttpConnector connector = HttpConnector.newBuilder().url(server.url("/").toString()).build();
GlobalAnalysisMode analysisMode = new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap()));
- ScannerWsClient wsClient = new ScannerWsClient(WsClientFactories.getDefault().newClient(connector), false, analysisMode);
+ DefaultScannerWsClient wsClient = new DefaultScannerWsClient(WsClientFactories.getDefault().newClient(connector), false, analysisMode);
userHome = temp.newFolder();
MapSettings settings = new MapSettings();
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PostJobExtensionDictionnaryTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PostJobExtensionDictionnaryTest.java
index ed35ee1943d..c81893378b8 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PostJobExtensionDictionnaryTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/PostJobExtensionDictionnaryTest.java
@@ -25,7 +25,7 @@ import org.sonar.api.batch.Phase;
import org.sonar.api.batch.postjob.PostJob;
import org.sonar.api.batch.postjob.PostJobContext;
import org.sonar.api.batch.postjob.PostJobDescriptor;
-import org.sonar.scanner.postjob.DefaultPostJobDescriptor;
+import org.sonar.api.impl.sensor.DefaultPostJobDescriptor;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.api.batch.sensor.SensorContext;
import org.sonar.api.batch.sensor.SensorDescriptor;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerPluginInstallerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerPluginInstallerTest.java
index fe6720aca89..edceff19a1b 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerPluginInstallerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerPluginInstallerTest.java
@@ -48,7 +48,7 @@ public class ScannerPluginInstallerTest {
public ExpectedException expectedException = ExpectedException.none();
private PluginFiles pluginFiles = mock(PluginFiles.class);
- private ScannerWsClient wsClient = mock(ScannerWsClient.class);
+ private DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class);
private ScannerPluginInstaller underTest = new ScannerPluginInstaller(pluginFiles, wsClient);
@Test
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientProviderTest.java
index 5122d6f23e1..6f462beeaa7 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientProviderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/bootstrap/ScannerWsClientProviderTest.java
@@ -39,7 +39,7 @@ public class ScannerWsClientProviderTest {
public void provide_client_with_default_settings() {
RawScannerProperties settings = new RawScannerProperties(new HashMap<>());
- ScannerWsClient client = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), mock(System2.class));
+ DefaultScannerWsClient client = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), mock(System2.class));
assertThat(client).isNotNull();
assertThat(client.baseUrl()).isEqualTo("http://localhost:9000/");
@@ -59,7 +59,7 @@ public class ScannerWsClientProviderTest {
props.put("sonar.ws.timeout", "42");
RawScannerProperties settings = new RawScannerProperties(props);
- ScannerWsClient client = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), mock(System2.class));
+ DefaultScannerWsClient client = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), mock(System2.class));
assertThat(client).isNotNull();
HttpConnector httpConnector = (HttpConnector) client.wsConnector();
@@ -72,8 +72,8 @@ public class ScannerWsClientProviderTest {
System2 system = mock(System2.class);
RawScannerProperties settings = new RawScannerProperties(new HashMap<>());
- ScannerWsClient first = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), system);
- ScannerWsClient second = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), system);
+ DefaultScannerWsClient first = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), system);
+ DefaultScannerWsClient second = underTest.provide(settings, env, new GlobalAnalysisMode(new RawScannerProperties(Collections.emptyMap())), system);
assertThat(first).isSameAs(second);
}
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/ci/CiConfigurationProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/ci/CiConfigurationProviderTest.java
index 57e1aa0efd4..b372dd2bc97 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/ci/CiConfigurationProviderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/ci/CiConfigurationProviderTest.java
@@ -20,7 +20,7 @@
package org.sonar.scanner.ci;
import org.junit.Test;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.api.utils.MessageException;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdExecutorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdExecutorTest.java
index a649c5e9f24..9767f60dedf 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdExecutorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdExecutorTest.java
@@ -44,9 +44,9 @@ import org.sonar.duplications.block.ByteArray;
import org.sonar.duplications.index.CloneGroup;
import org.sonar.duplications.index.ClonePart;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.protocol.output.ScannerReport.Duplicate;
import org.sonar.scanner.protocol.output.ScannerReport.Duplication;
import org.sonar.scanner.protocol.output.ScannerReportReader;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdSettingsTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdSettingsTest.java
index 2e3e6d2898d..80a8e4b61f9 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdSettingsTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/CpdSettingsTest.java
@@ -23,7 +23,7 @@ import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.config.Configuration;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensorTest.java
index f62bb729def..3b567a3846b 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cpd/JavaCpdBlockIndexerSensorTest.java
@@ -34,9 +34,9 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sonar.duplications.block.Block;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.sensor.SensorContextTester;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.SensorContextTester;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.eq;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java
index 3eaeb9997ad..3659faec62f 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java
@@ -31,9 +31,9 @@ import org.sonar.api.batch.rule.Severity;
import org.sonar.api.batch.sensor.issue.ExternalIssue;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.sensor.SensorContextTester;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.SensorContextTester;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.commons.lang.ObjectUtils.defaultIfNull;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultFileSystemTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultFileSystemTest.java
deleted file mode 100644
index 74a43db65f1..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultFileSystemTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.nio.charset.Charset;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultFileSystemTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private DefaultFileSystem fs;
-
- private File basedir;
-
- @Before
- public void prepare() throws Exception {
- basedir = temp.newFolder();
- fs = new DefaultFileSystem(basedir.toPath());
- }
-
- @Test
- public void test_directories() throws Exception {
- assertThat(fs.baseDir()).isAbsolute().isDirectory().exists();
- assertThat(fs.baseDir().getCanonicalPath()).isEqualTo(basedir.getCanonicalPath());
-
- File workdir = temp.newFolder();
- fs.setWorkDir(workdir.toPath());
- assertThat(fs.workDir()).isAbsolute().isDirectory().exists();
- assertThat(fs.workDir().getCanonicalPath()).isEqualTo(workdir.getCanonicalPath());
- }
-
- @Test
- public void test_encoding() throws Exception {
- fs.setEncoding(Charset.forName("ISO-8859-1"));
- assertThat(fs.encoding()).isEqualTo(Charset.forName("ISO-8859-1"));
- }
-
- @Test
- public void add_languages() {
- assertThat(fs.languages()).isEmpty();
-
- fs.add(new TestInputFileBuilder("foo", "src/Foo.php").setLanguage("php").build());
- fs.add(new TestInputFileBuilder("foo", "src/Bar.java").setLanguage("java").build());
-
- assertThat(fs.languages()).containsOnly("java", "php");
- }
-
- @Test
- public void files() {
- assertThat(fs.inputFiles(fs.predicates().all())).isEmpty();
-
- fs.add(new TestInputFileBuilder("foo", "src/Foo.php").setLanguage("php").build());
- fs.add(new TestInputFileBuilder("foo", "src/Bar.java").setLanguage("java").build());
- fs.add(new TestInputFileBuilder("foo", "src/Baz.java").setLanguage("java").build());
-
- // no language
- fs.add(new TestInputFileBuilder("foo", "src/readme.txt").build());
-
- assertThat(fs.inputFile(fs.predicates().hasRelativePath("src/Bar.java"))).isNotNull();
- assertThat(fs.inputFile(fs.predicates().hasRelativePath("does/not/exist"))).isNull();
-
- assertThat(fs.inputFile(fs.predicates().hasAbsolutePath(new File(basedir, "src/Bar.java").getAbsolutePath()))).isNotNull();
- assertThat(fs.inputFile(fs.predicates().hasAbsolutePath(new File(basedir, "does/not/exist").getAbsolutePath()))).isNull();
- assertThat(fs.inputFile(fs.predicates().hasAbsolutePath(new File(basedir, "../src/Bar.java").getAbsolutePath()))).isNull();
-
- assertThat(fs.inputFile(fs.predicates().hasURI(new File(basedir, "src/Bar.java").toURI()))).isNotNull();
- assertThat(fs.inputFile(fs.predicates().hasURI(new File(basedir, "does/not/exist").toURI()))).isNull();
- assertThat(fs.inputFile(fs.predicates().hasURI(new File(basedir, "../src/Bar.java").toURI()))).isNull();
-
- assertThat(fs.files(fs.predicates().all())).hasSize(4);
- assertThat(fs.files(fs.predicates().hasLanguage("java"))).hasSize(2);
- assertThat(fs.files(fs.predicates().hasLanguage("cobol"))).isEmpty();
-
- assertThat(fs.hasFiles(fs.predicates().all())).isTrue();
- assertThat(fs.hasFiles(fs.predicates().hasLanguage("java"))).isTrue();
- assertThat(fs.hasFiles(fs.predicates().hasLanguage("cobol"))).isFalse();
-
- assertThat(fs.inputFiles(fs.predicates().all())).hasSize(4);
- assertThat(fs.inputFiles(fs.predicates().hasLanguage("php"))).hasSize(1);
- assertThat(fs.inputFiles(fs.predicates().hasLanguage("java"))).hasSize(2);
- assertThat(fs.inputFiles(fs.predicates().hasLanguage("cobol"))).isEmpty();
-
- assertThat(fs.languages()).containsOnly("java", "php");
- }
-
- @Test
- public void input_file_returns_null_if_file_not_found() {
- assertThat(fs.inputFile(fs.predicates().hasRelativePath("src/Bar.java"))).isNull();
- assertThat(fs.inputFile(fs.predicates().hasLanguage("cobol"))).isNull();
- }
-
- @Test
- public void input_file_fails_if_too_many_results() {
- thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("expected one element");
-
- fs.add(new TestInputFileBuilder("foo", "src/Bar.java").setLanguage("java").build());
- fs.add(new TestInputFileBuilder("foo", "src/Baz.java").setLanguage("java").build());
-
- fs.inputFile(fs.predicates().all());
- }
-
- @Test
- public void input_file_supports_non_indexed_predicates() {
- fs.add(new TestInputFileBuilder("foo", "src/Bar.java").setLanguage("java").build());
-
- // it would fail if more than one java file
- assertThat(fs.inputFile(fs.predicates().hasLanguage("java"))).isNotNull();
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputDirTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputDirTest.java
deleted file mode 100644
index 1679a8df405..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputDirTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultInputDirTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Test
- public void test() throws Exception {
- File baseDir = temp.newFolder();
- DefaultInputDir inputDir = new DefaultInputDir("ABCDE", "src")
- .setModuleBaseDir(baseDir.toPath());
-
- assertThat(inputDir.key()).isEqualTo("ABCDE:src");
- assertThat(inputDir.file().getAbsolutePath()).isEqualTo(new File(baseDir, "src").getAbsolutePath());
- assertThat(inputDir.relativePath()).isEqualTo("src");
- assertThat(new File(inputDir.relativePath())).isRelative();
- assertThat(inputDir.absolutePath()).endsWith("src");
- assertThat(new File(inputDir.absolutePath())).isAbsolute();
- }
-
- @Test
- public void testEqualsAndHashCode() throws Exception {
- DefaultInputDir inputDir1 = new DefaultInputDir("ABCDE", "src");
-
- DefaultInputDir inputDir2 = new DefaultInputDir("ABCDE", "src");
-
- assertThat(inputDir1.equals(inputDir1)).isTrue();
- assertThat(inputDir1.equals(inputDir2)).isTrue();
- assertThat(inputDir1.equals("foo")).isFalse();
-
- assertThat(inputDir1.hashCode()).isEqualTo(63545559);
-
- assertThat(inputDir1.toString()).contains("[moduleKey=ABCDE, relative=src, basedir=null");
-
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputFileTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputFileTest.java
deleted file mode 100644
index 6673977bfe4..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputFileTest.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.StringReader;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-import java.util.stream.Collectors;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.fs.internal.Metadata;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-
-public class DefaultInputFileTest {
-
- private static final String PROJECT_RELATIVE_PATH = "module1/src/Foo.php";
- private static final String MODULE_RELATIVE_PATH = "src/Foo.php";
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- private DefaultIndexedFile indexedFile;
-
- private Path baseDir;
- private SensorStrategy sensorStrategy;
-
- @Before
- public void prepare() throws IOException {
- baseDir = temp.newFolder().toPath();
- sensorStrategy = new SensorStrategy();
- indexedFile = new DefaultIndexedFile(baseDir.resolve(PROJECT_RELATIVE_PATH), "ABCDE", PROJECT_RELATIVE_PATH, MODULE_RELATIVE_PATH, InputFile.Type.TEST, "php", 0,
- sensorStrategy);
- }
-
- @Test
- public void test() throws Exception {
-
- Metadata metadata = new Metadata(42, 42, "", new int[0], new int[0], 10);
- DefaultInputFile inputFile = new DefaultInputFile(indexedFile, (f) -> f.setMetadata(metadata))
- .setStatus(InputFile.Status.ADDED)
- .setCharset(StandardCharsets.ISO_8859_1);
-
- assertThat(inputFile.absolutePath()).endsWith("Foo.php");
- assertThat(inputFile.filename()).isEqualTo("Foo.php");
- assertThat(inputFile.uri()).hasPath(baseDir.resolve(PROJECT_RELATIVE_PATH).toUri().getPath());
- assertThat(new File(inputFile.absolutePath())).isAbsolute();
- assertThat(inputFile.language()).isEqualTo("php");
- assertThat(inputFile.status()).isEqualTo(InputFile.Status.ADDED);
- assertThat(inputFile.type()).isEqualTo(InputFile.Type.TEST);
- assertThat(inputFile.lines()).isEqualTo(42);
- assertThat(inputFile.charset()).isEqualTo(StandardCharsets.ISO_8859_1);
-
- assertThat(inputFile.getModuleRelativePath()).isEqualTo(MODULE_RELATIVE_PATH);
- assertThat(inputFile.getProjectRelativePath()).isEqualTo(PROJECT_RELATIVE_PATH);
-
- sensorStrategy.setGlobal(false);
- assertThat(inputFile.relativePath()).isEqualTo(MODULE_RELATIVE_PATH);
- assertThat(new File(inputFile.relativePath())).isRelative();
- sensorStrategy.setGlobal(true);
- assertThat(inputFile.relativePath()).isEqualTo(PROJECT_RELATIVE_PATH);
- assertThat(new File(inputFile.relativePath())).isRelative();
- }
-
- @Test
- public void test_content() throws IOException {
- Path testFile = baseDir.resolve(PROJECT_RELATIVE_PATH);
- Files.createDirectories(testFile.getParent());
- String content = "test é string";
- Files.write(testFile, content.getBytes(StandardCharsets.ISO_8859_1));
-
- assertThat(Files.readAllLines(testFile, StandardCharsets.ISO_8859_1).get(0)).hasSize(content.length());
-
- Metadata metadata = new Metadata(42, 30, "", new int[0], new int[0], 10);
-
- DefaultInputFile inputFile = new DefaultInputFile(indexedFile, f -> f.setMetadata(metadata))
- .setStatus(InputFile.Status.ADDED)
- .setCharset(StandardCharsets.ISO_8859_1);
-
- assertThat(inputFile.contents()).isEqualTo(content);
- try (InputStream inputStream = inputFile.inputStream()) {
- String result = new BufferedReader(new InputStreamReader(inputStream, inputFile.charset())).lines().collect(Collectors.joining());
- assertThat(result).isEqualTo(content);
- }
-
- }
-
- @Test
- public void test_content_exclude_bom() throws IOException {
- Path testFile = baseDir.resolve(PROJECT_RELATIVE_PATH);
- Files.createDirectories(testFile.getParent());
- try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(testFile.toFile()), StandardCharsets.UTF_8))) {
- out.write('\ufeff');
- }
- String content = "test é string €";
- Files.write(testFile, content.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);
-
- assertThat(Files.readAllLines(testFile, StandardCharsets.UTF_8).get(0)).hasSize(content.length() + 1);
-
- Metadata metadata = new Metadata(42, 30, "", new int[0], new int[0], 10);
-
- DefaultInputFile inputFile = new DefaultInputFile(indexedFile, f -> f.setMetadata(metadata))
- .setStatus(InputFile.Status.ADDED)
- .setCharset(StandardCharsets.UTF_8);
-
- assertThat(inputFile.contents()).isEqualTo(content);
- try (InputStream inputStream = inputFile.inputStream()) {
- String result = new BufferedReader(new InputStreamReader(inputStream, inputFile.charset())).lines().collect(Collectors.joining());
- assertThat(result).isEqualTo(content);
- }
-
- }
-
- @Test
- public void test_equals_and_hashcode() throws Exception {
- DefaultInputFile f1 = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), (f) -> mock(Metadata.class));
- DefaultInputFile f1a = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), (f) -> mock(Metadata.class));
- DefaultInputFile f2 = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), "src/Bar.php", null), (f) -> mock(Metadata.class));
-
- assertThat(f1).isEqualTo(f1);
- assertThat(f1).isEqualTo(f1a);
- assertThat(f1).isNotEqualTo(f2);
- assertThat(f1.equals("foo")).isFalse();
- assertThat(f1.equals(null)).isFalse();
-
- assertThat(f1.hashCode()).isEqualTo(f1.hashCode());
- assertThat(f1.hashCode()).isEqualTo(f1a.hashCode());
- }
-
- @Test
- public void test_toString() throws Exception {
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), (f) -> mock(Metadata.class));
- assertThat(file.toString()).isEqualTo(MODULE_RELATIVE_PATH);
- }
-
- @Test
- public void checkValidPointer() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {9, 15}, 16);
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
- assertThat(file.newPointer(1, 0).line()).isEqualTo(1);
- assertThat(file.newPointer(1, 0).lineOffset()).isEqualTo(0);
- // Don't fail
- file.newPointer(1, 9);
- file.newPointer(2, 0);
- file.newPointer(2, 5);
-
- try {
- file.newPointer(0, 1);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("0 is not a valid line for a file");
- }
- try {
- file.newPointer(3, 1);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("3 is not a valid line for pointer. File src/Foo.php has 2 line(s)");
- }
- try {
- file.newPointer(1, -1);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("-1 is not a valid line offset for a file");
- }
- try {
- file.newPointer(1, 10);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("10 is not a valid line offset for pointer. File src/Foo.php has 9 character(s) at line 1");
- }
- }
-
- @Test
- public void checkValidPointerUsingGlobalOffset() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {8, 15}, 16);
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
- assertThat(file.newPointer(0).line()).isEqualTo(1);
- assertThat(file.newPointer(0).lineOffset()).isEqualTo(0);
-
- assertThat(file.newPointer(9).line()).isEqualTo(1);
- // Ignore eol characters
- assertThat(file.newPointer(9).lineOffset()).isEqualTo(8);
-
- assertThat(file.newPointer(10).line()).isEqualTo(2);
- assertThat(file.newPointer(10).lineOffset()).isEqualTo(0);
-
- assertThat(file.newPointer(15).line()).isEqualTo(2);
- assertThat(file.newPointer(15).lineOffset()).isEqualTo(5);
-
- assertThat(file.newPointer(16).line()).isEqualTo(2);
- // Ignore eol characters
- assertThat(file.newPointer(16).lineOffset()).isEqualTo(5);
-
- try {
- file.newPointer(-1);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("-1 is not a valid offset for a file");
- }
-
- try {
- file.newPointer(17);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("17 is not a valid offset for file src/Foo.php. Max offset is 16");
- }
- }
-
- @Test
- public void checkValidRange() {
- Metadata metadata = new FileMetadata().readMetadata(new StringReader("bla bla a\nabcde"));
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
-
- assertThat(file.newRange(file.newPointer(1, 0), file.newPointer(2, 1)).start().line()).isEqualTo(1);
- // Don't fail
- file.newRange(file.newPointer(1, 0), file.newPointer(1, 1));
- file.newRange(file.newPointer(1, 0), file.newPointer(1, 9));
- file.newRange(file.newPointer(1, 0), file.newPointer(2, 0));
- assertThat(file.newRange(file.newPointer(1, 0), file.newPointer(2, 5))).isEqualTo(file.newRange(0, 15));
-
- try {
- file.newRange(file.newPointer(1, 0), file.newPointer(1, 0));
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("Start pointer [line=1, lineOffset=0] should be before end pointer [line=1, lineOffset=0]");
- }
- try {
- file.newRange(file.newPointer(1, 0), file.newPointer(1, 10));
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("10 is not a valid line offset for pointer. File src/Foo.php has 9 character(s) at line 1");
- }
- }
-
- @Test
- public void selectLine() {
- Metadata metadata = new FileMetadata().readMetadata(new StringReader("bla bla a\nabcde\n\nabc"));
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
-
- assertThat(file.selectLine(1).start().line()).isEqualTo(1);
- assertThat(file.selectLine(1).start().lineOffset()).isEqualTo(0);
- assertThat(file.selectLine(1).end().line()).isEqualTo(1);
- assertThat(file.selectLine(1).end().lineOffset()).isEqualTo(9);
-
- // Don't fail when selecting empty line
- assertThat(file.selectLine(3).start().line()).isEqualTo(3);
- assertThat(file.selectLine(3).start().lineOffset()).isEqualTo(0);
- assertThat(file.selectLine(3).end().line()).isEqualTo(3);
- assertThat(file.selectLine(3).end().lineOffset()).isEqualTo(0);
-
- try {
- file.selectLine(5);
- fail();
- } catch (Exception e) {
- assertThat(e).hasMessage("5 is not a valid line for pointer. File src/Foo.php has 4 line(s)");
- }
- }
-
- @Test
- public void checkValidRangeUsingGlobalOffset() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {9, 15}, 16);
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
- TextRange newRange = file.newRange(10, 13);
- assertThat(newRange.start().line()).isEqualTo(2);
- assertThat(newRange.start().lineOffset()).isEqualTo(0);
- assertThat(newRange.end().line()).isEqualTo(2);
- assertThat(newRange.end().lineOffset()).isEqualTo(3);
- }
-
- @Test
- public void testRangeOverlap() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {9, 15}, 16);
- DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
- // Don't fail
- assertThat(file.newRange(file.newPointer(1, 0), file.newPointer(1, 1)).overlap(file.newRange(file.newPointer(1, 0), file.newPointer(1, 1)))).isTrue();
- assertThat(file.newRange(file.newPointer(1, 0), file.newPointer(1, 1)).overlap(file.newRange(file.newPointer(1, 0), file.newPointer(1, 2)))).isTrue();
- assertThat(file.newRange(file.newPointer(1, 0), file.newPointer(1, 1)).overlap(file.newRange(file.newPointer(1, 1), file.newPointer(1, 2)))).isFalse();
- assertThat(file.newRange(file.newPointer(1, 2), file.newPointer(1, 3)).overlap(file.newRange(file.newPointer(1, 0), file.newPointer(1, 2)))).isFalse();
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputModuleTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputModuleTest.java
deleted file mode 100644
index 02570d36735..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputModuleTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultInputModuleTest {
-
- private static final String FILE_1 = "file1";
- private static final String TEST_1 = "test1";
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Test
- public void check_getters() throws IOException {
- ProjectDefinition def = ProjectDefinition.create();
- def.setKey("moduleKey");
- File baseDir = temp.newFolder();
- Path src = baseDir.toPath().resolve(FILE_1);
- Files.createFile(src);
- Path test = baseDir.toPath().resolve(TEST_1);
- Files.createFile(test);
- def.setBaseDir(baseDir);
- File workDir = temp.newFolder();
- def.setWorkDir(workDir);
- def.setSources(FILE_1);
- def.setTests(TEST_1);
- DefaultInputModule module = new DefaultInputModule(def);
-
- assertThat(module.key()).isEqualTo("moduleKey");
- assertThat(module.definition()).isEqualTo(def);
- assertThat(module.getBranch()).isNull();
- assertThat(module.getBaseDir()).isEqualTo(baseDir.toPath());
- assertThat(module.getKeyWithBranch()).isEqualTo("moduleKey");
- assertThat(module.getWorkDir()).isEqualTo(workDir.toPath());
- assertThat(module.getEncoding()).isEqualTo(Charset.defaultCharset());
- assertThat(module.getSourceDirsOrFiles().get()).containsExactlyInAnyOrder(src);
- assertThat(module.getTestDirsOrFiles().get()).containsExactlyInAnyOrder(test);
- assertThat(module.getEncoding()).isEqualTo(Charset.defaultCharset());
-
- assertThat(module.isFile()).isFalse();
- }
-
- @Test
- public void no_sources() throws IOException {
- ProjectDefinition def = ProjectDefinition.create();
- def.setKey("moduleKey");
- File baseDir = temp.newFolder();
- Path src = baseDir.toPath().resolve(FILE_1);
- Files.createFile(src);
- Path test = baseDir.toPath().resolve(TEST_1);
- Files.createFile(test);
- def.setBaseDir(baseDir);
- File workDir = temp.newFolder();
- def.setWorkDir(workDir);
- DefaultInputModule module = new DefaultInputModule(def);
-
- assertThat(module.key()).isEqualTo("moduleKey");
- assertThat(module.definition()).isEqualTo(def);
- assertThat(module.getBranch()).isNull();
- assertThat(module.getBaseDir()).isEqualTo(baseDir.toPath());
- assertThat(module.getKeyWithBranch()).isEqualTo("moduleKey");
- assertThat(module.getWorkDir()).isEqualTo(workDir.toPath());
- assertThat(module.getEncoding()).isEqualTo(Charset.defaultCharset());
- assertThat(module.getSourceDirsOrFiles()).isNotPresent();
- assertThat(module.getTestDirsOrFiles()).isNotPresent();
- assertThat(module.getEncoding()).isEqualTo(Charset.defaultCharset());
-
- assertThat(module.isFile()).isFalse();
- }
-
- @Test
- public void working_directory_should_be_hidden() throws IOException {
- ProjectDefinition def = ProjectDefinition.create();
- File workDir = temp.newFolder(".sonar");
- def.setWorkDir(workDir);
- File baseDir = temp.newFolder();
- def.setBaseDir(baseDir);
- DefaultInputModule module = new DefaultInputModule(def);
- assertThat(workDir.isHidden()).isTrue();
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputProjectTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputProjectTest.java
deleted file mode 100644
index 03248472335..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/DefaultInputProjectTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultInputProjectTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Test
- public void testGetters() throws IOException {
- ProjectDefinition def = ProjectDefinition.create();
- def.setKey("projectKey");
- def.setName("projectName");
- File baseDir = temp.newFolder();
- def.setBaseDir(baseDir);
- def.setDescription("desc");
- File workDir = temp.newFolder();
- def.setWorkDir(workDir);
- def.setSources("file1");
- def.setTests("test1");
- AbstractProjectOrModule project = new DefaultInputProject(def);
-
- assertThat(project.key()).isEqualTo("projectKey");
- assertThat(project.getName()).isEqualTo("projectName");
- assertThat(project.getOriginalName()).isEqualTo("projectName");
- assertThat(project.definition()).isEqualTo(def);
- assertThat(project.getBranch()).isNull();
- assertThat(project.getBaseDir()).isEqualTo(baseDir.toPath());
- assertThat(project.getKeyWithBranch()).isEqualTo("projectKey");
- assertThat(project.getDescription()).isEqualTo("desc");
- assertThat(project.getWorkDir()).isEqualTo(workDir.toPath());
- assertThat(project.getEncoding()).isEqualTo(Charset.defaultCharset());
-
- assertThat(project.properties()).hasSize(5);
-
- assertThat(project.isFile()).isFalse();
- }
-
- @Test
- public void testEncoding() throws IOException {
- ProjectDefinition def = ProjectDefinition.create();
- def.setKey("projectKey");
- def.setName("projectName");
- File baseDir = temp.newFolder();
- def.setBaseDir(baseDir);
- def.setProjectVersion("version");
- def.setDescription("desc");
- File workDir = temp.newFolder();
- def.setWorkDir(workDir);
- def.setSources("file1");
- def.setProperty("sonar.sourceEncoding", "UTF-16");
- AbstractProjectOrModule project = new DefaultInputProject(def);
-
- assertThat(project.getEncoding()).isEqualTo(StandardCharsets.UTF_16);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/FileMetadataTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/FileMetadataTest.java
deleted file mode 100644
index c2665324ebc..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/FileMetadataTest.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import javax.annotation.Nullable;
-import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.io.FileUtils;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.internal.Metadata;
-import org.sonar.api.utils.log.LogTester;
-import org.sonar.api.utils.log.LoggerLevel;
-
-import static org.apache.commons.codec.digest.DigestUtils.md5Hex;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.fail;
-
-public class FileMetadataTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Rule
- public LogTester logTester = new LogTester();
-
- @Test
- public void empty_file() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.touch(tempFile);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(1);
- assertThat(metadata.nonBlankLines()).isEqualTo(0);
- assertThat(metadata.hash()).isNotEmpty();
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(0);
- assertThat(metadata.isEmpty()).isTrue();
- }
-
- @Test
- public void windows_without_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\r\nbar\r\nbaz", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(3);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 5, 10);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 8, 13);
- assertThat(metadata.isEmpty()).isFalse();
- }
-
- @Test
- public void read_with_wrong_encoding() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "marker´s\n", Charset.forName("cp1252"));
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(2);
- assertThat(metadata.hash()).isEqualTo(md5Hex("marker\ufffds\n"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 9);
- }
-
- @Test
- public void non_ascii_utf_8() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "föo\r\nbàr\r\n\u1D11Ebaßz\r\n", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("föo\nbàr\n\u1D11Ebaßz\n"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 5, 10, 18);
- }
-
- @Test
- public void non_ascii_utf_16() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "föo\r\nbàr\r\n\u1D11Ebaßz\r\n", StandardCharsets.UTF_16, true);
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_16, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("föo\nbàr\n\u1D11Ebaßz\n".getBytes(StandardCharsets.UTF_8)));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 5, 10, 18);
- }
-
- @Test
- public void unix_without_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\nbar\nbaz", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(3);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11);
- assertThat(metadata.isEmpty()).isFalse();
- }
-
- @Test
- public void unix_with_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\nbar\nbaz\n", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz\n"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8, 12);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11, 12);
- }
-
- @Test
- public void mac_without_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\rbar\rbaz", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(3);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11);
- }
-
- @Test
- public void mac_with_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\rbar\rbaz\r", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz\n"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8, 12);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11, 12);
- }
-
- @Test
- public void mix_of_newlines_with_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\nbar\r\nbaz\n", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz\n"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 9, 13);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 12, 13);
- }
-
- @Test
- public void several_new_lines() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\n\n\nbar", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(2);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\n\n\nbar"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 5, 6);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 4, 5, 9);
- }
-
- @Test
- public void mix_of_newlines_without_latest_eol() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "foo\nbar\r\nbaz", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(3);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 9);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 12);
- }
-
- @Test
- public void start_with_newline() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "\nfoo\nbar\r\nbaz", StandardCharsets.UTF_8, true);
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
- assertThat(metadata.lines()).isEqualTo(4);
- assertThat(metadata.nonBlankLines()).isEqualTo(3);
- assertThat(metadata.hash()).isEqualTo(md5Hex("\nfoo\nbar\nbaz"));
- assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 1, 5, 10);
- assertThat(metadata.originalLineEndOffsets()).containsOnly(0, 4, 8, 13);
- }
-
- @Test
- public void ignore_whitespace_when_computing_line_hashes() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, " foo\nb ar\r\nbaz \t", StandardCharsets.UTF_8, true);
-
- DefaultInputFile f = new TestInputFileBuilder("foo", tempFile.getName())
- .setModuleBaseDir(tempFile.getParentFile().toPath())
- .setCharset(StandardCharsets.UTF_8)
- .build();
- FileMetadata.computeLineHashesForIssueTracking(f, new FileMetadata.LineHashConsumer() {
-
- @Override
- public void consume(int lineIdx, @Nullable byte[] hash) {
- switch (lineIdx) {
- case 1:
- assertThat(Hex.encodeHexString(hash)).isEqualTo(md5Hex("foo"));
- break;
- case 2:
- assertThat(Hex.encodeHexString(hash)).isEqualTo(md5Hex("bar"));
- break;
- case 3:
- assertThat(Hex.encodeHexString(hash)).isEqualTo(md5Hex("baz"));
- break;
- default:
- fail("Invalid line");
- }
- }
- });
- }
-
- @Test
- public void dont_fail_on_empty_file() throws Exception {
- File tempFile = temp.newFile();
- FileUtils.write(tempFile, "", StandardCharsets.UTF_8, true);
-
- DefaultInputFile f = new TestInputFileBuilder("foo", tempFile.getName())
- .setModuleBaseDir(tempFile.getParentFile().toPath())
- .setCharset(StandardCharsets.UTF_8)
- .build();
- FileMetadata.computeLineHashesForIssueTracking(f, new FileMetadata.LineHashConsumer() {
-
- @Override
- public void consume(int lineIdx, @Nullable byte[] hash) {
- switch (lineIdx) {
- case 1:
- assertThat(hash).isNull();
- break;
- default:
- fail("Invalid line");
- }
- }
- });
- }
-
- @Test
- public void line_feed_is_included_into_hash() throws Exception {
- File file1 = temp.newFile();
- FileUtils.write(file1, "foo\nbar\n", StandardCharsets.UTF_8, true);
-
- // same as file1, except an additional return carriage
- File file1a = temp.newFile();
- FileUtils.write(file1a, "foo\r\nbar\n", StandardCharsets.UTF_8, true);
-
- File file2 = temp.newFile();
- FileUtils.write(file2, "foo\nbar", StandardCharsets.UTF_8, true);
-
- String hash1 = new FileMetadata().readMetadata(new FileInputStream(file1), StandardCharsets.UTF_8, file1.getName()).hash();
- String hash1a = new FileMetadata().readMetadata(new FileInputStream(file1a), StandardCharsets.UTF_8, file1a.getName()).hash();
- String hash2 = new FileMetadata().readMetadata(new FileInputStream(file2), StandardCharsets.UTF_8, file2.getName()).hash();
-
- assertThat(hash1).isEqualTo(hash1a);
- assertThat(hash1).isNotEqualTo(hash2);
- }
-
- @Test
- public void binary_file_with_unmappable_character() throws Exception {
- File woff = new File(this.getClass().getResource("glyphicons-halflings-regular.woff").toURI());
-
- Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(woff), StandardCharsets.UTF_8, woff.getAbsolutePath());
-
- assertThat(metadata.lines()).isEqualTo(135);
- assertThat(metadata.nonBlankLines()).isEqualTo(133);
- assertThat(metadata.hash()).isNotEmpty();
-
- assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains("Invalid character encountered in file");
- assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains(
- "glyphicons-halflings-regular.woff at line 1 for encoding UTF-8. Please fix file content or configure the encoding to be used using property 'sonar.sourceEncoding'.");
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/TestInputFileBuilderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/TestInputFileBuilderTest.java
deleted file mode 100644
index 2d83007ff13..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/TestInputFileBuilderTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import org.apache.commons.io.IOUtils;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.fs.InputFile.Status;
-import org.sonar.api.batch.fs.InputFile.Type;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class TestInputFileBuilderTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Test
- public void setContent() throws IOException {
- DefaultInputFile file = TestInputFileBuilder.create("module", "invalidPath")
- .setContents("my content")
- .setCharset(StandardCharsets.UTF_8)
- .build();
- assertThat(file.contents()).isEqualTo("my content");
- assertThat(IOUtils.toString(file.inputStream())).isEqualTo("my content");
- }
-
- @Test
- public void testGetters() {
- DefaultInputFile file = TestInputFileBuilder.create("module", new File("baseDir"), new File("baseDir", "path"))
- .setStatus(Status.SAME)
- .setType(Type.MAIN)
- .build();
-
- assertThat(file.type()).isEqualTo(Type.MAIN);
- assertThat(file.status()).isEqualTo(Status.SAME);
- assertThat(file.isPublished()).isTrue();
- assertThat(file.type()).isEqualTo(Type.MAIN);
- assertThat(file.relativePath()).isEqualTo("path");
- assertThat(file.absolutePath()).isEqualTo("baseDir/path");
-
- }
-
- @Test
- public void testCreateInputModule() throws IOException {
- File baseDir = temp.newFolder();
- AbstractProjectOrModule module = TestInputFileBuilder.newDefaultInputModule("key", baseDir);
- assertThat(module.key()).isEqualTo("key");
- assertThat(module.getBaseDir()).isEqualTo(baseDir.toPath());
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/charhandler/IntArrayListTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/charhandler/IntArrayListTest.java
deleted file mode 100644
index 048a0309e5f..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/charhandler/IntArrayListTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.charhandler;
-
-import org.junit.Test;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class IntArrayListTest {
-
- @Test
- public void addElements() {
- IntArrayList list = new IntArrayList();
- assertThat(list.trimAndGet()).isEmpty();
- list.add(1);
- list.add(2);
- assertThat(list.trimAndGet()).containsExactly(1, 2);
- }
-
- @Test
- public void trimIfNeeded() {
- IntArrayList list = new IntArrayList();
- list.add(1);
- list.add(2);
- assertThat(list.trimAndGet()).isSameAs(list.trimAndGet());
- }
-
- @Test
- public void grow() {
- // Default capacity is 10
- IntArrayList list = new IntArrayList();
- for (int i = 1; i <= 11; i++) {
- list.add(i);
- }
- assertThat(list.trimAndGet()).hasSize(11);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/AndPredicateTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/AndPredicateTest.java
deleted file mode 100644
index d3ec2aa7b81..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/AndPredicateTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.junit.Test;
-import org.sonar.api.batch.fs.FilePredicate;
-
-import java.util.Arrays;
-import org.sonar.api.batch.fs.internal.PathPattern;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class AndPredicateTest {
-
- @Test
- public void flattenNestedAnd() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- PathPatternPredicate pathPatternPredicate3 = new PathPatternPredicate(PathPattern.create("foo3/**"));
- FilePredicate andPredicate = AndPredicate.create(Arrays.<FilePredicate>asList(pathPatternPredicate1,
- AndPredicate.create(Arrays.<FilePredicate>asList(pathPatternPredicate2, pathPatternPredicate3))));
- assertThat(((AndPredicate) andPredicate).predicates()).containsExactly(pathPatternPredicate1, pathPatternPredicate2, pathPatternPredicate3);
- }
-
- @Test
- public void sortPredicatesByPriority() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- RelativePathPredicate relativePathPredicate = new RelativePathPredicate("foo");
- FilePredicate andPredicate = AndPredicate.create(Arrays.<FilePredicate>asList(pathPatternPredicate1,
- relativePathPredicate, pathPatternPredicate2));
- assertThat(((AndPredicate) andPredicate).predicates()).containsExactly(relativePathPredicate, pathPatternPredicate1, pathPatternPredicate2);
- }
-
- @Test
- public void simplifyAndExpressionsWhenEmpty() {
- FilePredicate andPredicate = AndPredicate.create(Arrays.<FilePredicate>asList());
- assertThat(andPredicate).isEqualTo(TruePredicate.TRUE);
- }
-
- @Test
- public void simplifyAndExpressionsWhenTrue() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- FilePredicate andPredicate = AndPredicate.create(Arrays.<FilePredicate>asList(pathPatternPredicate1,
- TruePredicate.TRUE, pathPatternPredicate2));
- assertThat(((AndPredicate) andPredicate).predicates()).containsExactly(pathPatternPredicate1, pathPatternPredicate2);
- }
-
- @Test
- public void simplifyAndExpressionsWhenFalse() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- FilePredicate andPredicate = AndPredicate.create(Arrays.<FilePredicate>asList(pathPatternPredicate1,
- FalsePredicate.FALSE, pathPatternPredicate2));
- assertThat(andPredicate).isEqualTo(FalsePredicate.FALSE);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/DefaultFilePredicatesTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/DefaultFilePredicatesTest.java
deleted file mode 100644
index d0869f0d9a2..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/DefaultFilePredicatesTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.Collections;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-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.sonar.scanner.fs.TestInputFileBuilder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultFilePredicatesTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- private Path moduleBasePath;
-
- @Before
- public void setUp() throws IOException {
- moduleBasePath = temp.newFolder().toPath();
- }
-
- InputFile javaFile;
- FilePredicates predicates;
-
- @Before
- public void before() throws IOException {
- predicates = new DefaultFilePredicates(temp.newFolder().toPath());
- javaFile = new TestInputFileBuilder("foo", "src/main/java/struts/Action.java")
- .setModuleBaseDir(moduleBasePath)
- .setLanguage("java")
- .setStatus(Status.SAME)
- .build();
-
- }
-
- @Test
- public void all() {
- assertThat(predicates.all().apply(javaFile)).isTrue();
- }
-
- @Test
- public void none() {
- assertThat(predicates.none().apply(javaFile)).isFalse();
- }
-
- @Test
- public void matches_inclusion_pattern() {
- assertThat(predicates.matchesPathPattern("src/main/**/Action.java").apply(javaFile)).isTrue();
- assertThat(predicates.matchesPathPattern("Action.java").apply(javaFile)).isFalse();
- assertThat(predicates.matchesPathPattern("src/**/*.php").apply(javaFile)).isFalse();
- }
-
- @Test
- public void matches_inclusion_patterns() {
- assertThat(predicates.matchesPathPatterns(new String[] {"src/other/**.java", "src/main/**/Action.java"}).apply(javaFile)).isTrue();
- assertThat(predicates.matchesPathPatterns(new String[] {}).apply(javaFile)).isTrue();
- assertThat(predicates.matchesPathPatterns(new String[] {"src/other/**.java", "src/**/*.php"}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void does_not_match_exclusion_pattern() {
- assertThat(predicates.doesNotMatchPathPattern("src/main/**/Action.java").apply(javaFile)).isFalse();
- assertThat(predicates.doesNotMatchPathPattern("Action.java").apply(javaFile)).isTrue();
- assertThat(predicates.doesNotMatchPathPattern("src/**/*.php").apply(javaFile)).isTrue();
- }
-
- @Test
- public void does_not_match_exclusion_patterns() {
- assertThat(predicates.doesNotMatchPathPatterns(new String[] {}).apply(javaFile)).isTrue();
- assertThat(predicates.doesNotMatchPathPatterns(new String[] {"src/other/**.java", "src/**/*.php"}).apply(javaFile)).isTrue();
- assertThat(predicates.doesNotMatchPathPatterns(new String[] {"src/other/**.java", "src/main/**/Action.java"}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_relative_path() {
- assertThat(predicates.hasRelativePath("src/main/java/struts/Action.java").apply(javaFile)).isTrue();
- assertThat(predicates.hasRelativePath("src/main/java/struts/Other.java").apply(javaFile)).isFalse();
-
- // path is normalized
- assertThat(predicates.hasRelativePath("src/main/java/../java/struts/Action.java").apply(javaFile)).isTrue();
-
- assertThat(predicates.hasRelativePath("src\\main\\java\\struts\\Action.java").apply(javaFile)).isTrue();
- assertThat(predicates.hasRelativePath("src\\main\\java\\struts\\Other.java").apply(javaFile)).isFalse();
- assertThat(predicates.hasRelativePath("src\\main\\java\\struts\\..\\struts\\Action.java").apply(javaFile)).isTrue();
- }
-
- @Test
- public void has_absolute_path() throws Exception {
- String path = javaFile.file().getAbsolutePath();
- assertThat(predicates.hasAbsolutePath(path).apply(javaFile)).isTrue();
- assertThat(predicates.hasAbsolutePath(path.replaceAll("/", "\\\\")).apply(javaFile)).isTrue();
-
- assertThat(predicates.hasAbsolutePath(temp.newFile().getAbsolutePath()).apply(javaFile)).isFalse();
- assertThat(predicates.hasAbsolutePath("src/main/java/struts/Action.java").apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_uri() throws Exception {
- URI uri = javaFile.uri();
- assertThat(predicates.hasURI(uri).apply(javaFile)).isTrue();
-
- assertThat(predicates.hasURI(temp.newFile().toURI()).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_path() throws Exception {
- // is relative path
- assertThat(predicates.hasPath("src/main/java/struts/Action.java").apply(javaFile)).isTrue();
- assertThat(predicates.hasPath("src/main/java/struts/Other.java").apply(javaFile)).isFalse();
-
- // is absolute path
- String path = javaFile.file().getAbsolutePath();
- assertThat(predicates.hasAbsolutePath(path).apply(javaFile)).isTrue();
- assertThat(predicates.hasPath(temp.newFile().getAbsolutePath()).apply(javaFile)).isFalse();
- }
-
- @Test
- public void is_file() throws Exception {
- // relative file
- assertThat(predicates.is(new File(javaFile.relativePath())).apply(javaFile)).isTrue();
-
- // absolute file
- assertThat(predicates.is(javaFile.file()).apply(javaFile)).isTrue();
- assertThat(predicates.is(javaFile.file().getAbsoluteFile()).apply(javaFile)).isTrue();
- assertThat(predicates.is(new File(javaFile.file().toURI())).apply(javaFile)).isTrue();
- assertThat(predicates.is(temp.newFile()).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_language() {
- assertThat(predicates.hasLanguage("java").apply(javaFile)).isTrue();
- assertThat(predicates.hasLanguage("php").apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_languages() {
- assertThat(predicates.hasLanguages(Arrays.asList("java", "php")).apply(javaFile)).isTrue();
- assertThat(predicates.hasLanguages(Arrays.asList("cobol", "php")).apply(javaFile)).isFalse();
- assertThat(predicates.hasLanguages(Collections.<String>emptyList()).apply(javaFile)).isTrue();
- }
-
- @Test
- public void has_type() {
- assertThat(predicates.hasType(InputFile.Type.MAIN).apply(javaFile)).isTrue();
- assertThat(predicates.hasType(InputFile.Type.TEST).apply(javaFile)).isFalse();
- }
-
- @Test
- public void has_status() {
- assertThat(predicates.hasAnyStatus().apply(javaFile)).isTrue();
- assertThat(predicates.hasStatus(InputFile.Status.SAME).apply(javaFile)).isTrue();
- assertThat(predicates.hasStatus(InputFile.Status.ADDED).apply(javaFile)).isFalse();
- }
-
- @Test
- public void not() {
- assertThat(predicates.not(predicates.hasType(InputFile.Type.MAIN)).apply(javaFile)).isFalse();
- assertThat(predicates.not(predicates.hasType(InputFile.Type.TEST)).apply(javaFile)).isTrue();
- }
-
- @Test
- public void and() {
- // empty
- assertThat(predicates.and().apply(javaFile)).isTrue();
- assertThat(predicates.and(new FilePredicate[0]).apply(javaFile)).isTrue();
- assertThat(predicates.and(Collections.<FilePredicate>emptyList()).apply(javaFile)).isTrue();
-
- // two arguments
- assertThat(predicates.and(predicates.all(), predicates.all()).apply(javaFile)).isTrue();
- assertThat(predicates.and(predicates.all(), predicates.none()).apply(javaFile)).isFalse();
- assertThat(predicates.and(predicates.none(), predicates.all()).apply(javaFile)).isFalse();
-
- // collection
- assertThat(predicates.and(Arrays.asList(predicates.all(), predicates.all())).apply(javaFile)).isTrue();
- assertThat(predicates.and(Arrays.asList(predicates.all(), predicates.none())).apply(javaFile)).isFalse();
-
- // array
- assertThat(predicates.and(new FilePredicate[] {predicates.all(), predicates.all()}).apply(javaFile)).isTrue();
- assertThat(predicates.and(new FilePredicate[] {predicates.all(), predicates.none()}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void or() {
- // empty
- assertThat(predicates.or().apply(javaFile)).isTrue();
- assertThat(predicates.or(new FilePredicate[0]).apply(javaFile)).isTrue();
- assertThat(predicates.or(Collections.<FilePredicate>emptyList()).apply(javaFile)).isTrue();
-
- // two arguments
- assertThat(predicates.or(predicates.all(), predicates.all()).apply(javaFile)).isTrue();
- assertThat(predicates.or(predicates.all(), predicates.none()).apply(javaFile)).isTrue();
- assertThat(predicates.or(predicates.none(), predicates.all()).apply(javaFile)).isTrue();
- assertThat(predicates.or(predicates.none(), predicates.none()).apply(javaFile)).isFalse();
-
- // collection
- assertThat(predicates.or(Arrays.asList(predicates.all(), predicates.all())).apply(javaFile)).isTrue();
- assertThat(predicates.or(Arrays.asList(predicates.all(), predicates.none())).apply(javaFile)).isTrue();
- assertThat(predicates.or(Arrays.asList(predicates.none(), predicates.none())).apply(javaFile)).isFalse();
-
- // array
- assertThat(predicates.or(new FilePredicate[] {predicates.all(), predicates.all()}).apply(javaFile)).isTrue();
- assertThat(predicates.or(new FilePredicate[] {predicates.all(), predicates.none()}).apply(javaFile)).isTrue();
- assertThat(predicates.or(new FilePredicate[] {predicates.none(), predicates.none()}).apply(javaFile)).isFalse();
- }
-
- @Test
- public void hasFilename() {
- assertThat(predicates.hasFilename("Action.java").apply(javaFile)).isTrue();
- }
-
- @Test
- public void hasExtension() {
- assertThat(predicates.hasExtension("java").apply(javaFile)).isTrue();
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FileExtensionPredicateTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FileExtensionPredicateTest.java
deleted file mode 100644
index 8cae2f45ff0..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FileExtensionPredicateTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.io.IOException;
-import org.junit.Test;
-import org.sonar.api.batch.fs.InputFile;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.sonar.scanner.fs.predicates.FileExtensionPredicate.getExtension;
-
-public class FileExtensionPredicateTest {
-
- @Test
- public void should_match_correct_extension() throws IOException {
- FileExtensionPredicate predicate = new FileExtensionPredicate("bat");
- assertThat(predicate.apply(mockWithName("prog.bat"))).isTrue();
- assertThat(predicate.apply(mockWithName("prog.bat.bat"))).isTrue();
- }
-
- @Test
- public void should_not_match_incorrect_extension() throws IOException {
- FileExtensionPredicate predicate = new FileExtensionPredicate("bat");
- assertThat(predicate.apply(mockWithName("prog.batt"))).isFalse();
- assertThat(predicate.apply(mockWithName("prog.abat"))).isFalse();
- assertThat(predicate.apply(mockWithName("prog."))).isFalse();
- assertThat(predicate.apply(mockWithName("prog.bat."))).isFalse();
- assertThat(predicate.apply(mockWithName("prog.bat.batt"))).isFalse();
- assertThat(predicate.apply(mockWithName("prog"))).isFalse();
- }
-
- @Test
- public void should_match_correct_extension_case_insensitively() throws IOException {
- FileExtensionPredicate predicate = new FileExtensionPredicate("jAVa");
- assertThat(predicate.apply(mockWithName("Program.java"))).isTrue();
- assertThat(predicate.apply(mockWithName("Program.JAVA"))).isTrue();
- assertThat(predicate.apply(mockWithName("Program.Java"))).isTrue();
- assertThat(predicate.apply(mockWithName("Program.JaVa"))).isTrue();
- }
-
- @Test
- public void test_empty_extension() {
- assertThat(getExtension("prog")).isEmpty();
- assertThat(getExtension("prog.")).isEmpty();
- assertThat(getExtension(".")).isEmpty();
- }
-
- private InputFile mockWithName(String filename) throws IOException {
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.filename()).thenReturn(filename);
- return inputFile;
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FilenamePredicateTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FilenamePredicateTest.java
deleted file mode 100644
index 71c7d1f47de..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/FilenamePredicateTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import java.io.IOException;
-import java.util.Collections;
-import org.junit.Test;
-import org.sonar.api.batch.fs.FileSystem;
-import org.sonar.api.batch.fs.InputFile;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class FilenamePredicateTest {
- @Test
- public void should_match_file_by_filename() throws IOException {
- String filename = "some name";
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.filename()).thenReturn(filename);
-
- assertThat(new FilenamePredicate(filename).apply(inputFile)).isTrue();
- }
-
- @Test
- public void should_not_match_file_by_different_filename() throws IOException {
- String filename = "some name";
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.filename()).thenReturn(filename + "x");
-
- assertThat(new FilenamePredicate(filename).apply(inputFile)).isFalse();
- }
-
- @Test
- public void should_find_matching_file_in_index() throws IOException {
- String filename = "some name";
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.filename()).thenReturn(filename);
-
- FileSystem.Index index = mock(FileSystem.Index.class);
- when(index.getFilesByName(filename)).thenReturn(Collections.singleton(inputFile));
-
- assertThat(new FilenamePredicate(filename).get(index)).containsOnly(inputFile);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/OrPredicateTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/OrPredicateTest.java
deleted file mode 100644
index 0804d1f3f7e..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/OrPredicateTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.junit.Test;
-import org.sonar.api.batch.fs.FilePredicate;
-
-import java.util.Arrays;
-import org.sonar.api.batch.fs.internal.PathPattern;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class OrPredicateTest {
-
- @Test
- public void flattenNestedOr() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- PathPatternPredicate pathPatternPredicate3 = new PathPatternPredicate(PathPattern.create("foo3/**"));
- FilePredicate orPredicate = OrPredicate.create(Arrays.asList(pathPatternPredicate1,
- OrPredicate.create(Arrays.asList(pathPatternPredicate2, pathPatternPredicate3))));
- assertThat(((OrPredicate) orPredicate).predicates()).containsExactly(pathPatternPredicate1, pathPatternPredicate2, pathPatternPredicate3);
- }
-
- @Test
- public void simplifyOrExpressionsWhenEmpty() {
- FilePredicate orPredicate = OrPredicate.create(Arrays.asList());
- assertThat(orPredicate).isEqualTo(TruePredicate.TRUE);
- }
-
- @Test
- public void simplifyOrExpressionsWhenFalse() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- FilePredicate andPredicate = OrPredicate.create(Arrays.asList(pathPatternPredicate1,
- FalsePredicate.FALSE, pathPatternPredicate2));
- assertThat(((OrPredicate) andPredicate).predicates()).containsExactly(pathPatternPredicate1, pathPatternPredicate2);
- }
-
- @Test
- public void simplifyAndExpressionsWhenTrue() {
- PathPatternPredicate pathPatternPredicate1 = new PathPatternPredicate(PathPattern.create("foo1/**"));
- PathPatternPredicate pathPatternPredicate2 = new PathPatternPredicate(PathPattern.create("foo2/**"));
- FilePredicate andPredicate = OrPredicate.create(Arrays.asList(pathPatternPredicate1,
- TruePredicate.TRUE, pathPatternPredicate2));
- assertThat(andPredicate).isEqualTo(TruePredicate.TRUE);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/RelativePathPredicateTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/RelativePathPredicateTest.java
deleted file mode 100644
index b3c9c2dc9ff..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/fs/predicates/RelativePathPredicateTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.fs.predicates;
-
-import org.junit.Test;
-import org.sonar.api.batch.fs.InputFile;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class RelativePathPredicateTest {
- @Test
- public void returns_false_when_path_is_invalid() {
- RelativePathPredicate predicate = new RelativePathPredicate("..");
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.relativePath()).thenReturn("path");
- assertThat(predicate.apply(inputFile)).isFalse();
- }
-
- @Test
- public void returns_true_if_matches() {
- RelativePathPredicate predicate = new RelativePathPredicate("path");
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.relativePath()).thenReturn("path");
- assertThat(predicate.apply(inputFile)).isTrue();
- }
-
- @Test
- public void returns_false_if_doesnt_match() {
- RelativePathPredicate predicate = new RelativePathPredicate("path1");
- InputFile inputFile = mock(InputFile.class);
- when(inputFile.relativePath()).thenReturn("path2");
- assertThat(predicate.apply(inputFile)).isFalse();
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageReportParserTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageReportParserTest.java
index ccd628b0a17..777c85a924b 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageReportParserTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericCoverageReportParserTest.java
@@ -28,9 +28,9 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.utils.MessageException;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.sensor.SensorContextTester;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.SensorContextTester;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionReportParserTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionReportParserTest.java
index 40ac5200719..a13c2a7e88a 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionReportParserTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionReportParserTest.java
@@ -31,9 +31,9 @@ import org.sonar.api.test.MutableTestCase;
import org.sonar.api.test.MutableTestPlan;
import org.sonar.api.utils.MessageException;
import org.sonar.scanner.deprecated.test.TestPlanBuilder;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.sensor.SensorContextTester;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.SensorContextTester;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java
index 980ee96bbe8..fcd36806b4f 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/genericcoverage/GenericTestExecutionSensorTest.java
@@ -35,7 +35,7 @@ import org.sonar.api.utils.log.LoggerLevel;
import org.sonar.scanner.config.DefaultConfiguration;
import org.sonar.scanner.deprecated.test.TestPlanBuilder;
import org.sonar.scanner.scan.ProjectConfiguration;
-import org.sonar.scanner.sensor.SensorContextTester;
+import org.sonar.api.impl.sensor.SensorContextTester;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/DefaultFilterableIssueTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/DefaultFilterableIssueTest.java
index 5250e1aa5d1..cf1b13c9fd8 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/DefaultFilterableIssueTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/DefaultFilterableIssueTest.java
@@ -24,7 +24,7 @@ import org.junit.Before;
import org.junit.Test;
import org.sonar.api.batch.fs.InputComponent;
import org.sonar.scanner.ProjectInfo;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.protocol.Constants.Severity;
import org.sonar.scanner.protocol.output.ScannerReport.Issue;
import org.sonar.scanner.protocol.output.ScannerReport.TextRange;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java
index 881a3629a04..3bd71931f2d 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java
@@ -32,18 +32,20 @@ import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.InputComponent;
+import org.sonar.api.batch.rule.NewActiveRule;
+import org.sonar.api.impl.rule.RulesBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.issue.DefaultIssue;
+import org.sonar.api.impl.issue.DefaultIssueLocation;
+import org.sonar.api.impl.sensor.DefaultExternalIssue;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
import org.sonar.api.rules.RuleType;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.report.ReportPublisher;
-import org.sonar.scanner.rule.ActiveRulesBuilder;
-import org.sonar.scanner.rule.NewActiveRule;
-import org.sonar.scanner.rule.RulesBuilder;
-import org.sonar.scanner.sensor.DefaultExternalIssue;
+import org.sonar.api.impl.rule.ActiveRulesBuilder;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilterTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilterTest.java
index a656a767f71..770bfc94806 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilterTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/EnforceIssuesFilterTest.java
@@ -26,7 +26,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.fs.InputComponent;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.api.notifications.AnalysisWarnings;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.scan.issue.filter.IssueFilterChain;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilterTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilterTest.java
index d5a99ff296f..4f514205e43 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilterTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/IgnoreIssuesFilterTest.java
@@ -24,7 +24,7 @@ import org.junit.Test;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.scan.issue.filter.IssueFilterChain;
import org.sonar.api.utils.WildcardPattern;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.issue.DefaultFilterableIssue;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueExclusionPatternInitializerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueExclusionPatternInitializerTest.java
index 50096cc117f..70a6a486db7 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueExclusionPatternInitializerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueExclusionPatternInitializerTest.java
@@ -22,7 +22,7 @@ package org.sonar.scanner.issue.ignore.pattern;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.config.PropertyDefinitions;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.api.utils.MessageException;
import org.sonar.core.config.IssueExclusionProperties;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueInclusionPatternInitializerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueInclusionPatternInitializerTest.java
index c6cc5777bda..7932972af78 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueInclusionPatternInitializerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/pattern/IssueInclusionPatternInitializerTest.java
@@ -22,7 +22,7 @@ package org.sonar.scanner.issue.ignore.pattern;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.config.PropertyDefinitions;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.core.config.IssueExclusionProperties;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java
index 94cebe5f0bd..ea148567732 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsLoaderTest.java
@@ -28,8 +28,8 @@ import org.junit.rules.ExpectedException;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sonar.api.notifications.AnalysisWarnings;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.issue.ignore.IgnoreIssuesFilter;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.pattern.IssuePattern;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScannerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScannerTest.java
index fb4165825e7..e6c757a92d3 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScannerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/ignore/scanner/IssueExclusionsRegexpScannerTest.java
@@ -34,9 +34,9 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.FileMetadata;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.FileMetadata;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsLoader.DoubleRegexpMatcher;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/ScannerMediumTester.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/ScannerMediumTester.java
index 244dec3cfcc..96b69e81ff1 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/ScannerMediumTester.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/ScannerMediumTester.java
@@ -44,6 +44,8 @@ import org.sonar.api.SonarEdition;
import org.sonar.api.SonarProduct;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.SonarRuntime;
+import org.sonar.api.batch.rule.LoadedActiveRule;
+import org.sonar.api.impl.server.RuleDefinitionContext;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.rule.RuleKey;
@@ -65,7 +67,6 @@ import org.sonar.scanner.repository.SingleProjectRepository;
import org.sonar.scanner.repository.settings.GlobalSettingsLoader;
import org.sonar.scanner.repository.settings.ProjectSettingsLoader;
import org.sonar.scanner.rule.ActiveRulesLoader;
-import org.sonar.scanner.rule.LoadedActiveRule;
import org.sonar.scanner.rule.RulesLoader;
import org.sonar.scanner.scan.ScanProperties;
import org.sonar.scanner.scan.branch.BranchConfiguration;
@@ -73,7 +74,6 @@ import org.sonar.scanner.scan.branch.BranchConfigurationLoader;
import org.sonar.scanner.scan.branch.BranchType;
import org.sonar.scanner.scan.branch.ProjectBranches;
import org.sonar.scanner.scan.branch.ProjectPullRequests;
-import org.sonar.server.rule.RuleDefinitionContext;
import org.sonarqube.ws.Qualityprofiles.SearchWsResponse.QualityProfile;
import org.sonarqube.ws.Rules.ListResponse.Rule;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/BranchMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/BranchMediumTest.java
index 40695d3529e..bb77fdd9001 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/BranchMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/BranchMediumTest.java
@@ -30,8 +30,8 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.FileMetadata;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.FileMetadata;
import org.sonar.scanner.mediumtest.AnalysisResult;
import org.sonar.scanner.mediumtest.ScannerMediumTester;
import org.sonar.scanner.protocol.output.ScannerReport;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/DeprecatedBranchMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/DeprecatedBranchMediumTest.java
index d6f141aa0f8..27b0c75eb39 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/DeprecatedBranchMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/branch/DeprecatedBranchMediumTest.java
@@ -32,8 +32,8 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.SonarEdition;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.api.utils.MessageException;
-import org.sonar.scanner.fs.DefaultInputFile;
import org.sonar.scanner.mediumtest.AnalysisResult;
import org.sonar.scanner.mediumtest.ScannerMediumTester;
import org.sonar.xoo.XooPlugin;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java
index e64c47b7edb..aeab4439694 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java
@@ -41,7 +41,7 @@ import org.sonar.api.utils.PathUtils;
import org.sonar.api.utils.System2;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonar.scanner.mediumtest.AnalysisResult;
import org.sonar.scanner.mediumtest.ScannerMediumTester;
import org.sonar.xoo.XooPlugin;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/ChecksMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/ChecksMediumTest.java
index fdc8a2c2b68..e725100e838 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/ChecksMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/ChecksMediumTest.java
@@ -34,7 +34,7 @@ import org.sonar.api.rule.RuleKey;
import org.sonar.scanner.mediumtest.ScannerMediumTester;
import org.sonar.scanner.mediumtest.AnalysisResult;
import org.sonar.scanner.protocol.output.ScannerReport.Issue;
-import org.sonar.scanner.rule.LoadedActiveRule;
+import org.sonar.api.batch.rule.LoadedActiveRule;
import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.rule.XooRulesDefinition;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/IssuesMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/IssuesMediumTest.java
index 683773b6e94..dc306bbec9d 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/IssuesMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/issues/IssuesMediumTest.java
@@ -35,7 +35,7 @@ import org.sonar.scanner.mediumtest.ScannerMediumTester;
import org.sonar.scanner.mediumtest.AnalysisResult;
import org.sonar.scanner.protocol.output.ScannerReport.ExternalIssue;
import org.sonar.scanner.protocol.output.ScannerReport.Issue;
-import org.sonar.scanner.rule.LoadedActiveRule;
+import org.sonar.api.batch.rule.LoadedActiveRule;
import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.rule.HasTagSensor;
import org.sonar.xoo.rule.OneExternalIssuePerLineSensor;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleCoverageAndDuplicationExclusionsTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleCoverageAndDuplicationExclusionsTest.java
index 6bfffc32384..eff17f8ca83 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleCoverageAndDuplicationExclusionsTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleCoverageAndDuplicationExclusionsTest.java
@@ -25,8 +25,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.scan.ModuleConfiguration;
import org.sonar.scanner.scan.filesystem.ModuleCoverageAndDuplicationExclusions;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleSensorsExecutorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleSensorsExecutorTest.java
index d48402ea9ed..fb7cf2ccea1 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleSensorsExecutorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ModuleSensorsExecutorTest.java
@@ -26,12 +26,12 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
+import org.sonar.api.impl.fs.SensorStrategy;
import org.sonar.api.batch.sensor.Sensor;
import org.sonar.scanner.bootstrap.ScannerPluginRepository;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.sensor.ModuleSensorExtensionDictionnary;
import org.sonar.scanner.sensor.ModuleSensorWrapper;
import org.sonar.scanner.sensor.ModuleSensorsExecutor;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ProjectCoverageExclusionsTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ProjectCoverageExclusionsTest.java
index a225093a650..f95fa930015 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ProjectCoverageExclusionsTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/phases/ProjectCoverageExclusionsTest.java
@@ -25,8 +25,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.scan.ProjectConfiguration;
import org.sonar.scanner.scan.filesystem.ProjectCoverageAndDuplicationExclusions;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java
index a9283aa8590..d34cfb43c12 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/platform/DefaultServerTest.java
@@ -24,10 +24,10 @@ import org.junit.Test;
import org.sonar.api.CoreProperties;
import org.sonar.api.SonarQubeSide;
import org.sonar.api.config.Settings;
-import org.sonar.api.config.internal.MapSettings;
-import org.sonar.api.internal.SonarRuntimeImpl;
+import org.sonar.api.impl.config.MapSettings;
+import org.sonar.api.impl.context.SonarRuntimeImpl;
import org.sonar.api.utils.Version;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -40,7 +40,7 @@ public class DefaultServerTest {
Settings settings = new MapSettings();
settings.setProperty(CoreProperties.SERVER_ID, "123");
settings.setProperty(CoreProperties.SERVER_STARTTIME, "2010-05-18T17:59:00+0000");
- ScannerWsClient client = mock(ScannerWsClient.class);
+ DefaultScannerWsClient client = mock(DefaultScannerWsClient.class);
when(client.baseUrl()).thenReturn("http://foo.com");
DefaultServer metadata = new DefaultServer(((MapSettings) settings).asConfig(), client,
@@ -61,7 +61,7 @@ public class DefaultServerTest {
@Test
public void publicRootUrl() {
Settings settings = new MapSettings();
- ScannerWsClient client = mock(ScannerWsClient.class);
+ DefaultScannerWsClient client = mock(DefaultScannerWsClient.class);
when(client.baseUrl()).thenReturn("http://foo.com/");
DefaultServer metadata = new DefaultServer(((MapSettings) settings).asConfig(), client, null);
@@ -76,7 +76,7 @@ public class DefaultServerTest {
public void invalid_startup_date_throws_exception() {
Settings settings = new MapSettings();
settings.setProperty(CoreProperties.SERVER_STARTTIME, "invalid");
- ScannerWsClient client = mock(ScannerWsClient.class);
+ DefaultScannerWsClient client = mock(DefaultScannerWsClient.class);
DefaultServer metadata = new DefaultServer(((MapSettings) settings).asConfig(), client, null);
metadata.getStartedAt();
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java
index 6399495c410..27a4f7bbd9e 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/DefaultPostJobContextTest.java
@@ -23,7 +23,7 @@ import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.batch.AnalysisMode;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/PostJobOptimizerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/PostJobOptimizerTest.java
index 1b604e11b6e..c10ffd5c237 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/PostJobOptimizerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/postjob/PostJobOptimizerTest.java
@@ -23,7 +23,8 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
+import org.sonar.api.impl.sensor.DefaultPostJobDescriptor;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ActiveRulesPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ActiveRulesPublisherTest.java
index 6293696adc4..2dce5ea7730 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ActiveRulesPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ActiveRulesPublisherTest.java
@@ -24,8 +24,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.scanner.rule.DefaultActiveRules;
-import org.sonar.scanner.rule.NewActiveRule;
+import org.sonar.api.impl.rule.DefaultActiveRules;
+import org.sonar.api.batch.rule.NewActiveRule;
import org.sonar.api.rule.RuleKey;
import org.sonar.core.util.CloseableIterator;
import org.sonar.scanner.protocol.Constants;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/AnalysisContextReportPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/AnalysisContextReportPublisherTest.java
index f795cf97408..5299672f6fd 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/AnalysisContextReportPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/AnalysisContextReportPublisherTest.java
@@ -38,7 +38,7 @@ import org.sonar.api.utils.log.LoggerLevel;
import org.sonar.core.platform.PluginInfo;
import org.sonar.scanner.bootstrap.GlobalServerSettings;
import org.sonar.scanner.bootstrap.ScannerPluginRepository;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.ProjectServerSettings;
@@ -148,66 +148,6 @@ public class AnalysisContextReportPublisherTest {
}
@Test
- public void shouldNotDumpSQPropsInSystemProps() throws Exception {
- logTester.setLevel(LoggerLevel.DEBUG);
- ScannerReportWriter writer = new ScannerReportWriter(temp.newFolder());
- Properties props = new Properties();
- props.setProperty(COM_FOO, "bar");
- props.setProperty(SONAR_SKIP, "true");
- when(system2.properties()).thenReturn(props);
- DefaultInputModule rootModule = new DefaultInputModule(ProjectDefinition.create()
- .setBaseDir(temp.newFolder())
- .setWorkDir(temp.newFolder())
- .setProperty("sonar.projectKey", "foo")
- .setProperty(COM_FOO, "bar")
- .setProperty(SONAR_SKIP, "true"));
- when(store.allModules()).thenReturn(singletonList(rootModule));
- when(hierarchy.root()).thenReturn(rootModule);
-
- publisher.init(writer);
-
- List<String> lines = FileUtils.readLines(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
- assertThat(lines).containsExactly("Environment variables:",
- "System properties:",
- " - com.foo=bar",
- "SonarQube plugins:",
- "Global server settings:",
- "Project server settings:",
- "Project scanner properties:",
- " - sonar.projectKey=foo",
- " - sonar.skip=true");
- }
-
- @Test
- public void shouldNotDumpEnvTwice() throws Exception {
- logTester.setLevel(LoggerLevel.DEBUG);
- ScannerReportWriter writer = new ScannerReportWriter(temp.newFolder());
-
- Map<String, String> env = new HashMap<>();
- env.put(FOO, "BAR");
- env.put(BIZ, "BAZ");
- when(system2.envVariables()).thenReturn(env);
- DefaultInputModule rootModule = new DefaultInputModule(ProjectDefinition.create()
- .setBaseDir(temp.newFolder())
- .setWorkDir(temp.newFolder())
- .setProperty("sonar.projectKey", "foo")
- .setProperty("env." + FOO, "BAR"));
- when(store.allModules()).thenReturn(singletonList(rootModule));
- when(hierarchy.root()).thenReturn(rootModule);
- publisher.init(writer);
-
- String content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
- assertThat(content).containsOnlyOnce(FOO);
- assertThat(content).containsOnlyOnce(BIZ);
- assertThat(content).containsSubsequence(BIZ, FOO);
-
- content = FileUtils.readFileToString(writer.getFileStructure().analysisLog(), StandardCharsets.UTF_8);
- assertThat(content).containsOnlyOnce(FOO);
- assertThat(content).containsOnlyOnce(BIZ);
- assertThat(content).doesNotContain("env." + FOO);
- }
-
- @Test
public void shouldNotDumpSensitiveModuleProperties() throws Exception {
ScannerReportWriter writer = new ScannerReportWriter(temp.newFolder());
DefaultInputModule rootModule = new DefaultInputModule(ProjectDefinition.create()
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ChangedLinesPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ChangedLinesPublisherTest.java
index 18ce32fab0a..d3b7a0b4936 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ChangedLinesPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ChangedLinesPublisherTest.java
@@ -31,10 +31,10 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.scm.ScmProvider;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.fs.InputModuleHierarchy;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.branch.BranchConfiguration;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java
index b812747c692..0561c6076e3 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ComponentsPublisherTest.java
@@ -33,9 +33,9 @@ import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.utils.DateUtils;
import org.sonar.scanner.ProjectInfo;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.protocol.output.FileStructure;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Component;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/MetadataPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/MetadataPublisherTest.java
index 3eb07e5e945..9bbe982e9fc 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/MetadataPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/MetadataPublisherTest.java
@@ -44,9 +44,9 @@ import org.sonar.scanner.ProjectInfo;
import org.sonar.scanner.bootstrap.ScannerPlugin;
import org.sonar.scanner.bootstrap.ScannerPluginRepository;
import org.sonar.scanner.cpd.CpdSettings;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ReportPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ReportPublisherTest.java
index 3c7893722ad..e81e23e2f3b 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ReportPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/ReportPublisherTest.java
@@ -40,8 +40,8 @@ import org.sonar.api.utils.TempFolder;
import org.sonar.api.utils.log.LogTester;
import org.sonar.api.utils.log.LoggerLevel;
import org.sonar.scanner.bootstrap.GlobalAnalysisMode;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.scan.ScanProperties;
import org.sonar.scanner.scan.branch.BranchConfiguration;
@@ -73,7 +73,7 @@ public class ReportPublisherTest {
GlobalAnalysisMode mode = mock(GlobalAnalysisMode.class);
ScanProperties properties = mock(ScanProperties.class);
- ScannerWsClient wsClient = mock(ScannerWsClient.class, Mockito.RETURNS_DEEP_STUBS);
+ DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class, Mockito.RETURNS_DEEP_STUBS);
Server server = mock(Server.class);
InputModuleHierarchy moduleHierarchy = mock(InputModuleHierarchy.class);
DefaultInputModule root;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/SourcePublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/SourcePublisherTest.java
index 835e423f9ee..e1239caab09 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/SourcePublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/report/SourcePublisherTest.java
@@ -27,9 +27,9 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoaderTest.java
index 5bf58615061..7b21c92e5a8 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultMetricsRepositoryLoaderTest.java
@@ -28,7 +28,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.scanner.WsTestUtil;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -40,7 +40,7 @@ import static org.mockito.Mockito.when;
public class DefaultMetricsRepositoryLoaderTest {
private static final String WS_URL = "/api/metrics/search?f=name,description,direction,qualitative,custom&ps=500&p=";
- private ScannerWsClient wsClient;
+ private DefaultScannerWsClient wsClient;
private DefaultMetricsRepositoryLoader metricsRepositoryLoader;
@Rule
@@ -48,7 +48,7 @@ public class DefaultMetricsRepositoryLoaderTest {
@Before
public void setUp() throws IOException {
- wsClient = mock(ScannerWsClient.class);
+ wsClient = mock(DefaultScannerWsClient.class);
WsTestUtil.mockReader(wsClient, WS_URL + "1", new StringReader(IOUtils.toString(this.getClass().getResourceAsStream("DefaultMetricsRepositoryLoaderTest/page1.json"))));
WsTestUtil.mockReader(wsClient, WS_URL + "2", new StringReader(IOUtils.toString(this.getClass().getResourceAsStream("DefaultMetricsRepositoryLoaderTest/page2.json"))));
metricsRepositoryLoader = new DefaultMetricsRepositoryLoader(wsClient);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java
index f2888be4c65..567079db585 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java
@@ -31,8 +31,8 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.utils.MessageException;
import org.sonar.scanner.WsTestUtil;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
-import org.sonar.scanner.fs.DefaultInputFile;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
+import org.sonar.api.impl.fs.DefaultInputFile;
import org.sonarqube.ws.Batch.WsProjectResponse;
import org.sonarqube.ws.client.HttpException;
import org.sonarqube.ws.client.WsRequest;
@@ -49,11 +49,11 @@ public class DefaultProjectRepositoriesLoaderTest {
public ExpectedException thrown = ExpectedException.none();
private DefaultProjectRepositoriesLoader loader;
- private ScannerWsClient wsClient;
+ private DefaultScannerWsClient wsClient;
@Before
public void prepare() throws IOException {
- wsClient = mock(ScannerWsClient.class);
+ wsClient = mock(DefaultScannerWsClient.class);
InputStream is = mockData();
WsTestUtil.mockStream(wsClient, "/batch/project.protobuf?key=foo%3F", is);
loader = new DefaultProjectRepositoriesLoader(wsClient);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultQualityProfileLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultQualityProfileLoaderTest.java
index 95e38e4520e..edfc14e5bd6 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultQualityProfileLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultQualityProfileLoaderTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.utils.MessageException;
import org.sonar.scanner.WsTestUtil;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonar.scanner.scan.ScanProperties;
import org.sonarqube.ws.Qualityprofiles;
import org.sonarqube.ws.Qualityprofiles.SearchWsResponse.QualityProfile;
@@ -43,7 +43,7 @@ public class DefaultQualityProfileLoaderTest {
@Rule
public ExpectedException exception = ExpectedException.none();
- private ScannerWsClient wsClient = mock(ScannerWsClient.class);
+ private DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class);
private ScanProperties properties = mock(ScanProperties.class);
private DefaultQualityProfileLoader underTest = new DefaultQualityProfileLoader(properties, wsClient);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoaderTest.java
index aff5f0fcc3c..0a1f91e9429 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultGlobalSettingsLoaderTest.java
@@ -25,7 +25,7 @@ import java.io.PipedOutputStream;
import java.util.Map;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonarqube.ws.Settings;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.WsResponse;
@@ -39,7 +39,7 @@ import static org.mockito.Mockito.when;
public class DefaultGlobalSettingsLoaderTest {
- private ScannerWsClient wsClient = mock(ScannerWsClient.class);
+ private DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class);
private DefaultGlobalSettingsLoader underTest = new DefaultGlobalSettingsLoader(wsClient);
@Test
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoaderTest.java
index a9163f56bb3..125e7bd74ee 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/settings/DefaultProjectSettingsLoaderTest.java
@@ -26,7 +26,7 @@ import java.util.Map;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.sonar.scanner.bootstrap.ProcessedScannerProperties;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonarqube.ws.Settings;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.WsResponse;
@@ -40,7 +40,7 @@ import static org.mockito.Mockito.when;
public class DefaultProjectSettingsLoaderTest {
- private ScannerWsClient wsClient = mock(org.sonar.scanner.bootstrap.ScannerWsClient.class);
+ private DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class);
private ProcessedScannerProperties properties = mock(ProcessedScannerProperties.class);
private DefaultProjectSettingsLoader underTest = new DefaultProjectSettingsLoader(wsClient, properties);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesBuilderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesBuilderTest.java
index e892510d046..c48b0dc8aeb 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesBuilderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesBuilderTest.java
@@ -24,6 +24,8 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.batch.rule.ActiveRule;
import org.sonar.api.batch.rule.ActiveRules;
+import org.sonar.api.impl.rule.ActiveRulesBuilder;
+import org.sonar.api.batch.rule.NewActiveRule;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesProviderTest.java
index 2773208a00f..4a8851ded6c 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesProviderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/ActiveRulesProviderTest.java
@@ -30,6 +30,7 @@ import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sonar.api.batch.rule.ActiveRules;
+import org.sonar.api.batch.rule.LoadedActiveRule;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.DateUtils;
import org.sonarqube.ws.Qualityprofiles.SearchWsResponse.QualityProfile;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultActiveRulesLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultActiveRulesLoaderTest.java
index ad46a6851ed..0dd61ad9ccf 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultActiveRulesLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultActiveRulesLoaderTest.java
@@ -26,10 +26,11 @@ import java.util.Collection;
import java.util.stream.IntStream;
import org.junit.Before;
import org.junit.Test;
+import org.sonar.api.batch.rule.LoadedActiveRule;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
import org.sonar.scanner.WsTestUtil;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import org.sonarqube.ws.Rules;
import org.sonarqube.ws.Rules.Active;
@@ -54,11 +55,11 @@ public class DefaultActiveRulesLoaderTest {
private static final String SEVERITY_VALUE = Severity.MINOR;
private DefaultActiveRulesLoader loader;
- private ScannerWsClient wsClient;
+ private DefaultScannerWsClient wsClient;
@Before
public void setUp() {
- wsClient = mock(ScannerWsClient.class);
+ wsClient = mock(DefaultScannerWsClient.class);
BranchConfiguration branchConfig = mock(BranchConfiguration.class);
when(branchConfig.isShortOrPullRequest()).thenReturn(false);
loader = new DefaultActiveRulesLoader(wsClient);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesLoaderTest.java
index b2d06f19442..b614d456fbe 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesLoaderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesLoaderTest.java
@@ -27,7 +27,7 @@ import java.util.List;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.scanner.WsTestUtil;
-import org.sonar.scanner.bootstrap.ScannerWsClient;
+import org.sonar.scanner.bootstrap.DefaultScannerWsClient;
import org.sonarqube.ws.Rules.ListResponse.Rule;
import static org.assertj.core.api.Assertions.assertThat;
@@ -39,7 +39,7 @@ public class DefaultRulesLoaderTest {
@Test
public void testParseServerResponse() throws IOException {
- ScannerWsClient wsClient = mock(ScannerWsClient.class);
+ DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class);
InputStream is = Resources.asByteSource(this.getClass().getResource("DefaultRulesLoaderTest/response.protobuf")).openBufferedStream();
WsTestUtil.mockStream(wsClient, is);
DefaultRulesLoader loader = new DefaultRulesLoader(wsClient);
@@ -49,7 +49,7 @@ public class DefaultRulesLoaderTest {
@Test
public void testError() throws IOException {
- ScannerWsClient wsClient = mock(ScannerWsClient.class);
+ DefaultScannerWsClient wsClient = mock(DefaultScannerWsClient.class);
InputStream is = ByteSource.wrap(new String("trash").getBytes()).openBufferedStream();
WsTestUtil.mockStream(wsClient, is);
DefaultRulesLoader loader = new DefaultRulesLoader(wsClient);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesTest.java
deleted file mode 100644
index 3beb53fcc04..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/DefaultRulesTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import org.sonar.api.rule.RuleKey;
-import org.junit.Test;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultRulesTest {
- @Test
- public void testRepeatedInternalKey() {
- List<NewRule> newRules = new LinkedList<>();
- newRules.add(createRule("key1", "repo", "internal"));
- newRules.add(createRule("key2", "repo", "internal"));
-
- DefaultRules rules = new DefaultRules(newRules);
- assertThat(rules.findByInternalKey("repo", "internal")).hasSize(2);
- assertThat(rules.find(RuleKey.of("repo", "key1"))).isNotNull();
- assertThat(rules.find(RuleKey.of("repo", "key2"))).isNotNull();
- assertThat(rules.findByRepository("repo")).hasSize(2);
- }
-
- @Test
- public void testNonExistingKey() {
- List<NewRule> newRules = new LinkedList<>();
- newRules.add(createRule("key1", "repo", "internal"));
- newRules.add(createRule("key2", "repo", "internal"));
-
- DefaultRules rules = new DefaultRules(newRules);
- assertThat(rules.findByInternalKey("xx", "xx")).hasSize(0);
- assertThat(rules.find(RuleKey.of("xxx", "xx"))).isNull();
- assertThat(rules.findByRepository("xxxx")).hasSize(0);
- }
-
- @Test
- public void testRepeatedRule() {
- List<NewRule> newRules = new LinkedList<>();
- newRules.add(createRule("key", "repo", "internal"));
- newRules.add(createRule("key", "repo", "internal"));
-
- DefaultRules rules = new DefaultRules(newRules);
- assertThat(rules.find(RuleKey.of("repo", "key"))).isNotNull();
- }
-
- private NewRule createRule(String key, String repo, String internalKey) {
- RuleKey ruleKey = RuleKey.of(repo, key);
- NewRule newRule = new NewRule(ruleKey);
- newRule.setInternalKey(internalKey);
-
- return newRule;
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/NewActiveRuleTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/NewActiveRuleTest.java
deleted file mode 100644
index a3a4e40393d..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/NewActiveRuleTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import com.google.common.collect.ImmutableMap;
-import org.junit.Before;
-import org.junit.Test;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rule.Severity;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class NewActiveRuleTest {
-
- private NewActiveRule.Builder builder;
-
- @Before
- public void setBuilder() {
- builder = new NewActiveRule.Builder();
- }
-
- @Test
- public void builder_should_set_every_param() {
- NewActiveRule rule = builder
- .setRuleKey(RuleKey.of("foo", "bar"))
- .setName("name")
- .setSeverity(Severity.CRITICAL)
- .setParam("key", "value")
- .setCreatedAt(1_000L)
- .setUpdatedAt(1_000L)
- .setInternalKey("internal_key")
- .setLanguage("language")
- .setTemplateRuleKey("templateRuleKey")
- .setQProfileKey("qProfileKey")
- .build();
-
- assertThat(rule.ruleKey).isEqualTo(RuleKey.of("foo", "bar"));
- assertThat(rule.name).isEqualTo("name");
- assertThat(rule.severity).isEqualTo(Severity.CRITICAL);
- assertThat(rule.params).isEqualTo(ImmutableMap.of("key", "value"));
- assertThat(rule.createdAt).isEqualTo(1_000L);
- assertThat(rule.updatedAt).isEqualTo(1_000L);
- assertThat(rule.internalKey).isEqualTo("internal_key");
- assertThat(rule.language).isEqualTo("language");
- assertThat(rule.templateRuleKey).isEqualTo("templateRuleKey");
- assertThat(rule.qProfileKey).isEqualTo("qProfileKey");
- }
-
- @Test
- public void severity_should_have_default_value() {
- NewActiveRule rule = builder.build();
- assertThat(rule.severity).isEqualTo(Severity.defaultSeverity());
- }
-
- @Test
- public void params_should_be_empty_map_if_no_params() {
- NewActiveRule rule = builder.build();
- assertThat(rule.params).isEqualTo(ImmutableMap.of());
- }
-
- @Test
- public void set_param_remove_param_if_value_is_null() {
- NewActiveRule rule = builder
- .setParam("foo", "bar")
- .setParam("removed", "value")
- .setParam("removed", null)
- .build();
- assertThat(rule.params).isEqualTo(ImmutableMap.of("foo", "bar"));
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/QProfileVerifierTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/QProfileVerifierTest.java
index f7a64f06b63..e81930bf234 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/QProfileVerifierTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/QProfileVerifierTest.java
@@ -24,7 +24,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.slf4j.Logger;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/RulesBuilderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/RulesBuilderTest.java
deleted file mode 100644
index 1bb2375bc21..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/rule/RulesBuilderTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.rule;
-
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.rule.Rule;
-import org.sonar.api.batch.rule.Rules;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rule.RuleStatus;
-import org.sonar.api.rule.Severity;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class RulesBuilderTest {
- @org.junit.Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Test
- public void no_rules() {
- RulesBuilder builder = new RulesBuilder();
- Rules rules = builder.build();
- assertThat(rules.findAll()).isEmpty();
- }
-
- @Test
- public void build_rules() {
- RulesBuilder builder = new RulesBuilder();
- NewRule newSquid1 = builder.add(RuleKey.of("squid", "S0001"));
- newSquid1.setName("Detect bug");
- newSquid1.setDescription("Detect potential bug");
- newSquid1.setInternalKey("foo=bar");
- newSquid1.setSeverity(Severity.CRITICAL);
- newSquid1.setStatus(RuleStatus.BETA);
- newSquid1.addParam("min");
- newSquid1.addParam("max").setDescription("Maximum");
- // most simple rule
- builder.add(RuleKey.of("squid", "S0002"));
- builder.add(RuleKey.of("findbugs", "NPE"));
-
- Rules rules = builder.build();
-
- assertThat(rules.findAll()).hasSize(3);
- assertThat(rules.findByRepository("squid")).hasSize(2);
- assertThat(rules.findByRepository("findbugs")).hasSize(1);
- assertThat(rules.findByRepository("unknown")).isEmpty();
-
- Rule squid1 = rules.find(RuleKey.of("squid", "S0001"));
- assertThat(squid1.key().repository()).isEqualTo("squid");
- assertThat(squid1.key().rule()).isEqualTo("S0001");
- assertThat(squid1.name()).isEqualTo("Detect bug");
- assertThat(squid1.description()).isEqualTo("Detect potential bug");
- assertThat(squid1.internalKey()).isEqualTo("foo=bar");
- assertThat(squid1.status()).isEqualTo(RuleStatus.BETA);
- assertThat(squid1.severity()).isEqualTo(Severity.CRITICAL);
- assertThat(squid1.params()).hasSize(2);
- assertThat(squid1.param("min").key()).isEqualTo("min");
- assertThat(squid1.param("min").description()).isNull();
- assertThat(squid1.param("max").key()).isEqualTo("max");
- assertThat(squid1.param("max").description()).isEqualTo("Maximum");
-
- Rule squid2 = rules.find(RuleKey.of("squid", "S0002"));
- assertThat(squid2.key().repository()).isEqualTo("squid");
- assertThat(squid2.key().rule()).isEqualTo("S0002");
- assertThat(squid2.description()).isNull();
- assertThat(squid2.internalKey()).isNull();
- assertThat(squid2.status()).isEqualTo(RuleStatus.defaultStatus());
- assertThat(squid2.severity()).isEqualTo(Severity.defaultSeverity());
- assertThat(squid2.params()).isEmpty();
- }
-
- @Test
- public void fail_to_add_twice_the_same_rule() {
- RulesBuilder builder = new RulesBuilder();
- builder.add(RuleKey.of("squid", "S0001"));
-
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Rule 'squid:S0001' already exists");
-
- builder.add(RuleKey.of("squid", "S0001"));
- }
-
- @Test
- public void fail_to_add_twice_the_same_param() {
- RulesBuilder builder = new RulesBuilder();
- NewRule newRule = builder.add(RuleKey.of("squid", "S0001"));
- newRule.addParam("min");
- newRule.addParam("max");
-
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("Parameter 'min' already exists on rule 'squid:S0001'");
-
- newRule.addParam("min");
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/DefaultInputModuleHierarchyTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/DefaultInputModuleHierarchyTest.java
index aadf37e6a75..1bdce821151 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/DefaultInputModuleHierarchyTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/DefaultInputModuleHierarchyTest.java
@@ -28,7 +28,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleIndexerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleIndexerTest.java
index 3c4cb6ffb15..18da6ddf5bf 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleIndexerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleIndexerTest.java
@@ -22,7 +22,7 @@ package org.sonar.scanner.scan;
import java.util.Arrays;
import org.junit.Test;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import org.sonar.scanner.scan.filesystem.InputComponentStore;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectLockTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectLockTest.java
index 12f20933bdb..9ebc2cea34e 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectLockTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ProjectLockTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ScanPropertiesTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ScanPropertiesTest.java
index a2622ae4cbd..7241ab7b03a 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ScanPropertiesTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ScanPropertiesTest.java
@@ -27,9 +27,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.api.utils.MessageException;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/WorkDirectoriesInitializerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/WorkDirectoriesInitializerTest.java
index ba5aedb451f..19797c845bd 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/WorkDirectoriesInitializerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/WorkDirectoriesInitializerTest.java
@@ -26,7 +26,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import org.sonar.scanner.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputModule;
import org.sonar.scanner.fs.InputModuleHierarchy;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicatesTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicatesTest.java
index 37775d19ae5..4974350faf7 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicatesTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/AdditionalFilePredicatesTest.java
@@ -22,7 +22,7 @@ package org.sonar.scanner.scan.filesystem;
import org.junit.Test;
import org.sonar.api.batch.fs.FilePredicate;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/InputComponentStoreTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/InputComponentStoreTest.java
index e9365140bd2..709b5960b9f 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/InputComponentStoreTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/InputComponentStoreTest.java
@@ -32,10 +32,10 @@ import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputFile.Status;
import org.sonar.api.batch.fs.InputFile.Type;
import org.sonar.api.batch.fs.InputPath;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java
index c924cb4c5e5..30a3a20d713 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java
@@ -27,8 +27,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
-import org.sonar.api.CoreProperties;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.api.resources.Language;
import org.sonar.api.resources.Languages;
import org.sonar.api.utils.MessageException;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/MetadataGeneratorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/MetadataGeneratorTest.java
index 0682ccaf345..8ec05f3294e 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/MetadataGeneratorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/MetadataGeneratorTest.java
@@ -34,9 +34,9 @@ import org.mockito.MockitoAnnotations;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.notifications.AnalysisWarnings;
import org.sonar.api.utils.PathUtils;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.FileMetadata;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.FileMetadata;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.issue.ignore.IgnoreIssuesFilter;
import org.sonar.scanner.issue.ignore.pattern.IssueExclusionPatternInitializer;
import org.sonar.scanner.issue.ignore.scanner.IssueExclusionsLoader;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStoreTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStoreTest.java
index c624be2c6f1..57386cb65e9 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStoreTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ModuleInputComponentStoreTest.java
@@ -26,9 +26,9 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.fs.InputModule;
-import org.sonar.api.batch.fs.internal.SensorStrategy;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.SensorStrategy;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.scan.branch.BranchConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java
index 9f613f48ed7..af8c8156613 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java
@@ -30,8 +30,8 @@ import org.junit.rules.TemporaryFolder;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.IndexedFile;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.DefaultIndexedFile;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.fs.DefaultIndexedFile;
+import org.sonar.api.impl.config.MapSettings;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/StatusDetectionTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/StatusDetectionTest.java
index 167b4e33a9c..10fc2c68e1a 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/StatusDetectionTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/StatusDetectionTest.java
@@ -26,8 +26,8 @@ import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.scanner.repository.FileData;
import org.sonar.scanner.repository.ProjectRepositoriesSupplier;
import org.sonar.scanner.repository.SingleProjectRepository;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/DefaultBlameOutputTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/DefaultBlameOutputTest.java
index a408dde4a41..5ea2bc5464c 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/DefaultBlameOutputTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/DefaultBlameOutputTest.java
@@ -25,7 +25,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
import org.sonar.api.batch.scm.BlameLine;
public class DefaultBlameOutputTest {
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java
index 681433767ff..6304dcbd82f 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java
@@ -29,7 +29,7 @@ import org.junit.rules.ExpectedException;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.sonar.api.batch.scm.ScmProvider;
-import org.sonar.scanner.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.DefaultInputProject;
import org.sonar.scanner.fs.InputModuleHierarchy;
import org.sonar.scanner.scan.branch.BranchConfiguration;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAdHocRuleTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAdHocRuleTest.java
deleted file mode 100644
index 44a53e7dbf9..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAdHocRuleTest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.batch.sensor.rule.NewAdHocRule;
-import org.sonar.api.rules.RuleType;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class DefaultAdHocRuleTest {
-
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
- @Test
- public void store() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultAdHocRule rule = new DefaultAdHocRule(storage)
- .engineId("engine")
- .ruleId("ruleId")
- .name("name")
- .description("desc")
- .severity(Severity.BLOCKER)
- .type(RuleType.CODE_SMELL);
- rule.save();
-
- assertThat(rule.engineId()).isEqualTo("engine");
- assertThat(rule.ruleId()).isEqualTo("ruleId");
- assertThat(rule.name()).isEqualTo("name");
- assertThat(rule.description()).isEqualTo("desc");
- assertThat(rule.severity()).isEqualTo(Severity.BLOCKER);
- assertThat(rule.type()).isEqualTo(RuleType.CODE_SMELL);
-
- verify(storage).store(any(DefaultAdHocRule.class));
- }
-
-
- @Test
- public void description_is_optional() {
- SensorStorage storage = mock(SensorStorage.class);
- new DefaultAdHocRule(storage)
- .engineId("engine")
- .ruleId("ruleId")
- .name("name")
- .severity(Severity.BLOCKER)
- .type(RuleType.CODE_SMELL)
- .save();
-
- verify(storage).store(any(DefaultAdHocRule.class));
- }
-
- @Test
- public void fail_to_store_if_no_engine_id() {
- SensorStorage storage = mock(SensorStorage.class);
- NewAdHocRule rule = new DefaultAdHocRule(storage)
- .engineId(" ")
- .ruleId("ruleId")
- .name("name")
- .description("desc")
- .severity(Severity.BLOCKER)
- .type(RuleType.CODE_SMELL);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Engine id is mandatory");
- rule.save();
- }
-
- @Test
- public void fail_to_store_if_no_rule_id() {
- SensorStorage storage = mock(SensorStorage.class);
- NewAdHocRule rule = new DefaultAdHocRule(storage)
- .engineId("engine")
- .ruleId(" ")
- .name("name")
- .description("desc")
- .severity(Severity.BLOCKER)
- .type(RuleType.CODE_SMELL);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Rule id is mandatory");
- rule.save();
- }
-
- @Test
- public void fail_to_store_if_no_name() {
- SensorStorage storage = mock(SensorStorage.class);
- NewAdHocRule rule = new DefaultAdHocRule(storage)
- .engineId("engine")
- .ruleId("ruleId")
- .name(" ")
- .description("desc")
- .severity(Severity.BLOCKER)
- .type(RuleType.CODE_SMELL);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Name is mandatory");
- rule.save();
- }
-
-
- @Test
- public void fail_to_store_if_no_severity() {
- SensorStorage storage = mock(SensorStorage.class);
- NewAdHocRule rule = new DefaultAdHocRule(storage)
- .engineId("engine")
- .ruleId("ruleId")
- .name("name")
- .description("desc")
- .type(RuleType.CODE_SMELL);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Severity is mandatory");
- rule.save();
- }
-
- @Test
- public void fail_to_store_if_no_type() {
- SensorStorage storage = mock(SensorStorage.class);
- NewAdHocRule rule = new DefaultAdHocRule(storage)
- .engineId("engine")
- .ruleId("ruleId")
- .name("name")
- .description("desc")
- .severity(Severity.BLOCKER);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Type is mandatory");
- rule.save();
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAnalysisErrorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAnalysisErrorTest.java
deleted file mode 100644
index afff924afdf..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultAnalysisErrorTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextPointer;
-import org.sonar.api.batch.sensor.error.NewAnalysisError;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.DefaultTextPointer;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-public class DefaultAnalysisErrorTest {
- private InputFile inputFile;
- private SensorStorage storage;
- private TextPointer textPointer;
-
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
- @Before
- public void setUp() {
- inputFile = new TestInputFileBuilder("module1", "src/File.java").build();
- textPointer = new DefaultTextPointer(5, 2);
- storage = mock(SensorStorage.class);
- }
-
- @Test
- public void test_analysis_error() {
- DefaultAnalysisError analysisError = new DefaultAnalysisError(storage);
- analysisError.onFile(inputFile)
- .at(textPointer)
- .message("msg");
-
- assertThat(analysisError.location()).isEqualTo(textPointer);
- assertThat(analysisError.message()).isEqualTo("msg");
- assertThat(analysisError.inputFile()).isEqualTo(inputFile);
- }
-
- @Test
- public void test_save() {
- DefaultAnalysisError analysisError = new DefaultAnalysisError(storage);
- analysisError.onFile(inputFile).save();
-
- verify(storage).store(analysisError);
- verifyNoMoreInteractions(storage);
- }
-
- @Test
- public void test_no_storage() {
- exception.expect(NullPointerException.class);
- DefaultAnalysisError analysisError = new DefaultAnalysisError();
- analysisError.onFile(inputFile).save();
- }
-
- @Test
- public void test_validation() {
- try {
- new DefaultAnalysisError(storage).onFile(null);
- fail("Expected exception");
- } catch (IllegalArgumentException e) {
- // expected
- }
-
- NewAnalysisError error = new DefaultAnalysisError(storage).onFile(inputFile);
- try {
- error.onFile(inputFile);
- fail("Expected exception");
- } catch (IllegalStateException e) {
- // expected
- }
-
- error = new DefaultAnalysisError(storage).at(textPointer);
- try {
- error.at(textPointer);
- fail("Expected exception");
- } catch (IllegalStateException e) {
- // expected
- }
-
- try {
- new DefaultAnalysisError(storage).save();
- fail("Expected exception");
- } catch (NullPointerException e) {
- // expected
- }
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultCpdTokensTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultCpdTokensTest.java
deleted file mode 100644
index 7a559792723..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultCpdTokensTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.junit.Test;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.fail;
-import static org.assertj.core.api.Assertions.tuple;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-public class DefaultCpdTokensTest {
- private final SensorStorage sensorStorage = mock(SensorStorage.class);
-
- private final DefaultInputFile inputFile = new TestInputFileBuilder("foo", "src/Foo.java")
- .setLines(2)
- .setOriginalLineStartOffsets(new int[] {0, 50})
- .setOriginalLineEndOffsets(new int[] {49, 100})
- .setLastValidOffset(101)
- .build();
-
- @Test
- public void save_no_tokens() {
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage)
- .onFile(inputFile);
-
- tokens.save();
-
- verify(sensorStorage).store(tokens);
-
- assertThat(tokens.inputFile()).isEqualTo(inputFile);
- }
-
- @Test
- public void save_one_token() {
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage)
- .onFile(inputFile)
- .addToken(inputFile.newRange(1, 2, 1, 5), "foo");
-
- tokens.save();
-
- verify(sensorStorage).store(tokens);
-
- assertThat(tokens.getTokenLines()).extracting("value", "startLine", "hashCode", "startUnit", "endUnit").containsExactly(tuple("foo", 1, "foo".hashCode(), 1, 1));
- }
-
- @Test
- public void handle_exclusions() {
- inputFile.setExcludedForDuplication(true);
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage)
- .onFile(inputFile)
- .addToken(inputFile.newRange(1, 2, 1, 5), "foo");
-
- tokens.save();
-
- verifyZeroInteractions(sensorStorage);
-
- assertThat(tokens.getTokenLines()).isEmpty();
- }
-
- @Test
- public void dont_save_for_test_files() {
- DefaultInputFile testInputFile = new TestInputFileBuilder("foo", "src/Foo.java")
- .setLines(2)
- .setOriginalLineStartOffsets(new int[] {0, 50})
- .setOriginalLineEndOffsets(new int[] {49, 100})
- .setLastValidOffset(101)
- .setType(InputFile.Type.TEST)
- .build();
-
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage)
- .onFile(testInputFile)
- .addToken(testInputFile.newRange(1, 2, 1, 5), "foo");
-
- tokens.save();
- verifyZeroInteractions(sensorStorage);
- assertThat(tokens.getTokenLines()).isEmpty();
- }
-
- @Test
- public void save_many_tokens() {
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage)
- .onFile(inputFile)
- .addToken(inputFile.newRange(1, 2, 1, 5), "foo")
- .addToken(inputFile.newRange(1, 6, 1, 10), "bar")
- .addToken(inputFile.newRange(1, 20, 1, 25), "biz")
- .addToken(inputFile.newRange(2, 1, 2, 10), "next");
-
- tokens.save();
-
- verify(sensorStorage).store(tokens);
-
- assertThat(tokens.getTokenLines())
- .extracting("value", "startLine", "hashCode", "startUnit", "endUnit")
- .containsExactly(
- tuple("foobarbiz", 1, "foobarbiz".hashCode(), 1, 3),
- tuple("next", 2, "next".hashCode(), 4, 4));
- }
-
- @Test
- public void basic_validation() {
- SensorStorage sensorStorage = mock(SensorStorage.class);
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage);
- try {
- tokens.save();
- fail("Expected exception");
- } catch (Exception e) {
- assertThat(e).hasMessage("Call onFile() first");
- }
- try {
- tokens.addToken(inputFile.newRange(1, 2, 1, 5), "foo");
- fail("Expected exception");
- } catch (Exception e) {
- assertThat(e).hasMessage("Call onFile() first");
- }
- try {
- tokens.addToken(null, "foo");
- fail("Expected exception");
- } catch (Exception e) {
- assertThat(e).hasMessage("Range should not be null");
- }
- try {
- tokens.addToken(inputFile.newRange(1, 2, 1, 5), null);
- fail("Expected exception");
- } catch (Exception e) {
- assertThat(e).hasMessage("Image should not be null");
- }
- }
-
- @Test
- public void validate_tokens_order() {
- SensorStorage sensorStorage = mock(SensorStorage.class);
- DefaultCpdTokens tokens = new DefaultCpdTokens(sensorStorage)
- .onFile(inputFile)
- .addToken(inputFile.newRange(1, 6, 1, 10), "bar");
-
- try {
- tokens.addToken(inputFile.newRange(1, 2, 1, 5), "foo");
- fail("Expected exception");
- } catch (Exception e) {
- assertThat(e).hasMessage("Tokens of file src/Foo.java should be provided in order.\n" +
- "Previous token: Range[from [line=1, lineOffset=6] to [line=1, lineOffset=10]]\n" +
- "Last token: Range[from [line=1, lineOffset=2] to [line=1, lineOffset=5]]");
- }
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultExternalIssueTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultExternalIssueTest.java
deleted file mode 100644
index 0081480f466..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultExternalIssueTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.io.IOException;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.fs.InputComponent;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rules.RuleType;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.issue.DefaultIssueLocation;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class DefaultExternalIssueTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- private DefaultInputProject project;
-
- @Before
- public void setup() throws IOException {
- project = new DefaultInputProject(ProjectDefinition.create()
- .setKey("foo")
- .setBaseDir(temp.newFolder())
- .setWorkDir(temp.newFolder()));
- }
-
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
- private DefaultInputFile inputFile = new TestInputFileBuilder("foo", "src/Foo.php")
- .initMetadata("Foo\nBar\n")
- .build();
-
- @Test
- public void build_file_issue() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultExternalIssue issue = new DefaultExternalIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(inputFile)
- .at(inputFile.selectLine(1))
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .remediationEffortMinutes(10l)
- .type(RuleType.BUG)
- .severity(Severity.BLOCKER);
-
- assertThat(issue.primaryLocation().inputComponent()).isEqualTo(inputFile);
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("external_repo", "rule"));
- assertThat(issue.engineId()).isEqualTo("repo");
- assertThat(issue.ruleId()).isEqualTo("rule");
- assertThat(issue.primaryLocation().textRange().start().line()).isEqualTo(1);
- assertThat(issue.remediationEffort()).isEqualTo(10l);
- assertThat(issue.type()).isEqualTo(RuleType.BUG);
- assertThat(issue.severity()).isEqualTo(Severity.BLOCKER);
- assertThat(issue.primaryLocation().message()).isEqualTo("Wrong way!");
-
- issue.save();
-
- verify(storage).store(issue);
- }
-
- @Test
- public void fail_to_store_if_no_type() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultExternalIssue issue = new DefaultExternalIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(inputFile)
- .at(inputFile.selectLine(1))
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .remediationEffortMinutes(10l)
- .severity(Severity.BLOCKER);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Type is mandatory");
- issue.save();
- }
-
- @Test
- public void fail_to_store_if_primary_location_is_not_a_file() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultExternalIssue issue = new DefaultExternalIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(mock(InputComponent.class))
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .remediationEffortMinutes(10l)
- .severity(Severity.BLOCKER);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("External issues must be located in files");
- issue.save();
- }
-
- @Test
- public void fail_to_store_if_primary_location_has_no_message() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultExternalIssue issue = new DefaultExternalIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(inputFile)
- .at(inputFile.selectLine(1)))
- .forRule(RuleKey.of("repo", "rule"))
- .remediationEffortMinutes(10l)
- .type(RuleType.BUG)
- .severity(Severity.BLOCKER);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("External issues must have a message");
- issue.save();
- }
-
- @Test
- public void fail_to_store_if_no_severity() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultExternalIssue issue = new DefaultExternalIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(inputFile)
- .at(inputFile.selectLine(1))
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .remediationEffortMinutes(10l)
- .type(RuleType.BUG);
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Severity is mandatory");
- issue.save();
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultHighlightingTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultHighlightingTest.java
deleted file mode 100644
index f70f92dd982..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultHighlightingTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.Collection;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.DefaultTextPointer;
-import org.sonar.scanner.fs.DefaultTextRange;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.sonar.api.batch.sensor.highlighting.TypeOfText.COMMENT;
-import static org.sonar.api.batch.sensor.highlighting.TypeOfText.CPP_DOC;
-import static org.sonar.api.batch.sensor.highlighting.TypeOfText.KEYWORD;
-
-public class DefaultHighlightingTest {
-
- private static final InputFile INPUT_FILE = new TestInputFileBuilder("foo", "src/Foo.java")
- .setLines(2)
- .setOriginalLineStartOffsets(new int[] {0, 50})
- .setOriginalLineEndOffsets(new int[] {49, 100})
- .setLastValidOffset(101)
- .build();
-
- private Collection<SyntaxHighlightingRule> highlightingRules;
-
- @Rule
- public ExpectedException throwable = ExpectedException.none();
-
- @Before
- public void setUpSampleRules() {
-
- DefaultHighlighting highlightingDataBuilder = new DefaultHighlighting(mock(SensorStorage.class))
- .onFile(INPUT_FILE)
- .highlight(0, 10, COMMENT)
- .highlight(1, 10, 1, 12, KEYWORD)
- .highlight(24, 38, KEYWORD)
- .highlight(42, 50, KEYWORD)
- .highlight(24, 65, CPP_DOC)
- .highlight(12, 20, COMMENT);
-
- highlightingDataBuilder.save();
-
- highlightingRules = highlightingDataBuilder.getSyntaxHighlightingRuleSet();
- }
-
- @Test
- public void should_register_highlighting_rule() {
- assertThat(highlightingRules).hasSize(6);
- }
-
- private static TextRange rangeOf(int startLine, int startOffset, int endLine, int endOffset) {
- return new DefaultTextRange(new DefaultTextPointer(startLine, startOffset), new DefaultTextPointer(endLine, endOffset));
- }
-
- @Test
- public void should_order_by_start_then_end_offset() {
- assertThat(highlightingRules).extracting("range", TextRange.class).containsExactly(
- rangeOf(1, 0, 1, 10),
- rangeOf(1, 10, 1, 12),
- rangeOf(1, 12, 1, 20),
- rangeOf(1, 24, 2, 15),
- rangeOf(1, 24, 1, 38),
- rangeOf(1, 42, 2, 0));
- assertThat(highlightingRules).extracting("textType").containsExactly(COMMENT, KEYWORD, COMMENT, CPP_DOC, KEYWORD, KEYWORD);
- }
-
- @Test
- public void should_support_overlapping() {
- new DefaultHighlighting(mock(SensorStorage.class))
- .onFile(INPUT_FILE)
- .highlight(0, 15, KEYWORD)
- .highlight(8, 12, CPP_DOC)
- .save();
- }
-
- @Test
- public void should_prevent_start_equal_end() {
- throwable.expect(IllegalArgumentException.class);
- throwable
- .expectMessage("Unable to highlight file");
-
- new DefaultHighlighting(mock(SensorStorage.class))
- .onFile(INPUT_FILE)
- .highlight(10, 10, KEYWORD)
- .save();
- }
-
- @Test
- public void should_prevent_boudaries_overlapping() {
- throwable.expect(IllegalStateException.class);
- throwable
- .expectMessage("Cannot register highlighting rule for characters at Range[from [line=1, lineOffset=8] to [line=1, lineOffset=15]] as it overlaps at least one existing rule");
-
- new DefaultHighlighting(mock(SensorStorage.class))
- .onFile(INPUT_FILE)
- .highlight(0, 10, KEYWORD)
- .highlight(8, 15, KEYWORD)
- .save();
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueLocationTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueLocationTest.java
deleted file mode 100644
index f869f6f17f0..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueLocationTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.apache.commons.lang.StringUtils;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.issue.DefaultIssueLocation;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.rules.ExpectedException.none;
-
-public class DefaultIssueLocationTest {
-
- @Rule
- public ExpectedException thrown = none();
-
- private InputFile inputFile = new TestInputFileBuilder("foo", "src/Foo.php")
- .initMetadata("Foo\nBar\n")
- .build();
-
- @Test
- public void should_build() {
- assertThat(new DefaultIssueLocation()
- .on(inputFile)
- .message("pipo bimbo")
- .message()
- ).isEqualTo("pipo bimbo");
- }
-
- @Test
- public void not_allowed_to_call_on_twice() {
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("on() already called");
- new DefaultIssueLocation()
- .on(inputFile)
- .on(inputFile)
- .message("Wrong way!");
- }
-
- @Test
- public void prevent_too_long_messages() {
- assertThat(new DefaultIssueLocation()
- .on(inputFile)
- .message(StringUtils.repeat("a", 4000)).message()).hasSize(4000);
-
- assertThat(new DefaultIssueLocation()
- .on(inputFile)
- .message(StringUtils.repeat("a", 4001)).message()).hasSize(4000);
- }
-
- @Test
- public void prevent_null_character_in_message_text() {
- thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Character \\u0000 is not supported in issue message");
-
- new DefaultIssueLocation()
- .message("pipo " + '\u0000' + " bimbo");
- }
-
- @Test
- public void prevent_null_character_in_message_text_when_builder_has_been_initialized() {
- thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage(customMatcher("Character \\u0000 is not supported in issue message", ", on component: src/Foo.php"));
-
- new DefaultIssueLocation()
- .on(inputFile)
- .message("pipo " + '\u0000' + " bimbo");
- }
-
- private Matcher<String> customMatcher(String startWith, String endWith) {
- return new TypeSafeMatcher<String>() {
- @Override
- public void describeTo(Description description) {
- description.appendText("Invalid message");
- }
-
- @Override
- protected boolean matchesSafely(final String item) {
- return item.startsWith(startWith) && item.endsWith(endWith);
- }
- };
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueTest.java
deleted file mode 100644
index c6659dbc8a1..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultIssueTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.io.File;
-import java.io.IOException;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.scanner.fs.DefaultInputDir;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.issue.DefaultIssue;
-import org.sonar.scanner.issue.DefaultIssueLocation;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class DefaultIssueTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- private DefaultInputProject project;
-
- private DefaultInputFile inputFile = new TestInputFileBuilder("foo", "src/Foo.php")
- .initMetadata("Foo\nBar\n")
- .build();
-
- @Before
- public void prepare() throws IOException {
- project = new DefaultInputProject(ProjectDefinition.create()
- .setKey("foo")
- .setBaseDir(temp.newFolder())
- .setWorkDir(temp.newFolder()));
- }
-
- @Test
- public void build_file_issue() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultIssue issue = new DefaultIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(inputFile)
- .at(inputFile.selectLine(1))
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .gap(10.0);
-
- assertThat(issue.primaryLocation().inputComponent()).isEqualTo(inputFile);
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("repo", "rule"));
- assertThat(issue.primaryLocation().textRange().start().line()).isEqualTo(1);
- assertThat(issue.gap()).isEqualTo(10.0);
- assertThat(issue.primaryLocation().message()).isEqualTo("Wrong way!");
-
- issue.save();
-
- verify(storage).store(issue);
- }
-
- @Test
- public void move_directory_issue_to_project_root() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultIssue issue = new DefaultIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(new DefaultInputDir("foo", "src/main").setModuleBaseDir(project.getBaseDir()))
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .overrideSeverity(Severity.BLOCKER);
-
- assertThat(issue.primaryLocation().inputComponent()).isEqualTo(project);
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("repo", "rule"));
- assertThat(issue.primaryLocation().textRange()).isNull();
- assertThat(issue.primaryLocation().message()).isEqualTo("[src/main] Wrong way!");
- assertThat(issue.overriddenSeverity()).isEqualTo(Severity.BLOCKER);
-
- issue.save();
-
- verify(storage).store(issue);
- }
-
- @Test
- public void move_submodule_issue_to_project_root() {
- File subModuleDirectory = new File(project.getBaseDir().toString(), "bar");
- subModuleDirectory.mkdir();
-
- ProjectDefinition subModuleDefinition = ProjectDefinition.create()
- .setKey("foo/bar")
- .setBaseDir(subModuleDirectory)
- .setWorkDir(subModuleDirectory);
- project.definition().addSubProject(subModuleDefinition);
- DefaultInputModule subModule = new DefaultInputModule(subModuleDefinition);
-
- SensorStorage storage = mock(SensorStorage.class);
- DefaultIssue issue = new DefaultIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(subModule)
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .overrideSeverity(Severity.BLOCKER);
-
- assertThat(issue.primaryLocation().inputComponent()).isEqualTo(project);
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("repo", "rule"));
- assertThat(issue.primaryLocation().textRange()).isNull();
- assertThat(issue.primaryLocation().message()).isEqualTo("[bar] Wrong way!");
- assertThat(issue.overriddenSeverity()).isEqualTo(Severity.BLOCKER);
-
- issue.save();
-
- verify(storage).store(issue);
- }
-
- @Test
- public void build_project_issue() throws IOException {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultInputModule inputModule = new DefaultInputModule(ProjectDefinition.create().setKey("foo").setBaseDir(temp.newFolder()).setWorkDir(temp.newFolder()));
- DefaultIssue issue = new DefaultIssue(project, storage)
- .at(new DefaultIssueLocation()
- .on(inputModule)
- .message("Wrong way!"))
- .forRule(RuleKey.of("repo", "rule"))
- .gap(10.0);
-
- assertThat(issue.primaryLocation().inputComponent()).isEqualTo(inputModule);
- assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("repo", "rule"));
- assertThat(issue.primaryLocation().textRange()).isNull();
- assertThat(issue.gap()).isEqualTo(10.0);
- assertThat(issue.primaryLocation().message()).isEqualTo("Wrong way!");
-
- issue.save();
-
- verify(storage).store(issue);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultMeasureTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultMeasureTest.java
deleted file mode 100644
index 43de69f19d0..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultMeasureTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.io.IOException;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.measures.CoreMetrics;
-import org.sonar.scanner.fs.AbstractProjectOrModule;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class DefaultMeasureTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Test
- public void build_file_measure() {
- SensorStorage storage = mock(SensorStorage.class);
- DefaultMeasure<Integer> newMeasure = new DefaultMeasure<Integer>(storage)
- .forMetric(CoreMetrics.LINES)
- .on(new TestInputFileBuilder("foo", "src/Foo.php").build())
- .withValue(3);
-
- assertThat(newMeasure.inputComponent()).isEqualTo(new TestInputFileBuilder("foo", "src/Foo.php").build());
- assertThat(newMeasure.metric()).isEqualTo(CoreMetrics.LINES);
- assertThat(newMeasure.value()).isEqualTo(3);
-
- newMeasure.save();
-
- verify(storage).store(newMeasure);
- }
-
- @Test
- public void build_project_measure() throws IOException {
- SensorStorage storage = mock(SensorStorage.class);
- AbstractProjectOrModule module = new DefaultInputProject(ProjectDefinition.create().setKey("foo").setBaseDir(temp.newFolder()).setWorkDir(temp.newFolder()));
- DefaultMeasure<Integer> newMeasure = new DefaultMeasure<Integer>(storage)
- .forMetric(CoreMetrics.LINES)
- .on(module)
- .withValue(3);
-
- assertThat(newMeasure.inputComponent()).isEqualTo(module);
- assertThat(newMeasure.metric()).isEqualTo(CoreMetrics.LINES);
- assertThat(newMeasure.value()).isEqualTo(3);
-
- newMeasure.save();
-
- verify(storage).store(newMeasure);
- }
-
- @Test
- public void not_allowed_to_call_on_twice() throws IOException {
- thrown.expect(IllegalStateException.class);
- thrown.expectMessage("on() already called");
- new DefaultMeasure<Integer>()
- .on(new DefaultInputProject(ProjectDefinition.create().setKey("foo").setBaseDir(temp.newFolder()).setWorkDir(temp.newFolder())))
- .on(new TestInputFileBuilder("foo", "src/Foo.php").build())
- .withValue(3)
- .save();
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorDescriptorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorDescriptorTest.java
deleted file mode 100644
index a43272ba20d..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorDescriptorTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.junit.Test;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.config.internal.MapSettings;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class DefaultSensorDescriptorTest {
-
- @Test
- public void describe() {
- DefaultSensorDescriptor descriptor = new DefaultSensorDescriptor();
- descriptor
- .name("Foo")
- .onlyOnLanguage("java")
- .onlyOnFileType(InputFile.Type.MAIN)
- .requireProperty("sonar.foo.reportPath", "sonar.foo.reportPath2")
- .createIssuesForRuleRepository("squid-java");
-
- assertThat(descriptor.name()).isEqualTo("Foo");
- assertThat(descriptor.languages()).containsOnly("java");
- assertThat(descriptor.type()).isEqualTo(InputFile.Type.MAIN);
- MapSettings settings = new MapSettings();
- settings.setProperty("sonar.foo.reportPath", "foo");
- assertThat(descriptor.configurationPredicate().test(settings.asConfig())).isFalse();
- settings.setProperty("sonar.foo.reportPath2", "foo");
- assertThat(descriptor.configurationPredicate().test(settings.asConfig())).isTrue();
- assertThat(descriptor.ruleRepositories()).containsOnly("squid-java");
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorStorageTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorStorageTest.java
index d95d44a69ed..fe82b642902 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorStorageTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSensorStorageTest.java
@@ -33,17 +33,22 @@ import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
import org.sonar.api.batch.sensor.issue.ExternalIssue;
import org.sonar.api.batch.sensor.issue.Issue;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.impl.config.MapSettings;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.core.metric.ScannerMetrics;
+import org.sonar.api.impl.fs.DefaultInputDir;
+import org.sonar.api.impl.fs.DefaultInputFile;
+import org.sonar.api.impl.fs.DefaultInputModule;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.DefaultExternalIssue;
+import org.sonar.api.impl.sensor.DefaultHighlighting;
+import org.sonar.api.impl.sensor.DefaultMeasure;
+import org.sonar.api.impl.sensor.DefaultSignificantCode;
+import org.sonar.api.impl.sensor.DefaultSymbolTable;
import org.sonar.scanner.cpd.index.SonarCpdBlockIndex;
-import org.sonar.scanner.fs.DefaultInputDir;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.issue.DefaultIssue;
-import org.sonar.scanner.issue.DefaultIssueLocation;
+import org.sonar.api.impl.issue.DefaultIssue;
+import org.sonar.api.impl.issue.DefaultIssueLocation;
import org.sonar.scanner.issue.IssuePublisher;
import org.sonar.scanner.protocol.output.FileStructure;
import org.sonar.scanner.protocol.output.ScannerReport;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSignificantCodeTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSignificantCodeTest.java
deleted file mode 100644
index 73a7f1c4299..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSignificantCodeTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-public class DefaultSignificantCodeTest {
- private SensorStorage sensorStorage = mock(SensorStorage.class);
- private DefaultSignificantCode underTest = new DefaultSignificantCode(sensorStorage);
- private InputFile inputFile = TestInputFileBuilder.create("module", "file1.xoo")
- .setContents("this is\na file\n with some code")
- .build();
-
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
- @Test
- public void should_save_ranges() {
- underTest.onFile(inputFile)
- .addRange(inputFile.selectLine(1))
- .save();
- verify(sensorStorage).store(underTest);
- }
-
- @Test
- public void fail_if_save_without_file() {
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Call onFile() first");
- underTest.save();
- }
-
- @Test
- public void fail_if_add_range_to_same_line_twice() {
- underTest.onFile(inputFile);
- underTest.addRange(inputFile.selectLine(1));
-
- exception.expect(IllegalStateException.class);
- exception.expectMessage("Significant code was already reported for line '1'.");
- underTest.addRange(inputFile.selectLine(1));
- }
-
- @Test
- public void fail_if_range_includes_many_lines() {
- underTest.onFile(inputFile);
-
- exception.expect(IllegalArgumentException.class);
- exception.expectMessage("Ranges of significant code must be located in a single line");
- underTest.addRange(inputFile.newRange(1, 1, 2, 1));
- }
-
- @Test
- public void fail_if_add_range_before_setting_file() {
- exception.expect(IllegalStateException.class);
- exception.expectMessage("addRange() should be called after on()");
- underTest.addRange(inputFile.selectLine(1));
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSymbolTableTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSymbolTableTest.java
deleted file mode 100644
index 3339e1d2bed..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/DefaultSymbolTableTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.util.Map;
-import java.util.Set;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.fs.TextRange;
-import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.sensor.DefaultSymbolTable;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-
-public class DefaultSymbolTableTest {
-
- private static final InputFile INPUT_FILE = new TestInputFileBuilder("foo", "src/Foo.java")
- .setLines(2)
- .setOriginalLineStartOffsets(new int[] {0, 50})
- .setOriginalLineEndOffsets(new int[] {49, 100})
- .setLastValidOffset(101)
- .build();
-
- private Map<TextRange, Set<TextRange>> referencesPerSymbol;
-
- @Rule
- public ExpectedException throwable = ExpectedException.none();
-
- @Before
- public void setUpSampleSymbols() {
-
- DefaultSymbolTable symbolTableBuilder = new DefaultSymbolTable(mock(SensorStorage.class))
- .onFile(INPUT_FILE);
- symbolTableBuilder
- .newSymbol(0, 10)
- .newReference(12, 15)
- .newReference(2, 10, 2, 15);
-
- symbolTableBuilder.newSymbol(1, 12, 1, 15).newReference(52, 55);
-
- symbolTableBuilder.save();
-
- referencesPerSymbol = symbolTableBuilder.getReferencesBySymbol();
- }
-
- @Test
- public void should_register_symbols() {
- assertThat(referencesPerSymbol).hasSize(2);
- }
-
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/InMemorySensorStorageTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/InMemorySensorStorageTest.java
deleted file mode 100644
index 76e4874a41a..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/InMemorySensorStorageTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.data.MapEntry.entry;
-
-public class InMemorySensorStorageTest {
-
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- InMemorySensorStorage underTest = new InMemorySensorStorage();
-
- @Test
- public void test_storeProperty() {
- assertThat(underTest.contextProperties).isEmpty();
-
- underTest.storeProperty("foo", "bar");
- assertThat(underTest.contextProperties).containsOnly(entry("foo", "bar"));
- }
-
- @Test
- public void storeProperty_throws_IAE_if_key_is_null() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("Key of context property must not be null");
-
- underTest.storeProperty(null, "bar");
- }
-
- @Test
- public void storeProperty_throws_IAE_if_value_is_null() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("Value of context property must not be null");
-
- underTest.storeProperty("foo", null);
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java
index 668a050119a..dea7f4176d5 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorContextTest.java
@@ -31,13 +31,13 @@ import org.sonar.api.batch.fs.InputModule;
import org.sonar.api.batch.measure.MetricFinder;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.batch.sensor.internal.SensorStorage;
-import org.sonar.api.config.internal.MapSettings;
-import org.sonar.api.internal.SonarRuntimeImpl;
+import org.sonar.api.impl.config.MapSettings;
+import org.sonar.api.impl.fs.DefaultFileSystem;
+import org.sonar.api.impl.fs.DefaultInputProject;
+import org.sonar.api.impl.context.SonarRuntimeImpl;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.utils.Version;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.DefaultInputProject;
-import org.sonar.scanner.rule.ActiveRulesBuilder;
+import org.sonar.api.impl.rule.ActiveRulesBuilder;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorOptimizerTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorOptimizerTest.java
index 0a78c6b2984..197749532c8 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorOptimizerTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/ModuleSensorOptimizerTest.java
@@ -26,12 +26,13 @@ import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.config.internal.MapSettings;
+import org.sonar.api.batch.rule.NewActiveRule;
+import org.sonar.api.impl.config.MapSettings;
+import org.sonar.api.impl.fs.DefaultFileSystem;
+import org.sonar.api.impl.fs.TestInputFileBuilder;
+import org.sonar.api.impl.sensor.DefaultSensorDescriptor;
import org.sonar.api.rule.RuleKey;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.rule.ActiveRulesBuilder;
-import org.sonar.scanner.rule.NewActiveRule;
+import org.sonar.api.impl.rule.ActiveRulesBuilder;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/SensorContextTesterTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/SensorContextTesterTest.java
deleted file mode 100644
index 24e93796c31..00000000000
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sensor/SensorContextTesterTest.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 SonarSource SA
- * 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.sonar.scanner.sensor;
-
-import java.io.File;
-import java.io.IOException;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.rules.TemporaryFolder;
-import org.sonar.api.batch.bootstrap.ProjectDefinition;
-import org.sonar.api.batch.fs.InputFile;
-import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.batch.rule.Severity;
-import org.sonar.api.batch.sensor.error.AnalysisError;
-import org.sonar.api.batch.sensor.error.NewAnalysisError;
-import org.sonar.api.batch.sensor.highlighting.TypeOfText;
-import org.sonar.api.batch.sensor.issue.NewExternalIssue;
-import org.sonar.api.batch.sensor.issue.NewIssue;
-import org.sonar.api.batch.sensor.symbol.NewSymbolTable;
-import org.sonar.api.config.Settings;
-import org.sonar.api.config.internal.MapSettings;
-import org.sonar.api.measures.CoreMetrics;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.rules.RuleType;
-import org.sonar.scanner.fs.DefaultFileSystem;
-import org.sonar.scanner.fs.DefaultInputFile;
-import org.sonar.scanner.fs.DefaultInputModule;
-import org.sonar.scanner.fs.DefaultTextPointer;
-import org.sonar.scanner.fs.TestInputFileBuilder;
-import org.sonar.scanner.rule.ActiveRulesBuilder;
-import org.sonar.scanner.rule.NewActiveRule;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.tuple;
-import static org.assertj.core.data.MapEntry.entry;
-
-public class SensorContextTesterTest {
-
- @Rule
- public TemporaryFolder temp = new TemporaryFolder();
-
- @Rule
- public ExpectedException exception = ExpectedException.none();
-
- private SensorContextTester tester;
- private File baseDir;
-
- @Before
- public void prepare() throws Exception {
- baseDir = temp.newFolder();
- tester = SensorContextTester.create(baseDir);
- }
-
- @Test
- public void testSettings() {
- Settings settings = new MapSettings();
- settings.setProperty("foo", "bar");
- tester.setSettings(settings);
- assertThat(tester.settings().getString("foo")).isEqualTo("bar");
- }
-
- @Test
- public void testActiveRules() {
- NewActiveRule activeRule = new NewActiveRule.Builder()
- .setRuleKey(RuleKey.of("foo", "bar"))
- .build();
- ActiveRules activeRules = new ActiveRulesBuilder().addRule(activeRule).build();
- tester.setActiveRules(activeRules);
- assertThat(tester.activeRules().findAll()).hasSize(1);
- }
-
- @Test
- public void testFs() throws Exception {
- DefaultFileSystem fs = new DefaultFileSystem(temp.newFolder());
- tester.setFileSystem(fs);
- assertThat(tester.fileSystem().baseDir()).isNotEqualTo(baseDir);
- }
-
- @Test
- public void testIssues() {
- assertThat(tester.allIssues()).isEmpty();
- NewIssue newIssue = tester.newIssue();
- newIssue
- .at(newIssue.newLocation().on(new TestInputFileBuilder("foo", "src/Foo.java").build()))
- .forRule(RuleKey.of("repo", "rule"))
- .save();
- newIssue = tester.newIssue();
- newIssue
- .at(newIssue.newLocation().on(new TestInputFileBuilder("foo", "src/Foo.java").build()))
- .forRule(RuleKey.of("repo", "rule"))
- .save();
- assertThat(tester.allIssues()).hasSize(2);
- }
-
- @Test
- public void testExternalIssues() {
- assertThat(tester.allExternalIssues()).isEmpty();
- NewExternalIssue newExternalIssue = tester.newExternalIssue();
- newExternalIssue
- .at(newExternalIssue.newLocation().message("message").on(new TestInputFileBuilder("foo", "src/Foo.java").build()))
- .forRule(RuleKey.of("repo", "rule"))
- .type(RuleType.BUG)
- .severity(Severity.BLOCKER)
- .save();
- newExternalIssue = tester.newExternalIssue();
- newExternalIssue
- .at(newExternalIssue.newLocation().message("message").on(new TestInputFileBuilder("foo", "src/Foo.java").build()))
- .type(RuleType.BUG)
- .severity(Severity.BLOCKER)
- .forRule(RuleKey.of("repo", "rule"))
- .save();
- assertThat(tester.allExternalIssues()).hasSize(2);
- }
-
- @Test
- public void testAnalysisErrors() {
- assertThat(tester.allAnalysisErrors()).isEmpty();
- NewAnalysisError newAnalysisError = tester.newAnalysisError();
-
- InputFile file = new TestInputFileBuilder("foo", "src/Foo.java").build();
- newAnalysisError.onFile(file)
- .message("error")
- .at(new DefaultTextPointer(5, 2))
- .save();
-
- assertThat(tester.allAnalysisErrors()).hasSize(1);
- AnalysisError analysisError = tester.allAnalysisErrors().iterator().next();
-
- assertThat(analysisError.inputFile()).isEqualTo(file);
- assertThat(analysisError.message()).isEqualTo("error");
- assertThat(analysisError.location()).isEqualTo(new DefaultTextPointer(5, 2));
-
- }
-
- @Test
- public void testMeasures() throws IOException {
- assertThat(tester.measures("foo:src/Foo.java")).isEmpty();
- assertThat(tester.measure("foo:src/Foo.java", "ncloc")).isNull();
- tester.<Integer>newMeasure()
- .on(new TestInputFileBuilder("foo", "src/Foo.java").build())
- .forMetric(CoreMetrics.NCLOC)
- .withValue(2)
- .save();
- assertThat(tester.measures("foo:src/Foo.java")).hasSize(1);
- assertThat(tester.measure("foo:src/Foo.java", "ncloc")).isNotNull();
- tester.<Integer>newMeasure()
- .on(new TestInputFileBuilder("foo", "src/Foo.java").build())
- .forMetric(CoreMetrics.LINES)
- .withValue(4)
- .save();
- assertThat(tester.measures("foo:src/Foo.java")).hasSize(2);
- assertThat(tester.measure("foo:src/Foo.java", "ncloc")).isNotNull();
- assertThat(tester.measure("foo:src/Foo.java", "lines")).isNotNull();
- tester.<Integer>newMeasure()
- .on(new DefaultInputModule(ProjectDefinition.create().setKey("foo").setBaseDir(temp.newFolder()).setWorkDir(temp.newFolder())))
- .forMetric(CoreMetrics.DIRECTORIES)
- .withValue(4)
- .save();
- assertThat(tester.measures("foo")).hasSize(1);
- assertThat(tester.measure("foo", "directories")).isNotNull();
- }
-
- @Test(expected = IllegalStateException.class)
- public void duplicateMeasures() {
- tester.<Integer>newMeasure()
- .on(new TestInputFileBuilder("foo", "src/Foo.java").build())
- .forMetric(CoreMetrics.NCLOC)
- .withValue(2)
- .save();
- tester.<Integer>newMeasure()
- .on(new TestInputFileBuilder("foo", "src/Foo.java").build())
- .forMetric(CoreMetrics.NCLOC)
- .withValue(2)
- .save();
- }
-
- @Test
- public void testHighlighting() {
- assertThat(tester.highlightingTypeAt("foo:src/Foo.java", 1, 3)).isEmpty();
- tester.newHighlighting()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build())
- .highlight(1, 0, 1, 5, TypeOfText.ANNOTATION)
- .highlight(8, 10, TypeOfText.CONSTANT)
- .highlight(9, 10, TypeOfText.COMMENT)
- .save();
- assertThat(tester.highlightingTypeAt("foo:src/Foo.java", 1, 3)).containsExactly(TypeOfText.ANNOTATION);
- assertThat(tester.highlightingTypeAt("foo:src/Foo.java", 1, 9)).containsExactly(TypeOfText.CONSTANT, TypeOfText.COMMENT);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void duplicateHighlighting() {
- tester.newHighlighting()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build())
- .highlight(1, 0, 1, 5, TypeOfText.ANNOTATION)
- .save();
- tester.newHighlighting()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build())
- .highlight(1, 0, 1, 5, TypeOfText.ANNOTATION)
- .save();
- }
-
- @Test
- public void testSymbolReferences() {
- assertThat(tester.referencesForSymbolAt("foo:src/Foo.java", 1, 0)).isNull();
-
- NewSymbolTable symbolTable = tester.newSymbolTable()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build());
- symbolTable
- .newSymbol(1, 8, 1, 10);
-
- symbolTable
- .newSymbol(1, 1, 1, 5)
- .newReference(6, 9)
- .newReference(1, 10, 1, 13);
-
- symbolTable.save();
-
- assertThat(tester.referencesForSymbolAt("foo:src/Foo.java", 1, 0)).isNull();
- assertThat(tester.referencesForSymbolAt("foo:src/Foo.java", 1, 8)).isEmpty();
- assertThat(tester.referencesForSymbolAt("foo:src/Foo.java", 1, 3)).extracting("start.line", "start.lineOffset", "end.line", "end.lineOffset").containsExactly(tuple(1, 6, 1, 9),
- tuple(1, 10, 1, 13));
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void duplicateSymbolReferences() {
- NewSymbolTable symbolTable = tester.newSymbolTable()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build());
- symbolTable
- .newSymbol(1, 8, 1, 10);
-
- symbolTable.save();
-
- symbolTable = tester.newSymbolTable()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build());
- symbolTable
- .newSymbol(1, 8, 1, 10);
-
- symbolTable.save();
- }
-
- @Test
- public void testCoverageAtLineZero() {
- assertThat(tester.lineHits("foo:src/Foo.java", 1)).isNull();
- assertThat(tester.lineHits("foo:src/Foo.java", 4)).isNull();
-
- exception.expect(IllegalStateException.class);
- tester.newCoverage()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build())
- .lineHits(0, 3);
- }
-
- @Test
- public void testCoverageAtLineOutOfRange() {
- assertThat(tester.lineHits("foo:src/Foo.java", 1)).isNull();
- assertThat(tester.lineHits("foo:src/Foo.java", 4)).isNull();
- exception.expect(IllegalStateException.class);
-
- tester.newCoverage()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar").build())
- .lineHits(4, 3);
- }
-
- @Test
- public void testLineHits() {
- assertThat(tester.lineHits("foo:src/Foo.java", 1)).isNull();
- assertThat(tester.lineHits("foo:src/Foo.java", 4)).isNull();
- tester.newCoverage()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar\nasdas").build())
- .lineHits(1, 2)
- .lineHits(2, 3)
- .save();
- assertThat(tester.lineHits("foo:src/Foo.java", 1)).isEqualTo(2);
- assertThat(tester.lineHits("foo:src/Foo.java", 2)).isEqualTo(3);
- }
-
- public void multipleCoverage() {
- tester.newCoverage()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar\nasdas").build())
- .lineHits(1, 2)
- .conditions(3, 4, 2)
- .save();
- tester.newCoverage()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java").initMetadata("annot dsf fds foo bar\nasdas").build())
- .lineHits(1, 2)
- .conditions(3, 4, 3)
- .save();
- assertThat(tester.lineHits("foo:src/Foo.java", 1)).isEqualTo(4);
- assertThat(tester.conditions("foo:src/Foo.java", 3)).isEqualTo(4);
- assertThat(tester.coveredConditions("foo:src/Foo.java", 3)).isEqualTo(3);
- }
-
- @Test
- public void testConditions() {
- assertThat(tester.conditions("foo:src/Foo.java", 1)).isNull();
- assertThat(tester.coveredConditions("foo:src/Foo.java", 1)).isNull();
- tester.newCoverage()
- .onFile(new TestInputFileBuilder("foo", "src/Foo.java")
- .initMetadata("annot dsf fds foo bar\nasd\nasdas\nasdfas")
- .build())
- .conditions(1, 4, 2)
- .save();
- assertThat(tester.conditions("foo:src/Foo.java", 1)).isEqualTo(4);
- assertThat(tester.coveredConditions("foo:src/Foo.java", 1)).isEqualTo(2);
- }
-
- @Test
- public void testCpdTokens() {
- assertThat(tester.cpdTokens("foo:src/Foo.java")).isNull();
- DefaultInputFile inputFile = new TestInputFileBuilder("foo", "src/Foo.java")
- .initMetadata("public class Foo {\n\n}")
- .build();
- tester.newCpdTokens()
- .onFile(inputFile)
- .addToken(inputFile.newRange(0, 6), "public")
- .addToken(inputFile.newRange(7, 12), "class")
- .addToken(inputFile.newRange(13, 16), "$IDENTIFIER")
- .addToken(inputFile.newRange(17, 18), "{")
- .addToken(inputFile.newRange(3, 0, 3, 1), "}")
- .save();
- assertThat(tester.cpdTokens("foo:src/Foo.java")).extracting("value", "startLine", "startUnit", "endUnit")
- .containsExactly(
- tuple("publicclass$IDENTIFIER{", 1, 1, 4),
- tuple("}", 3, 5, 5));
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void duplicateCpdTokens() {
- DefaultInputFile inputFile = new TestInputFileBuilder("foo", "src/Foo.java")
- .initMetadata("public class Foo {\n\n}")
- .build();
- tester.newCpdTokens()
- .onFile(inputFile)
- .addToken(inputFile.newRange(0, 6), "public")
- .save();
-
- tester.newCpdTokens()
- .onFile(inputFile)
- .addToken(inputFile.newRange(0, 6), "public")
- .save();
- }
-
- @Test
- public void testCancellation() {
- assertThat(tester.isCancelled()).isFalse();
- tester.setCancelled(true);
- assertThat(tester.isCancelled()).isTrue();
- }
-
- @Test
- public void testContextProperties() {
- assertThat(tester.getContextProperties()).isEmpty();
-
- tester.addContextProperty("foo", "bar");
- assertThat(tester.getContextProperties()).containsOnly(entry("foo", "bar"));
- }
-}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/util/ScannerUtilsTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/util/ScannerUtilsTest.java
index f5df14fd0b3..1a1ccf2843c 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/util/ScannerUtilsTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/util/ScannerUtilsTest.java
@@ -20,6 +20,7 @@
package org.sonar.scanner.util;
import org.junit.Test;
+import org.sonar.api.impl.utils.ScannerUtils;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/fs/glyphicons-halflings-regular.woff b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/fs/glyphicons-halflings-regular.woff
deleted file mode 100644
index 2cc3e4852a5..00000000000
--- a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/fs/glyphicons-halflings-regular.woff
+++ /dev/null
Binary files differ