]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6535 API cleanup: deprecate BatchComponent and ServerComponent
authorJulien HENRY <julien.henry@sonarsource.com>
Thu, 7 May 2015 13:59:40 +0000 (15:59 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Mon, 11 May 2015 15:04:46 +0000 (17:04 +0200)
373 files changed:
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/DefaultResourceTypes.java
server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/IndexPurgeListener.java
server/sonar-server/src/main/java/org/sonar/core/computation/dbcleaner/ProjectCleaner.java
server/sonar-server/src/main/java/org/sonar/server/activity/ActivityService.java
server/sonar-server/src/main/java/org/sonar/server/activity/RubyQProfileActivityService.java
server/sonar-server/src/main/java/org/sonar/server/activity/db/ActivityDao.java
server/sonar-server/src/main/java/org/sonar/server/batch/BatchIndex.java
server/sonar-server/src/main/java/org/sonar/server/batch/ProjectRepositoryLoader.java
server/sonar-server/src/main/java/org/sonar/server/charts/ChartFactory.java
server/sonar-server/src/main/java/org/sonar/server/component/ComponentCleanerService.java
server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java
server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentDao.java
server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentIndexDao.java
server/sonar-server/src/main/java/org/sonar/server/component/db/ComponentLinkDao.java
server/sonar-server/src/main/java/org/sonar/server/computation/ComputationService.java
server/sonar-server/src/main/java/org/sonar/server/computation/ReportQueue.java
server/sonar-server/src/main/java/org/sonar/server/computation/ReportQueueCleaner.java
server/sonar-server/src/main/java/org/sonar/server/db/Dao.java
server/sonar-server/src/main/java/org/sonar/server/db/DatabaseChecker.java
server/sonar-server/src/main/java/org/sonar/server/db/DbClient.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtCharacteristicsXMLImporter.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelLookup.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelOperations.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelPluginRepository.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelXMLExporter.java
server/sonar-server/src/main/java/org/sonar/server/debt/DebtRulesXMLImporter.java
server/sonar-server/src/main/java/org/sonar/server/design/db/FileDependencyDao.java
server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsJsonWriter.java
server/sonar-server/src/main/java/org/sonar/server/duplication/ws/DuplicationsParser.java
server/sonar-server/src/main/java/org/sonar/server/es/BaseIndex.java
server/sonar-server/src/main/java/org/sonar/server/es/BaseIndexer.java
server/sonar-server/src/main/java/org/sonar/server/es/IndexCreator.java
server/sonar-server/src/main/java/org/sonar/server/es/IndexDefinition.java
server/sonar-server/src/main/java/org/sonar/server/es/IndexDefinitions.java
server/sonar-server/src/main/java/org/sonar/server/event/db/EventDao.java
server/sonar-server/src/main/java/org/sonar/server/issue/AbstractChangeTagsAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/Action.java
server/sonar-server/src/main/java/org/sonar/server/issue/ActionService.java
server/sonar-server/src/main/java/org/sonar/server/issue/AddTagsAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/AssignAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/CommentAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java
server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogFormatter.java
server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogService.java
server/sonar-server/src/main/java/org/sonar/server/issue/IssueCommentService.java
server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java
server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java
server/sonar-server/src/main/java/org/sonar/server/issue/PlanAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/RemoveTagsAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueStorage.java
server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/TransitionAction.java
server/sonar-server/src/main/java/org/sonar/server/issue/actionplan/ActionPlanService.java
server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterService.java
server/sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterWriter.java
server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationFactory.java
server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueActionsWriter.java
server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterEngine.java
server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterExecutor.java
server/sonar-server/src/main/java/org/sonar/server/measure/MeasureFilterFactory.java
server/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java
server/sonar-server/src/main/java/org/sonar/server/measure/persistence/MetricDao.java
server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationCenter.java
server/sonar-server/src/main/java/org/sonar/server/notifications/NotificationService.java
server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java
server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java
server/sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java
server/sonar-server/src/main/java/org/sonar/server/platform/BackendCleanup.java
server/sonar-server/src/main/java/org/sonar/server/platform/monitoring/Monitor.java
server/sonar-server/src/main/java/org/sonar/server/plugins/ServerExtensionInstaller.java
server/sonar-server/src/main/java/org/sonar/server/properties/ProjectSettingsFactory.java
server/sonar-server/src/main/java/org/sonar/server/qualitygate/QgateProjectFinder.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/BuiltInProfiles.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackuper.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileComparison.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileCopier.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileExporters.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileFactory.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLoader.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectOperations.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileReset.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivatorContextFactory.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectAssociationActions.java
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/RuleActivationActions.java
server/sonar-server/src/main/java/org/sonar/server/rule/DeprecatedRulesDefinitionLoader.java
server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleCreator.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleDefinitionsLoader.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleDeleter.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleOperations.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleRepositories.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleService.java
server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java
server/sonar-server/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java
server/sonar-server/src/main/java/org/sonar/server/search/Index.java
server/sonar-server/src/main/java/org/sonar/server/search/IndexClient.java
server/sonar-server/src/main/java/org/sonar/server/search/IndexQueue.java
server/sonar-server/src/main/java/org/sonar/server/search/ws/BaseMapping.java
server/sonar-server/src/main/java/org/sonar/server/source/HtmlSourceDecorator.java
server/sonar-server/src/main/java/org/sonar/server/source/SourceService.java
server/sonar-server/src/main/java/org/sonar/server/source/db/FileSourceDao.java
server/sonar-server/src/main/java/org/sonar/server/startup/CopyRequirementsFromCharacteristicsToRules.java
server/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java
server/sonar-server/src/main/java/org/sonar/server/text/MacroInterpreter.java
server/sonar-server/src/main/java/org/sonar/server/text/RubyTextService.java
server/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java
server/sonar-server/src/main/java/org/sonar/server/ui/PageDecorations.java
server/sonar-server/src/main/java/org/sonar/server/ui/Views.java
server/sonar-server/src/main/java/org/sonar/server/user/GroupMembershipFinder.java
server/sonar-server/src/main/java/org/sonar/server/user/GroupMembershipService.java
server/sonar-server/src/main/java/org/sonar/server/user/NewUserNotifier.java
server/sonar-server/src/main/java/org/sonar/server/user/SecurityRealmFactory.java
server/sonar-server/src/main/java/org/sonar/server/user/UserUpdater.java
server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndex.java
server/sonar-server/src/main/java/org/sonar/server/util/TypeValidation.java
server/sonar-server/src/main/java/org/sonar/server/util/TypeValidations.java
server/sonar-server/src/main/java/org/sonar/server/view/index/ViewIndex.java
server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java
sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchComponents.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchExtensionDictionnary.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/DatabaseCompatibility.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionMatcher.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ExtensionUtils.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/MetricProvider.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/ServerClient.java
sonar-batch/src/main/java/org/sonar/batch/bootstrap/TaskContainer.java
sonar-batch/src/main/java/org/sonar/batch/bootstrapper/EnvironmentInformation.java
sonar-batch/src/main/java/org/sonar/batch/components/PastMeasuresLoader.java
sonar-batch/src/main/java/org/sonar/batch/components/PastSnapshotFinder.java
sonar-batch/src/main/java/org/sonar/batch/components/TimeMachineConfiguration.java
sonar-batch/src/main/java/org/sonar/batch/cpd/CpdEngine.java
sonar-batch/src/main/java/org/sonar/batch/cpd/CpdMappings.java
sonar-batch/src/main/java/org/sonar/batch/cpd/index/IndexFactory.java
sonar-batch/src/main/java/org/sonar/batch/debt/DebtDecorator.java
sonar-batch/src/main/java/org/sonar/batch/debt/IssueChangelogDebtCalculator.java
sonar-batch/src/main/java/org/sonar/batch/debt/NewDebtDecorator.java
sonar-batch/src/main/java/org/sonar/batch/debt/SqaleRatingSettings.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PastSnapshotFinderByDate.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PastSnapshotFinderByDays.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PastSnapshotFinderByPreviousAnalysis.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PastSnapshotFinderByPreviousVersion.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PastSnapshotFinderByVersion.java
sonar-batch/src/main/java/org/sonar/batch/deprecated/components/PeriodsDefinition.java
sonar-batch/src/main/java/org/sonar/batch/duplication/DuplicationCache.java
sonar-batch/src/main/java/org/sonar/batch/index/Caches.java
sonar-batch/src/main/java/org/sonar/batch/index/ResourceCache.java
sonar-batch/src/main/java/org/sonar/batch/index/ResourceKeyMigration.java
sonar-batch/src/main/java/org/sonar/batch/index/ScanPersister.java
sonar-batch/src/main/java/org/sonar/batch/issue/IssueCache.java
sonar-batch/src/main/java/org/sonar/batch/issue/IssueFilters.java
sonar-batch/src/main/java/org/sonar/batch/issue/ignore/pattern/AbstractPatternInitializer.java
sonar-batch/src/main/java/org/sonar/batch/issue/ignore/scanner/IssueExclusionsRegexpScanner.java
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/InitialOpenIssuesStack.java
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueHandlers.java
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/IssueTracking.java
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/LocalIssueTracking.java
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/ServerIssueRepository.java
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/ServerLineHashesLoader.java
sonar-batch/src/main/java/org/sonar/batch/mediumtest/ScanTaskObserver.java
sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java
sonar-batch/src/main/java/org/sonar/batch/phases/PersistersExecutor.java
sonar-batch/src/main/java/org/sonar/batch/phases/PostJobsExecutor.java
sonar-batch/src/main/java/org/sonar/batch/phases/ProjectInitializer.java
sonar-batch/src/main/java/org/sonar/batch/phases/SensorMatcher.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/phases/SensorsExecutor.java
sonar-batch/src/main/java/org/sonar/batch/platform/DefaultServer.java
sonar-batch/src/main/java/org/sonar/batch/postjob/PostJobOptimizer.java
sonar-batch/src/main/java/org/sonar/batch/qualitygate/GenerateQualityGateEvents.java
sonar-batch/src/main/java/org/sonar/batch/qualitygate/QualityGate.java
sonar-batch/src/main/java/org/sonar/batch/report/EventCache.java
sonar-batch/src/main/java/org/sonar/batch/report/ReportPublisher.java
sonar-batch/src/main/java/org/sonar/batch/repository/language/LanguagesRepository.java
sonar-batch/src/main/java/org/sonar/batch/rule/ModuleQProfiles.java
sonar-batch/src/main/java/org/sonar/batch/rule/QProfileEventsDecorator.java
sonar-batch/src/main/java/org/sonar/batch/rule/QProfileVerifier.java
sonar-batch/src/main/java/org/sonar/batch/scan/DefaultSensorMatcher.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/scan/ModuleScanContainer.java
sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
sonar-batch/src/main/java/org/sonar/batch/scan/ScanTask.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ComponentIndexer.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ExclusionFilters.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileIndexer.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileSystemLogger.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InputFileBuilderFactory.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/InputPathCache.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageDetectionFactory.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleFileSystemInitializer.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/ModuleInputFileCache.java
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/StatusDetectionFactory.java
sonar-batch/src/main/java/org/sonar/batch/scan/measure/MeasureCache.java
sonar-batch/src/main/java/org/sonar/batch/scan/report/IssuesReportBuilder.java
sonar-batch/src/main/java/org/sonar/batch/scan/report/IssuesReports.java
sonar-batch/src/main/java/org/sonar/batch/scan/report/Reporter.java
sonar-batch/src/main/java/org/sonar/batch/scan/report/RuleNameProvider.java
sonar-batch/src/main/java/org/sonar/batch/scan/report/SourceProvider.java
sonar-batch/src/main/java/org/sonar/batch/scm/ScmConfiguration.java
sonar-batch/src/main/java/org/sonar/batch/sensor/SensorOptimizer.java
sonar-batch/src/main/java/org/sonar/batch/source/CodeColorizers.java
sonar-batch/src/test/java/org/sonar/batch/bootstrap/ExtensionUtilsTest.java
sonar-batch/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
sonar-batch/src/test/java/org/sonar/batch/scan/ProjectScanContainerTest.java
sonar-core/src/main/java/org/sonar/core/component/PerspectiveBuilder.java
sonar-core/src/main/java/org/sonar/core/component/ScanGraph.java
sonar-core/src/main/java/org/sonar/core/component/SnapshotPerspectives.java
sonar-core/src/main/java/org/sonar/core/computation/dbcleaner/period/DefaultPeriodCleaner.java
sonar-core/src/main/java/org/sonar/core/config/Logback.java
sonar-core/src/main/java/org/sonar/core/dashboard/ActiveDashboardDao.java
sonar-core/src/main/java/org/sonar/core/dashboard/DashboardDao.java
sonar-core/src/main/java/org/sonar/core/duplication/DuplicationDao.java
sonar-core/src/main/java/org/sonar/core/i18n/DefaultI18n.java
sonar-core/src/main/java/org/sonar/core/i18n/RuleI18nManager.java
sonar-core/src/main/java/org/sonar/core/issue/IssueFilterSerializer.java
sonar-core/src/main/java/org/sonar/core/issue/IssueUpdater.java
sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDao.java
sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanStatsDao.java
sonar-core/src/main/java/org/sonar/core/issue/db/IssueChangeDao.java
sonar-core/src/main/java/org/sonar/core/issue/db/IssueDao.java
sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterDao.java
sonar-core/src/main/java/org/sonar/core/issue/db/IssueFilterFavouriteDao.java
sonar-core/src/main/java/org/sonar/core/issue/workflow/FunctionExecutor.java
sonar-core/src/main/java/org/sonar/core/issue/workflow/IssueWorkflow.java
sonar-core/src/main/java/org/sonar/core/measure/db/MeasureFilterDao.java
sonar-core/src/main/java/org/sonar/core/notification/DefaultNotificationManager.java
sonar-core/src/main/java/org/sonar/core/notification/db/NotificationQueueDao.java
sonar-core/src/main/java/org/sonar/core/permission/PermissionDao.java
sonar-core/src/main/java/org/sonar/core/permission/PermissionFacade.java
sonar-core/src/main/java/org/sonar/core/permission/PermissionTemplateDao.java
sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java
sonar-core/src/main/java/org/sonar/core/persistence/MyBatis.java
sonar-core/src/main/java/org/sonar/core/persistence/SemaphoreUpdater.java
sonar-core/src/main/java/org/sonar/core/platform/ComponentContainer.java
sonar-core/src/main/java/org/sonar/core/platform/PluginRepository.java
sonar-core/src/main/java/org/sonar/core/properties/PropertiesDao.java
sonar-core/src/main/java/org/sonar/core/qualityprofile/db/ActiveRuleDao.java
sonar-core/src/main/java/org/sonar/core/qualityprofile/db/QualityProfileDao.java
sonar-core/src/main/java/org/sonar/core/rule/RuleDao.java
sonar-core/src/main/java/org/sonar/core/technicaldebt/DefaultTechnicalDebtModel.java
sonar-core/src/main/java/org/sonar/core/technicaldebt/db/CharacteristicDao.java
sonar-core/src/main/java/org/sonar/core/template/LoadedTemplateDao.java
sonar-core/src/main/java/org/sonar/core/timemachine/Periods.java
sonar-core/src/main/java/org/sonar/core/user/AuthorDao.java
sonar-core/src/main/java/org/sonar/core/user/AuthorizationDao.java
sonar-core/src/main/java/org/sonar/core/user/RoleDao.java
sonar-core/src/main/java/org/sonar/core/user/UserDao.java
sonar-core/src/main/java/org/sonar/plugins/dbcleaner/api/PurgeTask.java
sonar-deprecated/src/main/java/org/sonar/api/batch/ResourceCreationLock.java
sonar-deprecated/src/main/java/org/sonar/api/batch/ResourceFilter.java
sonar-deprecated/src/main/java/org/sonar/api/charts/Chart.java
sonar-deprecated/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java
sonar-deprecated/src/main/java/org/sonar/api/rules/RuleRepository.java
sonar-deprecated/src/main/java/org/sonar/api/rules/XMLRuleParser.java
sonar-plugin-api/src/main/java/org/sonar/api/BatchComponent.java
sonar-plugin-api/src/main/java/org/sonar/api/BatchExtension.java
sonar-plugin-api/src/main/java/org/sonar/api/BatchSide.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/Extension.java
sonar-plugin-api/src/main/java/org/sonar/api/ExtensionPoint.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/ServerComponent.java
sonar-plugin-api/src/main/java/org/sonar/api/ServerExtension.java
sonar-plugin-api/src/main/java/org/sonar/api/ServerSide.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/batch/AnalysisMode.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/CoverageExtension.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/CpdMapping.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/Decorator.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/Initializer.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/InstantiationStrategy.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/PostJob.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/ProjectClasspath.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/Sensor.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/SupportedEnvironment.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/TimeMachine.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectBuilder.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/bootstrap/ProjectReactor.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/EventHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/FileSystem.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/InputFileFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/fs/internal/FileMetadata.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/measure/MetricFinder.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/postjob/PostJob.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRules.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/CheckFactory.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/Rules.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/scm/BlameCommand.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/scm/ScmProvider.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/Sensor.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/internal/SensorStorage.java
sonar-plugin-api/src/main/java/org/sonar/api/component/Perspectives.java
sonar-plugin-api/src/main/java/org/sonar/api/component/RubyComponentService.java
sonar-plugin-api/src/main/java/org/sonar/api/config/EmailSettings.java
sonar-plugin-api/src/main/java/org/sonar/api/config/GlobalPropertyChangeHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/config/PropertyDefinitions.java
sonar-plugin-api/src/main/java/org/sonar/api/config/Settings.java
sonar-plugin-api/src/main/java/org/sonar/api/database/DatabaseSession.java
sonar-plugin-api/src/main/java/org/sonar/api/i18n/I18n.java
sonar-plugin-api/src/main/java/org/sonar/api/i18n/RuleI18n.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/Issue.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/IssueHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/NoSonarFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/ProjectIssues.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/action/Actions.java
sonar-plugin-api/src/main/java/org/sonar/api/issue/batch/IssueFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/FileLinesContextFactory.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/Metric.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/MetricFinder.java
sonar-plugin-api/src/main/java/org/sonar/api/measures/Metrics.java
sonar-plugin-api/src/main/java/org/sonar/api/notifications/NotificationChannel.java
sonar-plugin-api/src/main/java/org/sonar/api/notifications/NotificationDispatcher.java
sonar-plugin-api/src/main/java/org/sonar/api/notifications/NotificationDispatcherMetadata.java
sonar-plugin-api/src/main/java/org/sonar/api/notifications/NotificationManager.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/NewUserHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/Server.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/ServerFileSystem.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/ServerStartHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/ServerStopHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/platform/ServerUpgradeStatus.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/AnnotationProfileParser.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileExporter.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/ProfileImporter.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileParser.java
sonar-plugin-api/src/main/java/org/sonar/api/profiles/XMLProfileSerializer.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Language.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/Languages.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceTypeTree.java
sonar-plugin-api/src/main/java/org/sonar/api/resources/ResourceTypes.java
sonar-plugin-api/src/main/java/org/sonar/api/rules/RuleFinder.java
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileExclusions.java
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/ModuleFileSystem.java
sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/PathResolver.java
sonar-plugin-api/src/main/java/org/sonar/api/security/Authenticator.java
sonar-plugin-api/src/main/java/org/sonar/api/security/LoginPasswordAuthenticator.java
sonar-plugin-api/src/main/java/org/sonar/api/security/ResourcePermissions.java
sonar-plugin-api/src/main/java/org/sonar/api/security/SecurityRealm.java
sonar-plugin-api/src/main/java/org/sonar/api/security/UserFinder.java
sonar-plugin-api/src/main/java/org/sonar/api/server/debt/DebtModel.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinition.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionI18nLoader.java
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RulesDefinitionXmlLoader.java
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/RequestHandler.java
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java
sonar-plugin-api/src/main/java/org/sonar/api/task/TaskComponent.java
sonar-plugin-api/src/main/java/org/sonar/api/technicaldebt/batch/TechnicalDebtModel.java
sonar-plugin-api/src/main/java/org/sonar/api/user/RubyUserService.java
sonar-plugin-api/src/main/java/org/sonar/api/user/UserFinder.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/Durations.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/HttpDownloader.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/Semaphores.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/System2.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/TempFolder.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/UriReader.java
sonar-plugin-api/src/main/java/org/sonar/api/utils/internal/TempFolderCleaner.java
sonar-plugin-api/src/main/java/org/sonar/api/web/DashboardTemplate.java
sonar-plugin-api/src/main/java/org/sonar/api/web/FilterTemplate.java
sonar-plugin-api/src/main/java/org/sonar/api/web/Footer.java
sonar-plugin-api/src/main/java/org/sonar/api/web/PageDecoration.java
sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
sonar-plugin-api/src/main/java/org/sonar/api/web/View.java
sonar-plugin-api/src/main/java/org/sonar/api/web/Webservice.java
sonar-plugin-api/src/main/java/org/sonar/plugins/emailnotifications/api/EmailTemplate.java

index 4afed1eb7efd8c997e2f4ae1cfe6bb3ecb02a288..7a6fdb979a2e40316a2f322e48006d534d87c284 100644 (file)
@@ -25,7 +25,6 @@ import org.sonar.api.Properties;
 import org.sonar.api.Property;
 import org.sonar.api.PropertyType;
 import org.sonar.api.SonarPlugin;
-import org.sonar.core.timemachine.Periods;
 import org.sonar.plugins.core.charts.DistributionAreaChart;
 import org.sonar.plugins.core.charts.DistributionBarChart;
 import org.sonar.plugins.core.dashboards.GlobalDefaultDashboard;
@@ -258,7 +257,6 @@ public final class CorePlugin extends SonarPlugin {
     extensions.add(
       DefaultResourceTypes.class,
       UserManagedMetrics.class,
-      Periods.class,
 
       // measure filters
       ProjectFilter.class,
index 6526240c9d1263dcc160d0571f35ef6315959359..4dda3ddbc9583db96c72a950fd7714272dfa5e36 100644 (file)
  */
 package org.sonar.plugins.core;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.ExtensionProvider;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.resources.ResourceType;
 import org.sonar.api.resources.ResourceTypeTree;
 
+@BatchSide
+@ServerSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public final class DefaultResourceTypes extends ExtensionProvider implements BatchExtension, ServerExtension {
+public final class DefaultResourceTypes extends ExtensionProvider {
 
   private static final String SUPPORTS_MEASURE_FILTERS = "supportsMeasureFilters";
   private static final String CONFIGURABLE = "configurable";
index 8be40ab93b10190f3e4548ef263d142f3d91313a..7bf30446b5a07729533ee6eaa3d14f57ac1cf935 100644 (file)
 
 package org.sonar.core.computation.dbcleaner;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.purge.PurgeListener;
 import org.sonar.server.source.index.SourceLineIndexer;
 import org.sonar.server.test.index.TestIndexer;
 
-public class IndexPurgeListener implements PurgeListener, ServerComponent {
+@ServerSide
+public class IndexPurgeListener implements PurgeListener {
   private final SourceLineIndexer sourceLineIndexer;
   private final TestIndexer testIndexer;
 
index db97f41b18202d18d319f097c728bb464c112853..dba317bce9df8abc869be88d22f0b1297956c151 100644 (file)
 package org.sonar.core.computation.dbcleaner;
 
 import org.sonar.api.CoreProperties;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.TimeUtils;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
 import org.sonar.core.persistence.DbSession;
-import org.sonar.core.purge.*;
+import org.sonar.core.purge.IdUuidPair;
+import org.sonar.core.purge.PurgeConfiguration;
+import org.sonar.core.purge.PurgeDao;
+import org.sonar.core.purge.PurgeListener;
+import org.sonar.core.purge.PurgeProfiler;
 import org.sonar.server.issue.index.IssueIndex;
 
 import javax.annotation.Nullable;
@@ -37,7 +41,8 @@ import java.util.Date;
 
 import static org.sonar.core.purge.PurgeConfiguration.newDefaultPurgeConfiguration;
 
-public class ProjectCleaner implements ServerComponent {
+@ServerSide
+public class ProjectCleaner {
   private static final Logger LOG = Loggers.get(ProjectCleaner.class);
 
   private final PurgeProfiler profiler;
index a108c0db06378bd2cf0f88da3f2906631c7510c8..6d5c5626bd8c9269f82b462751184e334e9828aa 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.activity;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.KeyValueFormat;
 import org.sonar.api.utils.internal.Uuids;
 import org.sonar.core.activity.db.ActivityDto;
@@ -27,7 +27,8 @@ import org.sonar.server.activity.index.ActivityIndexer;
 import org.sonar.server.db.DbClient;
 import org.sonar.server.user.UserSession;
 
-public class ActivityService implements ServerComponent {
+@ServerSide
+public class ActivityService {
 
   private final DbClient dbClient;
   private final ActivityIndexer indexer;
index d0e3c7a07942254b17f0926c533b5b722820bee5..8ed00b89165176fee85a86b634ec08f93295cfb7 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.activity;
 
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.Paging;
 import org.sonar.server.es.SearchOptions;
 import org.sonar.server.qualityprofile.QProfileActivity;
@@ -38,7 +38,8 @@ import java.util.Map;
  * @deprecated in 4.4 because Ruby on Rails is deprecated too !
  */
 @Deprecated
-public class RubyQProfileActivityService implements ServerComponent, Startable {
+@ServerSide
+public class RubyQProfileActivityService implements Startable {
 
   private final QProfileService service;
 
@@ -52,7 +53,7 @@ public class RubyQProfileActivityService implements ServerComponent, Startable {
   public QProfileActivityResult search(Map<String, Object> params) {
     QProfileActivityQuery query = new QProfileActivityQuery();
 
-    query.setQprofileKey((String)params.get("profileKey"));
+    query.setQprofileKey((String) params.get("profileKey"));
     Date since = RubyUtils.toDate(params.get("since"));
     if (since != null) {
       query.setSince(since);
index c6a9a271632349356363737683ff5f92e45d314e..8be7c8b558f8f42a5a63e810643bcf5955c1b44d 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.activity.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.System2;
 import org.sonar.core.activity.db.ActivityDto;
 import org.sonar.core.activity.db.ActivityMapper;
@@ -29,7 +29,8 @@ import org.sonar.core.persistence.MyBatis;
 
 import java.util.Date;
 
-public class ActivityDao implements DaoComponent, ServerComponent {
+@ServerSide
+public class ActivityDao implements DaoComponent {
 
   private final MyBatis mybatis;
   private final System2 system;
index d5138252c4cd4fe659515f1a5dbc433abbf1cd94..373d097dac71868facc55d6da5f3a52ef4dd4086 100644 (file)
@@ -26,7 +26,7 @@ import org.apache.commons.io.filefilter.HiddenFileFilter;
 import org.apache.commons.lang.CharUtils;
 import org.apache.commons.lang.StringUtils;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.platform.Server;
 import org.sonar.home.cache.FileHashes;
 
@@ -37,7 +37,8 @@ import java.util.Collection;
 /**
  * JAR files to be downloaded by sonar-runner.
  */
-public class BatchIndex implements ServerComponent, Startable {
+@ServerSide
+public class BatchIndex implements Startable {
 
   private final Server server;
   private String index;
index 1f463b5a253aeb2ce6ae4ed5710742f62a1d0fb3..7a912db9bae585c59896089b6b449b3930d6e0cf 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.base.Function;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Language;
 import org.sonar.api.resources.Languages;
 import org.sonar.api.rule.RuleKey;
@@ -65,7 +65,8 @@ import java.util.Map;
 import static com.google.common.collect.Lists.newArrayList;
 import static com.google.common.collect.Maps.newHashMap;
 
-public class ProjectRepositoryLoader implements ServerComponent {
+@ServerSide
+public class ProjectRepositoryLoader {
 
   private static final Logger LOG = Loggers.get(ProjectRepositoryLoader.class);
 
index 0c80acb0ef308175eaff43d8cc781b09109b8995..dd1dcd8f516c84da3477c3f6bfe7a30c567fb5eb 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.server.charts;
 
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.charts.Chart;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
@@ -29,11 +29,11 @@ import javax.annotation.CheckForNull;
 
 import java.util.Map;
 
-public final class ChartFactory implements ServerComponent {
+@ServerSide
+public final class ChartFactory {
   private static final Logger LOG = Loggers.get(ChartFactory.class);
   private final Map<String, Chart> chartsByKey = Maps.newHashMap();
 
-
   public ChartFactory(Chart[] charts) {
     for (Chart chart : charts) {
       if (chartsByKey.containsKey(chart.getKey())) {
index 696b31b88647462f8528ab99e87574a7bc0a3c3f..cc24b47c12880c135fcfd90fd50f72cab59be310 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.component;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Scopes;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DbSession;
@@ -33,7 +33,8 @@ import org.sonar.server.issue.index.IssueIndexer;
 import org.sonar.server.source.index.SourceLineIndexer;
 import org.sonar.server.test.index.TestIndexer;
 
-public class ComponentCleanerService implements ServerComponent {
+@ServerSide
+public class ComponentCleanerService {
 
   private final DbClient dbClient;
   private final PurgeDao purgeDao;
index a08faf8977138c3b80fbd4303d525c9bed4093e8..c4263a25b162105ef50c20eae0218eb461a9c42b 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.resources.Scopes;
 import org.sonar.api.utils.internal.Uuids;
@@ -53,7 +53,8 @@ import java.util.Set;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class ComponentService implements ServerComponent {
+@ServerSide
+public class ComponentService {
 
   private final DbClient dbClient;
 
index c6cdff23f41dbabd502b65131f6e9aa3a7bff03d..bd85204aaa6b2ddc3486ecb0988c586d86c589f2 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.component.db;
 
 import com.google.common.base.Function;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.resources.Scopes;
 import org.sonar.api.utils.System2;
@@ -44,7 +44,8 @@ import java.util.List;
 /**
  * @since 4.3
  */
-public class ComponentDao extends BaseDao<ComponentMapper, ComponentDto, String> implements ServerComponent, DaoComponent {
+@ServerSide
+public class ComponentDao extends BaseDao<ComponentMapper, ComponentDto, String> implements DaoComponent {
 
   public ComponentDao() {
     this(System2.INSTANCE);
index 7243b6125e28e6ea243c35adf986de536a19ac9a..6ed1e6601a7f40c041556a0b38b935815bb44705 100644 (file)
 
 package org.sonar.server.component.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.component.db.ComponentIndexMapper;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.DbSession;
 
 import java.util.List;
 
-public class ComponentIndexDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class ComponentIndexDao implements DaoComponent {
 
   public List<Long> selectProjectIdsFromQueryAndViewOrSubViewUuid(DbSession session, String query, String viewOrSubViewUuid) {
     return session.getMapper(ComponentIndexMapper.class).selectProjectIdsFromQueryAndViewOrSubViewUuid(query + "%", "%." + viewOrSubViewUuid + ".%");
index eec3060f5676b3b2b7473cd436898d8664d65998..00e8a1c1c93d5ad3041e52e905254b3d24663a68 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.component.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.component.ComponentLinkDto;
 import org.sonar.core.component.db.ComponentLinkMapper;
 import org.sonar.core.persistence.DaoComponent;
@@ -28,7 +28,8 @@ import org.sonar.core.persistence.DbSession;
 
 import java.util.List;
 
-public class ComponentLinkDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class ComponentLinkDao implements DaoComponent {
 
   public List<ComponentLinkDto> selectByComponentUuid(DbSession session, String componentUuid) {
     return session.getMapper(ComponentLinkMapper.class).selectByComponentUuid(componentUuid);
index 07108244f5cb6cef961e5a735bfe7d594fe522fc..9154599fe20aabcb4c8b50ee34b8e17890f8aa73 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.server.computation;
 import com.google.common.base.Throwables;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.ArrayUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.System2;
 import org.sonar.api.utils.TempFolder;
 import org.sonar.api.utils.ZipUtils;
@@ -44,14 +44,18 @@ import org.sonar.server.db.DbClient;
 import org.sonar.server.properties.ProjectSettingsFactory;
 
 import javax.annotation.Nullable;
+
 import java.io.File;
 import java.io.IOException;
 
 import static org.sonar.api.utils.DateUtils.formatDateTimeNullSafe;
 import static org.sonar.api.utils.DateUtils.longToDate;
-import static org.sonar.core.computation.db.AnalysisReportDto.Status.*;
+import static org.sonar.core.computation.db.AnalysisReportDto.Status.CANCELLED;
+import static org.sonar.core.computation.db.AnalysisReportDto.Status.FAILED;
+import static org.sonar.core.computation.db.AnalysisReportDto.Status.SUCCESS;
 
-public class ComputationService implements ServerComponent {
+@ServerSide
+public class ComputationService {
 
   private static final Logger LOG = Loggers.get(ComputationService.class);
 
@@ -62,8 +66,8 @@ public class ComputationService implements ServerComponent {
   private final TempFolder tempFolder;
   private final System2 system;
 
-  public ComputationService(DbClient dbClient, ComputationSteps steps, ActivityService activityService, 
-                            ProjectSettingsFactory projectSettingsFactory, TempFolder tempFolder, System2 system) {
+  public ComputationService(DbClient dbClient, ComputationSteps steps, ActivityService activityService,
+    ProjectSettingsFactory projectSettingsFactory, TempFolder tempFolder, System2 system) {
     this.dbClient = dbClient;
     this.steps = steps;
     this.activityService = activityService;
@@ -139,7 +143,7 @@ public class ComputationService implements ServerComponent {
         LOG.info("Processing of report #{} is canceled because it was submitted while another report of the same project was already being processed.", item.dto.getId());
         LOG.debug("The snapshot ID #{} provided by the report #{} does not exist anymore.", snapshotId, item.dto.getId());
       }
-      return snapshot==null;
+      return snapshot == null;
     } finally {
       MyBatis.closeQuietly(session);
     }
index 51a84f5f356fb9a98b9d20edb47fb190a6b29008..2c6a488a56f65271976511d4fddf0ec660f1d96c 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.computation;
 
 import org.apache.commons.io.FileUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.internal.Uuids;
 import org.sonar.api.utils.log.Loggers;
@@ -41,7 +41,8 @@ import java.util.List;
 
 import static org.sonar.core.computation.db.AnalysisReportDto.Status.PENDING;
 
-public class ReportQueue implements ServerComponent {
+@ServerSide
+public class ReportQueue {
   private final DbClient dbClient;
   private final Settings settings;
 
index 7abc9f1953eea187d1874221a0a1295aa9e39aee..275be19dd72e047c763ee947b12b9f0c7f4ab692 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.computation;
 
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.platform.ServerUpgradeStatus;
 
 /**
@@ -32,7 +32,8 @@ import org.sonar.api.platform.ServerUpgradeStatus;
  *   <li>reset reports that were in status WORKING while server stopped</li>
  * </ul>
  */
-public class ReportQueueCleaner implements Startable, ServerComponent {
+@ServerSide
+public class ReportQueueCleaner implements Startable {
 
   private final ServerUpgradeStatus serverUpgradeStatus;
   private final ReportQueue queue;
index 688637b5cfcad1b7ab275607d684ee5ca1a68013..9ba3569fadd3c9c1b892001c4d340e9f1c87dca1 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.Dto;
 
@@ -31,7 +31,8 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.Map;
 
-public interface Dao<DTO extends Dto<KEY>, KEY extends Serializable> extends ServerComponent {
+@ServerSide
+public interface Dao<DTO extends Dto<KEY>, KEY extends Serializable> {
 
   /**
    * Get a DTO by its key. Return <code>null</code> if the key does not exist.
index 9909c0b70619bb6f9b563d6c3897d156019ad356..3055c9c266363ba399e4e411529cd8056e8f49e8 100644 (file)
@@ -23,9 +23,9 @@ import com.google.common.base.Throwables;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.commons.lang.StringUtils;
 import org.picocontainer.Startable;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.MessageException;
 import org.sonar.api.utils.log.Loggers;
-import org.sonar.api.ServerComponent;
 import org.sonar.core.persistence.Database;
 import org.sonar.core.persistence.dialect.H2;
 import org.sonar.core.persistence.dialect.Oracle;
@@ -33,7 +33,8 @@ import org.sonar.core.persistence.dialect.Oracle;
 import java.sql.Connection;
 import java.sql.SQLException;
 
-public class DatabaseChecker implements ServerComponent, Startable {
+@ServerSide
+public class DatabaseChecker implements Startable {
 
   public static final int ORACLE_MIN_MAJOR_VERSION = 11;
 
index 78fc76fde3f110b956d82465cd4e6ed3fdc18a8c..9c2f690cc7c33d59b1c8f8ac1172670cfa583821 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.issue.db.ActionPlanDao;
 import org.sonar.core.issue.db.IssueChangeDao;
 import org.sonar.core.issue.db.IssueFilterDao;
@@ -66,7 +66,8 @@ import java.util.Map;
 /**
  * Facade for all db components, mainly DAOs
  */
-public class DbClient implements ServerComponent {
+@ServerSide
+public class DbClient {
 
   private final Database db;
   private final MyBatis myBatis;
index bf47c6455ba0f41d688d01845343bf2c2ac0e4a1..91c7cafe6d77de263c99ec05901684ae080fb228 100644 (file)
  */
 package org.sonar.server.db.migrations;
 
-import java.sql.Connection;
-
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.ibatis.session.SqlSession;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.platform.ServerUpgradeStatus;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.core.persistence.DdlUtils;
 import org.sonar.server.db.DbClient;
-
-import com.google.common.annotations.VisibleForTesting;
 import org.sonar.server.plugins.ServerPluginRepository;
 
+import java.sql.Connection;
+
 /**
  * Restore schema by executing DDL scripts. Only H2 database is supported.
  * Other databases are created by Ruby on Rails migrations.
  *
  * @since 2.12
  */
-public class DatabaseMigrator implements ServerComponent, Startable {
+@ServerSide
+public class DatabaseMigrator implements Startable {
 
   private final DbClient dbClient;
   private final MigrationStep[] migrations;
@@ -49,7 +49,7 @@ public class DatabaseMigrator implements ServerComponent, Startable {
    * ServerPluginRepository is used to ensure H2 schema creation is done only after copy of bundle plugins have been done
    */
   public DatabaseMigrator(DbClient dbClient, MigrationStep[] migrations, ServerUpgradeStatus serverUpgradeStatus,
-                          ServerPluginRepository unused) {
+    ServerPluginRepository unused) {
     this.dbClient = dbClient;
     this.migrations = migrations;
     this.serverUpgradeStatus = serverUpgradeStatus;
index 0bb070730f7786a4befae8d74d7daa40ac8d6fe3..2baebc2b464bcc479c5ca908dd43d25ce046c589 100644 (file)
@@ -25,9 +25,10 @@ import org.codehaus.stax2.XMLInputFactory2;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
 import org.sonar.api.server.rule.RulesDefinition;
+import org.sonar.server.debt.DebtModelXMLExporter.DebtModel;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
@@ -37,12 +38,15 @@ import javax.xml.stream.XMLStreamException;
 import java.io.Reader;
 import java.io.StringReader;
 
-import static org.sonar.server.debt.DebtModelXMLExporter.*;
+import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC;
+import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC_KEY;
+import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC_NAME;
 
 /**
  * Import characteristics from an xml
  */
-public class DebtCharacteristicsXMLImporter implements ServerComponent {
+@ServerSide
+public class DebtCharacteristicsXMLImporter {
 
   public DebtModel importXML(String xml) {
     return importXML(new StringReader(xml));
@@ -104,7 +108,7 @@ public class DebtCharacteristicsXMLImporter implements ServerComponent {
     }
   }
 
-  static String convertKey(String key){
+  static String convertKey(String key) {
     if ("NETWORK_USE_EFFICIENCY".equals(key)) {
       return RulesDefinition.SubCharacteristics.NETWORK_USE;
     }
index e7092c1f07a8b8b33324b98c90cb866cf89b7313..69021c46766e34f1369d337588dfa9c64834be2d 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.server.debt;
 
+import org.sonar.api.ServerSide;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
@@ -56,7 +58,8 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class DebtModelBackup implements ServerComponent {
+@ServerSide
+public class DebtModelBackup {
 
   private static final Logger LOG = Loggers.get(DebtModelBackup.class);
 
index fbfeb0855a6caafbbbe89b2e0fddb4eadf33cbf6..8b8ca5d4276787d2fbaa90b20187902f4167bc37 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.debt;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.server.debt.DebtCharacteristic;
 import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
 import org.sonar.core.technicaldebt.db.CharacteristicDao;
@@ -36,7 +36,8 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class DebtModelLookup implements ServerComponent {
+@ServerSide
+public class DebtModelLookup {
 
   private final CharacteristicDao dao;
 
index e4014d2955967f1815d7d6070e9563eccc98ad29..2b15c2160be940104032935c479d45a29d9b39dd 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.server.debt.DebtCharacteristic;
 import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
 import org.sonar.api.utils.System2;
@@ -45,7 +45,8 @@ import javax.annotation.Nullable;
 import java.util.Date;
 import java.util.List;
 
-public class DebtModelOperations implements ServerComponent {
+@ServerSide
+public class DebtModelOperations {
 
   private final DbClient dbClient;
   private final System2 system2;
index da45c47bf68fb81f88e4a41884ade14d776600af..8ca78f7c3f6c44ebd25a0ff789ea5bd70cc108c5 100644 (file)
@@ -25,7 +25,7 @@ import com.google.common.collect.Maps;
 import org.apache.commons.io.Charsets;
 import org.picocontainer.Startable;
 import org.sonar.api.Plugin;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.platform.PluginInfo;
 import org.sonar.core.platform.PluginRepository;
 
@@ -45,7 +45,8 @@ import static com.google.common.collect.Lists.newArrayList;
  * they must be named "<pluginKey>-model.xml".
  * </p>
  */
-public class DebtModelPluginRepository implements ServerComponent, Startable {
+@ServerSide
+public class DebtModelPluginRepository implements Startable {
 
   public static final String DEFAULT_MODEL = "technical-debt";
 
index 929648174e1f6075f509d37627c6b8d9b4250a2c..8dfae1f9e4d535da5f2a556942b69c05766a2d92 100644 (file)
@@ -27,7 +27,7 @@ import com.google.common.collect.Ordering;
 import org.apache.commons.io.Charsets;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.server.debt.DebtCharacteristic;
 import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
@@ -35,7 +35,10 @@ import org.xml.sax.InputSource;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
-import javax.xml.transform.*;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
 import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.stream.StreamResult;
@@ -52,7 +55,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * Export characteristics and rule debt definitions to XML
  */
-public class DebtModelXMLExporter implements ServerComponent {
+@ServerSide
+public class DebtModelXMLExporter {
 
   private static final String ROOT = "sqale";
   private static final String DEFAULT_INDENT = "2";
index f78ab4adbedeb8ee579acffa65504e9d9ec008c3..90905e7ad3e51059884e2876c012d9e7bd991a4f 100644 (file)
@@ -29,11 +29,12 @@ import org.codehaus.stax2.XMLInputFactory2;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.server.debt.DebtRemediationFunction;
 import org.sonar.api.utils.Duration;
 import org.sonar.api.utils.ValidationMessages;
+import org.sonar.server.debt.DebtModelXMLExporter.RuleDebt;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
@@ -45,12 +46,23 @@ import java.io.StringReader;
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
-import static org.sonar.server.debt.DebtModelXMLExporter.*;
+import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC;
+import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC_KEY;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY_COEFFICIENT;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY_FUNCTION;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY_KEY;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY_OFFSET;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY_TEXT_VALUE;
+import static org.sonar.server.debt.DebtModelXMLExporter.PROPERTY_VALUE;
+import static org.sonar.server.debt.DebtModelXMLExporter.REPOSITORY_KEY;
+import static org.sonar.server.debt.DebtModelXMLExporter.RULE_KEY;
 
 /**
  * Import rules debt definitions from an XML
  */
-public class DebtRulesXMLImporter implements ServerComponent {
+@ServerSide
+public class DebtRulesXMLImporter {
 
   public List<RuleDebt> importXML(String xml, ValidationMessages validationMessages) {
     return importXML(new StringReader(xml), validationMessages);
@@ -86,7 +98,7 @@ public class DebtRulesXMLImporter implements ServerComponent {
   }
 
   private void process(List<RuleDebt> ruleDebts, @Nullable String rootKey, @Nullable String parentKey,
-                       ValidationMessages validationMessages, SMInputCursor chcCursor) throws XMLStreamException {
+    ValidationMessages validationMessages, SMInputCursor chcCursor) throws XMLStreamException {
     String currentCharacteristicKey = null;
     SMInputCursor cursor = chcCursor.childElementCursor();
     while (cursor.getNext() != null) {
index 9cae760f3a87f963324b9f59cfc5112ff2dfe1f8..3f97c33aae5368880978a203a1002ead751211d0 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.design.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.design.FileDependencyDto;
 import org.sonar.core.design.FileDependencyMapper;
 import org.sonar.core.persistence.DaoComponent;
@@ -28,7 +28,8 @@ import org.sonar.core.persistence.DbSession;
 
 import java.util.List;
 
-public class FileDependencyDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class FileDependencyDao implements DaoComponent {
 
   public List<FileDependencyDto> selectFromParents(DbSession session, String fromParentUuid, String toParentUuid, Long projectId) {
     return session.getMapper(FileDependencyMapper.class).selectFromParents(fromParentUuid, toParentUuid, projectId);
@@ -38,7 +39,6 @@ public class FileDependencyDao implements ServerComponent, DaoComponent {
     return session.getMapper(FileDependencyMapper.class).selectAll();
   }
 
-
   public void insert(DbSession session, FileDependencyDto dto) {
     session.getMapper(FileDependencyMapper.class).insert(dto);
   }
index 4d50a8a254ecf6aef61b9387afda07ab70f24e84..1db9158bbf3ed5992d2374f018add15f221e00c3 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.duplication.ws;
 
 import com.google.common.annotations.VisibleForTesting;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DbSession;
@@ -34,7 +34,8 @@ import java.util.Map;
 
 import static com.google.common.collect.Maps.newHashMap;
 
-public class DuplicationsJsonWriter implements ServerComponent {
+@ServerSide
+public class DuplicationsJsonWriter {
 
   private final ComponentDao componentDao;
 
index 2aa037092bfc205e075c279977b6309ac7b01c40..ea6e5914aacbc43915ee27b0af3c715d7e84f189 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.commons.lang.StringUtils;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.server.component.db.ComponentDao;
@@ -45,7 +45,8 @@ import java.util.Map;
 import static com.google.common.collect.Lists.newArrayList;
 import static com.google.common.collect.Maps.newHashMap;
 
-public class DuplicationsParser implements ServerComponent {
+@ServerSide
+public class DuplicationsParser {
 
   private final ComponentDao componentDao;
 
index 0945ee219901e6da03b75f6be4e141c9549f8930..af1ad4801df5a8f04b00134b80c798a5c85f478f 100644 (file)
  */
 package org.sonar.server.es;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
-public abstract class BaseIndex implements ServerComponent {
+@ServerSide
+public abstract class BaseIndex {
   private final EsClient client;
 
   public BaseIndex(EsClient client) {
index 548437c11ee71558b8740c8a5b7d1e0b1f8d36fc..75d314002b528ccc483e1bfb950a3ea7f558dd1b 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.es;
 import com.google.common.base.Throwables;
 import com.google.common.util.concurrent.Uninterruptibles;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
@@ -30,7 +30,8 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
-public abstract class BaseIndexer implements ServerComponent, Startable {
+@ServerSide
+public abstract class BaseIndexer implements Startable {
 
   private final ThreadPoolExecutor executor;
   private final String indexName, typeName, dateFieldName;
index 1ef1d9ce3b804764dbd18944ce50fac3c4adf189..2cfe7794a513b0cda1f347ff506a7ed4cf5eab54 100644 (file)
@@ -25,7 +25,7 @@ import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
 import org.elasticsearch.common.settings.ImmutableSettings;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 
@@ -34,7 +34,8 @@ import java.util.Map;
 /**
  * Creates/deletes all indices in Elasticsearch during server startup.
  */
-public class IndexCreator implements ServerComponent, Startable {
+@ServerSide
+public class IndexCreator implements Startable {
 
   private static final Logger LOGGER = Loggers.get(IndexCreator.class);
 
index edf29d61b105b03cfb02c88aba99602c10413c4e..12cb6676d005205ef4f3538901c8aa362f4fab44 100644 (file)
@@ -21,11 +21,12 @@ package org.sonar.server.es;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.Map;
 
-public interface IndexDefinition extends ServerComponent {
+@ServerSide
+public interface IndexDefinition {
 
   public static class IndexDefinitionContext {
     private final Map<String, NewIndex> byKey = Maps.newHashMap();
@@ -42,7 +43,6 @@ public interface IndexDefinition extends ServerComponent {
     }
   }
 
-
   void define(IndexDefinitionContext context);
 
 }
index 771f9b8ed318809ecb23f429d16b51c8bb4cd6f2..b3ee7b78dbaea11c6f678b860ead4926e5632332 100644 (file)
@@ -23,14 +23,15 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.elasticsearch.common.settings.Settings;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.Map;
 
 /**
  * This class collects definitions of all Elasticsearch indices during server startup
  */
-public class IndexDefinitions implements ServerComponent, Startable {
+@ServerSide
+public class IndexDefinitions implements Startable {
 
   /**
    * Immutable copy of {@link org.sonar.server.es.NewIndex}
index ef03a50cf6805d6a1bca557129c46b9dc550b2f4..015a758a676beba01a4ee48394dbb3c5018c9f98 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.event.db;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.event.EventDto;
 import org.sonar.core.event.db.EventMapper;
 import org.sonar.core.persistence.DaoComponent;
@@ -28,7 +28,8 @@ import org.sonar.core.persistence.DbSession;
 
 import java.util.List;
 
-public class EventDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class EventDao implements DaoComponent {
 
   public List<EventDto> selectByComponentUuid(DbSession session, String componentUuid) {
     return session.getMapper(EventMapper.class).selectByComponentUuid(componentUuid);
index 7aa68b28e11ab2b4ccb29a24ff5be8138165fa3f..bdccc31195573763127ee0581eca97a6e87b0af0 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.server.issue;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.condition.IsUnResolved;
 import org.sonar.api.issue.internal.DefaultIssue;
@@ -35,7 +35,8 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
-public abstract class AbstractChangeTagsAction extends Action implements ServerComponent {
+@ServerSide
+public abstract class AbstractChangeTagsAction extends Action {
 
   private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
 
index 715e725df6eab79ede6d59d74e28212920ae6203..99e9cf1e8041da7bbbb7529f3c022dabc6dd5ed7 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.server.issue;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.condition.Condition;
 import org.sonar.api.issue.internal.IssueChangeContext;
@@ -38,7 +38,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * @since 3.7
  */
-public abstract class Action implements ServerComponent {
+@ServerSide
+public abstract class Action {
 
   private final String key;
   private final List<Condition> conditions;
@@ -82,4 +83,3 @@ public abstract class Action implements ServerComponent {
   }
 
 }
-
index 493b7cd3bd6280195aadec2241baca94333a5d04..d6f46b7dd0cff6e3dacebeb3969ba986679b1526 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.component.Component;
 import org.sonar.api.config.Settings;
 import org.sonar.api.issue.Issue;
@@ -52,7 +52,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * @since 3.6
  */
-public class ActionService implements ServerComponent {
+@ServerSide
+public class ActionService {
 
   private final DbClient dbClient;
   private final IssueService issueService;
index 1214af8df69302431f03bde4e565e601633adb3a..d0cf6691bbd0723e1fc593a9bcb903589f9d46fd 100644 (file)
 package org.sonar.server.issue;
 
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.issue.IssueUpdater;
 
 import java.util.Collection;
 import java.util.Set;
 
-
-public class AddTagsAction extends AbstractChangeTagsAction implements ServerComponent {
+@ServerSide
+public class AddTagsAction extends AbstractChangeTagsAction {
 
   public static final String KEY = "add_tags";
 
index 8beab29d430d47ffd22bee1b918008763b2730f0..8c05a9de67348146176152eafc8aa6e67c8a09bf 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.issue;
 
 import com.google.common.base.Strings;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.condition.IsUnResolved;
 import org.sonar.api.issue.internal.DefaultIssue;
@@ -33,8 +33,8 @@ import org.sonar.server.user.UserSession;
 import java.util.Collection;
 import java.util.Map;
 
-
-public class AssignAction extends Action implements ServerComponent {
+@ServerSide
+public class AssignAction extends Action {
 
   public static final String KEY = "assign";
   public static final String VERIFIED_ASSIGNEE = "verifiedAssignee";
@@ -50,9 +50,9 @@ public class AssignAction extends Action implements ServerComponent {
   }
 
   @Override
-  public boolean verify(Map<String, Object> properties, Collection<Issue> issues, UserSession userSession){
+  public boolean verify(Map<String, Object> properties, Collection<Issue> issues, UserSession userSession) {
     String assignee = assigneeValue(properties);
-    if(!Strings.isNullOrEmpty(assignee)) {
+    if (!Strings.isNullOrEmpty(assignee)) {
       User user = selectUser(assignee);
       if (user == null) {
         throw new IllegalArgumentException("Unknown user: " + assignee);
@@ -66,7 +66,7 @@ public class AssignAction extends Action implements ServerComponent {
 
   @Override
   public boolean execute(Map<String, Object> properties, Context context) {
-    if(!properties.containsKey(VERIFIED_ASSIGNEE)) {
+    if (!properties.containsKey(VERIFIED_ASSIGNEE)) {
       throw new IllegalArgumentException("Assignee is missing from the execution parameters");
     }
     User assignee = (User) properties.get(VERIFIED_ASSIGNEE);
index d8700f556003cc113da4d1f8319e17a927f49120..5f384327c3408c0fd1028db9b6838a648dd3af83 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.issue;
 
 import com.google.common.base.Strings;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.core.issue.IssueUpdater;
@@ -30,7 +30,8 @@ import org.sonar.server.user.UserSession;
 import java.util.Collection;
 import java.util.Map;
 
-public class CommentAction extends Action implements ServerComponent {
+@ServerSide
+public class CommentAction extends Action {
 
   public static final String KEY = "comment";
   public static final String COMMENT_PROPERTY = "comment";
index 8a09a82bf689ffa0fb6853d61584fabeb83d0d2d..db59c14e0268bf8a8fab8e1377fb8dc73534ba08 100644 (file)
@@ -27,7 +27,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.ActionPlan;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.IssueComment;
@@ -71,7 +71,8 @@ import static com.google.common.collect.Lists.newArrayList;
  *
  * @since 3.6
  */
-public class InternalRubyIssueService implements ServerComponent {
+@ServerSide
+public class InternalRubyIssueService {
 
   private static final String ID_PARAM = "id";
   private static final String NAME_PARAM = "name";
index 427a240ea1b13adb9b913863a6f8b45146033cde..7639efb98d50c8931b91648b0487399a8b31d923 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.issue;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.issue.internal.FieldDiffs;
 import org.sonar.api.utils.Duration;
@@ -34,7 +34,8 @@ import java.util.Map;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class IssueChangelogFormatter implements ServerComponent {
+@ServerSide
+public class IssueChangelogFormatter {
 
   private static final String ISSUE_CHANGELOG_FIELD = "issue.changelog.field.";
 
index c70f7cf67ca40b265514fdd50a149a3a7cf65344..2533c27ef38f5a93dc6d4d7f0112da84d77319c0 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.issue;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.FieldDiffs;
 import org.sonar.api.user.User;
@@ -35,7 +35,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * @since 3.6
  */
-public class IssueChangelogService implements ServerComponent {
+@ServerSide
+public class IssueChangelogService {
 
   private final IssueChangeDao changeDao;
   private final UserFinder userFinder;
index d889d8f600ea82125405fc394bfcbaafca93cee4..8e1af0d3916e84bfab42ef367eae3ef88b18aa00 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.issue;
 import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.IssueComment;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.issue.internal.DefaultIssueComment;
@@ -48,7 +48,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * @since 3.6
  */
-public class IssueCommentService implements ServerComponent {
+@ServerSide
+public class IssueCommentService {
 
   private final DbClient dbClient;
   private final IssueService issueService;
index 576cc5a587f6d0a0b588322d1b96a6ab0121597c..2bfb5b4142d599d97789db3769417197312b061a 100644 (file)
 package org.sonar.server.issue;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.*;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
@@ -30,7 +34,7 @@ import org.apache.commons.lang.BooleanUtils;
 import org.apache.commons.lang.ObjectUtils;
 import org.joda.time.DateTime;
 import org.joda.time.format.ISOPeriodFormat;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.server.ws.Request;
@@ -48,14 +52,19 @@ import org.sonar.server.util.RubyUtils;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import static com.google.common.collect.Lists.newArrayList;
 
 /**
  * This component is used to create an IssueQuery, in order to transform the component and component roots keys into uuid.
  */
-public class IssueQueryService implements ServerComponent {
+@ServerSide
+public class IssueQueryService {
 
   public static final String LOGIN_MYSELF = "__me__";
 
@@ -294,7 +303,7 @@ public class IssueQueryService implements ServerComponent {
     }
 
     String uniqueQualifier = qualifiers.iterator().next();
-    switch(uniqueQualifier) {
+    switch (uniqueQualifier) {
       case Qualifiers.VIEW:
       case Qualifiers.SUBVIEW:
         addViewsOrSubViews(builder, componentUuids, uniqueQualifier);
index f9950cad550c72101948e1a863f180976517f62b..5e4db0a7bdc9900ce3345c1a23cf87abfd4c8521 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.issue;
 import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.ActionPlan;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.DefaultIssue;
@@ -60,9 +60,15 @@ import org.sonar.server.user.index.UserIndex;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
-public class IssueService implements ServerComponent {
+@ServerSide
+public class IssueService {
 
   private final DbClient dbClient;
   private final IssueIndex issueIndex;
index 1bf7d3ee49b143b559cf35a742a64b69629a4f22..0289237bb1b9bedb930cab7c3651d9b30e9ee0ae 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.issue;
 
 import com.google.common.base.Strings;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.ActionPlan;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.condition.IsUnResolved;
@@ -33,7 +33,8 @@ import org.sonar.server.user.UserSession;
 import java.util.Collection;
 import java.util.Map;
 
-public class PlanAction extends Action implements ServerComponent {
+@ServerSide
+public class PlanAction extends Action {
 
   public static final String KEY = "plan";
   public static final String VERIFIED_ACTION_PLAN = "verifiedActionPlan";
index 2ab7d10986136a82d269758e597aef64f49d6511..5b3cbf52fd70c5a5f7fdf2e5ea54869d8fcb71d5 100644 (file)
 package org.sonar.server.issue;
 
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.issue.IssueUpdater;
 
 import java.util.Collection;
 import java.util.Set;
 
-
-public class RemoveTagsAction extends AbstractChangeTagsAction implements ServerComponent {
+@ServerSide
+public class RemoveTagsAction extends AbstractChangeTagsAction {
 
   public static final String KEY = "remove_tags";
 
index ca7b48f31a2c7fad0c7f3fd36d10bcdd552abdce..04b899cc9126907601bf3bed3b8836610e03f7b9 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.issue;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.rules.RuleFinder;
 import org.sonar.core.component.ComponentDto;
@@ -33,7 +33,8 @@ import org.sonar.server.issue.index.IssueIndexer;
 /**
  * @since 3.6
  */
-public class ServerIssueStorage extends IssueStorage implements ServerComponent {
+@ServerSide
+public class ServerIssueStorage extends IssueStorage {
 
   private final DbClient dbClient;
   private final IssueIndexer indexer;
index 7a8efdc62b4ae5b18c093b56383276bfde45c876..d56514a552e38b81c548c4cfb46c24bacf3d6800 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.issue;
 
 import com.google.common.base.Strings;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.condition.Condition;
 import org.sonar.api.issue.condition.IsUnResolved;
@@ -33,7 +33,8 @@ import org.sonar.server.user.UserSession;
 import java.util.Collection;
 import java.util.Map;
 
-public class SetSeverityAction extends Action implements ServerComponent {
+@ServerSide
+public class SetSeverityAction extends Action {
 
   public static final String KEY = "set_severity";
 
index bb18afbfdda7181b79a32067ac6f361afcfe8ecb..6e9707ddda20d3fdbf00bafe06b1fa2ff9ca89c6 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.base.Predicate;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.core.issue.workflow.IssueWorkflow;
@@ -34,7 +34,8 @@ import org.sonar.server.user.UserSession;
 import java.util.Collection;
 import java.util.Map;
 
-public class TransitionAction extends Action implements ServerComponent {
+@ServerSide
+public class TransitionAction extends Action {
 
   public static final String KEY = "do_transition";
 
index 3b4e2d72ccc9a973b8ff2d5604ebd3038a5358e6..d71d9c3d5cf07616c376099e7c3d1e103f9ea73b 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.issue.actionplan;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.ActionPlan;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.issue.internal.IssueChangeContext;
@@ -31,7 +31,12 @@ import org.sonar.core.issue.ActionPlanDeadlineComparator;
 import org.sonar.core.issue.ActionPlanStats;
 import org.sonar.core.issue.DefaultActionPlan;
 import org.sonar.core.issue.IssueUpdater;
-import org.sonar.core.issue.db.*;
+import org.sonar.core.issue.db.ActionPlanDao;
+import org.sonar.core.issue.db.ActionPlanDto;
+import org.sonar.core.issue.db.ActionPlanStatsDao;
+import org.sonar.core.issue.db.ActionPlanStatsDto;
+import org.sonar.core.issue.db.IssueDto;
+import org.sonar.core.issue.db.IssueStorage;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.resource.ResourceDao;
 import org.sonar.core.resource.ResourceDto;
@@ -52,7 +57,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * @since 3.6
  */
-public class ActionPlanService implements ServerComponent {
+@ServerSide
+public class ActionPlanService {
 
   private final DbClient dbClient;
 
@@ -63,7 +69,7 @@ public class ActionPlanService implements ServerComponent {
   private final IssueStorage issueStorage;
 
   public ActionPlanService(DbClient dbClient, ActionPlanDao actionPlanDao, ActionPlanStatsDao actionPlanStatsDao, ResourceDao resourceDao,
-                           IssueUpdater issueUpdater, IssueStorage issueStorage) {
+    IssueUpdater issueUpdater, IssueStorage issueStorage) {
     this.dbClient = dbClient;
     this.actionPlanDao = actionPlanDao;
     this.actionPlanStatsDao = actionPlanStatsDao;
@@ -111,7 +117,7 @@ public class ActionPlanService implements ServerComponent {
     issueStorage.save(issues);
   }
 
-  private List<IssueDto> findIssuesByActionPlan(String actionPlanKey){
+  private List<IssueDto> findIssuesByActionPlan(String actionPlanKey) {
     DbSession session = dbClient.openSession(false);
     try {
       return dbClient.issueDao().findByActionPlan(session, actionPlanKey);
index c462c08e80f8b09d98bd7d2eed2a79e17c73279d..8b8909c4edc3b5ae30ee1dd05b8b0e1e8a4d63dd 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.server.issue.filter;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.Paging;
 import org.sonar.core.issue.IssueFilterSerializer;
 import org.sonar.core.issue.db.IssueFilterDao;
@@ -51,7 +51,8 @@ import java.util.Map;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class IssueFilterService implements ServerComponent {
+@ServerSide
+public class IssueFilterService {
 
   private final IssueFilterDao filterDao;
   private final IssueFilterFavouriteDao favouriteDao;
index 3283749361f24426c39dffef96914554998c6bc2..8308be1b662cf1e158965487efdc55a9ec9da93c 100644 (file)
 package org.sonar.server.issue.filter;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.core.issue.db.IssueFilterDto;
 import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.server.user.UserSession;
 
-public class IssueFilterWriter implements ServerComponent {
+@ServerSide
+public class IssueFilterWriter {
 
   void write(UserSession session, IssueFilterDto filter, JsonWriter json) {
     json.name("filter").beginObject()
index 6fa32e95b07ecc4e3fb90ce3179c47a2cc385a1f..a3cfa9a3f8bb13b91bc7b04c7d8489bfdd79627d 100644 (file)
 
 package org.sonar.server.issue.notification;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.Durations;
 import org.sonar.server.db.DbClient;
 import org.sonar.server.rule.index.RuleIndex;
 import org.sonar.server.user.index.UserIndex;
 
-public class NewIssuesNotificationFactory implements ServerComponent {
+@ServerSide
+public class NewIssuesNotificationFactory {
   private final UserIndex userIndex;
   private final RuleIndex ruleIndex;
   private final DbClient dbClient;
index 04e72aadddb03a536eaab8d16bf4012b40bdf890..c2f6eb79ce4cdbfdc55aca1309ab543b72ff40dc 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.issue.ws;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.action.Action;
 import org.sonar.api.utils.text.JsonWriter;
@@ -34,7 +34,8 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class IssueActionsWriter implements ServerComponent {
+@ServerSide
+public class IssueActionsWriter {
 
   private final IssueService issueService;
   private final ActionService actionService;
index 332c7081f14746e9894a3b0b63816037f3fc75d2..0365b66368cdc30bf85f9aa2ff6d2d0967e42863 100644 (file)
 package org.sonar.server.measure;
 
 import com.google.common.base.Joiner;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.api.utils.log.Profiler;
 
 import javax.annotation.Nullable;
+
 import java.util.List;
 import java.util.Map;
 
-public class MeasureFilterEngine implements ServerComponent {
+@ServerSide
+public class MeasureFilterEngine {
 
   private static final Logger LOG = Loggers.get("MeasureFilter");
 
index 015d304c4fa2d9612444e12ff3a6febaccc1a7f2..5d4dffc3af62e7a18c42bdf53a8f29e7d569d353 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.measure;
 import com.google.common.base.Strings;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.Database;
 import org.sonar.core.persistence.MyBatis;
 import org.sonar.core.resource.ResourceDao;
@@ -32,7 +32,8 @@ import java.sql.SQLException;
 import java.util.Collections;
 import java.util.List;
 
-public class MeasureFilterExecutor implements ServerComponent {
+@ServerSide
+public class MeasureFilterExecutor {
 
   private MyBatis mybatis;
   private Database database;
@@ -80,7 +81,7 @@ public class MeasureFilterExecutor implements ServerComponent {
   }
 
   static boolean isValid(MeasureFilter filter, MeasureFilterContext context) {
-    boolean valid = Strings.isNullOrEmpty(filter.getBaseResourceKey()) || context.getBaseSnapshot()!=null;
+    boolean valid = Strings.isNullOrEmpty(filter.getBaseResourceKey()) || context.getBaseSnapshot() != null;
     valid &= !(filter.isOnBaseResourceChildren() && context.getBaseSnapshot() == null);
     valid &= !(filter.isOnFavourites() && context.getUserId() == null);
     valid &= validateMeasureConditions(filter);
index f9f3df840862aae8b78720c8c9871907b6c5e0d4..e2767f633400f7d8c42c469076cf3e759d9b72df 100644 (file)
@@ -25,7 +25,7 @@ import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Metric;
 import org.sonar.api.measures.MetricFinder;
@@ -35,11 +35,16 @@ import org.sonar.api.utils.System2;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class MeasureFilterFactory implements ServerComponent {
+@ServerSide
+public class MeasureFilterFactory {
 
   private final MetricFinder metricFinder;
   private final System2 system;
index c1b2bc5516da95f3cc7eedb514e11a3b6074f9fa..b77872aec3acc4211f82cb9d4e3e0ba015be4872 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.measure.persistence;
 
 import com.google.common.base.Function;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.measure.db.MeasureDto;
 import org.sonar.core.measure.db.MeasureMapper;
 import org.sonar.core.persistence.DaoComponent;
@@ -32,7 +32,8 @@ import javax.annotation.CheckForNull;
 
 import java.util.List;
 
-public class MeasureDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class MeasureDao implements DaoComponent {
 
   public boolean existsByKey(DbSession session, String componentKey, String metricKey) {
     return mapper(session).countByComponentAndMetric(componentKey, metricKey) > 0;
index ed345eec80d11cb816b0816fc26c793bb17c61e5..e2dd1d6042c0b9556f4463c3a672c8603be3ea9f 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.measure.persistence;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.measure.db.MetricDto;
 import org.sonar.core.measure.db.MetricMapper;
 import org.sonar.core.persistence.DaoComponent;
@@ -30,7 +30,8 @@ import javax.annotation.CheckForNull;
 
 import java.util.List;
 
-public class MetricDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class MetricDao implements DaoComponent {
 
   @CheckForNull
   public MetricDto selectByKey(DbSession session, String key) {
@@ -41,7 +42,7 @@ public class MetricDao implements ServerComponent, DaoComponent {
     return session.getMapper(MetricMapper.class).selectAllEnabled();
   }
 
-  public void insert(DbSession session, MetricDto dto){
+  public void insert(DbSession session, MetricDto dto) {
     session.getMapper(MetricMapper.class).insert(dto);
   }
 }
index 4f68514f3e531bcc99f05fa637d1168485118576..df16532b62034d4a619017b301a81eaa62243e0e 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.server.notifications;
 
 import com.google.common.collect.Lists;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.notifications.NotificationChannel;
 import org.sonar.api.notifications.NotificationDispatcherMetadata;
 import org.sonar.api.utils.log.Logger;
@@ -34,7 +34,8 @@ import java.util.List;
 /**
  * @since 3.5
  */
-public class NotificationCenter implements ServerComponent {
+@ServerSide
+public class NotificationCenter {
 
   private static final Logger LOG = Loggers.get(NotificationCenter.class);
 
index 58d52639dc0df29246520ed2af6bf14237ceb91f..137aee22153d89e400fea9e3a23ba74c70528162 100644 (file)
@@ -26,7 +26,7 @@ import com.google.common.collect.SetMultimap;
 import org.picocontainer.Startable;
 import org.sonar.api.Properties;
 import org.sonar.api.Property;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.notifications.Notification;
 import org.sonar.api.notifications.NotificationChannel;
@@ -62,7 +62,8 @@ import java.util.concurrent.TimeUnit;
     project = false,
     global = false)
 })
-public class NotificationService implements ServerComponent, Startable {
+@ServerSide
+public class NotificationService implements Startable {
 
   private static final Logger LOG = Loggers.get(NotificationService.class);
 
index 98511305b2c4820ec133cdf2656742bed5f91da3..2792a4fd033459792ae33b4493e24a32941fcd2f 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.permission;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.security.DefaultGroups;
 import org.sonar.api.web.UserRole;
 import org.sonar.core.component.ComponentDto;
@@ -31,9 +31,9 @@ import org.sonar.core.resource.ResourceDto;
 import org.sonar.core.user.GroupDto;
 import org.sonar.core.user.UserDto;
 import org.sonar.server.db.DbClient;
-import org.sonar.server.issue.index.IssueAuthorizationIndexer;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.ForbiddenException;
+import org.sonar.server.issue.index.IssueAuthorizationIndexer;
 import org.sonar.server.user.UserSession;
 
 import javax.annotation.CheckForNull;
@@ -45,7 +45,8 @@ import java.util.Map;
 /**
  * Used by ruby code <pre>Internal.permissions</pre>
  */
-public class InternalPermissionService implements ServerComponent {
+@ServerSide
+public class InternalPermissionService {
 
   private enum Operation {
     ADD, REMOVE
index 97b1798ada7db32a65cdbf2665d933039c33f5e9..e03268539509d102087d16315bd2754b3efeace5 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.permission;
 
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.core.permission.PermissionTemplateDao;
 import org.sonar.core.permission.PermissionTemplateDto;
@@ -45,7 +45,8 @@ import java.util.regex.PatternSyntaxException;
 /**
  * Used by ruby code <pre>Internal.permission_templates</pre>
  */
-public class InternalPermissionTemplateService implements ServerComponent {
+@ServerSide
+public class InternalPermissionTemplateService {
 
   private final MyBatis myBatis;
   private final PermissionTemplateDao permissionTemplateDao;
index 765e49e91d52c1648d5fb01c4a7574e8488e8168..6ef8b4620e007f26f2e80ad9116287dc1de05479 100644 (file)
@@ -22,22 +22,31 @@ package org.sonar.server.permission;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.security.DefaultGroups;
 import org.sonar.api.utils.Paging;
-import org.sonar.core.permission.*;
+import org.sonar.core.permission.GroupWithPermission;
+import org.sonar.core.permission.GroupWithPermissionDto;
+import org.sonar.core.permission.PermissionDao;
+import org.sonar.core.permission.PermissionQuery;
+import org.sonar.core.permission.PermissionTemplateDao;
+import org.sonar.core.permission.PermissionTemplateDto;
+import org.sonar.core.permission.UserWithPermission;
+import org.sonar.core.permission.UserWithPermissionDto;
 import org.sonar.core.resource.ResourceDao;
 import org.sonar.core.resource.ResourceDto;
 import org.sonar.core.resource.ResourceQuery;
 import org.sonar.server.exceptions.NotFoundException;
 
 import javax.annotation.Nullable;
+
 import java.util.Collection;
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class PermissionFinder implements ServerComponent {
+@ServerSide
+public class PermissionFinder {
 
   private final PermissionDao permissionDao;
   private final ResourceDao resourceDao;
index b8f877701429d036d4d351bba8cd1ae471162352..3a4d87a78c00cb0c4f2f621fffb8e03d4ca44536 100644 (file)
@@ -21,8 +21,8 @@ package org.sonar.server.platform;
 
 import org.apache.commons.dbutils.DbUtils;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.log.Loggers;
-import org.sonar.api.ServerComponent;
 import org.sonar.core.persistence.DatabaseVersion;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
@@ -35,7 +35,8 @@ import org.sonar.server.view.index.ViewIndexDefinition;
 import java.sql.Connection;
 import java.sql.SQLException;
 
-public class BackendCleanup implements ServerComponent {
+@ServerSide
+public class BackendCleanup {
 
   private static final String[] INSPECTION_TABLES = {
     "action_plans", "authors", "dependencies", "duplications_index", "events", "graphs", "issues", "issue_changes", "manual_measures",
index 5eb7dd989f71fa4c9aae2400531aeb96b5376fb6..d451ca173068810bd4ce73affab6cc336dc73fa7 100644 (file)
  */
 package org.sonar.server.platform.monitoring;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.LinkedHashMap;
 
 /**
  * Any component that is involved in the informations returned by the web service api/system/info
  */
-public interface Monitor extends ServerComponent {
+@ServerSide
+public interface Monitor {
   /**
    * Name of section in System Info page
    */
@@ -36,5 +37,5 @@ public interface Monitor extends ServerComponent {
    * Type of attribute values must be supported by {@link org.sonar.api.utils.text.JsonWriter#valueObject(Object)}
    * because of JSON export by {@link org.sonar.server.platform.ws.SystemInfoWsAction}
    */
-  LinkedHashMap<String,Object> attributes();
+  LinkedHashMap<String, Object> attributes();
 }
index e9297de4353aeefaac3a444485fc26dabf0d9b78..6dbc75db6af03a20a61631bc7f662884b41518a8 100644 (file)
@@ -24,8 +24,8 @@ import com.google.common.collect.ListMultimap;
 import org.sonar.api.Extension;
 import org.sonar.api.ExtensionProvider;
 import org.sonar.api.Plugin;
-import org.sonar.api.ServerComponent;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ServerSide;
+import org.sonar.api.utils.AnnotationUtils;
 import org.sonar.core.platform.ComponentContainer;
 import org.sonar.core.platform.PluginInfo;
 import org.sonar.core.platform.PluginRepository;
@@ -35,7 +35,8 @@ import java.util.Map;
 /**
  * Loads the plugins server extensions and injects them to DI container
  */
-public class ServerExtensionInstaller implements ServerComponent {
+@ServerSide
+public class ServerExtensionInstaller {
 
   private final PluginRepository pluginRepository;
 
@@ -83,7 +84,7 @@ public class ServerExtensionInstaller implements ServerComponent {
   }
 
   Object installExtension(ComponentContainer container, PluginInfo pluginInfo, Object extension, boolean acceptProvider) {
-    if (isType(extension, ServerExtension.class)) {
+    if (AnnotationUtils.getAnnotation(extension, ServerSide.class) != null) {
       if (!acceptProvider && isExtensionProvider(extension)) {
         throw new IllegalStateException("ExtensionProvider can not include providers itself: " + extension);
       }
index e3b84813f30a5e4322b49568e856ad658e2c6118..139df70d8f67444653a83820f0a0467eda14415d 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.properties;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.core.properties.PropertiesDao;
 import org.sonar.core.properties.PropertyDto;
@@ -30,7 +30,8 @@ import org.sonar.core.properties.PropertyDto;
 import java.util.List;
 import java.util.Map;
 
-public class ProjectSettingsFactory implements ServerComponent {
+@ServerSide
+public class ProjectSettingsFactory {
 
   private final PropertiesDao dao;
   private final Settings settings;
index 17358cbfa9b45f8a558781b69329799a4aa4c4bb..80da0318a85add12e42c7da9a12c60a0c2838a91 100644 (file)
 
 package org.sonar.server.qualitygate;
 
-import org.sonar.api.ServerComponent;
-import org.sonar.core.qualitygate.db.*;
+import org.sonar.api.ServerSide;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociation;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationDao;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationDto;
+import org.sonar.core.qualitygate.db.ProjectQgateAssociationQuery;
+import org.sonar.core.qualitygate.db.QualityGateDao;
+import org.sonar.core.qualitygate.db.QualityGateDto;
 import org.sonar.server.exceptions.NotFoundException;
 
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class QgateProjectFinder implements ServerComponent {
+@ServerSide
+public class QgateProjectFinder {
 
   public static class Association {
     private List<ProjectQgateAssociation> projects;
index 76c5a00c7febee7a040b6c6f15c43c67c685fede..df6ad51898020fda34821c6a14b1313cb284a751 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.qualityprofile;
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.Collection;
 
@@ -32,7 +32,8 @@ import java.util.Collection;
  * It should be removed as soon as a new API to define quality profiles is created. Currently loading all definitions
  * just to get the profile names is too slow (see {@link org.sonar.api.profiles.ProfileDefinition}).
  */
-public class BuiltInProfiles implements ServerComponent {
+@ServerSide
+public class BuiltInProfiles {
 
   // built-in profile names grouped by language
   private final Multimap<String, String> namesByLang;
index 536bb965cd8eb4e3932966fce0b27bd089a49de4..520d669bfa307052e8896fa233efeb7ff138ac11 100644 (file)
@@ -29,7 +29,7 @@ import org.apache.commons.lang.builder.CompareToBuilder;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.utils.text.XmlWriter;
 import org.sonar.core.persistence.DbSession;
@@ -51,7 +51,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class QProfileBackuper implements ServerComponent {
+@ServerSide
+public class QProfileBackuper {
 
   private final QProfileReset reset;
   private final DbClient db;
index fc9a2c33a63736a02c4823a1a75b985d3282d2ab..32939e2eac50d91024effa1edf86883c655cc112 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.MapDifference;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.QualityProfileDto;
@@ -34,7 +34,8 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 
-public class QProfileComparison implements ServerComponent {
+@ServerSide
+public class QProfileComparison {
 
   private final DbClient dbClient;
 
index ed6c893aac875a8ae06ba0dc208a90959f2499a8..1c8b14cfdce58b9c64a45f76e7fb72b661119523 100644 (file)
@@ -23,15 +23,21 @@ import org.apache.commons.io.Charsets;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.TempFolder;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.QualityProfileDto;
 import org.sonar.server.db.DbClient;
 
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
 
-public class QProfileCopier implements ServerComponent {
+@ServerSide
+public class QProfileCopier {
 
   private final DbClient db;
   private final QProfileFactory factory;
index dc9a0f2d74fca16e58905d067f9aba3e588d326e..e7710b9019bd66a701eab0b1037e2e7a418557c3 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.qualityprofile;
 import com.google.common.base.Charsets;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.profiles.ProfileExporter;
 import org.sonar.api.profiles.ProfileImporter;
 import org.sonar.api.profiles.RulesProfile;
@@ -36,13 +36,19 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.exceptions.NotFoundException;
 
-import java.io.*;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-public class QProfileExporters implements ServerComponent {
+@ServerSide
+public class QProfileExporters {
 
   private final QProfileLoader loader;
   private final RuleFinder ruleFinder;
@@ -148,7 +154,6 @@ public class QProfileExporters implements ServerComponent {
     return result;
   }
 
-
   private void importProfile(QualityProfileDto profileDto, RulesProfile rulesProfile, DbSession dbSession) {
     for (org.sonar.api.rules.ActiveRule activeRule : rulesProfile.getActiveRules()) {
       ruleActivator.activate(dbSession, toRuleActivation(activeRule), profileDto);
index 411b1b8d4cc60a098e19e0fc898c7a6ece51c816..0daa31a485dfe007a507dfe66182e82bbc5c11eb 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.qualityprofile;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.QualityProfileDto;
 import org.sonar.server.db.DbClient;
@@ -38,7 +38,8 @@ import java.util.List;
 /**
  * Create, delete, rename and set as default profile.
  */
-public class QProfileFactory implements ServerComponent {
+@ServerSide
+public class QProfileFactory {
 
   private final DbClient db;
 
index 2e0ad3010e626aff51704979ea4cbdd44dffb229..63cf0b7d5b078ea84336a9c109e063f62a35197e 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.qualityprofile;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.core.persistence.DbSession;
@@ -42,7 +42,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-public class QProfileLoader implements ServerComponent {
+@ServerSide
+public class QProfileLoader {
 
   private final DbClient db;
   private final IndexClient index;
@@ -131,5 +132,4 @@ public class QProfileLoader implements ServerComponent {
       new QueryContext().setLimit(0)).getTotal();
   }
 
-
 }
index bd6c88cda30e210adb030b5bbb70e68be73d8eb0..ed403ee4024008aa99a13fd8bc844c5933df42b5 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.qualityprofile;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.QualityProfileDto;
 import org.sonar.server.db.DbClient;
@@ -33,7 +33,8 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class QProfileLookup implements ServerComponent {
+@ServerSide
+public class QProfileLookup {
 
   private final DbClient db;
 
index 712d94f4e49fade0304e87e297367bfc3542a3eb..f3dabcd25eb8eadd91d059eb38801d3033f2253a 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.qualityprofile;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.component.Component;
 import org.sonar.api.web.UserRole;
 import org.sonar.core.persistence.DbSession;
@@ -37,7 +37,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-public class QProfileProjectLookup implements ServerComponent {
+@ServerSide
+public class QProfileProjectLookup {
 
   private final DbClient db;
 
index be66271e52191777ae515fbb0ef32ee8c000ec12..4f6041cd55eaa83b4a741e7cac8267788bbda989 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.qualityprofile;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.web.UserRole;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.permission.GlobalPermissions;
@@ -35,7 +35,8 @@ import org.sonar.server.user.UserSession;
  * Should be refactored in order to use project key. Mabye should it be move to {@link QProfileFactory}
  * Permission checks should also be done in the upper service.
  */
-public class QProfileProjectOperations implements ServerComponent {
+@ServerSide
+public class QProfileProjectOperations {
 
   private final DbClient db;
 
index 83ae4917bd13c7f4eac7d26ab11ce058a12ccf99..46771b0fdaa29c4c136157867f5b661f482683e5 100644 (file)
@@ -24,7 +24,7 @@ import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.profiles.ProfileDefinition;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.rule.RuleKey;
@@ -44,7 +44,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class QProfileReset implements ServerComponent {
+@ServerSide
+public class QProfileReset {
 
   private final DbClient db;
   private final QProfileFactory factory;
index 32eec19eb53c9a93af5854388288210c5503ee39..383b07a32f85c1cdd7e1dc5085a005d95d4bb00c 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.qualityprofile;
 
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.search.SearchHit;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.ActiveRuleKey;
@@ -37,6 +37,7 @@ import org.sonar.server.user.UserSession;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
+
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
@@ -45,7 +46,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-public class QProfileService implements ServerComponent {
+@ServerSide
+public class QProfileService {
 
   private final DbClient db;
   private final ActivityIndex activityIndex;
@@ -57,7 +59,7 @@ public class QProfileService implements ServerComponent {
   private final QProfileExporters exporters;
 
   public QProfileService(DbClient db, ActivityIndex activityIndex, RuleActivator ruleActivator, QProfileFactory factory,
-                         QProfileBackuper backuper, QProfileCopier copier, QProfileReset reset, QProfileExporters exporters) {
+    QProfileBackuper backuper, QProfileCopier copier, QProfileReset reset, QProfileExporters exporters) {
     this.db = db;
     this.activityIndex = activityIndex;
     this.ruleActivator = ruleActivator;
index 084b3bef83ae2ad8d92e41688d7cc7990b50f861..e716783bbaa0843241445da274fbd0941e8410f6 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.qualityprofile;
 
 import com.google.common.base.Strings;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.component.Component;
 import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.user.UserSession;
@@ -35,7 +35,8 @@ import java.util.List;
  * Use {@link org.sonar.server.qualityprofile.QProfileService} instead
  */
 @Deprecated
-public class QProfiles implements ServerComponent {
+@ServerSide
+public class QProfiles {
 
   private static final String LANGUAGE_PARAM = "language";
 
index 6c43acef2895d674f04a6db7161dc0e391cc6fa2..d196687623a40b1fc71fa682adbdf6135f107db1 100644 (file)
@@ -25,7 +25,7 @@ import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.profiles.ProfileDefinition;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.resources.Languages;
@@ -43,12 +43,17 @@ import org.sonar.server.platform.PersistentSettings;
 
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * Synchronize Quality profiles during server startup
  */
-public class RegisterQualityProfiles implements ServerComponent {
+@ServerSide
+public class RegisterQualityProfiles {
 
   private static final Logger LOGGER = Loggers.get(RegisterQualityProfiles.class);
   private static final String DEFAULT_PROFILE_NAME = "Sonar way";
index e8c72779dd11843baf1e9749d8301439a34e1f6d..76587e1d9dd4c8c5e1e58d8adba3cea1af9effe3 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.qualityprofile;
 
 import com.google.common.base.Splitter;
 import com.google.common.collect.Lists;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.server.rule.RuleParamType;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.ActiveRuleDto;
@@ -56,7 +56,8 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * Activation and deactivation of rules in Quality profiles
  */
-public class RuleActivator implements ServerComponent {
+@ServerSide
+public class RuleActivator {
 
   private final DbClient db;
   private final TypeValidations typeValidations;
index 184d3fdf187f8f134f1fae34413e11095a3c80db..7a9c6934ba6628364d96ceeb853e1c85d3b1b864 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.qualityprofile;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.qualityprofile.db.ActiveRuleDto;
@@ -32,7 +32,8 @@ import org.sonar.server.exceptions.BadRequestException;
 
 import java.util.Collection;
 
-public class RuleActivatorContextFactory implements ServerComponent {
+@ServerSide
+public class RuleActivatorContextFactory {
 
   private final DbClient db;
 
index 89a5959e64851db25927333c47f99f1a562c6cf3..9c57e6171892fab484fe5d4a7e99b36be06c40a7 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.qualityprofile.ws;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.rule.Severity;
 import org.sonar.api.server.ws.Request;
@@ -33,7 +33,8 @@ import org.sonar.server.rule.RuleService;
 import org.sonar.server.rule.ws.SearchAction;
 import org.sonar.server.user.UserSession;
 
-public class BulkRuleActivationActions implements ServerComponent {
+@ServerSide
+public class BulkRuleActivationActions {
 
   public static final String PROFILE_KEY = "profile_key";
   public static final String SEVERITY = "activation_severity";
index 84994ea18cbd300e2d27a0e501fcfd40c252e174..13e7bb88f0bdfa0637b6bc1f54d9a23b15e11e79 100644 (file)
 package org.sonar.server.qualityprofile.ws;
 
 import com.google.common.base.Preconditions;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Languages;
-import org.sonar.api.server.ws.*;
+import org.sonar.api.server.ws.Request;
+import org.sonar.api.server.ws.RequestHandler;
+import org.sonar.api.server.ws.Response;
+import org.sonar.api.server.ws.WebService;
 import org.sonar.api.server.ws.WebService.NewAction;
 import org.sonar.server.component.ComponentService;
 import org.sonar.server.exceptions.NotFoundException;
@@ -33,7 +36,8 @@ import org.sonar.server.user.UserSession;
 
 import static org.apache.commons.lang.StringUtils.isEmpty;
 
-public class ProjectAssociationActions implements ServerComponent {
+@ServerSide
+public class ProjectAssociationActions {
 
   private static final String PARAM_LANGUAGE = "language";
   private static final String PARAM_PROFILE_NAME = "profileName";
@@ -121,7 +125,7 @@ public class ProjectAssociationActions implements ServerComponent {
         (!isEmpty(language) && !isEmpty(profileName)) ^ !isEmpty(profileKey), "Either profileKey or profileName + language must be set");
       Preconditions.checkArgument(!isEmpty(projectKey) ^ !isEmpty(projectUuid), "Either projectKey or projectUuid must be set");
 
-      if(profileKey == null) {
+      if (profileKey == null) {
         profileKey = getProfileKeyFromLanguageAndName(language, profileName);
       }
 
index a2c7758cdb129bc794116ebc4acc380d5f66704e..a9cedb73d4a3c39dea8aeed28b8cfd33c7f4ecc0 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.qualityprofile.ws;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.Severity;
 import org.sonar.api.server.ws.Request;
@@ -31,7 +31,8 @@ import org.sonar.core.qualityprofile.db.ActiveRuleKey;
 import org.sonar.server.qualityprofile.QProfileService;
 import org.sonar.server.qualityprofile.RuleActivation;
 
-public class RuleActivationActions implements ServerComponent {
+@ServerSide
+public class RuleActivationActions {
 
   public static final String PROFILE_KEY = "profile_key";
   public static final String RULE_KEY = "rule_key";
index 563bcb1ae186b09ad9ba56a680bf7cc146d7302e..c9db18ddcbec480fbde58050400d5b6271bbab23 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rules.RuleParam;
@@ -37,6 +37,7 @@ import org.sonar.api.utils.log.Loggers;
 import org.sonar.core.i18n.RuleI18nManager;
 import org.sonar.server.debt.DebtModelPluginRepository;
 import org.sonar.server.debt.DebtModelXMLExporter;
+import org.sonar.server.debt.DebtModelXMLExporter.RuleDebt;
 import org.sonar.server.debt.DebtRulesXMLImporter;
 
 import javax.annotation.CheckForNull;
@@ -47,12 +48,12 @@ import java.util.Collection;
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
-import static org.sonar.server.debt.DebtModelXMLExporter.RuleDebt;
 
 /**
  * Inject deprecated RuleRepository into {@link org.sonar.api.server.rule.RulesDefinition} for backward-compatibility.
  */
-public class DeprecatedRulesDefinitionLoader implements ServerComponent {
+@ServerSide
+public class DeprecatedRulesDefinitionLoader {
 
   private static final Logger LOG = Loggers.get(DeprecatedRulesDefinitionLoader.class);
 
index 12227d24e2698ba49f885d9bee2517cbd19be57c..a73d018a16d439251a711cb190a5df31e0b8a82e 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.rule;
 
 import com.google.common.base.Strings;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.server.debt.DebtRemediationFunction;
@@ -49,7 +49,8 @@ import static com.google.common.collect.Lists.newArrayList;
  * @deprecated in 4.4 because Ruby on Rails is deprecated too !
  */
 @Deprecated
-public class RubyRuleService implements ServerComponent, Startable {
+@ServerSide
+public class RubyRuleService implements Startable {
 
   private final RuleService service;
   private final RuleUpdater updater;
index 5d9e01e7666373214d9c51a0aab16ccf0cc13cb7..f0e9d69fd94c6506fb4b76b7427ea1fc7a7d34b9 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.rule;
 
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
@@ -45,7 +45,8 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class RuleCreator implements ServerComponent {
+@ServerSide
+public class RuleCreator {
 
   private final DbClient dbClient;
 
@@ -74,7 +75,7 @@ public class RuleCreator implements ServerComponent {
     }
   }
 
-  private RuleKey createCustomRule(NewRule newRule, DbSession dbSession){
+  private RuleKey createCustomRule(NewRule newRule, DbSession dbSession) {
     RuleKey templateKey = newRule.templateKey();
     if (templateKey == null) {
       throw new IllegalArgumentException("Rule template key should not be null");
@@ -98,7 +99,7 @@ public class RuleCreator implements ServerComponent {
     return customRuleKey;
   }
 
-  private RuleKey createManualRule(NewRule newRule, DbSession dbSession){
+  private RuleKey createManualRule(NewRule newRule, DbSession dbSession) {
     validateManualRule(newRule);
 
     RuleKey customRuleKey = RuleKey.of(RuleDoc.MANUAL_REPOSITORY, newRule.ruleKey());
@@ -190,11 +191,11 @@ public class RuleCreator implements ServerComponent {
   }
 
   @CheckForNull
-  private RuleDto loadRule(RuleKey ruleKey, DbSession dbSession){
+  private RuleDto loadRule(RuleKey ruleKey, DbSession dbSession) {
     return dbClient.ruleDao().getNullableByKey(dbSession, ruleKey);
   }
 
-  private RuleKey createCustomRule(RuleKey ruleKey, NewRule newRule, RuleDto templateRuleDto, DbSession dbSession){
+  private RuleKey createCustomRule(RuleKey ruleKey, NewRule newRule, RuleDto templateRuleDto, DbSession dbSession) {
     RuleDto ruleDto = RuleDto.createFor(ruleKey)
       .setTemplateId(templateRuleDto.getId())
       .setConfigKey(templateRuleDto.getConfigKey())
@@ -220,7 +221,7 @@ public class RuleCreator implements ServerComponent {
     return ruleKey;
   }
 
-  private void createCustomRuleParams(@Nullable String paramValue, RuleDto ruleDto, RuleParamDto templateRuleParam, DbSession dbSession){
+  private void createCustomRuleParams(@Nullable String paramValue, RuleDto ruleDto, RuleParamDto templateRuleParam, DbSession dbSession) {
     RuleParamDto ruleParamDto = RuleParamDto.createFor(ruleDto)
       .setName(templateRuleParam.getName())
       .setType(templateRuleParam.getType())
@@ -229,7 +230,7 @@ public class RuleCreator implements ServerComponent {
     dbClient.ruleDao().addRuleParam(dbSession, ruleDto, ruleParamDto);
   }
 
-  private RuleKey createManualRule(RuleKey ruleKey, NewRule newRule, DbSession dbSession){
+  private RuleKey createManualRule(RuleKey ruleKey, NewRule newRule, DbSession dbSession) {
     RuleDto ruleDto = RuleDto.createFor(ruleKey)
       .setName(newRule.name())
       .setDescription(newRule.markdownDescription())
@@ -240,7 +241,7 @@ public class RuleCreator implements ServerComponent {
     return ruleKey;
   }
 
-  private void updateExistingRule(RuleDto ruleDto, NewRule newRule, DbSession dbSession){
+  private void updateExistingRule(RuleDto ruleDto, NewRule newRule, DbSession dbSession) {
     if (ruleDto.getStatus().equals(RuleStatus.REMOVED)) {
       if (newRule.isPreventReactivation()) {
         throw new ReactivationException(String.format("A removed rule with the key '%s' already exists", ruleDto.getKey().rule()), ruleDto.getKey());
index f64ba522009c89a4b3c8f4958ac9484d90538e51..e3b5e9d3012f819c7a9b9e3110246456a4266c5d 100644 (file)
  */
 package org.sonar.server.rule;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.server.rule.RulesDefinition;
 
 /**
  * Loads all instances of {@link org.sonar.api.server.rule.RulesDefinition}
  * and initializes {@link org.sonar.server.rule.RuleRepositories}. Used at server startup.
  */
-public class RuleDefinitionsLoader implements ServerComponent {
+@ServerSide
+public class RuleDefinitionsLoader {
 
   private final DeprecatedRulesDefinitionLoader deprecatedDefinitionConverter;
   private final RulesDefinition[] definitions;
index 29ff1f22a28ade810ba3c008913d551d0cf527d5..b560f357f1df21c32d47e966f13cb5d6610658fd 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.rule;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.core.persistence.DbSession;
@@ -29,7 +29,8 @@ import org.sonar.server.db.DbClient;
 import org.sonar.server.qualityprofile.RuleActivator;
 import org.sonar.server.rule.index.RuleDoc;
 
-public class RuleDeleter implements ServerComponent {
+@ServerSide
+public class RuleDeleter {
 
   private final DbClient dbClient;
   private final RuleActivator ruleActivator;
index b4741613aeeb9bd28c2672c79d280bb2a7da6840..651b6d1560d1e94b30aaed5da796d1a273afa378 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.rule;
 
 import com.google.common.base.Strings;
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.server.debt.DebtRemediationFunction;
 import org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction;
@@ -43,7 +43,8 @@ import javax.annotation.Nullable;
  * @deprecated to be dropped in 4.4
  */
 @Deprecated
-public class RuleOperations implements ServerComponent {
+@ServerSide
+public class RuleOperations {
 
   private final DbClient dbClient;
 
index 1afb001b16b18482cbe1e724d78a5699ce808872..3e2411f53855a51d0bcd923e75c57472ad2c8697 100644 (file)
@@ -24,10 +24,11 @@ import com.google.common.collect.ImmutableSetMultimap;
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.SetMultimap;
 import org.apache.commons.lang.builder.CompareToBuilder;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.server.rule.RulesDefinition;
 
 import javax.annotation.CheckForNull;
+
 import java.util.Collection;
 import java.util.Map;
 import java.util.SortedSet;
@@ -40,7 +41,8 @@ import java.util.SortedSet;
  *
  * @since 4.2
  */
-public class RuleRepositories implements ServerComponent {
+@ServerSide
+public class RuleRepositories {
 
   public static class Repository implements Comparable<Repository> {
     private final String key, name, language;
index cfb15e659826c06eda4e0e786786f3119a7e7a5a..3b0ab6be424f708a5ad796ddb55f50fd4650faec 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.rule;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.server.exceptions.NotFoundException;
@@ -40,7 +40,8 @@ import java.util.Set;
 /**
  * @since 4.4
  */
-public class RuleService implements ServerComponent {
+@ServerSide
+public class RuleService {
 
   private final RuleIndex index;
   private final RuleUpdater ruleUpdater;
index 98476084a21352a19a835a9f97fa5e4f21d421a9..4e715408d05213ebe7691f419e67f3f34f3f5a61 100644 (file)
@@ -25,7 +25,7 @@ import com.google.common.collect.Multimap;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
 import org.sonar.api.server.debt.DebtRemediationFunction;
@@ -46,7 +46,8 @@ import java.util.Set;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class RuleUpdater implements ServerComponent {
+@ServerSide
+public class RuleUpdater {
 
   private final DbClient dbClient;
   private final System2 system;
@@ -289,7 +290,7 @@ public class RuleUpdater implements ServerComponent {
   }
 
   private void deleteOrUpdateParameters(DbSession dbSession, RuleUpdate update, RuleDto customRule, List<String> paramKeys,
-                                        Multimap<RuleDto, ActiveRuleDto> activeRules, Multimap<ActiveRuleDto, ActiveRuleParamDto> activeRuleParams) {
+    Multimap<RuleDto, ActiveRuleDto> activeRules, Multimap<ActiveRuleDto, ActiveRuleParamDto> activeRuleParams) {
     for (RuleParamDto ruleParamDto : dbClient.ruleDao().findRuleParamsByRuleKey(dbSession, update.getRuleKey())) {
       String key = ruleParamDto.getName();
       String value = Strings.emptyToNull(update.parameter(key));
index 6ad59c206016ae066315692692a8dcca0bc21b50..2e693b191178f42cde77deff164eb23fa3f3588c 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.rule.ws;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Language;
 import org.sonar.api.resources.Languages;
 import org.sonar.api.rule.RuleKey;
@@ -45,7 +45,8 @@ import java.util.Map;
  * Add details about active rules to api/rules/search and api/rules/show
  * web services.
  */
-public class ActiveRuleCompleter implements ServerComponent {
+@ServerSide
+public class ActiveRuleCompleter {
 
   private static final Logger LOG = Loggers.get(ActiveRuleCompleter.class);
 
index 8ae1b9622172906c8bc74806058f0d43b802c661..d71755315b0d76e446795faff7c2f57486c2aee0 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.server.search;
 
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.Dto;
 
 import javax.annotation.CheckForNull;
@@ -30,7 +30,8 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.Map;
 
-public interface Index<DOMAIN, DTO extends Dto<KEY>, KEY extends Serializable> extends Startable, ServerComponent {
+@ServerSide
+public interface Index<DOMAIN, DTO extends Dto<KEY>, KEY extends Serializable> extends Startable {
 
   @CheckForNull
   DOMAIN getNullableByKey(KEY key);
index 911fc2771e33863567126503876845bad8e6bedd..89a2b3d40d2bc987ff379f7877ed0fb9d4a6820f 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.search;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -28,20 +28,21 @@ import java.util.Map;
 /**
  * Facade for all Elasticsearch indices
  */
-public class IndexClient implements ServerComponent {
+@ServerSide
+public class IndexClient {
 
-  private final Map<Class<?>, Index<?,?,?>> indexComponents;
+  private final Map<Class<?>, Index<?, ?, ?>> indexComponents;
 
-  public IndexClient(Index<?,?,?>... indexComponents) {
+  public IndexClient(Index<?, ?, ?>... indexComponents) {
 
-    this.indexComponents = new HashMap<Class<?>,  Index<?,?,?>>();
+    this.indexComponents = new HashMap<Class<?>, Index<?, ?, ?>>();
 
-    for(Index<?,?,?> indexComponent : indexComponents){
+    for (Index<?, ?, ?> indexComponent : indexComponents) {
       this.indexComponents.put(indexComponent.getClass(), indexComponent);
     }
   }
 
-  public <K extends Index> K get(Class<K> clazz){
+  public <K extends Index> K get(Class<K> clazz) {
     return (K) this.indexComponents.get(clazz);
   }
 
index d20d2c4e8250009e839a7842326485c68b97ee45..9d244062923044f9a1fea85dbe4bae97d05fa5a6 100644 (file)
@@ -28,11 +28,11 @@ import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.delete.DeleteRequest;
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.update.UpdateRequest;
-import org.sonar.api.ServerComponent;
-import org.sonar.core.platform.ComponentContainer;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.core.cluster.WorkQueue;
+import org.sonar.core.platform.ComponentContainer;
 import org.sonar.server.search.action.IndexAction;
 
 import java.util.HashMap;
@@ -45,7 +45,8 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
-public class IndexQueue implements ServerComponent, WorkQueue<IndexAction<?>> {
+@ServerSide
+public class IndexQueue implements WorkQueue<IndexAction<?>> {
 
   private final SearchClient searchClient;
   private final ComponentContainer container;
index 68eb0ec5d8cc5fd313ef3d575e9337fdb609b689..6f195dfe6232ce9a2097807796eaf1fb7d87646d 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.search.ws;
 
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.server.search.BaseDoc;
 import org.sonar.server.search.IndexUtils;
@@ -36,7 +36,8 @@ import java.util.Set;
 /**
  * Mapping of search documents (see {@link org.sonar.server.search.BaseDoc}) to WS JSON responses
  */
-public abstract class BaseMapping<DOC extends BaseDoc, CTX> implements ServerComponent {
+@ServerSide
+public abstract class BaseMapping<DOC extends BaseDoc, CTX> {
 
   private final Multimap<String, String> indexFieldsByWsFields = LinkedHashMultimap.create();
   private final Multimap<String, Mapper> mappers = LinkedHashMultimap.create();
@@ -132,7 +133,7 @@ public abstract class BaseMapping<DOC extends BaseDoc, CTX> implements ServerCom
   /**
    * String field
    */
-  public static class IndexStringMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC,CTX> {
+  public static class IndexStringMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC, CTX> {
     protected final String key;
 
     public IndexStringMapper(String key, String indexKey, String defaultIndexKey) {
@@ -156,7 +157,7 @@ public abstract class BaseMapping<DOC extends BaseDoc, CTX> implements ServerCom
     }
   }
 
-  public static class IndexBooleanMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC,CTX> {
+  public static class IndexBooleanMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC, CTX> {
     private final String key;
 
     public IndexBooleanMapper(String key, String indexKey) {
@@ -171,7 +172,7 @@ public abstract class BaseMapping<DOC extends BaseDoc, CTX> implements ServerCom
     }
   }
 
-  public static class IndexArrayMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC,CTX> {
+  public static class IndexArrayMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC, CTX> {
     private final String key;
 
     public IndexArrayMapper(String key, String indexKey) {
@@ -188,7 +189,7 @@ public abstract class BaseMapping<DOC extends BaseDoc, CTX> implements ServerCom
     }
   }
 
-  public static class IndexDatetimeMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC,CTX> {
+  public static class IndexDatetimeMapper<DOC extends BaseDoc, CTX> extends IndexMapper<DOC, CTX> {
     private final String key;
 
     public IndexDatetimeMapper(String key, String indexKey) {
index 52caca4d161fdfb9c76d75dd7b380fe9ce2812a6..ae74bd389127183a61265f9604d7f8d885863b01 100644 (file)
 package org.sonar.server.source;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
 import java.util.List;
 
-public class HtmlSourceDecorator implements ServerComponent {
+@ServerSide
+public class HtmlSourceDecorator {
 
   @CheckForNull
   public String getDecoratedSourceAsHtml(@Nullable String sourceLine, @Nullable String highlighting, @Nullable String symbols) {
index b9877861a35e3d9eb8b300b23cdaf185dc9024fd..5361258c25b2d6c92c2f4436072afae6e01367f3 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.source;
 
 import org.apache.commons.lang.ObjectUtils;
 import org.elasticsearch.common.collect.Lists;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.server.source.index.SourceLineDoc;
 import org.sonar.server.source.index.SourceLineIndex;
 
@@ -30,7 +30,8 @@ import javax.annotation.Nullable;
 
 import java.util.List;
 
-public class SourceService implements ServerComponent {
+@ServerSide
+public class SourceService {
 
   private final HtmlSourceDecorator sourceDecorator;
   private final SourceLineIndex sourceLineIndex;
index 8f7f06868a725d32b0a33fe53d9c13d3876f7385..29031950c0bad60773297c2c42fe4480c768d6fc 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.server.source.db;
 import com.google.common.base.Function;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.commons.io.IOUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
@@ -40,7 +40,8 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
-public class FileSourceDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class FileSourceDao implements DaoComponent {
 
   private final MyBatis mybatis;
 
index cdefebfdd23397e24f95fd450d33407b20eb3539..b43f7d0d9f6242bb6d2b24bbdee44c7f155b6639 100644 (file)
@@ -26,7 +26,7 @@ import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Multimap;
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.server.debt.DebtRemediationFunction;
 import org.sonar.api.utils.Duration;
@@ -57,7 +57,8 @@ import java.util.List;
  *
  * @since 4.3 this component could be removed after 4 or 5 releases.
  */
-public class CopyRequirementsFromCharacteristicsToRules implements ServerComponent {
+@ServerSide
+public class CopyRequirementsFromCharacteristicsToRules {
 
   private static final Logger LOGGER = Loggers.get(CopyRequirementsFromCharacteristicsToRules.class);
 
@@ -129,7 +130,8 @@ public class CopyRequirementsFromCharacteristicsToRules implements ServerCompone
       convertDisableRequirement(rule, session);
 
     } else if (enabledRequirement != null) {
-      // If one requirement is enable, it means either that this requirement has been set from SQALE, or that it come from a XML model definition
+      // If one requirement is enable, it means either that this requirement has been set from SQALE, or that it come from a XML model
+      // definition
       convertEnabledRequirement(rule, enabledRequirement, session);
 
       // When default values on debt are the same that ones set by SQALE, nothing to do
index 3f34be942f33a9b910dd0e3e4f91b864db6ae755..a6e579e119214f669b4ecccc0a7daebdadfec83c 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.server.test;
 
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.test.MutableTestable;
 import org.sonar.api.test.Testable;
@@ -38,7 +38,8 @@ import javax.annotation.CheckForNull;
 
 import java.util.Map;
 
-public class CoverageService implements ServerComponent {
+@ServerSide
+public class CoverageService {
 
   public enum TYPE {
     UT, IT, OVERALL
index 0971feae8a07a363109e3dc29f3406551f803abd..94b092391104a459b33f25d27b201fc6341b4ca7 100644 (file)
 package org.sonar.server.text;
 
 import com.google.common.collect.ImmutableList;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.platform.Server;
 
 import java.util.List;
 
-public class MacroInterpreter implements ServerComponent {
+@ServerSide
+public class MacroInterpreter {
 
   private final List<Macro> macros;
 
   public MacroInterpreter(Server server) {
     this.macros = ImmutableList.<Macro>of(
       new RuleMacro(server.getContextPath())
-    );
+      );
   }
 
   public String interpret(String text) {
index 18d2db48069fdf93b91f577574c8a8579eb0ef0f..9136c36e60e1d810dc9410c6180bc9ad236bde31 100644 (file)
  */
 package org.sonar.server.text;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.markdown.Markdown;
 
 /**
  * @since 3.6
  */
-public class RubyTextService implements ServerComponent {
+@ServerSide
+public class RubyTextService {
 
   private final MacroInterpreter macroInterpreter;
 
index 8354c31b419c1fa0090398c22ddbae89abe20c3d..17175bf780746ff29eff2bb2bd555a922c8cd3b0 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.ui;
 
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.utils.Duration;
 import org.sonar.api.utils.Durations;
@@ -38,7 +38,8 @@ import java.util.Map;
  *
  * Bridge between JRuby webapp and Java I18n component
  */
-public class JRubyI18n implements ServerComponent {
+@ServerSide
+public class JRubyI18n {
 
   private I18n i18n;
   private Durations durations;
index 3be0d52c877f9a0c92dce9cfd11121be60409a11..9960d44f560b8395c4f22660b977335381cdddc2 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.server.ui;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.web.PageDecoration;
 
 import java.util.Collections;
@@ -28,7 +28,8 @@ import java.util.List;
 /**
  * @since 3.3
  */
-public final class PageDecorations implements ServerComponent {
+@ServerSide
+public final class PageDecorations {
 
   private final PageDecoration[] decorations;
 
@@ -41,6 +42,6 @@ public final class PageDecorations implements ServerComponent {
   }
 
   public PageDecoration[] get() {
-    return decorations;//NOSONAR expose internal representation
+    return decorations;// NOSONAR expose internal representation
   }
 }
index a66890c29ceee199728ec13f9bd6a68250969cf6..059269e079cf1606e78d3d9ce40419629db7ec79 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang.ArrayUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.web.Page;
 import org.sonar.api.web.View;
 import org.sonar.api.web.Widget;
@@ -34,7 +34,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class Views implements ServerComponent {
+@ServerSide
+public class Views {
 
   private Map<String, ViewProxy<Page>> pagesPerId = Maps.newHashMap();
   private Set<ViewProxy<Page>> pages = Sets.newTreeSet();
index 3bc44bca3ac248f1664be202c5bf03185e0cfa4e..1693f6d5bcb83caae5c78ae6fb22010de6bdd7ce 100644 (file)
 
 package org.sonar.server.user;
 
-import org.sonar.api.ServerComponent;
-import org.sonar.core.user.*;
+import org.sonar.api.ServerSide;
+import org.sonar.core.user.GroupMembership;
+import org.sonar.core.user.GroupMembershipDao;
+import org.sonar.core.user.GroupMembershipDto;
+import org.sonar.core.user.GroupMembershipQuery;
+import org.sonar.core.user.UserDao;
+import org.sonar.core.user.UserDto;
 import org.sonar.server.exceptions.NotFoundException;
 
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class GroupMembershipFinder implements ServerComponent {
+@ServerSide
+public class GroupMembershipFinder {
 
   public static class Membership {
     private List<GroupMembership> groups;
index 4fe558de05f27b3f6edff498d4b688f0ee3b8c8c..517c8a161f04ee83c27d7b008e819ebb7aceb369 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.server.user;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.user.GroupMembershipQuery;
 import org.sonar.server.util.RubyUtils;
 
@@ -29,7 +29,8 @@ import java.util.Map;
 /**
  * Used by ruby code <pre>Internal.group_membership</pre>
  */
-public class GroupMembershipService implements ServerComponent {
+@ServerSide
+public class GroupMembershipService {
 
   private static final String SELECTED_MEMBERSHIP = "selected";
   private static final String DESELECTED_MEMBERSHIP = "deselected";
index a3b8da575d8323d11bf8c402be6f7a05c1e10bb3..33152f84a3a7522a935e01df6423225b8d48ec85 100644 (file)
  */
 package org.sonar.server.user;
 
-import org.sonar.api.utils.log.Loggers;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.platform.NewUserHandler;
+import org.sonar.api.utils.log.Loggers;
 
 /**
  * @since 3.2
  */
-public class NewUserNotifier implements ServerComponent {
+@ServerSide
+public class NewUserNotifier {
 
   private NewUserHandler[] handlers;
 
index c6f9cd806d96d28f36806f903502963fff9d96ac..f1e4f33553c3a56ce8324e4e25070fbfd9ae5fee 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.server.user;
 import org.apache.commons.lang.StringUtils;
 import org.picocontainer.Startable;
 import org.sonar.api.CoreProperties;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.security.LoginPasswordAuthenticator;
 import org.sonar.api.security.SecurityRealm;
@@ -33,7 +33,8 @@ import org.sonar.api.utils.log.Loggers;
 /**
  * @since 2.14
  */
-public class SecurityRealmFactory implements ServerComponent, Startable {
+@ServerSide
+public class SecurityRealmFactory implements Startable {
 
   private final boolean ignoreStartupFailure;
   private final SecurityRealm realm;
index 5c5ebddfece34b83b317989ab05747804bb5c10b..b5cfb5f617f7aa185abcacf7e81d3faa2aede12c 100644 (file)
@@ -27,7 +27,7 @@ import com.google.common.collect.Iterables;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.CoreProperties;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.platform.NewUserHandler;
 import org.sonar.api.utils.System2;
@@ -51,7 +51,8 @@ import java.util.Random;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class UserUpdater implements ServerComponent {
+@ServerSide
+public class UserUpdater {
 
   private static final String LOGIN_PARAM = "Login";
   private static final String PASSWORD_CONFIRMATION_PARAM = "Password confirmation";
index 1ea3a2ff7f40731fbb2a8d56969906c2ee9ef430..0a611cb44bdad5316cb81a67960738149bb2a16d 100644 (file)
@@ -36,7 +36,7 @@ import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortOrder;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.util.NonNullInputFunction;
 import org.sonar.server.es.EsClient;
 import org.sonar.server.es.EsUtils;
@@ -52,7 +52,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-public class UserIndex implements ServerComponent {
+@ServerSide
+public class UserIndex {
 
   /**
    * Convert an Elasticsearch result (a map) to an {@link UserDoc}. It's
index e754199be38aeb30487c30b50b9d43c06ea7ec66..47989089fe4317c092d73842546be1a9c5b2b08c 100644 (file)
 
 package org.sonar.server.util;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
+
 import java.util.List;
 
-public interface TypeValidation extends ServerComponent {
+@ServerSide
+public interface TypeValidation {
 
   String key();
 
index 5f160211aeb1e543ea48b48583a0a14f7d278eed..bed5ee0b6f268fe38e84c2d075cab3dfa3a6bbd4 100644 (file)
@@ -22,13 +22,15 @@ package org.sonar.server.util;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.server.exceptions.BadRequestException;
 
 import javax.annotation.Nullable;
+
 import java.util.List;
 
-public class TypeValidations implements ServerComponent {
+@ServerSide
+public class TypeValidations {
 
   private final List<TypeValidation> typeValidationList;
 
index 54ffd0161a045403bbd0ecbe4593cddaad7e9a64..7345ba7b7cd285b98816469d76ea59b75da81b5c 100644 (file)
@@ -27,7 +27,7 @@ import org.elasticsearch.common.unit.TimeValue;
 import org.elasticsearch.index.query.FilterBuilders;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.server.es.EsClient;
 
 import java.util.Collection;
@@ -35,7 +35,8 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class ViewIndex implements ServerComponent {
+@ServerSide
+public class ViewIndex {
 
   private static final int SCROLL_TIME_IN_MINUTES = 3;
 
@@ -78,7 +79,7 @@ public class ViewIndex implements ServerComponent {
       .setTypes(ViewIndexDefinition.TYPE_VIEW)
       .setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
         FilterBuilders.termsFilter(ViewIndexDefinition.FIELD_UUID, viewUuids)
-      ))
+        ))
       .get();
   }
 }
index dd386b375c0490208260462126b0c45bc6b6027b..3f23aad0dbcd35a3208c8df358082fce9fe09a2e 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.server.ws;
 
 import com.google.common.base.Charsets;
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.WebService;
@@ -43,7 +43,8 @@ import java.util.List;
 /**
  * @since 4.2
  */
-public class WebServiceEngine implements ServerComponent, Startable {
+@ServerSide
+public class WebServiceEngine implements Startable {
 
   private final WebService.Context context;
 
index fb55fdde0a41e08922d3312ec0f719101ceda8a9..c3bb030facc3c7c4719c29fccfb506f29e4d2b1c 100644 (file)
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.maven.project.MavenProject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.config.Settings;
@@ -44,7 +44,8 @@ import static org.sonar.api.utils.DateUtils.formatDateTime;
  * Used by views !!
  *
  */
-public class ProjectConfigurator implements BatchComponent {
+@BatchSide
+public class ProjectConfigurator {
 
   private static final Logger LOG = LoggerFactory.getLogger(ProjectConfigurator.class);
   private final System2 system2;
index 6a19dc49ab7899d4a4833dce60bf494759081514..cc9037a6adafe8e9f9bc9289d47c711a0a2833fc 100644 (file)
 package org.sonar.batch.bootstrap;
 
 import com.google.common.collect.Lists;
+import org.sonar.batch.components.TimeMachineConfiguration;
 import org.sonar.batch.cpd.CpdComponents;
-import org.sonar.batch.design.*;
+import org.sonar.batch.debt.DebtDecorator;
+import org.sonar.batch.debt.IssueChangelogDebtCalculator;
+import org.sonar.batch.debt.NewDebtDecorator;
+import org.sonar.batch.debt.SqaleRatingDecorator;
+import org.sonar.batch.debt.SqaleRatingSettings;
+import org.sonar.batch.design.DirectoryDsmDecorator;
+import org.sonar.batch.design.DirectoryTangleIndexDecorator;
+import org.sonar.batch.design.FileTangleIndexDecorator;
+import org.sonar.batch.design.MavenDependenciesSensor;
+import org.sonar.batch.design.ProjectDsmDecorator;
+import org.sonar.batch.design.SubProjectDsmDecorator;
+import org.sonar.batch.issue.tracking.InitialOpenIssuesSensor;
+import org.sonar.batch.issue.tracking.IssueHandlers;
 import org.sonar.batch.issue.tracking.IssueTracking;
+import org.sonar.batch.issue.tracking.IssueTrackingDecorator;
+import org.sonar.batch.language.LanguageDistributionDecorator;
 import org.sonar.batch.maven.MavenProjectBootstrapper;
 import org.sonar.batch.maven.MavenProjectBuilder;
 import org.sonar.batch.maven.MavenProjectConverter;
-import org.sonar.batch.scan.report.*;
+import org.sonar.batch.qualitygate.GenerateQualityGateEvents;
+import org.sonar.batch.qualitygate.QualityGateVerifier;
+import org.sonar.batch.rule.QProfileEventsDecorator;
+import org.sonar.batch.scan.report.ConsoleReport;
+import org.sonar.batch.scan.report.HtmlReport;
+import org.sonar.batch.scan.report.IssuesReportBuilder;
+import org.sonar.batch.scan.report.JSONReport;
+import org.sonar.batch.scan.report.RuleNameProvider;
+import org.sonar.batch.scan.report.SourceProvider;
 import org.sonar.batch.scm.ScmConfiguration;
 import org.sonar.batch.scm.ScmSensor;
 import org.sonar.batch.source.CodeColorizerSensor;
@@ -34,6 +57,7 @@ import org.sonar.batch.source.LinesSensor;
 import org.sonar.core.computation.dbcleaner.DefaultPurgeTask;
 import org.sonar.core.computation.dbcleaner.period.DefaultPeriodCleaner;
 import org.sonar.core.config.CorePropertyDefinitions;
+import org.sonar.core.notification.DefaultNotificationManager;
 
 import java.util.Collection;
 import java.util.List;
@@ -75,7 +99,33 @@ public class BatchComponents {
 
       // dbcleaner
       DefaultPeriodCleaner.class,
-      DefaultPurgeTask.class
+      DefaultPurgeTask.class,
+
+      QualityGateVerifier.class,
+
+      // language
+      LanguageDistributionDecorator.class,
+
+      // Debt
+      IssueChangelogDebtCalculator.class,
+      DebtDecorator.class,
+      NewDebtDecorator.class,
+      SqaleRatingDecorator.class,
+      SqaleRatingSettings.class,
+
+      DefaultNotificationManager.class,
+
+      // Quality Gate
+      GenerateQualityGateEvents.class,
+
+      // Issue tracking
+      IssueTrackingDecorator.class,
+      IssueHandlers.class,
+      InitialOpenIssuesSensor.class,
+
+      QProfileEventsDecorator.class,
+
+      TimeMachineConfiguration.class
       );
     components.addAll(CorePropertyDefinitions.all());
     // CPD
index 1575f757006f77d28f754a3426a6ca1f602b47db..5a66504364ee3aee9314aa69b7dbf8cf59f6f234 100644 (file)
@@ -23,7 +23,6 @@ import com.google.common.base.Predicates;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.ClassUtils;
-import org.sonar.api.BatchExtension;
 import org.sonar.api.batch.CheckProject;
 import org.sonar.api.batch.DependedUpon;
 import org.sonar.api.batch.DependsUpon;
@@ -126,15 +125,15 @@ public class BatchExtensionDictionnary {
     return result;
   }
 
-  protected List<Object> getExtensions(@Nullable Class type) {
+  protected List<Object> getExtensions(Class type) {
     List<Object> extensions = Lists.newArrayList();
     completeBatchExtensions(componentContainer, extensions, type);
     return extensions;
   }
 
-  private static void completeBatchExtensions(ComponentContainer container, List<Object> extensions, @Nullable Class type) {
+  private static void completeBatchExtensions(ComponentContainer container, List<Object> extensions, Class type) {
     if (container != null) {
-      extensions.addAll(container.getComponentsByType(type != null ? type : BatchExtension.class));
+      extensions.addAll(container.getComponentsByType(type));
       completeBatchExtensions(container.getParent(), extensions, type);
     }
   }
index 856cf505642102cd08d8866c4c4776d35c9e24df..59bf14983655b025704ff060e0a652cfd651af50 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.bootstrap;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.database.DatabaseProperties;
@@ -32,7 +32,8 @@ import org.sonar.core.properties.PropertiesDao;
 /**
  * Detects if database is not up-to-date with the version required by the batch.
  */
-public class DatabaseCompatibility implements BatchComponent {
+@BatchSide
+public class DatabaseCompatibility {
 
   private DatabaseVersion version;
   private Settings settings;
index 5a477d63bc123d90784f3c64ed28ccf5f17297b0..530429fb9866615c2413f8f167722beb05dca6b3 100644 (file)
  */
 package org.sonar.batch.bootstrap;
 
+import org.sonar.api.BatchSide;
+
 /**
  * @since 3.6
  */
+@BatchSide
 public interface ExtensionMatcher {
   boolean accept(Object extension);
 }
index 61bc80e65384d0320b0a6769248196a1c7e568a5..37519fdfb532cebb3378ae01b4cb9d7c9b288ce2 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.bootstrap;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.batch.SupportedEnvironment;
@@ -41,8 +41,8 @@ public class ExtensionUtils {
     return InstantiationStrategy.PER_PROJECT.equals(strategy);
   }
 
-  public static boolean isBatchExtension(Object extension) {
-    return isType(extension, BatchExtension.class);
+  public static boolean isBatchSide(Object extension) {
+    return AnnotationUtils.getAnnotation(extension, BatchSide.class) != null;
   }
 
   public static boolean supportsEnvironment(Object extension, EnvironmentInformation environment) {
index 18be773ae8c7e1038d1c4890d5c6d28a77affb8c..c5d2a431b8b05764e22fbe45c25045c9569c5c58 100644 (file)
@@ -113,6 +113,7 @@ public class GlobalContainer extends ComponentContainer {
       new FileCacheProvider(),
       System2.INSTANCE,
       DefaultI18n.class,
+      Durations.class,
       new GlobalRepositoriesProvider(),
       UserRepository.class);
     addIfMissing(BatchPluginInstaller.class, PluginInstaller.class);
@@ -153,8 +154,7 @@ public class GlobalContainer extends ComponentContainer {
       PastSnapshotFinderByPreviousAnalysis.class,
       PastSnapshotFinderByVersion.class,
       PastSnapshotFinderByPreviousVersion.class,
-      PastSnapshotFinder.class,
-      Durations.class);
+      PastSnapshotFinder.class);
   }
 
   @Override
index 35f9fb308f537f44e8c89a5c3bbfdbcaf26b9eb9..fd564925ef7e5b4a4a9a5213ff2ea5fbeb4b1770 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.bootstrap;
 
 import com.google.common.collect.Lists;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.ExtensionProvider;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.measures.CoreMetrics;
@@ -29,8 +29,9 @@ import org.sonar.api.measures.Metrics;
 
 import java.util.List;
 
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public class MetricProvider extends ExtensionProvider implements BatchComponent {
+public class MetricProvider extends ExtensionProvider {
 
   private Metrics[] factories;
 
index 91eac2e7ebe4148d7770689af2023f68e7d2ae5c..4cb02122d92445f52643bb01417701a15aed7652 100644 (file)
@@ -31,11 +31,11 @@ import com.google.gson.JsonParser;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
-import org.sonar.core.util.DefaultHttpDownloader;
-import org.sonar.batch.bootstrapper.EnvironmentInformation;
 import org.sonar.api.utils.HttpDownloader;
+import org.sonar.batch.bootstrapper.EnvironmentInformation;
+import org.sonar.core.util.DefaultHttpDownloader;
 
 import javax.annotation.Nullable;
 
@@ -54,7 +54,8 @@ import java.util.List;
  *
  * @since 3.4
  */
-public class ServerClient implements BatchComponent {
+@BatchSide
+public class ServerClient {
 
   private static final String GET = "GET";
   private BootstrapProperties props;
index fce09a6cd1cb56a9bce4b659d523a0cfbd09d04a..e372178e2ba2e284efc64f741284aac274cda067 100644 (file)
@@ -19,8 +19,6 @@
  */
 package org.sonar.batch.bootstrap;
 
-import org.sonar.batch.components.PastMeasuresLoader;
-
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.CoreProperties;
 import org.sonar.core.platform.ComponentContainer;
@@ -35,8 +33,6 @@ import org.sonar.batch.deprecated.tasks.Tasks;
 import org.sonar.batch.scan.DeprecatedProjectReactorBuilder;
 import org.sonar.batch.scan.ProjectReactorBuilder;
 import org.sonar.batch.scan.ScanTask;
-import org.sonar.batch.scan.measure.DefaultMetricFinder;
-import org.sonar.batch.scan.measure.DeprecatedMetricFinder;
 import org.sonar.core.permission.PermissionFacade;
 import org.sonar.core.resource.DefaultResourcePermissions;
 
@@ -49,13 +45,11 @@ public class TaskContainer extends ComponentContainer {
 
   private final Map<String, String> taskProperties;
   private final Object[] components;
-  private final DefaultAnalysisMode analysisMode;
 
   public TaskContainer(ComponentContainer parent, Map<String, String> taskProperties, Object... components) {
     super(parent);
     this.taskProperties = taskProperties;
     this.components = components;
-    analysisMode = parent.getComponentByType(DefaultAnalysisMode.class);
   }
 
   @Override
@@ -63,24 +57,11 @@ public class TaskContainer extends ComponentContainer {
     installCoreTasks();
     installTaskExtensions();
     installComponentsUsingTaskExtensions();
-    addCoreComponents();
-    if (analysisMode.isDb()) {
-      addDataBaseComponents();
-    }
     for (Object component : components) {
       add(component);
     }
   }
 
-  private void addDataBaseComponents() {
-    add(PastMeasuresLoader.class);
-  }
-
-  private void addCoreComponents() {
-    add(DefaultMetricFinder.class,
-      DeprecatedMetricFinder.class);
-  }
-
   void installCoreTasks() {
     add(new TaskProperties(taskProperties, getParent().getComponentByType(BootstrapProperties.class).property(CoreProperties.ENCRYPTION_SECRET_KEY_PATH)));
     add(
index 7ce7c1f7cf196bf311f5c32d2341df5f3a592065..c57d55a7c282dfc8acee3773d609f737a545b05c 100644 (file)
  */
 package org.sonar.batch.bootstrapper;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 /**
  * Describes execution environment.
  * 
  * @since 2.6
  */
-public class EnvironmentInformation implements BatchComponent {
+@BatchSide
+public class EnvironmentInformation {
 
   private String key;
   private String version;
index d969e172338df0b65d212aa25597093f0979eeaf..672676edd3650b00561f61b8cd9b8c503a06a9ba 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.batch.components;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
 import org.sonar.api.measures.Metric;
@@ -41,7 +41,8 @@ import java.util.Map;
 /**
  * Can't be moved. Used by devcockpit.
  */
-public class PastMeasuresLoader implements BatchComponent {
+@BatchSide
+public class PastMeasuresLoader {
 
   private Map<Integer, Metric> metricByIds;
   private DatabaseSession session;
index 745dcbf817b9ecd8dc57fc4e1cbc4341a99fe008..f7d9f0bab2b91626bf9eba15a0b84a75ca30bbbd 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.base.Strings;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.database.model.Snapshot;
@@ -42,7 +42,8 @@ import java.util.Date;
 /**
  * Can't be moved since it is used by devcockpit.
  */
-public class PastSnapshotFinder implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinder {
 
   private static final Logger LOG = LoggerFactory.getLogger(PastSnapshotFinder.class);
 
index fa97f80d2ebacfbf728216a030bbb642b0ef6924..766bbab044ea55d11319c4791bb93f5063b6386b 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.components;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
@@ -35,7 +35,8 @@ import static com.google.common.collect.Lists.newLinkedList;
 import static org.sonar.api.utils.DateUtils.longToDate;
 
 @RequiresDB
-public class TimeMachineConfiguration implements BatchComponent {
+@BatchSide
+public class TimeMachineConfiguration {
 
   private static final Logger LOG = LoggerFactory.getLogger(TimeMachineConfiguration.class);
 
index 45964262241ccfd72775ff2b8f4c4631105d8b2d..1fc4464c39c60be43d034af56a77e86e346dd75c 100644 (file)
 package org.sonar.batch.cpd;
 
 import org.slf4j.Logger;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.sensor.SensorContext;
 
-public abstract class CpdEngine implements BatchExtension {
+@BatchSide
+public abstract class CpdEngine {
 
   abstract boolean isLanguageSupported(String language);
 
index ff4b7a81beb68589e0e6bad0dfcd65ef7d7bf7cd..a4eae0c052d8faa6367200636000c45b081bc5da 100644 (file)
  */
 package org.sonar.batch.cpd;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.CpdMapping;
 
 import javax.annotation.CheckForNull;
 
-public class CpdMappings implements BatchComponent {
+@BatchSide
+public class CpdMappings {
 
   private final CpdMapping[] mappings;
 
index a11f94a0fde24fbd18df843467094590128438a2..77809c7f785ce2f16ad3b2d79540e57b51ed2d70 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.database.DatabaseSession;
@@ -34,7 +34,8 @@ import org.sonar.core.duplication.DuplicationDao;
 
 import javax.annotation.Nullable;
 
-public class IndexFactory implements BatchComponent {
+@BatchSide
+public class IndexFactory {
 
   private static final Logger LOG = LoggerFactory.getLogger(IndexFactory.class);
 
index f4521d664a672e8700018df1d754f01c7c2621aa..3af2092c66e05ee04be7ddd416b9383d9c45f1b6 100644 (file)
@@ -26,6 +26,7 @@ import org.sonar.api.batch.DecoratorBarriers;
 import org.sonar.api.batch.DecoratorContext;
 import org.sonar.api.batch.DependedUpon;
 import org.sonar.api.batch.DependsUpon;
+import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.batch.rule.Rule;
 import org.sonar.api.batch.rule.Rules;
 import org.sonar.api.component.ResourcePerspectives;
@@ -61,6 +62,7 @@ import static com.google.common.collect.Maps.newHashMap;
  * Decorator that computes the technical debt metric
  */
 @DependsUpon(DecoratorBarriers.ISSUES_TRACKED)
+@RequiresDB
 public final class DebtDecorator implements Decorator {
 
   private final ResourcePerspectives perspectives;
index 7b925117ca1de903033284c136d5939b8e237f01..dec9b442b552111ad866d3bee4d013cb9ff9fddd 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.batch.debt;
 import com.google.common.base.Function;
 import com.google.common.collect.Ordering;
 import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.issue.internal.FieldDiffs;
@@ -32,14 +32,21 @@ import org.sonar.core.issue.IssueUpdater;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 import static com.google.common.collect.Lists.newArrayList;
 
 /**
  * Warning, before modifying this class, please do not forget that it's used by the Dev Cockpit plugin
  */
-public class IssueChangelogDebtCalculator implements BatchComponent {
+@BatchSide
+public class IssueChangelogDebtCalculator {
 
   @CheckForNull
   public Long calculateNewTechnicalDebt(Issue issue, @Nullable Date periodDate) {
@@ -55,7 +62,7 @@ public class IssueChangelogDebtCalculator implements BatchComponent {
   @CheckForNull
   private Long calculateNewTechnicalDebtValueFromChangelog(@Nullable Long currentTechnicalDebtValue, Issue issue, Date periodDate) {
     List<FieldDiffs> changelog = technicalDebtHistory(issue);
-    for (Iterator<FieldDiffs> iterator = changelog.iterator(); iterator.hasNext(); ) {
+    for (Iterator<FieldDiffs> iterator = changelog.iterator(); iterator.hasNext();) {
       FieldDiffs diff = iterator.next();
       Date date = diff.creationDate();
       if (isLesserOrEqual(date, periodDate)) {
index f437ffa37446e448d7ae7e55a494687747a346cc..9909fc474764642a07a5b397e89490c87d5b93f4 100644 (file)
 
 package org.sonar.batch.debt;
 
-import org.sonar.batch.components.Period;
-
-import org.sonar.batch.components.TimeMachineConfiguration;
 import com.google.common.collect.ImmutableList;
 import org.sonar.api.batch.Decorator;
 import org.sonar.api.batch.DecoratorBarriers;
 import org.sonar.api.batch.DecoratorContext;
 import org.sonar.api.batch.DependedUpon;
 import org.sonar.api.batch.DependsUpon;
+import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.component.ResourcePerspectives;
 import org.sonar.api.issue.Issuable;
 import org.sonar.api.issue.Issue;
@@ -38,6 +36,8 @@ import org.sonar.api.measures.MeasureUtils;
 import org.sonar.api.measures.Metric;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
+import org.sonar.batch.components.Period;
+import org.sonar.batch.components.TimeMachineConfiguration;
 
 import javax.annotation.Nullable;
 
@@ -50,6 +50,7 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * Decorator that computes the technical debt metric
  */
+@RequiresDB
 @DependsUpon(DecoratorBarriers.ISSUES_TRACKED)
 public final class NewDebtDecorator implements Decorator {
 
index f6cc8e660a6738dff152fcaa3b9c7e1f197ded83..23c5bbdd98e203f2e4388152d9e57378a2187e60 100644 (file)
 
 package org.sonar.batch.debt;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.measures.Metric;
 
 import javax.annotation.Nullable;
 
-public class SqaleRatingSettings implements BatchComponent {
+@BatchSide
+public class SqaleRatingSettings {
 
   private final Settings settings;
 
index 5a5fff138a1adbc7752e35f7c722dbb86537c95c..c4830c0d6ea9f31349b6b4c2b6449fd57963160e 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.deprecated.components;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
@@ -35,7 +35,8 @@ import java.util.List;
 
 import static org.sonar.api.utils.DateUtils.dateToLong;
 
-public class PastSnapshotFinderByDate implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByDate {
 
   private DatabaseSession session;
 
index 21ab5d15e13ebdad52bc347cf51ef8411fdb195c..7e54893d41d44a35f3421ae672141087938fcb77 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.deprecated.components;
 
 import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
@@ -28,10 +28,12 @@ import org.sonar.api.resources.Qualifiers;
 import org.sonar.batch.components.PastSnapshot;
 
 import javax.annotation.CheckForNull;
+
 import java.util.Date;
 import java.util.List;
 
-public class PastSnapshotFinderByDays implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByDays {
 
   private DatabaseSession session;
 
index e770975d4610e4a50b83d3f58c51b7d758535f27..9f4a964b77fad0b947c9b72d1cad81b535749f86 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.deprecated.components;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
@@ -33,7 +33,8 @@ import java.util.List;
 
 import static org.sonar.api.utils.DateUtils.longToDate;
 
-public class PastSnapshotFinderByPreviousAnalysis implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByPreviousAnalysis {
 
   private DatabaseSession session;
 
index 2de291f3e04f7f0e1728162d778d00c66f76c484..b0a25385e62a8c10fe57c4d62c609efe194e63ad 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.deprecated.components;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
@@ -30,7 +30,8 @@ import org.sonar.core.persistence.MyBatis;
 
 import static org.sonar.api.utils.DateUtils.longToDate;
 
-public class PastSnapshotFinderByPreviousVersion implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByPreviousVersion {
 
   private final DatabaseSession session;
   private final MyBatis mybatis;
index c6f5423ffab24134552eecbf422bc1f3d8874f6b..c7ae4158cba435fb49e531accd3008752aee9ff0 100644 (file)
  */
 package org.sonar.batch.deprecated.components;
 
-import org.sonar.batch.components.PastSnapshot;
-
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
 import org.sonar.api.resources.Qualifiers;
+import org.sonar.batch.components.PastSnapshot;
 
 import java.util.Date;
 import java.util.List;
 
 import static org.sonar.api.utils.DateUtils.longToDate;
 
-public class PastSnapshotFinderByVersion implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByVersion {
 
   private final DatabaseSession session;
 
index 3cab5d098c8db56aefefcac9ad7bd7ead85eaa0d..55f9b8104347af63e2bc0f262014476d1fa86448 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.batch.deprecated.components;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.Snapshot;
@@ -30,12 +30,14 @@ import org.sonar.batch.components.PastSnapshot;
 import org.sonar.batch.components.PastSnapshotFinder;
 
 import javax.persistence.Query;
+
 import java.util.List;
 
 import static com.google.common.collect.Lists.newLinkedList;
 import static org.sonar.api.utils.DateUtils.dateToLong;
 
-public class PeriodsDefinition implements BatchComponent {
+@BatchSide
+public class PeriodsDefinition {
 
   private static final int NUMBER_OF_VARIATION_SNAPSHOTS = 5;
 
index e11322f8d10d9fa272b13c179b3a8782eee8ce96..78c07947429b1db25017b56ec4bc8101732dc575 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.duplication;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.sensor.duplication.internal.DefaultDuplication;
 import org.sonar.batch.index.Cache;
 import org.sonar.batch.index.Caches;
@@ -29,7 +29,8 @@ import org.sonar.batch.index.Caches;
 /**
  * Cache of duplication blocks. This cache is shared amongst all project modules.
  */
-public class DuplicationCache implements BatchComponent {
+@BatchSide
+public class DuplicationCache {
 
   private final Cache<DefaultDuplication> cache;
   private int sequence = 1;
index ca2a33a50145a1fc463b1a944ba8e5a307e33a50..ac0f509ec9d27f91c0bc34f687d312c5801dc029 100644 (file)
@@ -32,7 +32,7 @@ import com.persistit.logging.Slf4jAdapter;
 import org.apache.commons.io.FileUtils;
 import org.picocontainer.Startable;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.utils.TempFolder;
 
 import java.io.File;
@@ -44,7 +44,8 @@ import java.util.Set;
  *
  * @since 3.6
  */
-public class Caches implements BatchComponent, Startable {
+@BatchSide
+public class Caches implements Startable {
 
   private final Set<String> cacheNames = Sets.newHashSet();
   private File tempDir;
index 12ca8d6be65552d7c86e90f734c3a7461025b81d..19de9fb77917443ce357114442546b6a1539ee42 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.resources.Library;
@@ -37,7 +37,8 @@ import javax.annotation.Nullable;
 import java.util.Collection;
 import java.util.Map;
 
-public class ResourceCache implements BatchComponent {
+@BatchSide
+public class ResourceCache {
   // resource by component key
   private final Map<String, BatchResource> resources = Maps.newLinkedHashMap();
   // dedicated cache for libraries
index 69b7dd98d85b5b76b39989907689f757d8865ebe..33c2a98cc693f9843de0304a3e850a2877036f66 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DeprecatedDefaultInputFile;
 import org.sonar.api.database.DatabaseSession;
@@ -43,7 +43,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class ResourceKeyMigration implements BatchComponent {
+@BatchSide
+public class ResourceKeyMigration {
 
   private static final String UNABLE_TO_UPDATE_COMPONENT_NO_MATCH_WAS_FOUND = "Unable to update component {}. No match was found.";
   private static final String COMPONENT_CHANGED_TO = "Component {} changed to {}";
index 2bd6532dd776cf0951e9617f743b6f1dbaa97121..0dfd07a3061010db7e2f9ddbd9167e4c888a0ddb 100644 (file)
  */
 package org.sonar.batch.index;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
-public interface ScanPersister extends BatchComponent {
+@BatchSide
+public interface ScanPersister {
 
   void persist();
 
index f0c1cfb1fbd9328cb38426bbcedb59d0fb55ce91..1023ab35c68aeb9b381409dee621372c5b89cf81 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.issue;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.batch.index.Cache;
 import org.sonar.batch.index.Caches;
@@ -29,7 +29,8 @@ import java.util.Collection;
 /**
  * Shared issues among all project modules
  */
-public class IssueCache implements BatchComponent {
+@BatchSide
+public class IssueCache {
 
   // component key -> issue key -> issue
   private final Cache<DefaultIssue> cache;
index 469a65cb90980786a8d21ca15036c89be39ece7d..16b23a0f2164e433447ca7f310f10733d99ed467 100644 (file)
  */
 package org.sonar.batch.issue;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.issue.batch.IssueFilter;
 import org.sonar.api.issue.internal.DefaultIssue;
 
-public class IssueFilters implements BatchComponent {
+@BatchSide
+public class IssueFilters {
 
   private final org.sonar.api.issue.IssueFilter[] exclusionFilters;
   private final IssueFilter[] filters;
index e29fc5aaa30661829dfa6304a2d8fb8aace997ea..e57ffe7d4116373f0ee682c1512f299a41c6a613 100644 (file)
@@ -22,14 +22,15 @@ package org.sonar.batch.issue.ignore.pattern;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.config.Settings;
 
 import java.util.List;
 
 import static com.google.common.base.Objects.firstNonNull;
 
-public abstract class AbstractPatternInitializer implements BatchExtension {
+@BatchSide
+public abstract class AbstractPatternInitializer {
 
   private Settings settings;
 
@@ -53,7 +54,7 @@ public abstract class AbstractPatternInitializer implements BatchExtension {
   }
 
   public boolean hasMulticriteriaPatterns() {
-    return ! multicriteriaPatterns.isEmpty();
+    return !multicriteriaPatterns.isEmpty();
   }
 
   public abstract void initializePatternsForPath(String relativePath, String componentKey);
@@ -68,7 +69,7 @@ public abstract class AbstractPatternInitializer implements BatchExtension {
       String resourceKeyPattern = settings.getString(propPrefix + "resourceKey");
       String ruleKeyPattern = settings.getString(propPrefix + "ruleKey");
       String lineRange = "*";
-      String[] fields = new String[] { resourceKeyPattern, ruleKeyPattern, lineRange };
+      String[] fields = new String[] {resourceKeyPattern, ruleKeyPattern, lineRange};
       PatternDecoder.checkRegularLineConstraints(StringUtils.join(fields, ","), fields);
       IssuePattern pattern = new IssuePattern(firstNonNull(resourceKeyPattern, "*"), firstNonNull(ruleKeyPattern, "*"));
       PatternDecoder.decodeRangeOfLines(pattern, firstNonNull(lineRange, "*"));
index a86a5382cf71f0b9a8fb0589fef247e18d01ee0f..792c4ba94cce38218fba78f6cffd212b4a052a74 100644 (file)
 
 package org.sonar.batch.issue.ignore.scanner;
 
-import org.sonar.batch.issue.ignore.pattern.IssueExclusionPatternInitializer;
-import org.sonar.batch.issue.ignore.pattern.IssuePattern;
-import org.sonar.batch.issue.ignore.pattern.LineRange;
-
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.batch.issue.ignore.pattern.IssueExclusionPatternInitializer;
+import org.sonar.batch.issue.ignore.pattern.IssuePattern;
+import org.sonar.batch.issue.ignore.pattern.LineRange;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,7 +37,8 @@ import java.nio.charset.Charset;
 import java.util.List;
 import java.util.Set;
 
-public class IssueExclusionsRegexpScanner implements BatchExtension {
+@BatchSide
+public class IssueExclusionsRegexpScanner {
 
   private static final Logger LOG = LoggerFactory.getLogger(IssueExclusionsRegexpScanner.class);
 
@@ -64,8 +64,8 @@ public class IssueExclusionsRegexpScanner implements BatchExtension {
     }
     for (IssuePattern pattern : patternsInitializer.getBlockPatterns()) {
       blockMatchers.add(new DoubleRegexpMatcher(
-          java.util.regex.Pattern.compile(pattern.getBeginBlockRegexp()),
-          java.util.regex.Pattern.compile(pattern.getEndBlockRegexp())));
+        java.util.regex.Pattern.compile(pattern.getBeginBlockRegexp()),
+        java.util.regex.Pattern.compile(pattern.getEndBlockRegexp())));
     }
 
     init();
index 6d246b74606f11a13d5723835d0ef43a3482b386..8e73fb0a237fa0f17c930e5091ece452dbeb9ef6 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.batch.issue.tracking;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.batch.index.Cache;
 import org.sonar.batch.index.Caches;
@@ -33,8 +33,9 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public class InitialOpenIssuesStack implements BatchExtension {
+public class InitialOpenIssuesStack {
 
   private final Cache<IssueDto> issuesCache;
   private final Cache<ArrayList<IssueChangeDto>> issuesChangelogCache;
index b501e18ad662f27f066de05af54ef59a0a9fde6d..f941bbcdcf88ff6503c90b2650a0e36f059c6a8c 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.issue.tracking;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.IssueHandler;
 import org.sonar.api.issue.internal.DefaultIssue;
@@ -30,7 +30,8 @@ import org.sonar.core.user.DefaultUser;
 
 import javax.annotation.Nullable;
 
-public class IssueHandlers implements BatchComponent {
+@BatchSide
+public class IssueHandlers {
   private final IssueHandler[] handlers;
   private final DefaultContext context;
 
index adbdbc97525b6bfbb7ba47a4b3caf8aedf9bc813..6d72febbb7713c2c38e79ff0aafcc619f1fb8933 100644 (file)
@@ -27,16 +27,21 @@ import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.issue.internal.DefaultIssue;
 
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
 
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public class IssueTracking implements BatchComponent {
+@BatchSide
+public class IssueTracking {
 
   /**
    * @param sourceHashHolder Null when working on resource that is not a file (directory/project)
index 0086ab704fa85404809325733d86723ce042df03..ec1acefd4e16fbeb4d4fe5c3b4d5db2120162c9f 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.fs.internal.DefaultInputFile;
 import org.sonar.api.batch.rule.ActiveRule;
@@ -49,7 +49,8 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 
-public class LocalIssueTracking implements BatchComponent {
+@BatchSide
+public class LocalIssueTracking {
 
   private static final Logger LOG = LoggerFactory.getLogger(LocalIssueTracking.class);
 
index 98719ce179b3537703903333e0997d15e2fbf46a..7bfabac4a6e3e2dde0ef9201ab355e8270e765ae 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.issue.tracking;
 
 import com.google.common.base.Function;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.bootstrap.ProjectReactor;
@@ -45,7 +45,8 @@ import java.util.Collections;
 import java.util.List;
 
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public class ServerIssueRepository implements BatchComponent {
+@BatchSide
+public class ServerIssueRepository {
 
   private static final Logger LOG = Loggers.get(ServerIssueRepository.class);
 
index 857bdb2fdafc2f458d937163411f5fb161e58aae..8f3be703e35d2124d858695572064b0c80a2c4d1 100644 (file)
  */
 package org.sonar.batch.issue.tracking;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
-public interface ServerLineHashesLoader extends BatchComponent {
+@BatchSide
+public interface ServerLineHashesLoader {
 
   String[] getLineHashes(String fileKey);
 }
index 196ac9a9250c04c3d64106faa986cc7e694c66af..78b886b51b90c0d9cd431fc545e83fb57701700e 100644 (file)
  */
 package org.sonar.batch.mediumtest;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.batch.scan.ProjectScanContainer;
 
-public interface ScanTaskObserver extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface ScanTaskObserver {
 
   void scanTaskCompleted(ProjectScanContainer container);
 
index 69bc2daad89933849195ea9a107e181466753e4c..bf7dcb4731a4b10b02d2ccb97df22dbeb14cb7d5 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.phases;
 
 import com.google.common.collect.Lists;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.Decorator;
 import org.sonar.api.batch.DecoratorContext;
@@ -41,7 +41,8 @@ import org.sonar.batch.sensor.coverage.CoverageExclusions;
 import java.util.Collection;
 import java.util.List;
 
-public class DecoratorsExecutor implements BatchComponent {
+@BatchSide
+public class DecoratorsExecutor {
 
   private final DecoratorsSelector decoratorsSelector;
   private final SonarIndex index;
index 3618d96cedc79fc040fe117263166ad56ab45740..8483f14b71c58d68225dbcc35856f4d4344fe87e 100644 (file)
@@ -21,14 +21,15 @@ package org.sonar.batch.phases;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.batch.bootstrap.DefaultAnalysisMode;
 import org.sonar.batch.events.EventBus;
 import org.sonar.batch.index.ScanPersister;
 
 import java.util.Arrays;
 
-public class PersistersExecutor implements BatchComponent {
+@BatchSide
+public class PersistersExecutor {
 
   private static final Logger LOG = LoggerFactory.getLogger(PersistersExecutor.class);
 
index 9ef8f5d06f2c91b6b5cfceeb1dc2ae1d155265ab..48297539fd17af342738212032d434a5d59e5aaa 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.PostJob;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.resources.Project;
@@ -32,7 +32,8 @@ import org.sonar.batch.events.EventBus;
 
 import java.util.Collection;
 
-public class PostJobsExecutor implements BatchComponent {
+@BatchSide
+public class PostJobsExecutor {
   private static final Logger LOG = LoggerFactory.getLogger(PostJobsExecutor.class);
 
   private final BatchExtensionDictionnary selector;
index 7194f548f02377a4c9f8afd7eaa338376f3fb3cd..43fec23ea3f74ed52a31c721a96be8537f429907 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.phases;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.resources.Language;
@@ -30,7 +30,8 @@ import org.sonar.api.utils.SonarException;
 /**
  * Should be dropped when org.sonar.api.resources.Project is fully refactored.
  */
-public class ProjectInitializer implements BatchComponent {
+@BatchSide
+public class ProjectInitializer {
 
   private Languages languages;
   private Settings settings;
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/SensorMatcher.java b/sonar-batch/src/main/java/org/sonar/batch/phases/SensorMatcher.java
deleted file mode 100644 (file)
index c098deb..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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.batch.phases;
-
-import org.apache.commons.lang.ClassUtils;
-import org.sonar.api.BatchExtension;
-import org.sonar.api.batch.InstantiationStrategy;
-import org.sonar.api.batch.Sensor;
-import org.sonar.batch.bootstrap.ExtensionMatcher;
-
-/**
- * Allow to filter sensors that will be executed.
- * Used by views !!
- * @since 3.6
- *
- */
-@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public abstract class SensorMatcher implements BatchExtension, ExtensionMatcher {
-
-  @Override
-  public final boolean accept(Object extension) {
-    return (ClassUtils.isAssignable(extension.getClass(), Sensor.class) && acceptSensor((Sensor) extension))
-      || ClassUtils.isAssignable(extension.getClass(), org.sonar.api.batch.sensor.Sensor.class);
-  }
-
-  public abstract boolean acceptSensor(Sensor sensor);
-
-}
index 0c4b08160e31e8ae292dfeca22e35e56e8d7b624..a21b111c18268c1fcec5d2cdb64b69a6761d47c5 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.phases;
 
 import com.google.common.collect.Lists;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.Sensor;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.resources.Project;
@@ -29,22 +29,21 @@ import org.sonar.batch.events.EventBus;
 
 import java.util.Collection;
 
-public class SensorsExecutor implements BatchComponent {
+@BatchSide
+public class SensorsExecutor {
 
   private EventBus eventBus;
   private Project module;
   private BatchExtensionDictionnary selector;
-  private final SensorMatcher sensorMatcher;
 
-  public SensorsExecutor(BatchExtensionDictionnary selector, Project project, EventBus eventBus, SensorMatcher sensorMatcher) {
+  public SensorsExecutor(BatchExtensionDictionnary selector, Project project, EventBus eventBus) {
     this.selector = selector;
     this.eventBus = eventBus;
     this.module = project;
-    this.sensorMatcher = sensorMatcher;
   }
 
   public void execute(SensorContext context) {
-    Collection<Sensor> sensors = selector.select(Sensor.class, module, true, sensorMatcher);
+    Collection<Sensor> sensors = selector.select(Sensor.class, module, true, null);
     eventBus.fireEvent(new SensorsPhaseEvent(Lists.newArrayList(sensors), true));
 
     for (Sensor sensor : sensors) {
index 662d5bd9a1eae98401d817e5fa9aa4f46aff83de..3d19d4a12cee87bcfec5f07f9139701eec0ec934 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.platform;
 
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 import org.sonar.api.platform.Server;
@@ -33,7 +33,8 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-public class DefaultServer extends Server implements BatchComponent {
+@BatchSide
+public class DefaultServer extends Server {
 
   private Settings settings;
   private ServerClient client;
index fa4f3ea613a4f441afe8ec4cd3ce3b3236ff1796..93362baf51defb6aa242191edee66aea4e20742d 100644 (file)
@@ -21,12 +21,13 @@ package org.sonar.batch.postjob;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.postjob.internal.DefaultPostJobDescriptor;
 import org.sonar.api.config.Settings;
 
-public class PostJobOptimizer implements BatchComponent {
+@BatchSide
+public class PostJobOptimizer {
 
   private static final Logger LOG = LoggerFactory.getLogger(PostJobOptimizer.class);
 
index ee3f9f34a762449ba921283c7611bb48d5043bf7..030571ce8d58520860182b00787b1f7d09e2da14 100644 (file)
  */
 package org.sonar.batch.qualitygate;
 
-import org.sonar.api.batch.*;
+import org.sonar.api.batch.Decorator;
+import org.sonar.api.batch.DecoratorContext;
+import org.sonar.api.batch.DependsUpon;
+import org.sonar.api.batch.RequiresDB;
+import org.sonar.api.batch.TimeMachine;
+import org.sonar.api.batch.TimeMachineQuery;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.Metric;
@@ -34,6 +39,7 @@ import org.sonar.batch.report.EventCache;
 
 import java.util.List;
 
+@RequiresDB
 public class GenerateQualityGateEvents implements Decorator {
 
   private final QualityGate qualityGate;
index 2684f8d9cfa220bf2ec784f0f116e342c2b1d86c..644d5804807c441d10b93ba968ec7167521aab56 100644 (file)
@@ -21,13 +21,14 @@ package org.sonar.batch.qualitygate;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 import javax.annotation.Nullable;
 
 import java.util.Collection;
 
-public class QualityGate implements BatchComponent {
+@BatchSide
+public class QualityGate {
 
   private final String name;
 
index 387050f280eccaaf17c152290afec7ca0c190bde..d2936146d74f819f77e157019fa79770c3782b3e 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.report;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.resources.Resource;
 import org.sonar.batch.index.ResourceCache;
 import org.sonar.batch.protocol.Constants.EventCategory;
@@ -27,9 +27,14 @@ import org.sonar.batch.protocol.output.BatchReport.Event;
 
 import javax.annotation.Nullable;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-public class EventCache implements BatchComponent {
+@BatchSide
+public class EventCache {
 
   private final Map<Integer, List<Event>> eventsByComponentBatchId = new HashMap<>();
   private final ResourceCache resourceCache;
index e062ccb1eac8f61a0f6be1bacb8e6e69baf5ddf9..be9bcbb49ada6defca79f171eb64f5a0da77edfd 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.commons.io.FileUtils;
 import org.picocontainer.Startable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.bootstrap.ProjectReactor;
 import org.sonar.api.config.Settings;
@@ -41,7 +41,8 @@ import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-public class ReportPublisher implements BatchComponent, Startable {
+@BatchSide
+public class ReportPublisher implements Startable {
 
   private static final Logger LOG = LoggerFactory.getLogger(ReportPublisher.class);
   public static final String KEEP_REPORT_PROP_KEY = "sonar.batch.keepReport";
index dd80fee1dcd81998841b2ac156d51a92afd129be..6c81567765118bd34160333c748d794ad56b6073 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.repository.language;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 import javax.annotation.CheckForNull;
 
@@ -29,7 +29,8 @@ import java.util.Collection;
  * Languages repository
  * @since 4.4
  */
-public interface LanguagesRepository extends BatchComponent {
+@BatchSide
+public interface LanguagesRepository {
 
   /**
    * Get language.
index 9c0fe13d21e76c160e89f9437a6887da2e249aed..65d166d26427d964c59b748310d37be4eb26a967 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.rule;
 
 import com.google.common.collect.ImmutableMap;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.batch.protocol.input.ProjectRepositories;
 
 import javax.annotation.CheckForNull;
@@ -31,7 +31,8 @@ import java.util.Map;
 /**
  * Lists the Quality profiles enabled on the current module.
  */
-public class ModuleQProfiles implements BatchComponent {
+@BatchSide
+public class ModuleQProfiles {
 
   public static final String SONAR_PROFILE_PROP = "sonar.profile";
   private final Map<String, QProfile> byLanguage;
index 4ebc91e489ba1fffec7e1e980bafef9cc9c17ac9..d879d9764398652d9038a721e816b600325251e8 100644 (file)
@@ -21,11 +21,20 @@ package org.sonar.batch.rule;
 
 import com.google.common.collect.ImmutableSortedMap;
 import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.batch.*;
+import org.sonar.api.batch.Decorator;
+import org.sonar.api.batch.DecoratorContext;
+import org.sonar.api.batch.DependsUpon;
+import org.sonar.api.batch.RequiresDB;
+import org.sonar.api.batch.TimeMachine;
+import org.sonar.api.batch.TimeMachineQuery;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.Metric;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.Language;
+import org.sonar.api.resources.Languages;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.Resource;
 import org.sonar.api.utils.KeyValueFormat;
 import org.sonar.batch.protocol.Constants.EventCategory;
 import org.sonar.batch.report.EventCache;
@@ -37,6 +46,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+@RequiresDB
 public class QProfileEventsDecorator implements Decorator {
 
   private final TimeMachine timeMachine;
index 009b9d56253ba86d13b21329c937f185c99ba490..a141502fd6ceaba4cc841c23496aff613a82a7c4 100644 (file)
@@ -23,12 +23,13 @@ import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.FileSystem;
 import org.sonar.api.config.Settings;
 import org.sonar.api.utils.MessageException;
 
-public class QProfileVerifier implements BatchComponent {
+@BatchSide
+public class QProfileVerifier {
 
   private static final Logger LOG = LoggerFactory.getLogger(QProfileVerifier.class);
 
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/DefaultSensorMatcher.java b/sonar-batch/src/main/java/org/sonar/batch/scan/DefaultSensorMatcher.java
deleted file mode 100644 (file)
index 46cffb9..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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.batch.scan;
-
-import org.sonar.api.batch.Sensor;
-import org.sonar.batch.phases.SensorMatcher;
-
-/**
- * By default all sensors are executed
- * @since 3.6
- *
- */
-public class DefaultSensorMatcher extends SensorMatcher {
-
-  @Override
-  public boolean acceptSensor(Sensor sensor) {
-    return true;
-  }
-
-}
index f8312429543e42117525dc75003d4f67be880151..e3e808b914dcefc11fc0378b461964a3400548e2 100644 (file)
@@ -21,7 +21,6 @@ package org.sonar.batch.scan;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.fs.internal.FileMetadata;
@@ -31,9 +30,11 @@ import org.sonar.core.platform.ComponentContainer;
 import org.sonar.api.resources.Project;
 import org.sonar.api.scan.filesystem.FileExclusions;
 import org.sonar.batch.ProjectTree;
-import org.sonar.batch.bootstrap.*;
-import org.sonar.batch.components.TimeMachineConfiguration;
-import org.sonar.batch.debt.*;
+import org.sonar.batch.bootstrap.BatchExtensionDictionnary;
+import org.sonar.batch.bootstrap.DefaultAnalysisMode;
+import org.sonar.batch.bootstrap.ExtensionInstaller;
+import org.sonar.batch.bootstrap.ExtensionMatcher;
+import org.sonar.batch.bootstrap.ExtensionUtils;
 import org.sonar.batch.deprecated.DeprecatedSensorContext;
 import org.sonar.batch.deprecated.ResourceFilters;
 import org.sonar.batch.deprecated.components.DefaultProjectClasspath;
@@ -50,17 +51,34 @@ import org.sonar.batch.issue.ignore.pattern.IssueExclusionPatternInitializer;
 import org.sonar.batch.issue.ignore.pattern.IssueInclusionPatternInitializer;
 import org.sonar.batch.issue.ignore.scanner.IssueExclusionsLoader;
 import org.sonar.batch.issue.ignore.scanner.IssueExclusionsRegexpScanner;
-import org.sonar.batch.issue.tracking.InitialOpenIssuesSensor;
-import org.sonar.batch.issue.tracking.IssueHandlers;
-import org.sonar.batch.issue.tracking.IssueTrackingDecorator;
-import org.sonar.batch.language.LanguageDistributionDecorator;
-import org.sonar.batch.phases.*;
+import org.sonar.batch.phases.DecoratorsExecutor;
+import org.sonar.batch.phases.InitializersExecutor;
+import org.sonar.batch.phases.PersistersExecutor;
+import org.sonar.batch.phases.PhaseExecutor;
+import org.sonar.batch.phases.PhasesTimeProfiler;
+import org.sonar.batch.phases.PostJobsExecutor;
+import org.sonar.batch.phases.ProjectInitializer;
+import org.sonar.batch.phases.SensorsExecutor;
 import org.sonar.batch.postjob.DefaultPostJobContext;
 import org.sonar.batch.postjob.PostJobOptimizer;
-import org.sonar.batch.qualitygate.GenerateQualityGateEvents;
-import org.sonar.batch.qualitygate.QualityGateVerifier;
-import org.sonar.batch.rule.*;
-import org.sonar.batch.scan.filesystem.*;
+import org.sonar.batch.rule.ModuleQProfiles;
+import org.sonar.batch.rule.QProfileDecorator;
+import org.sonar.batch.rule.QProfileSensor;
+import org.sonar.batch.rule.QProfileVerifier;
+import org.sonar.batch.rule.RuleFinderCompatibility;
+import org.sonar.batch.rule.RulesProfileProvider;
+import org.sonar.batch.scan.filesystem.ComponentIndexer;
+import org.sonar.batch.scan.filesystem.DefaultModuleFileSystem;
+import org.sonar.batch.scan.filesystem.DeprecatedFileFilters;
+import org.sonar.batch.scan.filesystem.ExclusionFilters;
+import org.sonar.batch.scan.filesystem.FileIndexer;
+import org.sonar.batch.scan.filesystem.FileSystemLogger;
+import org.sonar.batch.scan.filesystem.InputFileBuilderFactory;
+import org.sonar.batch.scan.filesystem.LanguageDetectionFactory;
+import org.sonar.batch.scan.filesystem.ModuleFileSystemInitializer;
+import org.sonar.batch.scan.filesystem.ModuleInputFileCache;
+import org.sonar.batch.scan.filesystem.ProjectFileSystemAdapter;
+import org.sonar.batch.scan.filesystem.StatusDetectionFactory;
 import org.sonar.batch.scan.report.IssuesReports;
 import org.sonar.batch.sensor.DefaultSensorContext;
 import org.sonar.batch.sensor.DefaultSensorStorage;
@@ -68,6 +86,7 @@ import org.sonar.batch.sensor.SensorOptimizer;
 import org.sonar.batch.sensor.coverage.CoverageExclusions;
 import org.sonar.batch.source.HighlightableBuilder;
 import org.sonar.batch.source.SymbolizableBuilder;
+import org.sonar.core.timemachine.Periods;
 
 public class ModuleScanContainer extends ComponentContainer {
   private static final Logger LOG = LoggerFactory.getLogger(ModuleScanContainer.class);
@@ -84,9 +103,6 @@ public class ModuleScanContainer extends ComponentContainer {
   protected void doBeforeStart() {
     LOG.info("-------------  Scan {}", module.getName());
     addCoreComponents();
-    if (analysisMode.isDb()) {
-      addDataBaseComponents();
-    }
     addExtensions();
   }
 
@@ -102,6 +118,7 @@ public class ModuleScanContainer extends ComponentContainer {
     module.setSettings(moduleSettings);
 
     add(
+      Periods.class,
       PhaseExecutor.class,
       RuleFinderCompatibility.class,
       EventBus.class,
@@ -176,39 +193,12 @@ public class ModuleScanContainer extends ComponentContainer {
       SymbolizableBuilder.class);
   }
 
-  private void addDataBaseComponents() {
-    add(
-      // Quality Gate
-      QualityGateVerifier.class,
-      GenerateQualityGateEvents.class,
-
-      // language
-      LanguageDistributionDecorator.class,
-
-      // Debt
-      IssueChangelogDebtCalculator.class,
-      DebtDecorator.class,
-      NewDebtDecorator.class,
-      SqaleRatingDecorator.class,
-      SqaleRatingSettings.class,
-
-      // Issue tracking
-      IssueTrackingDecorator.class,
-      IssueHandlers.class,
-      InitialOpenIssuesSensor.class,
-
-      QProfileEventsDecorator.class,
-
-      TimeMachineConfiguration.class);
-
-  }
-
   private void addExtensions() {
     ExtensionInstaller installer = getComponentByType(ExtensionInstaller.class);
     installer.install(this, new ExtensionMatcher() {
       @Override
       public boolean accept(Object extension) {
-        if (ExtensionUtils.isType(extension, BatchComponent.class) && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_PROJECT)) {
+        if (ExtensionUtils.isBatchSide(extension) && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_PROJECT)) {
           // Special use-case: the extension point ProjectBuilder is used in a Maven environment to define some
           // new sub-projects without pom.
           // Example : C# plugin adds sub-projects at runtime, even if they are not defined in root pom.
index 12a23bf62e419d807c93d9b979ef81e2027b32a5..4105dab49c1edf86b5e2f49fcbab61375d8ef75b 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.batch.scan;
 
 import com.google.common.annotations.VisibleForTesting;
-import org.sonar.api.BatchComponent;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.bootstrap.ProjectBootstrapper;
@@ -34,13 +33,22 @@ import org.sonar.api.utils.SonarException;
 import org.sonar.batch.DefaultFileLinesContextFactory;
 import org.sonar.batch.ProjectConfigurator;
 import org.sonar.batch.ProjectTree;
-import org.sonar.batch.bootstrap.*;
+import org.sonar.batch.bootstrap.DefaultAnalysisMode;
+import org.sonar.batch.bootstrap.ExtensionInstaller;
+import org.sonar.batch.bootstrap.ExtensionMatcher;
+import org.sonar.batch.bootstrap.ExtensionUtils;
+import org.sonar.batch.bootstrap.MetricProvider;
+import org.sonar.batch.components.PastMeasuresLoader;
 import org.sonar.batch.debt.DebtModelProvider;
-import org.sonar.batch.debt.IssueChangelogDebtCalculator;
 import org.sonar.batch.deprecated.components.DefaultResourceCreationLock;
 import org.sonar.batch.deprecated.components.PeriodsDefinition;
 import org.sonar.batch.duplication.DuplicationCache;
-import org.sonar.batch.index.*;
+import org.sonar.batch.index.Caches;
+import org.sonar.batch.index.DefaultIndex;
+import org.sonar.batch.index.DependencyPersister;
+import org.sonar.batch.index.ResourceCache;
+import org.sonar.batch.index.ResourceKeyMigration;
+import org.sonar.batch.index.ResourcePersister;
 import org.sonar.batch.issue.DefaultProjectIssues;
 import org.sonar.batch.issue.IssueCache;
 import org.sonar.batch.issue.tracking.InitialOpenIssuesStack;
@@ -50,19 +58,28 @@ import org.sonar.batch.mediumtest.ScanTaskObservers;
 import org.sonar.batch.phases.GraphPersister;
 import org.sonar.batch.profiling.PhasesSumUpTimeProfiler;
 import org.sonar.batch.qualitygate.QualityGateProvider;
-import org.sonar.batch.report.*;
+import org.sonar.batch.report.ComponentsPublisher;
+import org.sonar.batch.report.CoveragePublisher;
+import org.sonar.batch.report.DuplicationsPublisher;
+import org.sonar.batch.report.EventCache;
+import org.sonar.batch.report.IssuesPublisher;
+import org.sonar.batch.report.MeasuresPublisher;
+import org.sonar.batch.report.ReportPublisher;
+import org.sonar.batch.report.SourcePublisher;
+import org.sonar.batch.report.TestExecutionAndCoveragePublisher;
 import org.sonar.batch.repository.ProjectRepositoriesProvider;
 import org.sonar.batch.repository.language.DefaultLanguagesRepository;
 import org.sonar.batch.rule.ActiveRulesProvider;
 import org.sonar.batch.rule.RulesProvider;
 import org.sonar.batch.scan.filesystem.InputPathCache;
+import org.sonar.batch.scan.measure.DefaultMetricFinder;
+import org.sonar.batch.scan.measure.DeprecatedMetricFinder;
 import org.sonar.batch.scan.measure.MeasureCache;
 import org.sonar.batch.source.CodeColorizers;
 import org.sonar.core.component.ScanGraph;
 import org.sonar.core.issue.IssueUpdater;
 import org.sonar.core.issue.workflow.FunctionExecutor;
 import org.sonar.core.issue.workflow.IssueWorkflow;
-import org.sonar.core.notification.DefaultNotificationManager;
 import org.sonar.core.technicaldebt.DefaultTechnicalDebtModel;
 import org.sonar.core.test.TestPlanBuilder;
 import org.sonar.core.test.TestPlanPerspectiveLoader;
@@ -121,7 +138,6 @@ public class ProjectScanContainer extends ComponentContainer {
       new ProjectRepositoriesProvider(),
       DefaultResourceCreationLock.class,
       CodeColorizers.class,
-      DefaultNotificationManager.class,
       MetricProvider.class,
       ProjectConfigurator.class,
       DefaultIndex.class,
@@ -142,10 +158,13 @@ public class ProjectScanContainer extends ComponentContainer {
       IssueWorkflow.class,
       IssueCache.class,
       DefaultProjectIssues.class,
-      IssueChangelogDebtCalculator.class,
       LocalIssueTracking.class,
       ServerIssueRepository.class,
 
+      // metrics
+      DefaultMetricFinder.class,
+      DeprecatedMetricFinder.class,
+
       // tests
       TestPlanPerspectiveLoader.class,
       TestablePerspectiveLoader.class,
@@ -192,6 +211,7 @@ public class ProjectScanContainer extends ComponentContainer {
 
   private void addDataBaseComponents() {
     add(
+      PastMeasuresLoader.class,
       ResourcePersister.class,
       ResourceKeyMigration.class,
       GraphPersister.class,
@@ -240,7 +260,7 @@ public class ProjectScanContainer extends ComponentContainer {
   static class BatchExtensionFilter implements ExtensionMatcher {
     @Override
     public boolean accept(Object extension) {
-      return ExtensionUtils.isType(extension, BatchComponent.class)
+      return ExtensionUtils.isBatchSide(extension)
         && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_BATCH);
     }
   }
index bb3f0f8a021996fb7f5c49e1e68170899180c740..f6d8a8b59ac602b109cda8480b6278ec19be9235 100644 (file)
@@ -50,8 +50,7 @@ public class ScanTask implements Task {
       DefaultProjectTree.class,
       ProjectExclusions.class,
       ProjectReactorValidator.class,
-      ProjectReactorReady.class,
-      DefaultSensorMatcher.class);
+      ProjectReactorReady.class);
     scanContainer.execute();
   }
 }
index a30037a1c00ed753ba3d4f429600b4b1b5856ec5..b8b48ec47fa08d14295927b554d0539c8588ba2b 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.batch.scan.filesystem;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.SonarIndex;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.resources.File;
@@ -37,7 +37,8 @@ import javax.annotation.Nullable;
  *
  * @since 4.2
  */
-public class ComponentIndexer implements BatchComponent {
+@BatchSide
+public class ComponentIndexer {
 
   private final Languages languages;
   private final SonarIndex sonarIndex;
index 16441588ac9c94677d941b027dc793bbe84e8def..be1c52e58c2a449fadee0d9667a998612fcbab94 100644 (file)
@@ -22,12 +22,13 @@ package org.sonar.batch.scan.filesystem;
 import org.apache.commons.lang.ArrayUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.PathPattern;
 import org.sonar.api.scan.filesystem.FileExclusions;
 
-public class ExclusionFilters implements BatchComponent {
+@BatchSide
+public class ExclusionFilters {
 
   private static final Logger LOG = LoggerFactory.getLogger(ExclusionFilters.class);
 
index fbc40556475f53eab32e41685ff00c02d04646c6..0e5dec4bbad185f50ba18e4027165de6656f0943 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.commons.io.filefilter.HiddenFileFilter;
 import org.apache.commons.io.filefilter.IOFileFilter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.InputFileFilter;
@@ -37,13 +37,23 @@ import org.sonar.batch.util.ProgressReport;
 
 import java.io.File;
 import java.nio.file.Path;
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Index input files into {@link InputPathCache}.
  */
-public class FileIndexer implements BatchComponent {
+@BatchSide
+public class FileIndexer {
 
   private static final Logger LOG = LoggerFactory.getLogger(FileIndexer.class);
 
index 20fb55af219f034e9758788a68e3dd37cd22d731..6f1ba9e306c46bccb1a4af64f999ca38dd396c80 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.scan.filesystem.PathResolver;
 
 import java.io.File;
@@ -32,7 +32,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 
-public class FileSystemLogger implements BatchComponent {
+@BatchSide
+public class FileSystemLogger {
 
   private final DefaultModuleFileSystem fs;
 
index 74685bd79557cf6e8da36bdc102474aafebb22af..cdee734908efdd773622fb97eb0722ff64f900fc 100644 (file)
  */
 package org.sonar.batch.scan.filesystem;
 
-import org.sonar.api.batch.fs.internal.FileMetadata;
-
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
+import org.sonar.api.batch.fs.internal.FileMetadata;
 import org.sonar.api.config.Settings;
 import org.sonar.api.scan.filesystem.PathResolver;
 import org.sonar.batch.bootstrap.DefaultAnalysisMode;
 
-public class InputFileBuilderFactory implements BatchComponent {
+@BatchSide
+public class InputFileBuilderFactory {
 
   private final String moduleKey;
   private final PathResolver pathResolver;
index 92423f3a25dbee87373a38497eefc75a68d21c21..f2ee037449344c5f24381c338c59e5c7637514ef 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.scan.filesystem;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.InputDir;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.InputPath;
@@ -29,13 +29,19 @@ import org.sonar.batch.index.BatchResource;
 
 import javax.annotation.CheckForNull;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 /**
  * Cache of all files and dirs. This cache is shared amongst all project modules. Inclusion and
  * exclusion patterns are already applied.
  */
-public class InputPathCache implements BatchComponent {
+@BatchSide
+public class InputPathCache {
 
   private final Map<String, SortedMap<String, InputFile>> inputFileCache = new LinkedHashMap<>();
   private final Map<String, SortedMap<String, InputDir>> inputDirCache = new LinkedHashMap<>();
index c52118612c39e5b7f48e7e7a054638a056a791b7..114dcf8543c9415104193b2e2116524f5f4d37be 100644 (file)
  */
 package org.sonar.batch.scan.filesystem;
 
-import org.sonar.batch.repository.language.LanguagesRepository;
-
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.config.Settings;
+import org.sonar.batch.repository.language.LanguagesRepository;
 
-public class LanguageDetectionFactory implements BatchComponent {
+@BatchSide
+public class LanguageDetectionFactory {
   private final Settings settings;
   private final LanguagesRepository languages;
 
index 3f25a94c6c7a318ebacc1e59374d3efd84f6a349..fd98170dbb586545b3e681955b1782002d8084fa 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.scan.filesystem;
 
 import com.google.common.collect.Lists;
 import org.apache.commons.io.FileUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.scan.filesystem.PathResolver;
 import org.sonar.api.utils.TempFolder;
@@ -34,7 +34,8 @@ import java.util.List;
 /**
  * @since 3.5
  */
-public class ModuleFileSystemInitializer implements BatchComponent {
+@BatchSide
+public class ModuleFileSystemInitializer {
 
   private File baseDir, workingDir, buildDir;
   private List<File> sourceDirsOrFiles = Lists.newArrayList();
index 17420fc2dc850271e24177739c04df6d636b260a..dd4044b1bbcd7f9970df55ee1e46eb7aec7422a1 100644 (file)
  */
 package org.sonar.batch.scan.filesystem;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.bootstrap.ProjectDefinition;
 import org.sonar.api.batch.fs.InputDir;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.internal.DefaultFileSystem;
 
-public class ModuleInputFileCache extends DefaultFileSystem.Cache implements BatchComponent {
+@BatchSide
+public class ModuleInputFileCache extends DefaultFileSystem.Cache {
 
   private final String moduleKey;
   private final InputPathCache inputPathCache;
index 7ec9b8954614dbb90feb202185e55aec9795db0b..99acd6313ed8c78c3d96298ddca0d3bcc36a88a3 100644 (file)
  */
 package org.sonar.batch.scan.filesystem;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.batch.protocol.input.ProjectRepositories;
 
-public class StatusDetectionFactory implements BatchComponent {
+@BatchSide
+public class StatusDetectionFactory {
 
   private final ProjectRepositories projectReferentials;
 
index 5cf7ce73f755784704658dfcfc1a125313f19f53..290f2955d07e72ea315a82beb49cf212d512a179 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.batch.scan.measure;
 
 import com.google.common.base.Preconditions;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.measure.MetricFinder;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.RuleMeasure;
@@ -34,7 +34,8 @@ import org.sonar.batch.index.Caches;
 /**
  * Cache of all measures. This cache is shared amongst all project modules.
  */
-public class MeasureCache implements BatchComponent {
+@BatchSide
+public class MeasureCache {
 
   private final Cache<Measure> cache;
 
index 36af32c9c92cbbae4440bfe931a08cf518daece9..f98704634a13eb7f1f29f4180bf8f96b958ad423 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.scan.report;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.resources.Project;
@@ -37,7 +37,8 @@ import org.sonar.batch.scan.filesystem.InputPathCache;
 
 import javax.annotation.CheckForNull;
 
-public class IssuesReportBuilder implements BatchExtension {
+@BatchSide
+public class IssuesReportBuilder {
 
   private static final Logger LOG = LoggerFactory.getLogger(IssuesReportBuilder.class);
 
index 986ba12d7e69f5bb95d6e7d24c68293f5464a13d..50f2a0ddb6e6af3fefc1a3f0a60e0cf3789c9d9a 100644 (file)
  */
 package org.sonar.batch.scan.report;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.batch.bootstrap.DefaultAnalysisMode;
 
-public class IssuesReports implements BatchComponent {
+@BatchSide
+public class IssuesReports {
 
   private final DefaultAnalysisMode analysisMode;
   private final Reporter[] reporters;
index f2c84e963f78be413afecaee348bac79a236cd84..4e1f5ea8199e694846c19788804601d141f9d5ea 100644 (file)
  */
 package org.sonar.batch.scan.report;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
-public interface Reporter extends BatchComponent {
+@BatchSide
+public interface Reporter {
 
   public void execute();
 
index 6828fca449d9471392b6bfd19ca6c5b905b76d47..d7d50aafabe0d1352631e27f85f21841c6538d2b 100644 (file)
 package org.sonar.batch.scan.report;
 
 import org.apache.commons.lang.StringEscapeUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RuleFinder;
 
 import javax.annotation.CheckForNull;
 
-public class RuleNameProvider implements BatchComponent {
+@BatchSide
+public class RuleNameProvider {
   private RuleFinder ruleFinder;
 
   public RuleNameProvider(RuleFinder ruleFinder) {
index 264a7202386c76bb650759c8cfb028b1ef306fb7..1f913e2b63f2705926fd3a59d7a47d13cb8488fc 100644 (file)
@@ -23,7 +23,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.FileSystem;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.batch.index.BatchResource;
@@ -34,7 +34,8 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-public class SourceProvider implements BatchComponent {
+@BatchSide
+public class SourceProvider {
 
   private static final Logger LOG = LoggerFactory.getLogger(SourceProvider.class);
   private final InputPathCache inputPathCache;
index ec96767341ea4e26aacd4dcb76f075fdf0064e7b..526316f16f2b1a03ed03dd4a75e5189eeec729f2 100644 (file)
@@ -23,7 +23,11 @@ import com.google.common.base.Joiner;
 import org.picocontainer.Startable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.*;
+import org.sonar.api.BatchSide;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.Properties;
+import org.sonar.api.Property;
+import org.sonar.api.PropertyType;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.bootstrap.ProjectReactor;
@@ -47,7 +51,8 @@ import java.util.Map;
   )
 })
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public final class ScmConfiguration implements BatchComponent, Startable {
+@BatchSide
+public final class ScmConfiguration implements Startable {
   private static final Logger LOG = LoggerFactory.getLogger(ScmConfiguration.class);
 
   public static final String FORCE_RELOAD_KEY = "sonar.scm.forceReloadAll";
index dbc4eac19e1369e9247cb84b4d32f404d99feb73..74c1e305e2560c160af49cb70cd42eece13a418b 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.batch.sensor;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.AnalysisMode;
 import org.sonar.api.batch.fs.FilePredicate;
 import org.sonar.api.batch.fs.FileSystem;
@@ -29,7 +29,8 @@ import org.sonar.api.batch.rule.ActiveRules;
 import org.sonar.api.batch.sensor.internal.DefaultSensorDescriptor;
 import org.sonar.api.config.Settings;
 
-public class SensorOptimizer implements BatchComponent {
+@BatchSide
+public class SensorOptimizer {
 
   private static final Logger LOG = LoggerFactory.getLogger(SensorOptimizer.class);
 
index 7ed223e5199ff29d2e0995ed5ceb2623a0f84bbc..c8eb840272f32236b5508fe7fe5d4afc8cb8d400 100644 (file)
@@ -24,7 +24,7 @@ import org.apache.commons.io.input.BOMInputStream;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
 import org.sonar.api.web.CodeColorizerFormat;
 import org.sonar.colorizer.CodeColorizer;
@@ -32,7 +32,11 @@ import org.sonar.colorizer.Tokenizer;
 
 import javax.annotation.CheckForNull;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.nio.charset.Charset;
 import java.util.HashMap;
 import java.util.List;
@@ -41,7 +45,8 @@ import java.util.Map;
 /**
  * Central point for sonar-colorizer extensions
  */
-public class CodeColorizers implements BatchComponent {
+@BatchSide
+public class CodeColorizers {
 
   private static final Logger LOG = LoggerFactory.getLogger(CodeColorizers.class);
 
index 95138b2e904519a96d176680293da9b1dbfb42b8..9deaf93ac81dd95825975c01ab88a01fe534ef36 100644 (file)
@@ -20,8 +20,9 @@
 package org.sonar.batch.bootstrap;
 
 import org.junit.Test;
-import org.sonar.api.BatchExtension;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.batch.SupportedEnvironment;
@@ -52,12 +53,13 @@ public class ExtensionUtilsTest {
   }
 
   @Test
-  public void testIsBatchExtension() {
-    assertThat(ExtensionUtils.isBatchExtension(BatchService.class)).isTrue();
-    assertThat(ExtensionUtils.isBatchExtension(new BatchService())).isTrue();
+  public void testIsBatchSide() {
+    assertThat(ExtensionUtils.isBatchSide(BatchService.class)).isTrue();
+    assertThat(ExtensionUtils.isBatchSide(new BatchService())).isTrue();
+    assertThat(ExtensionUtils.isBatchSide(DeprecatedBatchService.class)).isTrue();
 
-    assertThat(ExtensionUtils.isBatchExtension(ServerService.class)).isFalse();
-    assertThat(ExtensionUtils.isBatchExtension(new ServerService())).isFalse();
+    assertThat(ExtensionUtils.isBatchSide(ServerService.class)).isFalse();
+    assertThat(ExtensionUtils.isBatchSide(new ServerService())).isFalse();
   }
 
   @Test
@@ -87,36 +89,47 @@ public class ExtensionUtilsTest {
     assertThat(ExtensionUtils.requiresDB(new PersistentService())).isTrue();
   }
 
+  @BatchSide
   @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-  public static class BatchService implements BatchExtension {
+  public static class BatchService {
 
   }
 
+  public static class DeprecatedBatchService implements BatchComponent {
+
+  }
+
+  @BatchSide
   @InstantiationStrategy(InstantiationStrategy.PER_PROJECT)
-  public static class ProjectService implements BatchExtension {
+  public static class ProjectService {
 
   }
 
-  public static class DefaultService implements BatchExtension {
+  @BatchSide
+  public static class DefaultService {
 
   }
 
-  public static class ServerService implements ServerExtension {
+  @ServerSide
+  public static class ServerService {
 
   }
 
+  @BatchSide
   @SupportedEnvironment("maven")
-  public static class MavenService implements BatchExtension {
+  public static class MavenService {
 
   }
 
+  @BatchSide
   @SupportedEnvironment({"maven", "ant", "gradle"})
-  public static class BuildToolService implements BatchExtension {
+  public static class BuildToolService {
 
   }
 
+  @BatchSide
   @RequiresDB
-  public static class PersistentService implements BatchExtension {
+  public static class PersistentService {
 
   }
 }
index 000c64140d0ec728cf2142fcb4d771dc450d5d3d..2ac9bab0fffa2c6d8c266577b2c33e0d3eeb8fbe 100644 (file)
@@ -66,7 +66,7 @@ public class MeasuresMediumTest {
       .newScanTask(new File(projectDir, "sonar-project.properties"))
       .start();
 
-    assertThat(result.allMeasures()).hasSize(58);
+    assertThat(result.allMeasures()).hasSize(79);
   }
 
   @Test
@@ -93,7 +93,7 @@ public class MeasuresMediumTest {
         .build())
       .start();
 
-    assertThat(result.allMeasures()).hasSize(28);
+    assertThat(result.allMeasures()).hasSize(37);
 
     assertThat(result.allMeasures()).contains(new DefaultMeasure<Integer>()
       .forMetric(CoreMetrics.LINES)
index b4f7dc49ce38f836d54ac38f59f05ca40a189c6d..7037ec35550a8d8db97ead5a327df097ef88ef62 100644 (file)
@@ -109,8 +109,8 @@ public class ProjectScanContainerTest {
     assertThat(filter.accept(MyProjectExtension.class)).isFalse();
     assertThat(filter.accept(new MyServerExtension())).isFalse();
     assertThat(filter.accept(MyServerExtension.class)).isFalse();
-    assertThat(filter.accept(new MyTaskExtension())).isFalse();
-    assertThat(filter.accept(MyTaskExtension.class)).isFalse();
+    assertThat(filter.accept(new MyTaskExtension())).isTrue();
+    assertThat(filter.accept(MyTaskExtension.class)).isTrue();
   }
 
   @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
index 31f9c323d618b2b790be129f0b6cef53eae5e02f..928a3938046f56ba1661af04bfaf95ab7d1342ab 100644 (file)
  */
 package org.sonar.core.component;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.component.Component;
 import org.sonar.api.component.Perspective;
 
 import javax.annotation.CheckForNull;
 
-public abstract class PerspectiveBuilder<T extends Perspective> implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public abstract class PerspectiveBuilder<T extends Perspective> {
 
   private final Class<T> perspectiveClass;
 
index 6d89d0b9824315b682bf5b16b2bd0c9e1d5e72c6..ce76fe74c2a69cebf531f51055a3e230b691c9e5 100644 (file)
@@ -23,14 +23,15 @@ import com.tinkerpop.blueprints.Direction;
 import com.tinkerpop.blueprints.Graph;
 import com.tinkerpop.blueprints.Vertex;
 import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.component.Component;
 import org.sonar.api.resources.Resource;
 import org.sonar.core.graph.BeanGraph;
 import org.sonar.core.graph.BeanIterable;
 import org.sonar.core.graph.GraphUtil;
 
-public class ScanGraph extends BeanGraph implements BatchComponent {
+@BatchSide
+public class ScanGraph extends BeanGraph {
 
   private static final String COMPONENT = "component";
   private final Vertex componentsRoot;
index 951f52fa27958b5f404f2d1fa399c4a67df886bd..03a1e2c30f7c4f71fa700005af6c1452b40413e8 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.core.component;
 
 import com.google.common.collect.Maps;
 import com.tinkerpop.blueprints.impls.tg.TinkerGraph;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.component.Perspective;
 import org.sonar.core.graph.graphson.GraphsonReader;
 import org.sonar.core.graph.jdbc.GraphDao;
@@ -32,7 +32,8 @@ import javax.annotation.CheckForNull;
 import java.io.StringReader;
 import java.util.Map;
 
-public class SnapshotPerspectives implements ServerComponent {
+@ServerSide
+public class SnapshotPerspectives {
 
   private final GraphDao dao;
   private final Map<Class<?>, GraphPerspectiveLoader<?>> loaders = Maps.newHashMap();
index 5b003323855fb6d4a1f7016f0cae566c283724d5..f89cfc80d791af0f53cf7b80a6fd20bf86d55658 100644 (file)
@@ -21,9 +21,9 @@
 package org.sonar.core.computation.dbcleaner.period;
 
 import com.google.common.annotations.VisibleForTesting;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
-import org.sonar.api.task.TaskExtension;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
@@ -35,7 +35,9 @@ import org.sonar.core.purge.PurgeableSnapshotDto;
 
 import java.util.List;
 
-public class DefaultPeriodCleaner implements TaskExtension, ServerExtension {
+@BatchSide
+@ServerSide
+public class DefaultPeriodCleaner {
 
   private static final Logger LOG = Loggers.get(DefaultPeriodCleaner.class);
   private PurgeDao purgeDao;
index ac9a7b4e00c3b01f4b193319969a3c8f8397cf31..d3bc1e52e003f8f0d2617c8713223c128031d9fd 100644 (file)
@@ -27,8 +27,8 @@ import ch.qos.logback.core.util.StatusPrinter;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -41,7 +41,9 @@ import java.util.Map;
  *
  * @since 2.12
  */
-public class Logback implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Logback {
 
   public static void configure(String classloaderPath, Map<String, String> substitutionVariables) {
     InputStream input = Logback.class.getResourceAsStream(classloaderPath);
index de705d74eae6e125b052692a15c0fa5afaf5f93d..6e5de5d7539bf93b13eaed532884d88e631bb326 100644 (file)
@@ -20,8 +20,8 @@
 package org.sonar.core.dashboard;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.MyBatis;
 
@@ -29,7 +29,9 @@ import javax.annotation.Nullable;
 
 import java.util.List;
 
-public class ActiveDashboardDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class ActiveDashboardDao implements DaoComponent {
 
   private MyBatis mybatis;
 
index 9051746fcf7703582cef677fc6a97eeccf6979d2..2726f42967c16b646d3feba0ecf0be682a571ac9 100644 (file)
 package org.sonar.core.dashboard;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.MyBatis;
 
-public class DashboardDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class DashboardDao implements DaoComponent {
 
   private MyBatis mybatis;
 
index 57887646ee6bb22580bc15c0d08f4462483bd472..1556d5dda5036edccbf2ec4539a0c29f137993ca 100644 (file)
 package org.sonar.core.duplication;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 
 import java.util.Collection;
 import java.util.List;
 
-public class DuplicationDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class DuplicationDao {
 
   private final MyBatis mybatis;
 
index 8190b0f6e3ec5a95f1674b1375a8bc6fea53cb6a..8fbddc73f12ae1f20d5563eee00699825c27d465 100644 (file)
@@ -23,6 +23,8 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import org.apache.commons.io.IOUtils;
 import org.picocontainer.Startable;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.I18n;
 import org.sonar.api.utils.SonarException;
 import org.sonar.api.utils.System2;
@@ -51,6 +53,8 @@ import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 import java.util.Set;
 
+@BatchSide
+@ServerSide
 public class DefaultI18n implements I18n, Startable {
 
   private static final Logger LOG = Loggers.get(DefaultI18n.class);
@@ -120,7 +124,7 @@ public class DefaultI18n implements I18n, Startable {
   @Override
   public void stop() {
     if (classloader instanceof Closeable) {
-      IOUtils.closeQuietly((Closeable)classloader);
+      IOUtils.closeQuietly((Closeable) classloader);
     }
     classloader = null;
     propertyToBundles = null;
index e19a624429fbcd43b653b0375c2685f15b2e6137..9a374593155c7cb8834988bb04b0f726e2537517 100644 (file)
@@ -20,8 +20,8 @@
 package org.sonar.core.i18n;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchExtension;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.RuleI18n;
 import org.sonar.api.rules.Rule;
 
@@ -33,7 +33,9 @@ import java.util.Locale;
  * @deprecated in 4.1. Rules are not localized anymore. See http://jira.codehaus.org/browse/SONAR-4885
  */
 @Deprecated
-public class RuleI18nManager implements RuleI18n, ServerExtension, BatchExtension {
+@BatchSide
+@ServerSide
+public class RuleI18nManager implements RuleI18n {
 
   private static final String NAME_SUFFIX = ".name";
   private static final String RULE_PREFIX = "rule.";
@@ -80,7 +82,6 @@ public class RuleI18nManager implements RuleI18n, ServerExtension, BatchExtensio
     return getParamDescription(repositoryKey, ruleKey, paramKey);
   }
 
-
   @Override
   @CheckForNull
   public String getName(String repositoryKey, String ruleKey) {
@@ -129,7 +130,6 @@ public class RuleI18nManager implements RuleI18n, ServerExtension, BatchExtensio
     return defaultI18n.message(Locale.ENGLISH, propertyKey, null);
   }
 
-
   static boolean isRuleProperty(String propertyKey) {
     return StringUtils.startsWith(propertyKey, RULE_PREFIX) && StringUtils.endsWith(propertyKey, NAME_SUFFIX) && !propertyKey.contains(".param.");
   }
index 939acb222743dd77d6ca2e654a93ff9e54159f88..7e9a24aae500ffc80fbe60a26d950057414820af 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.core.issue;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.Iterator;
 import java.util.List;
@@ -32,7 +32,8 @@ import java.util.Map;
 import static com.google.common.collect.Lists.newArrayList;
 import static com.google.common.collect.Maps.newHashMap;
 
-public class IssueFilterSerializer implements ServerComponent {
+@ServerSide
+public class IssueFilterSerializer {
 
   public static final String SEPARATOR = "|";
   public static final String KEY_VALUE_SEPARATOR = "=";
@@ -60,7 +61,7 @@ public class IssueFilterSerializer implements ServerComponent {
         if (!valuesList.isEmpty()) {
           stringBuilder.append(key);
           stringBuilder.append(IssueFilterSerializer.KEY_VALUE_SEPARATOR);
-          for (Iterator<Object> valueListIter = valuesList.iterator(); valueListIter.hasNext(); ) {
+          for (Iterator<Object> valueListIter = valuesList.iterator(); valueListIter.hasNext();) {
             Object valueList = valueListIter.next();
             stringBuilder.append(valueList);
             if (valueListIter.hasNext()) {
index 369abddfef59ed1e89751c206bce4ec501b25960..d9e491540f50424c1e4f99a309f2982b5cfb481e 100644 (file)
@@ -27,8 +27,8 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.ActionPlan;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.issue.internal.DefaultIssueComment;
@@ -47,7 +47,9 @@ import java.util.Set;
 /**
  * Updates issue fields and chooses if changes must be kept in history.
  */
-public class IssueUpdater implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueUpdater {
 
   public static final String UNUSED = "";
   public static final String SEVERITY = "severity";
@@ -291,7 +293,7 @@ public class IssueUpdater implements BatchComponent, ServerComponent {
       }));
 
     Set<String> oldTags = Sets.newHashSet(issue.tags());
-    
+
     if (!oldTags.equals(newTags)) {
       issue.setFieldChange(context, TAGS,
         oldTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(oldTags),
index 1d30a3e792608f14c866392a27d005ff472f30e2..6708103a780c4ec9808309a7d5abfbf4d39a606f 100644 (file)
@@ -22,8 +22,8 @@ package org.sonar.core.issue.db;
 
 import com.google.common.collect.Lists;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.MyBatis;
 
@@ -36,7 +36,9 @@ import static com.google.common.collect.Lists.newArrayList;
 /**
  * @since 3.6
  */
-public class ActionPlanDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class ActionPlanDao implements DaoComponent {
 
   private final MyBatis mybatis;
 
@@ -95,7 +97,7 @@ public class ActionPlanDao implements BatchComponent, ServerComponent, DaoCompon
         List<ActionPlanDto> dtos = session.getMapper(ActionPlanMapper.class).findByKeys(partition);
         dtosList.addAll(dtos);
       }
-      return dtosList;      
+      return dtosList;
     } finally {
       MyBatis.closeQuietly(session);
     }
index f32d2fc97507b12e169566a2367cafcd5d649158..18faf0ef3b3c6ee4526b4d33c9c0cee625f4a6a9 100644 (file)
@@ -21,8 +21,8 @@
 package org.sonar.core.issue.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.MyBatis;
 
 import java.util.List;
@@ -30,7 +30,9 @@ import java.util.List;
 /**
  * @since 3.6
  */
-public class ActionPlanStatsDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class ActionPlanStatsDao {
 
   private final MyBatis mybatis;
 
index a766d0245921fc66351f34992c70221499b84613..77ae58983f93d2008d68e521976c7a6b5834a83e 100644 (file)
@@ -22,8 +22,8 @@ package org.sonar.core.issue.db;
 
 import com.google.common.collect.Lists;
 import org.apache.ibatis.session.ResultHandler;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.internal.DefaultIssueComment;
 import org.sonar.api.issue.internal.FieldDiffs;
 import org.sonar.core.persistence.DaoComponent;
@@ -44,7 +44,9 @@ import static com.google.common.collect.Maps.newHashMap;
 /**
  * @since 3.6
  */
-public class IssueChangeDao implements DaoComponent, BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueChangeDao implements DaoComponent {
 
   private final MyBatis mybatis;
 
index 7305b319490cd1d5696043a80437c392b58dc74b..6854b62ddb1f9e91f7329cacaefa91d0699da73c 100644 (file)
@@ -22,8 +22,8 @@ package org.sonar.core.issue.db;
 
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 
@@ -32,7 +32,9 @@ import javax.annotation.CheckForNull;
 /**
  * @since 3.6
  */
-public class IssueDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueDao {
 
   private final MyBatis mybatis;
 
index 770c503de03d6c06d379e61297480e875fad699b..9a5d551f3391c6a5c6a91527ceabce48fda6cf83 100644 (file)
@@ -21,8 +21,8 @@
 package org.sonar.core.issue.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.MyBatis;
 
@@ -33,7 +33,9 @@ import java.util.List;
 /**
  * @since 3.7
  */
-public class IssueFilterDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class IssueFilterDao implements DaoComponent {
 
   private final MyBatis mybatis;
 
index 7f3705ce56732bb8a3030c180ca75ac59a40c6ba..2b97ce145959ac9e6636a299a23723bda7801652 100644 (file)
@@ -21,8 +21,8 @@
 package org.sonar.core.issue.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.MyBatis;
 
 import java.util.List;
@@ -30,7 +30,9 @@ import java.util.List;
 /**
  * @since 3.7
  */
-public class IssueFilterFavouriteDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueFilterFavouriteDao {
 
   private final MyBatis mybatis;
 
index c530ede249a581e9de309905e93a7260bce686de..ea91619ce3299a1bbd35d2b0ae946f8c6c1fe582 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.core.issue.workflow;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.internal.DefaultIssue;
 import org.sonar.api.issue.internal.IssueChangeContext;
@@ -29,7 +29,9 @@ import org.sonar.core.issue.IssueUpdater;
 
 import javax.annotation.Nullable;
 
-public class FunctionExecutor implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class FunctionExecutor {
 
   private final IssueUpdater updater;
 
index 10924b43533ee20e7edf5e54202fe0e4ecbac6b1..1fcc51fe2bd2cc9eb45d1329f0fec61a90754d17 100644 (file)
@@ -20,8 +20,8 @@
 package org.sonar.core.issue.workflow;
 
 import org.picocontainer.Startable;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.issue.DefaultTransitions;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.condition.HasResolution;
@@ -32,7 +32,9 @@ import org.sonar.core.issue.IssueUpdater;
 
 import java.util.List;
 
-public class IssueWorkflow implements BatchComponent, ServerComponent, Startable {
+@BatchSide
+@ServerSide
+public class IssueWorkflow implements Startable {
 
   private final FunctionExecutor functionExecutor;
   private final IssueUpdater updater;
@@ -89,7 +91,7 @@ public class IssueWorkflow implements BatchComponent, ServerComponent, Startable
         .functions(new SetResolution(null), new SetCloseDate(false))
         .build())
 
-        // resolve as false-positive
+      // resolve as false-positive
       .transition(Transition.builder(DefaultTransitions.FALSE_POSITIVE)
         .from(Issue.STATUS_OPEN).to(Issue.STATUS_RESOLVED)
         .functions(new SetResolution(Issue.RESOLUTION_FALSE_POSITIVE), SetAssignee.UNASSIGN)
@@ -118,10 +120,10 @@ public class IssueWorkflow implements BatchComponent, ServerComponent, Startable
         .requiredProjectPermission(UserRole.ISSUE_ADMIN)
         .build())
       .transition(Transition.builder(DefaultTransitions.WONT_FIX)
-          .from(Issue.STATUS_CONFIRMED).to(Issue.STATUS_RESOLVED)
-          .functions(new SetResolution(Issue.RESOLUTION_WONT_FIX), SetAssignee.UNASSIGN)
-          .requiredProjectPermission(UserRole.ISSUE_ADMIN)
-          .build()
+        .from(Issue.STATUS_CONFIRMED).to(Issue.STATUS_RESOLVED)
+        .functions(new SetResolution(Issue.RESOLUTION_WONT_FIX), SetAssignee.UNASSIGN)
+        .requiredProjectPermission(UserRole.ISSUE_ADMIN)
+        .build()
       );
 
   }
@@ -159,14 +161,14 @@ public class IssueWorkflow implements BatchComponent, ServerComponent, Startable
         .automatic()
         .build())
 
-        // Reopen issues that are marked as resolved but that are still alive.
-        // Manual issues are kept resolved.
+      // Reopen issues that are marked as resolved but that are still alive.
+      // Manual issues are kept resolved.
       .transition(Transition.builder("automaticreopen")
-          .from(Issue.STATUS_RESOLVED).to(Issue.STATUS_REOPENED)
-          .conditions(new IsEndOfLife(false), new HasResolution(Issue.RESOLUTION_FIXED), new IsManual(false))
-          .functions(new SetResolution(null), new SetCloseDate(false))
-          .automatic()
-          .build()
+        .from(Issue.STATUS_RESOLVED).to(Issue.STATUS_REOPENED)
+        .conditions(new IsEndOfLife(false), new HasResolution(Issue.RESOLUTION_FIXED), new IsManual(false))
+        .functions(new SetResolution(null), new SetCloseDate(false))
+        .automatic()
+        .build()
       );
   }
 
index 50a26d25477a3877e8bc22c713cc434045d6a0a3..d8af4832f7ca1bbf7905e658fee77fc679ac5dd8 100644 (file)
 package org.sonar.core.measure.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.MyBatis;
 
 /**
  * @since 3.4
  */
-public class MeasureFilterDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class MeasureFilterDao {
   private MyBatis mybatis;
 
   public MeasureFilterDao(MyBatis mybatis) {
index 368367441df60b320ffcd5802630dbdaf9ce4633..e677643854990c4290be18e60afb5f7dcaa0db1e 100644 (file)
@@ -27,6 +27,7 @@ import com.google.common.collect.Multimap;
 import com.google.common.collect.SetMultimap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.notifications.Notification;
 import org.sonar.api.notifications.NotificationChannel;
 import org.sonar.api.notifications.NotificationDispatcher;
@@ -46,6 +47,7 @@ import java.util.List;
 /**
  * @since 2.10
  */
+@RequiresDB
 public class DefaultNotificationManager implements NotificationManager {
 
   private static final Logger LOG = LoggerFactory.getLogger(DefaultNotificationManager.class);
index 98f2f78b47b203990e9adf4bc15d741eedf6ecfb..cfb0b0be132e94961a0069d3420af88d14a473d4 100644 (file)
@@ -21,8 +21,8 @@
 package org.sonar.core.notification.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 
@@ -32,7 +32,9 @@ import java.util.List;
 /**
  * @since 3.7.1
  */
-public class NotificationQueueDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class NotificationQueueDao {
 
   private final MyBatis mybatis;
 
index b3071be94038a4a0732c162c5a663169294a4a39..7899d000524ad0807e0aa34ccda829b245a217bf 100644 (file)
@@ -23,17 +23,19 @@ package org.sonar.core.permission;
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.ibatis.session.RowBounds;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.security.DefaultGroups;
 import org.sonar.core.persistence.MyBatis;
 
 import javax.annotation.Nullable;
+
 import java.util.List;
 import java.util.Map;
 
 import static com.google.common.collect.Maps.newHashMap;
 
-public class PermissionDao implements ServerComponent {
+@ServerSide
+public class PermissionDao {
 
   private static final String QUERY_PARAMETER = "query";
   private static final String COMPONENT_ID_PARAMETER = "componentId";
index 7fb5c14598d37004805cddef3859ae56d3589760..0d8399f6cfdcd360e5f2d2cbba184516cffab731 100644 (file)
@@ -22,14 +22,18 @@ package org.sonar.core.permission;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.security.DefaultGroups;
-import org.sonar.api.task.TaskComponent;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.resource.ResourceDao;
 import org.sonar.core.resource.ResourceDto;
-import org.sonar.core.user.*;
+import org.sonar.core.user.GroupDto;
+import org.sonar.core.user.GroupRoleDto;
+import org.sonar.core.user.RoleDao;
+import org.sonar.core.user.UserDao;
+import org.sonar.core.user.UserRoleDto;
 
 import javax.annotation.Nullable;
 
@@ -45,7 +49,9 @@ import java.util.List;
  *
  * WARNING, this class is called by Views to apply default permission template on new views
  */
-public class PermissionFacade implements TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class PermissionFacade {
 
   private final RoleDao roleDao;
   private final UserDao userDao;
index 34165a634ca164178f0bb55643286a0bb43790fc..adbc3ae25280d984a45db9d1b2c31335aa55ca67 100644 (file)
@@ -24,9 +24,9 @@ import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.ibatis.session.RowBounds;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.security.DefaultGroups;
-import org.sonar.api.task.TaskComponent;
 import org.sonar.api.utils.System2;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
@@ -41,7 +41,9 @@ import java.util.Map;
 
 import static com.google.common.collect.Maps.newHashMap;
 
-public class PermissionTemplateDao implements TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class PermissionTemplateDao {
 
   public static final String QUERY_PARAMETER = "query";
   public static final String TEMPLATE_ID_PARAMETER = "templateId";
index 440c39d105279e1c707bf360f1d34c05a527e528..334245aa769cde9ef3bfaff8a8a0a79870295d4a 100644 (file)
@@ -22,8 +22,8 @@ package org.sonar.core.persistence;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import java.util.Collections;
 import java.util.List;
@@ -31,7 +31,9 @@ import java.util.List;
 /**
  * @since 3.0
  */
-public class DatabaseVersion implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class DatabaseVersion {
 
   public static final int LAST_VERSION = 914;
 
index f231431ce7f62e60c530f39aa7304bd4fafdaab2..35d49d5a0d4b1d7879d0dfefb633a49f2f992442 100644 (file)
@@ -35,8 +35,8 @@ import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
 import org.apache.ibatis.type.JdbcType;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.database.model.MeasureModel;
 import org.sonar.core.activity.db.ActivityDto;
 import org.sonar.core.activity.db.ActivityMapper;
@@ -145,7 +145,9 @@ import ch.qos.logback.classic.Level;
 
 import com.google.common.io.Closeables;
 
-public class MyBatis implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class MyBatis {
 
   private final Database database;
   private final Logback logback;
index 3c05901b9aa64fb8e7a143077e777d250bf696d8..8bd7e50166ba9912c98a34d47255a20eb33104d4 100644 (file)
@@ -22,8 +22,8 @@ package org.sonar.core.persistence;
 import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.sonar.api.ServerComponent;
-import org.sonar.api.task.TaskComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.Semaphores;
 
 import java.util.Map;
@@ -34,7 +34,9 @@ import java.util.concurrent.TimeUnit;
 /**
  * @since 3.5
  */
-public class SemaphoreUpdater implements TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class SemaphoreUpdater {
 
   private static final Logger LOG = LoggerFactory.getLogger(SemaphoreUpdater.class);
 
index 868208b12a0a4aa777b8629f97e7c632cb7ea785..49dc10b3687b98081fdf6686949005fc4fbfd62a 100644 (file)
@@ -27,8 +27,8 @@ import org.picocontainer.MutablePicoContainer;
 import org.picocontainer.behaviors.OptInCaching;
 import org.picocontainer.lifecycle.ReflectionLifecycleStrategy;
 import org.picocontainer.monitors.NullComponentMonitor;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.PropertyDefinitions;
 
 import javax.annotation.Nullable;
@@ -36,7 +36,9 @@ import javax.annotation.Nullable;
 import java.util.Collection;
 import java.util.List;
 
-public class ComponentContainer implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class ComponentContainer {
 
   // no need for multiple children
   ComponentContainer parent, child;
index 1b3b170a938d2a2e3c63eeb1bbb7cce49a197153..eec28b6b5327cfa4c80dafe36c8adc8246dc168f 100644 (file)
  */
 package org.sonar.core.platform;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.Plugin;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.Collection;
 
 /**
  * Provides information about the plugins installed in the dependency injection container
  */
-public interface PluginRepository extends BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface PluginRepository {
 
   Collection<PluginInfo> getPluginInfos();
 
index e32589f1b0cd801f26f337f983504e1c6c8c9cbf..b45253b0aeb4bb468336574ad5ecab5ff0991788 100644 (file)
@@ -25,8 +25,8 @@ import com.google.common.base.Strings;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Scopes;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.DaoUtils;
@@ -43,7 +43,9 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-public class PropertiesDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class PropertiesDao implements DaoComponent {
 
   private static final String NOTIFICATION_PREFIX = "notification.";
   private MyBatis mybatis;
index d65e7af2f6f646c131af9df87e8edbd5153b9bb0..589d276525577adb449fed74d194b135def16d53 100644 (file)
@@ -21,7 +21,7 @@
 package org.sonar.core.qualityprofile.db;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 
@@ -31,7 +31,8 @@ import java.util.List;
  * @deprecated use the ActiveRuleDao class defined in sonar-server
  */
 @Deprecated
-public class ActiveRuleDao implements ServerComponent {
+@ServerSide
+public class ActiveRuleDao {
 
   private final MyBatis mybatis;
 
index 19af5b22d78cd6831d18844f2b74510da19b6cdd..198ff265d61e72902538d00aed39f516593b21b9 100644 (file)
@@ -23,7 +23,7 @@ package org.sonar.core.qualityprofile.db;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.System2;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DaoComponent;
@@ -37,7 +37,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
-public class QualityProfileDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class QualityProfileDao implements DaoComponent {
 
   private final MyBatis mybatis;
   private final System2 system;
index dcc8cba0a113c0b6c0cee58286def2fbfa4736f1..f813aa905f80f72f1f87648886936e58c550c762 100644 (file)
@@ -20,8 +20,8 @@
 package org.sonar.core.rule;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.MyBatis;
 
 import java.util.List;
@@ -30,7 +30,9 @@ import java.util.List;
  * @deprecated in 4.4 moved to org.sonar.server.rule.db.RuleDao.
  */
 @Deprecated
-public class RuleDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class RuleDao {
 
   private MyBatis mybatis;
 
index 25d826376f4e497b05c230d21cc13df3687e5aa2..a7016a55947c7897ea76ef9c81ec0d3a89590c5e 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.core.technicaldebt;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
+import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.batch.debt.DebtCharacteristic;
 import org.sonar.api.batch.debt.DebtModel;
 import org.sonar.api.batch.debt.internal.DefaultDebtCharacteristic;
@@ -38,6 +39,7 @@ import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
+@RequiresDB
 public class DefaultTechnicalDebtModel implements TechnicalDebtModel {
 
   private final DebtModel model;
index 2eb94c33bd12dd5854b34cb6bf791b77258bef25..1141bf3d040f244cf735ce3d0a040b42b2fd96ea 100644 (file)
@@ -22,18 +22,21 @@ package org.sonar.core.technicaldebt.db;
 
 import com.google.common.collect.Lists;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
-import org.sonar.api.ServerComponent;
 import org.sonar.core.persistence.MyBatis;
 
 import javax.annotation.CheckForNull;
+
 import java.util.Collection;
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 
-public class CharacteristicDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class CharacteristicDao implements DaoComponent {
 
   private final MyBatis mybatis;
 
index d786ef60b04f72a238ba6838e3588cf46c20a42a..83ff2f18cb5cffcfbd0262fea6260281dfa86247 100644 (file)
 package org.sonar.core.template;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
-import org.sonar.api.ServerComponent;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 
-public class LoadedTemplateDao implements DaoComponent, BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class LoadedTemplateDao implements DaoComponent {
 
   private MyBatis mybatis;
 
@@ -47,7 +49,6 @@ public class LoadedTemplateDao implements DaoComponent, BatchComponent, ServerCo
     return session.getMapper(LoadedTemplateMapper.class).countByTypeAndKey(type, key);
   }
 
-
   public void insert(LoadedTemplateDto loadedTemplateDto) {
     SqlSession session = mybatis.openSession(false);
     try {
index 713cb620ace0b2e59c8c8a3041905bd6ae904439..6a9df77dffe97705f0b83316cc4b1ac4d26153dd 100644 (file)
@@ -20,9 +20,9 @@
 package org.sonar.core.timemachine;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.RequiresDB;
 import org.sonar.api.config.Settings;
 import org.sonar.api.database.model.Snapshot;
@@ -30,6 +30,7 @@ import org.sonar.api.i18n.I18n;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -38,7 +39,9 @@ import java.util.Locale;
 import static org.sonar.api.utils.DateUtils.longToDate;
 
 @RequiresDB
-public class Periods implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Periods {
 
   private final Settings settings;
   private final I18n i18n;
index 7b8d140d2821970c871f7610c2bf24de808b233e..6bc659a0a61e316355fb2981fbdaa4aaf5645af3 100644 (file)
@@ -22,8 +22,8 @@ package org.sonar.core.user;
 import com.google.common.base.Function;
 import com.google.common.base.Strings;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.DaoUtils;
@@ -40,7 +40,9 @@ import java.util.List;
  *
  * Be careful when updating this class because it's used by the Dev Cockpit plugin.
  */
-public class AuthorDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class AuthorDao implements DaoComponent {
 
   private final MyBatis mybatis;
   private final ResourceDao resourceDao;
index e12b3b27d02835adaf0c64e9a98d13a206c3fdb5..6c43e1280a43794c6793e1e40662ec87e507961a 100644 (file)
@@ -22,7 +22,7 @@ package org.sonar.core.user;
 import com.google.common.base.Function;
 import com.google.common.collect.Sets;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.core.persistence.DaoComponent;
 import org.sonar.core.persistence.DaoUtils;
 import org.sonar.core.persistence.DbSession;
@@ -37,7 +37,8 @@ import java.util.Map;
 
 import static com.google.common.collect.Maps.newHashMap;
 
-public class AuthorizationDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class AuthorizationDao implements DaoComponent {
 
   private static final String USER_ID_PARAM = "userId";
   private final MyBatis mybatis;
index c1eadd1753826d2a4260604318d835e4351bd052..ba18cd5cd220f61cd962c1b60dc0575d41c76a3d 100644 (file)
 package org.sonar.core.user;
 
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.security.DefaultGroups;
-import org.sonar.api.task.TaskComponent;
 import org.sonar.core.persistence.DbSession;
 
 import javax.annotation.Nullable;
 
 import java.util.List;
 
-public class RoleDao implements TaskComponent, ServerComponent {
+@ServerSide
+@BatchSide
+public class RoleDao {
 
   public List<String> selectUserPermissions(DbSession session, String userLogin, @Nullable Long resourceId) {
     return session.getMapper(RoleMapper.class).selectUserPermissions(userLogin, resourceId);
index 97f7e6a26cdec5350ef01f28ac48344b9be209e1..73f1daac6233c12235448776d08fd1179b3ac7ec 100644 (file)
@@ -21,8 +21,8 @@ package org.sonar.core.user;
 
 import com.google.common.collect.Lists;
 import org.apache.ibatis.session.SqlSession;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.user.UserQuery;
 import org.sonar.api.utils.System2;
 import org.sonar.core.persistence.DaoComponent;
@@ -36,7 +36,9 @@ import java.util.List;
 /**
  * @since 3.2
  */
-public class UserDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class UserDao implements DaoComponent {
 
   private final MyBatis mybatis;
   private final System2 system2;
index efe1fe5a1410df9b6295ff166c9f2e77072d9612..181e9b6e1908c68e46a23791a0ddb46356211251 100644 (file)
  */
 package org.sonar.plugins.dbcleaner.api;
 
-import org.sonar.api.ServerExtension;
-import org.sonar.api.task.TaskExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 2.14
  * @deprecated (is used by the plugin views only. Will rely on the implementation when views analysis views moved on the server side)
  */
 @Deprecated
-public interface PurgeTask extends TaskExtension, ServerExtension {
+@BatchSide
+@ServerSide
+public interface PurgeTask {
   /**
    * Purges the data related to a tree of resources.
    * <p/>
index 34d3ffc1b3479ea4868bd9541af73edc89fd4632..1b485ddd96d4cd9f68adabe247d5fe69b9862c38 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 /**
  * This lock is used to ensure that Sonar resources (files, packages, directories) are not created by buggy plugins
@@ -29,12 +29,13 @@ import org.sonar.api.BatchComponent;
  * @deprecated since 4.2. File system is immutable and does not require this class anymore.
  */
 @Deprecated
-public interface ResourceCreationLock extends BatchComponent {
+@BatchSide
+public interface ResourceCreationLock {
 
   /**
    * Forbids the creation of resources when saving violations and measures. By default it's unlocked, so only warnings
    * are logged. When locked, then an exception is thrown.
    */
   void lock();
-  
+
 }
index bf5e90207d078c06cd7531c0eacc8d9ed5cf1c66..23ab301d309084ef4a17a055211d6ea0fe79cf14 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.resources.Resource;
 
 /**
@@ -32,11 +33,13 @@ import org.sonar.api.resources.Resource;
  * @deprecated since 4.2. Analysis is file-system oriented. See {@link org.sonar.api.scan.filesystem.InputFileFilter}
  */
 @Deprecated
-public interface ResourceFilter extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface ResourceFilter {
 
   /**
    * Return true if the resource must be ignored, else it's saved into database.
    */
   boolean isIgnored(Resource resource);
-  
+
 }
index f9404bd835d5c737fb04b9d6f7387f108c9ee6b1..fedd88138ce752b4897e3a7f18414ef63afd1afc 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.charts;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ServerSide;
 
 import java.awt.image.BufferedImage;
 
@@ -30,7 +30,8 @@ import java.awt.image.BufferedImage;
  * @deprecated in 4.5.1, replaced by Javascript charts
  */
 @Deprecated
-public interface Chart extends ServerExtension {
+@ServerSide
+public interface Chart {
   String getKey();
 
   /**
index 6a458a3ba722d869ab4fdd4f099601d385c21fd4..328b522e7a9425fb04c6464b2a55d115b5162928 100644 (file)
@@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.PropertyType;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.AnnotationUtils;
 import org.sonar.api.utils.FieldUtils2;
 import org.sonar.api.utils.SonarException;
@@ -42,7 +42,8 @@ import java.util.List;
  * @deprecated in 4.2. Replaced by {@link org.sonar.api.server.rule.RulesDefinitionAnnotationLoader}
  */
 @Deprecated
-public final class AnnotationRuleParser implements ServerComponent {
+@ServerSide
+public final class AnnotationRuleParser {
 
   private static final Logger LOG = Loggers.get(AnnotationRuleParser.class);
 
@@ -101,15 +102,15 @@ public final class AnnotationRuleParser implements ServerComponent {
   }
 
   private static final Function<Class<?>, PropertyType> TYPE_FOR_CLASS = Functions.forMap(
-      ImmutableMap.<Class<?>, PropertyType> builder()
-          .put(Integer.class, PropertyType.INTEGER)
-          .put(int.class, PropertyType.INTEGER)
-          .put(Float.class, PropertyType.FLOAT)
-          .put(float.class, PropertyType.FLOAT)
-          .put(Boolean.class, PropertyType.BOOLEAN)
-          .put(boolean.class, PropertyType.BOOLEAN)
-          .build(),
-      PropertyType.STRING);
+    ImmutableMap.<Class<?>, PropertyType>builder()
+      .put(Integer.class, PropertyType.INTEGER)
+      .put(int.class, PropertyType.INTEGER)
+      .put(Float.class, PropertyType.FLOAT)
+      .put(float.class, PropertyType.FLOAT)
+      .put(Boolean.class, PropertyType.BOOLEAN)
+      .put(boolean.class, PropertyType.BOOLEAN)
+      .build(),
+    PropertyType.STRING);
 
   @VisibleForTesting
   static PropertyType guessType(Class<?> type) {
index 0275e58736aa767950456f124cc8d76dd27a05c4..e7725ff73d171928abcd181134a0ba62334e3238 100644 (file)
@@ -22,7 +22,8 @@ package org.sonar.api.rules;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import java.util.List;
 
@@ -31,7 +32,9 @@ import java.util.List;
  * @deprecated in 4.2. Replaced by org.sonar.api.server.rule.RulesDefinition
  */
 @Deprecated
-public abstract class RuleRepository implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class RuleRepository {
 
   private String key;
   private String language;
index 479d2a934028fae1aa6c2040f9df681c19839e4e..ed1752d49c52be47ee59d1c9c35b177f888a9dd5 100644 (file)
@@ -31,14 +31,18 @@ import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
 import org.sonar.api.PropertyType;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.SonarException;
 import org.sonar.check.Cardinality;
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -48,7 +52,8 @@ import java.util.Map;
  * @deprecated in 4.2. Replaced by org.sonar.api.server.rule.RulesDefinition and org.sonar.api.server.rule.RulesDefinitionXmlLoader
  */
 @Deprecated
-public final class XMLRuleParser implements ServerComponent {
+@ServerSide
+public final class XMLRuleParser {
   private static final Map<String, String> TYPE_MAP = typeMapWithDeprecatedValues();
 
   public List<Rule> parse(File file) {
index 21c785caa1ee32b1bb061b518036908cec8f85a0..f6585e9ce4cae781c4418fe43287b1b94a1fce1e 100644 (file)
@@ -36,6 +36,9 @@ package org.sonar.api;
  * </pre>
  *
  * @since 2.2
+ * @deprecated since 5.2 use {@link BatchSide} annotation
  */
+@Deprecated
+@BatchSide
 public interface BatchComponent {
 }
index 95cc1c0f8f7c1cc48e030722e5456ae873a62f32..e24322a26092c672df90bc09a3a158693d21494b 100644 (file)
@@ -24,7 +24,9 @@ package org.sonar.api;
  * by plugins.
  *
  * @since 1.10
+ * @deprecated since 5.2 replaced by {@link BatchSide} and {@link ExtensionPoint} annotations
  */
+@Deprecated
 public interface BatchExtension extends Extension, BatchComponent {
 
 }
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/BatchSide.java b/sonar-plugin-api/src/main/java/org/sonar/api/BatchSide.java
new file mode 100644 (file)
index 0000000..323e44d
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.api;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marker annotation for all the components available in container of batch (code analyzer). Note that
+ * injection of dependencies by constructor is used :
+ * <pre>
+ *   {@literal @}BatchSide
+ *   public class Foo {
+ *
+ *   }
+ *   {@literal @}BatchSide
+ *   public class Bar {
+ *     private final Foo foo;
+ *     public Bar(Foo f) {
+ *       this.foo = f;
+ *     }
+ *   }
+ *
+ * </pre>
+ *
+ * @since 5.2
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface BatchSide {
+}
index 1c5c8a52c079dadd29f7f8c6b9ab9827fd9d7fe5..f5cbf9e4161f044906570cc93a3b2b51c98e98f9 100644 (file)
@@ -23,6 +23,9 @@ package org.sonar.api;
  * Plugin extension point
  *
  * @since 1.10
+ * @deprecated since 5.2 replaced by {@link ExtensionPoint} annotation
  */
+@Deprecated
+@ExtensionPoint
 public interface Extension {
 }
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/ExtensionPoint.java b/sonar-plugin-api/src/main/java/org/sonar/api/ExtensionPoint.java
new file mode 100644 (file)
index 0000000..6ccf977
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.api;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marker annotation for all the interfaces that are extension point (ie can be implemented by plugins 
+ * and will be called at some point of time by the platform).
+ *
+ * @since 5.2
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface ExtensionPoint {
+}
index 281c3058a7a27684e5a857221e233a3cab7152bf..2ace0f246d581976c5ef74b479c896b2c4c1cb5c 100644 (file)
@@ -23,6 +23,9 @@ package org.sonar.api;
  * Same than {@link org.sonar.api.BatchComponent} but for server-side components.
  *
  * @since 2.2
+ * @deprecated since 5.2 use {@link ServerSide} annotation
  */
+@Deprecated
+@ServerSide
 public interface ServerComponent {
 }
index 52a0051230ca12ea9044a5258f6840239486b761..49fcabf3f3bcd28283c75e32accd7b9e0d3fcb75 100644 (file)
@@ -23,6 +23,8 @@ package org.sonar.api;
  * Server extension point.
  *
  * @since 1.10
+ * @deprecated since 5.2 replaced by {@link ServerSide} and {@link ExtensionPoint} annotations
  */
+@Deprecated
 public interface ServerExtension extends Extension, ServerComponent {
 }
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/ServerSide.java b/sonar-plugin-api/src/main/java/org/sonar/api/ServerSide.java
new file mode 100644 (file)
index 0000000..6beb3b0
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.api;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Same than {@link org.sonar.api.BatchSide} but for server-side components.
+ *
+ * @since 5.2
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface ServerSide {
+}
index 300215a15919d826ca7433125ad6516f888caaf6..df652a6a6eb1ca3b741625b7489a58647d473c83 100644 (file)
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 /**
  * Use this component to find the current running mode.
  * @since 5.1
  */
-public interface AnalysisMode extends BatchComponent {
+@BatchSide
+public interface AnalysisMode {
 
   boolean isPreview();
 
index 779f79c4630fbacf680ac5a617b62c80ef20ec14..f755e50cb6fdbcddfc6638400d632e501702bf32 100644 (file)
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 
 /**
  * @since 2.6
  * @deprecated since 5.2 not used anymore
  */
 @Deprecated
-public interface CoverageExtension extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface CoverageExtension {
 
 }
index 71c48c45a04d70421398b18279f52fa06b46badc..ab7d930b5b4397b222d18ad10334e988d2197512 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.batch;
 
 import net.sourceforge.pmd.cpd.Tokenizer;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.resources.Language;
 import org.sonar.api.resources.Resource;
 
@@ -31,7 +32,9 @@ import java.util.List;
  * Implement this extension to get Copy/Paste detection for your language.
  * @since 1.10
  */
-public interface CpdMapping extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface CpdMapping {
 
   Tokenizer getTokenizer();
 
index b3f2792b5075ade7887244ff298091841c7b7001..70d018299bb1c1a5e5f95cf2cedfe534f89763ab 100644 (file)
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.resources.Resource;
 
 /**
  * @since 1.10
  */
-public interface Decorator extends BatchExtension, CheckProject {
+@BatchSide
+@ExtensionPoint
+public interface Decorator extends CheckProject {
 
   /**
    * @param resource resource that is currently decorated, equivalent of <code>context.getResource()</code>
index a530f6cc954f0f29fb9204555f43791fd94406f9..0758dcd9b23c2e0b64e65802abfc5923d9515e67 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.resources.Project;
 
 /**
@@ -34,7 +35,9 @@ import org.sonar.api.resources.Project;
  * 
  * @since 2.6
  */
-public abstract class Initializer implements BatchExtension, CheckProject {
+@BatchSide
+@ExtensionPoint
+public abstract class Initializer implements CheckProject {
 
   @Override
   public boolean shouldExecuteOnProject(Project project) {
index 5cfea413fc54cc35af2fcd212ab11a10e6529d5d..46b2e7abd26d7e34b6958efbb1c13575e3099c27 100644 (file)
@@ -25,7 +25,7 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Define instantiation strategy of batch extensions. If an extension is not annotated, then default value
+ * Define instantiation strategy of batch IoC components. If a component is not annotated, then default value
  * is {@link org.sonar.api.batch.InstantiationStrategy#PER_PROJECT}.
  * @since 4.4
  */
index a01a83178e0cf68e1c145c1025d1123a7db93374..7279bea5301ddeaa2b1063764f75a0d115f2974c 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.resources.Project;
 
 /**
@@ -30,7 +31,9 @@ import org.sonar.api.resources.Project;
  *
  * @since 1.10
  */
-public interface PostJob extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface PostJob {
 
   void executeOn(Project project, SensorContext context);
 
index 98502636ad27537958a84f692b2c78d5407b1800..f97e5df5e3140fd0a2f12586690667c9da3de39a 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.api.batch;
 
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.project.MavenProject;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.utils.SonarException;
 
 import java.io.File;
@@ -36,7 +36,8 @@ import java.util.List;
  * @deprecated since 4.5 this is some Java specific stuff that should by handled by SQ Java plugin
  */
 @Deprecated
-public class ProjectClasspath implements BatchComponent {
+@BatchSide
+public class ProjectClasspath {
 
   protected MavenProject pom;
   private List<File> elements;
index fc055e6da5caa7472d702e8872ede466652812ca..7bc1dd1197cc245cd5e0195cb3176dd13bf1c728 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.resources.Project;
 
 /**
@@ -41,7 +42,9 @@ import org.sonar.api.resources.Project;
  *
  * @since 1.10
  */
-public interface Sensor extends BatchExtension, CheckProject {
+@BatchSide
+@ExtensionPoint
+public interface Sensor extends CheckProject {
 
   /**
    * Sensors that depend upon Squid must declare the following method :
index 4322439a2206a658d3109ba6290bb95582826825..0356a3bb1a30a097baff29e0d8b8eeca44596dab 100644 (file)
@@ -25,15 +25,15 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * This annotation allows to specify in which environments {@link org.sonar.api.BatchExtension} would be active.
+ * This annotation allows to specify in which environments {@link org.sonar.api.BatchSide} components would be active.
  * For example: "maven", "ant".
  * Usage of this annotation is discouraged and we strictly recommend you to not overuse it.
- * Most preferable is to design extensions to work in all environments.
+ * Most preferable is to design components to work in all environments.
  * 
  * @since 2.6
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
+@Target({ElementType.TYPE})
 public @interface SupportedEnvironment {
 
   String[] value();
index 81ffb504294b8bf6b2ab9d39a98e35ff8baec072..ed61ad1faec694dc941d4907023f1b5540d5a6b3 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.measures.Measure;
 
 import java.util.List;
@@ -32,7 +32,8 @@ import java.util.List;
  */
 @Deprecated
 @RequiresDB
-public interface TimeMachine extends BatchComponent {
+@BatchSide
+public interface TimeMachine {
 
   /**
    * Past measures, sorted by date. Returns all fields.
index 7ddcd960049e65b23d946d6310083d86c8cecfa8..307c69608790b6d88a4845eafe3e7eca622e7c7d 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.batch.bootstrap;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.batch.InstantiationStrategy;
 
 /**
@@ -34,8 +35,10 @@ import org.sonar.api.batch.InstantiationStrategy;
  *
  * @since 2.9
  */
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public abstract class ProjectBuilder implements BatchExtension {
+@ExtensionPoint
+public abstract class ProjectBuilder {
 
   /**
    * Plugins can use the implementation {@link org.sonar.api.batch.bootstrap.internal.ProjectBuilderContext}
@@ -44,6 +47,7 @@ public abstract class ProjectBuilder implements BatchExtension {
   public interface Context {
     ProjectReactor projectReactor();
   }
+
   /**
    * Don't inject ProjectReactor as it may not be available
    * @deprecated since 3.7 use {@link #ProjectBuilder()}
index a272c2f1cb9d82cc5e8c938189d9a755af510789..2d58e233af1f313cd7e425bd92a5f74a3da63154 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.bootstrap;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -27,7 +27,8 @@ import java.util.List;
 /**
  * @since 2.9
  */
-public class ProjectReactor implements BatchComponent {
+@BatchSide
+public class ProjectReactor {
 
   private ProjectDefinition root;
 
index 4be4aa1389c94875b1f3c79882e8b590114693ee..412593db9ad6e45d9c5c3ecb010b196a86370bbe 100644 (file)
  */
 package org.sonar.api.batch.events;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 
 /**
- * Marker interface for event handlers.
+ * Common interface for event handlers.
  * This interface is not intended to be implemented by clients.
  * 
  * @since 2.8
  */
-public interface EventHandler extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface EventHandler {
 
 }
index 64b80ea8b3cfd2aaee983d1cedb948b5395864ca..0ce72b884fd6da83b9ebb0c2435c6491a209146f 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.fs;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 import javax.annotation.CheckForNull;
 
@@ -53,7 +53,8 @@ import java.util.SortedSet;
  *
  * @since 4.2
  */
-public interface FileSystem extends BatchComponent {
+@BatchSide
+public interface FileSystem {
 
   /**
    * Absolute base directory of module
index 91836823e43a44758b85d53df6d1c1c3c6b2a2a9..7033aacbb758217ff1b6dbaf4041cf7363810555 100644 (file)
  */
 package org.sonar.api.batch.fs;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 
 /**
  * Extension point to exclude some files from inspection
  * @since 4.2
  */
-public interface InputFileFilter extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface InputFileFilter {
 
   boolean accept(InputFile f);
 
index fa894077be402c35c2963919542cdeeb6eed9334..0862cfca9e8bd717020f633842ee5bd2e9937c23 100644 (file)
  */
 package org.sonar.api.batch.fs.internal;
 
+import org.sonar.api.BatchSide;
+
 import com.google.common.base.Charsets;
 import com.google.common.primitives.Ints;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.io.ByteOrderMark;
 import org.apache.commons.io.input.BOMInputStream;
-import org.sonar.api.BatchComponent;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
@@ -33,7 +34,12 @@ import org.sonar.api.utils.log.Loggers;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.nio.charset.Charset;
 import java.security.MessageDigest;
 import java.util.ArrayList;
@@ -43,7 +49,8 @@ import java.util.List;
  * Computes hash of files. Ends of Lines are ignored, so files with
  * same content but different EOL encoding have the same hash.
  */
-public class FileMetadata implements BatchComponent {
+@BatchSide
+public class FileMetadata {
 
   private static final Logger LOG = Loggers.get(FileMetadata.class);
 
index 4f91ea5aae422f182717e895e416079545cdf2ac..4bb74ed232d83b6c71adfa1c3df134cb0fe8a969 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.measure;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 import javax.annotation.CheckForNull;
 
@@ -29,7 +29,8 @@ import java.util.List;
 /**
  * @since 4.5
  */
-public interface MetricFinder extends BatchComponent {
+@BatchSide
+public interface MetricFinder {
 
   @CheckForNull
   Metric findByKey(String key);
index 06ac3e3533c6aaf407822c2a04200387ea32a660..2e37e179404f340f65cf0218f78bc08fb20a63c2 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.batch.postjob;
 
 import com.google.common.annotations.Beta;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 
 /**
  * PostJobs are executed at the very end of batch analysis. A PostJob can't do any modification
@@ -31,7 +32,9 @@ import org.sonar.api.BatchExtension;
  * @since 5.2
  */
 @Beta
-public interface PostJob extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface PostJob {
 
   /**
    * Populate {@link PostJobDescriptor} of this PostJob.
index e717c35d83a5fb96139247b3500c5714e582fc9e..45e069cf955e5284466a89a020300b5bd0b62c55 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.rule;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.rule.RuleKey;
 
 import javax.annotation.CheckForNull;
@@ -35,7 +35,8 @@ import java.util.Collection;
  *
  * @since 4.2
  */
-public interface ActiveRules extends BatchComponent {
+@BatchSide
+public interface ActiveRules {
 
   /**
    * Find a {@link ActiveRule} by the associated rule key. <code>null</code>
index d479d24806bbc567446fa625bc9d2f23337e4378..93fca9998447685151fa798267574c9dba1a81af 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.rule;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 /**
  * Creates {@link org.sonar.api.batch.rule.Checks}. This class is available
@@ -27,7 +27,8 @@ import org.sonar.api.BatchComponent;
  *
  * @since 4.2
  */
-public class CheckFactory implements BatchComponent {
+@BatchSide
+public class CheckFactory {
 
   private final ActiveRules activeRules;
 
index 7690bd56c942419f3a857dd736965ff6d8acb2ae..47bcec5bc452d25457c4bd334e774f2fe82cf955 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.rule;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.rule.RuleKey;
 
 import javax.annotation.CheckForNull;
@@ -32,7 +32,8 @@ import java.util.Collection;
  *
  * @since 4.2
  */
-public interface Rules extends BatchComponent {
+@BatchSide
+public interface Rules {
 
   /**
    * Get a rule by its key. Returns <code>null</code> if rule does not exist.
index b6e16d48bc74525a97187236ea7f945e2c053d9d..063e4ac0f373c7f83b229dd8ca7eefa07ec71709 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.scm;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.InstantiationStrategy;
 import org.sonar.api.batch.fs.FileSystem;
 import org.sonar.api.batch.fs.InputFile;
@@ -31,7 +31,8 @@ import java.util.List;
  * @since 5.0
  */
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public abstract class BlameCommand implements BatchComponent {
+@BatchSide
+public abstract class BlameCommand {
 
   /**
    * Compute blame of the provided files. 
index c3f86878293a790f2cf8cac4961432cb93fe6a16..a00a8d54bd7fc8a516f960555af161ddff98c7d1 100644 (file)
@@ -19,8 +19,9 @@
  */
 package org.sonar.api.batch.scm;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.batch.InstantiationStrategy;
 
 import java.io.File;
@@ -29,8 +30,10 @@ import java.io.File;
  * See {@link CoreProperties#LINKS_SOURCES_DEV} to get old Maven URL format.
  * @since 5.0
  */
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public abstract class ScmProvider implements BatchExtension {
+@ExtensionPoint
+public abstract class ScmProvider {
 
   /**
    * Unique identifier of the provider. Can be passed to {@link CoreProperties#SCM_PROVIDER_KEY}
index fe2d78b5cad6974c14b4d84dd34bb561686f70fd..35bda609ea9cd7309557cd1399559c932715d79b 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.batch.sensor;
 
 import com.google.common.annotations.Beta;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 
 /**
  * <p>
@@ -35,7 +36,9 @@ import org.sonar.api.BatchExtension;
  * @since 5.1
  */
 @Beta
-public interface Sensor extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface Sensor {
 
   /**
    * Populate {@link SensorDescriptor} of this sensor.
index 6f81ce61226cdfdb12a642eb203f2b82d00e2726..10beba2c5d3fb3c08f1e761ca8583b73ec7f8e48 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.batch.sensor.internal;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.sensor.coverage.internal.DefaultCoverage;
 import org.sonar.api.batch.sensor.dependency.Dependency;
 import org.sonar.api.batch.sensor.duplication.Duplication;
@@ -31,7 +31,8 @@ import org.sonar.api.batch.sensor.measure.Measure;
  * Interface for storing data computed by sensors.
  * @since 5.1
  */
-public interface SensorStorage extends BatchComponent {
+@BatchSide
+public interface SensorStorage {
 
   void store(Measure measure);
 
index 8f16849892e46b1bd209bcfc7a78901cdee9fd21..d2f86d7800b0c53ed921f9666a45cd2b5ccf178b 100644 (file)
  */
 package org.sonar.api.component;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 /**
  * @deprecated since 5.2 unused
  */
 @Deprecated
-public interface Perspectives extends BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface Perspectives {
 
   <P extends Perspective> P as(Class<P> perspectiveClass, Component component);
 
index 61a669ee75c66b911523746b8e4aba8650292d72..d4afa4d5389f84dcb47b1d08b4150cf31b64da92 100644 (file)
  */
 package org.sonar.api.component;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 
 /**
  * @since 3.6
  */
-public interface RubyComponentService extends ServerComponent {
+@ServerSide
+public interface RubyComponentService {
 
   @CheckForNull
   Component findByKey(String key);
index 5d955aa1ec9b4a2eac3a38779f96301aff94bb03..5e45bcc61855404744c4d7696cd26389c9a370d4 100644 (file)
 package org.sonar.api.config;
 
 import com.google.common.base.Objects;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 /**
  * If batch extensions use this component, then batch must be executed with administrator rights (see properties sonar.login and sonar.password)
  *
  * @since 3.2
  */
-public class EmailSettings implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class EmailSettings {
   public static final String SMTP_HOST = "email.smtp_host.secured";
   public static final String SMTP_HOST_DEFAULT = "";
   public static final String SMTP_PORT = "email.smtp_port.secured";
index dae8b5238ada76787d2443247347750452a36626..5d1be0f877d1ea289744d71ee5a10b07fe76c1d5 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.config;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
 
@@ -33,7 +34,9 @@ import javax.annotation.Nullable;
  *
  * @since 3.0
  */
-public abstract class GlobalPropertyChangeHandler implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class GlobalPropertyChangeHandler {
 
   public static final class PropertyChange {
     private String key;
index c8c73bde7e5261d786dcf4a75e7050f346a87819..b82b340e4ba5e8c8f6ba8e00ab6528a4c274a5a3 100644 (file)
@@ -25,10 +25,11 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.Property;
 import org.sonar.api.PropertyType;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Qualifiers;
 
 import javax.annotation.Nullable;
@@ -67,7 +68,10 @@ import java.util.List;
  *
  * @since 3.6
  */
-public final class PropertyDefinition implements BatchExtension, ServerExtension {
+@BatchSide
+@ServerSide
+@ExtensionPoint
+public final class PropertyDefinition {
 
   private String key;
   private String defaultValue;
index b44f6696d277af5197a5601c506b6775271c3909..4907cda46092472eb25ac5b7edb406b11388d8f4 100644 (file)
@@ -21,11 +21,11 @@ package org.sonar.api.config;
 
 import com.google.common.base.Strings;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.Properties;
 import org.sonar.api.Property;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.AnnotationUtils;
 
 import javax.annotation.Nullable;
@@ -41,7 +41,9 @@ import java.util.Map;
  *
  * @since 2.12
  */
-public final class PropertyDefinitions implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public final class PropertyDefinitions {
 
   private final Map<String, PropertyDefinition> definitions = new HashMap<>();
   private final Map<String, Category> categories = new HashMap<>();
index 662c661d1952609b7cd69595b994b6abcc0547eb..8c20de9b3a5d0de2f10d435e6eb8c6c63d713aaf 100644 (file)
@@ -26,8 +26,8 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.DateUtils;
 
 import javax.annotation.Nullable;
@@ -85,7 +85,9 @@ import java.util.Properties;
  * </p>
  * @since 2.12
  */
-public class Settings implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Settings {
 
   protected Map<String, String> properties;
   protected PropertyDefinitions definitions;
index 74bd4939f42ef777eb0eeec4e6a408956dbf6241..f6474fd8fa008cf2ec37b42c24b09286beca000a 100644 (file)
  */
 package org.sonar.api.database;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
+
 import java.util.List;
 
 /**
@@ -30,14 +31,13 @@ import java.util.List;
  *
  * @since 1.10
  */
-public abstract class DatabaseSession implements BatchComponent {
-
+@BatchSide
+public abstract class DatabaseSession {
 
   // IMPORTANT : this value must be the same than the property
   // hibernate.jdbc.batch_size from /META-INF/persistence.xml (module sonar-database)
   public static final int BATCH_SIZE = 30;
 
-
   public abstract EntityManager getEntityManager();
 
   public abstract void start();
index 3cc0936c0990153cf66d4b88e35846a74c0ee7a4..03fd8c9913e2fb95eae9e7a4381e68006a17d416 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.i18n;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
 
@@ -32,7 +32,9 @@ import java.util.Locale;
  *
  * @since 2.10
  */
-public interface I18n extends ServerComponent, BatchComponent {
+@BatchSide
+@ServerSide
+public interface I18n {
 
   /**
    * Searches the message of the <code>key</code> for the <code>locale</code> in the list of available bundles.
index 0dbcee23cc73e679ce667ecb22268fd6be5bc6e2..ef9c68009eddd0824ff0c76332abaac5ace25ac1 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.i18n;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rules.Rule;
 
 import javax.annotation.CheckForNull;
@@ -34,7 +34,9 @@ import java.util.Locale;
  * @deprecated in 4.1. Rules are not localized anymore. See http://jira.codehaus.org/browse/SONAR-4885
  */
 @Deprecated
-public interface RuleI18n extends ServerComponent, BatchComponent {
+@BatchSide
+@ServerSide
+public interface RuleI18n {
 
   /**
    * Returns the localized name of the rule identified by its repository key and rule key.
index 778b57135c74614840bb6f11521e620ff48a48fc..b87f69dc7f02a40fd16119db83c49486892db06d 100644 (file)
@@ -171,7 +171,7 @@ public interface Issue extends Serializable {
    * Non-null list of comments, ordered by chronological order.
    * <p/>
    * IMPORTANT: existing comments are not loaded when this method is called when analyzing project
-   * (from {@link org.sonar.api.BatchExtension}).
+   * (from {@link org.sonar.api.BatchSide}).
    */
   List<IssueComment> comments();
 
index 8592f9513d6c4fc9bb2b4b01ba8387bd68fbc7c5..903a5a7e692fb37688428628fb4672900b5f6d6a 100644 (file)
  */
 package org.sonar.api.issue;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 
 /**
  * @since 3.6
  * @deprecated since 4.0
  */
 @Deprecated
-public interface IssueFilter extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface IssueFilter {
 
   boolean accept(Issue issue);
 
index 794859794a7f07a5543a49995e45a8c07727464c..205b6a02ccbf8fb1e1cb2271d83cf8f465abc801 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.issue;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.user.User;
 
 import javax.annotation.Nullable;
@@ -27,7 +28,9 @@ import javax.annotation.Nullable;
 /**
  * @since 3.6
  */
-public interface IssueHandler extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface IssueHandler {
 
   interface Context {
     Issue issue();
index 591aa0f539b6e1421d62b7de7ce15784abdfb00e..f39046cf2cdb4dad61040964b9484467255209ce 100644 (file)
@@ -31,7 +31,7 @@ import java.util.Set;
 /**
  * Issue filter used to ignore issues created on lines commented with the tag "NOSONAR".
  * <p/>
- * Plugins, via {@link org.sonar.api.BatchExtension}s, must feed this filter by registering the
+ * Plugins, via {@link org.sonar.api.BatchSide}s, must feed this filter by registering the
  * lines that contain "NOSONAR". Note that filters are disabled for the issues reported by
  * end-users from UI or web services.
  *
index 096fcd365331c409f5e55751ec1dcf4f2c049cde..e0cac630b219b054b6a5398fbe11f446e25a81e8 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.issue;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.InstantiationStrategy;
 
 import static org.sonar.api.batch.InstantiationStrategy.PER_BATCH;
@@ -30,7 +30,8 @@ import static org.sonar.api.batch.InstantiationStrategy.PER_BATCH;
  * @since 4.0
  */
 @InstantiationStrategy(PER_BATCH)
-public interface ProjectIssues extends BatchComponent {
+@BatchSide
+public interface ProjectIssues {
 
   /**
    * All the unresolved issues of the project, including the issues reported by end-users.
index 149a7450994f29bc3c8b930acdf0d2a031dc40cb..0c239a04733ddc37fd31cd1e8053fba76c0f3f1a 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.issue.action;
 
 import com.google.common.annotations.Beta;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -29,7 +30,9 @@ import java.util.List;
  * @since 3.6
  */
 @Beta
-public class Actions implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public class Actions {
 
   private final List<Action> actions = new ArrayList<>();
 
index 1b240687719ee8e69d7bb1dfa90b20d86c506414..bb2eacf32969126dc7e42572d2169668a4d0912d 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.issue.batch;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.issue.Issue;
 
 /**
@@ -27,7 +28,9 @@ import org.sonar.api.issue.Issue;
  * @since 4.0
  *
  */
-public interface IssueFilter extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface IssueFilter {
 
   /**
    * The <code>accept</code> method is called for each {@link Issue} created during analysis, to check if it has to be persisted. Examples of use cases are:
index ad80aa5bb42706bb7bbfdc45cbc72157034f8762..611784734a2837753a2745c7be01e24ec637d9a0 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.measures;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.resources.Resource;
 
@@ -28,7 +28,8 @@ import org.sonar.api.resources.Resource;
  *
  * @since 2.14
  */
-public interface FileLinesContextFactory extends BatchComponent {
+@BatchSide
+public interface FileLinesContextFactory {
 
   /**
    * @deprecated since 4.4 use {@link #createFor(InputFile)}
index 111581d2f750eeacc12505a20bf2bd0c8a12441b..e53c1471b44bb0dfd0c6e8a57f48da9e986f0092 100644 (file)
@@ -22,13 +22,20 @@ package org.sonar.api.measures;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.BatchExtension;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.InstantiationStrategy;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
 
 import java.io.Serializable;
 
@@ -39,8 +46,10 @@ import java.io.Serializable;
  */
 @Table(name = "metrics")
 @Entity(name = "Metric")
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public class Metric<G extends Serializable> implements ServerExtension, BatchExtension, Serializable, org.sonar.api.batch.measure.Metric<G> {
+@ServerSide
+public class Metric<G extends Serializable> implements Serializable, org.sonar.api.batch.measure.Metric<G> {
 
   /**
    * A metric bigger value means a degradation
index bb89c172a07afe4588edcef957a2ea1f66c95fe0..bbb309528c7d2d26d25915888ae38295d45c690f 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.measures;
 
-import org.sonar.api.ServerComponent;
-import org.sonar.api.task.TaskComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 
@@ -32,7 +32,9 @@ import java.util.List;
  * @deprecated since 5.1 use {@link org.sonar.api.batch.measure.MetricFinder} on batch side
  */
 @Deprecated
-public interface MetricFinder extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface MetricFinder {
 
   @CheckForNull
   Metric findById(int id);
index badcf51c331445f456d4dcd80cb47de3efc5da18..e8d80b58a25b313f95c549b7bc5d51420375cb84 100644 (file)
@@ -19,8 +19,9 @@
  */
 package org.sonar.api.measures;
 
-import org.sonar.api.BatchExtension;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.InstantiationStrategy;
 
 import java.util.List;
@@ -28,7 +29,10 @@ import java.util.List;
 /**
  * @since 1.10
  */
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public interface Metrics extends BatchExtension, ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface Metrics {
   List<Metric> getMetrics();
 }
index 40c6d2b71d56f0465c1ccdfa5f3990461769d311..49521fe55d97a21cea8fabfe8ef0e308f1f24fc4 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.notifications;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * <p>
@@ -34,7 +35,9 @@ import org.sonar.api.ServerExtension;
  * 
  * @since 2.10
  */
-public abstract class NotificationChannel implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class NotificationChannel {
 
   /**
    * Returns the unique key of this channel. 
index 5ad0be8ed668bda4990d9e4c48437765520fd197..e662421d1265ab94f4b2762fb3660b6825bc7a96 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.notifications;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * <p>
@@ -37,7 +38,9 @@ import org.sonar.api.ServerExtension;
  * 
  * @since 2.10
  */
-public abstract class NotificationDispatcher implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class NotificationDispatcher {
 
   private final String notificationType;
 
index 8660f559b4fc6bcff5741c223b71c141ae3fe098..57b602ae2fc3da297ccddb9667e7b29963b05770 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.notifications;
 
 import com.google.common.collect.Maps;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import java.util.Map;
 
@@ -33,7 +34,9 @@ import java.util.Map;
  *
  * @since 3.5
  */
-public final class NotificationDispatcherMetadata implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public final class NotificationDispatcherMetadata {
 
   public static final String GLOBAL_NOTIFICATION = "globalNotification";
   public static final String PER_PROJECT_NOTIFICATION = "perProjectNotification";
index 535793eddf770ff050a504b77b505f12f2c4e54e..c56c733b98db961c8b7a4a25c77302bce7b58e97 100644 (file)
@@ -20,8 +20,9 @@
 package org.sonar.api.notifications;
 
 import com.google.common.collect.Multimap;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
+import org.sonar.api.batch.InstantiationStrategy;
 
 import javax.annotation.Nullable;
 
@@ -38,7 +39,10 @@ import java.util.List;
  *
  * @since 2.10
  */
-public interface NotificationManager extends ServerComponent, BatchComponent {
+@ServerSide
+@BatchSide
+@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
+public interface NotificationManager {
 
   /**
    * Receives a notification and stores it so that it is processed by the notification service.
index ec2cdf5b218c6cebb0aeb73dea5865e541ee16ee..829bc81dd603779404c7bbd91d7af4da8e690623 100644 (file)
 package org.sonar.api.platform;
 
 import com.google.common.base.Preconditions;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
 
 /**
  * @since 3.2
  */
-public interface NewUserHandler extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface NewUserHandler {
 
   final class Context {
     private String login;
index 4f4502779ab034a5e017e0e918d4bc1d927cfaae..ef33d6d9b35a9002ee5da6219814ae30c996635c 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.platform;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 
@@ -30,7 +30,9 @@ import java.util.Date;
 /**
  * @since 2.2
   */
-public abstract class Server implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public abstract class Server {
 
   public abstract String getId();
 
index 98233374fc71e0908379a2bac82437354cb91e78..b07a1a3cae7cf69d3b68e58968b14b1b190cbd28 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.platform;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.io.File;
 import java.util.List;
@@ -27,7 +27,8 @@ import java.util.List;
 /**
  * @since 2.3
  */
-public interface ServerFileSystem extends ServerComponent {
+@ServerSide
+public interface ServerFileSystem {
 
   File getHomeDir();
 
index 2df19eebc0b6b05c5f0b1cf03f41be80d326d6e8..8c1c09d0916a188daa452719a0e15b80efb963c8 100644 (file)
  */
 package org.sonar.api.platform;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 2.2
  */
-public interface ServerStartHandler extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface ServerStartHandler {
 
   void onServerStart(Server server);
 
index 7d6517c1ec919cb8ce895e0f33a315673fe2a45b..315d5a16cc5ad5af7b45559326b8e629d9910cdc 100644 (file)
  */
 package org.sonar.api.platform;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 2.2
  */
-public interface ServerStopHandler extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface ServerStopHandler {
 
   void onServerStop(Server server);
 
index 74bb376300681e99eddfc74009fcda45c2e2c97a..95d9923971152c0676c63522666606a9a2efc66c 100644 (file)
  */
 package org.sonar.api.platform;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 2.5
  */
-public interface ServerUpgradeStatus extends ServerComponent {
+@ServerSide
+public interface ServerUpgradeStatus {
 
   /**
    * Has the database been upgraded during the current startup ? Return false when {@link #isFreshInstall()} is true.
@@ -40,5 +41,5 @@ public interface ServerUpgradeStatus extends ServerComponent {
    * The database version before the server startup. Returns <=0 if db created from scratch.
    */
   int getInitialDbVersion();
-  
+
 }
index d3760d31a26708c401d07904f56f0c159d413ef4..8b45e85f2adb0ce4a5dad087e96e2d5b7fc59b57 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.api.profiles;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RuleAnnotationUtils;
 import org.sonar.api.rules.RuleFinder;
@@ -33,7 +33,8 @@ import java.util.Collection;
 /**
  * @since 2.3
  */
-public final class AnnotationProfileParser implements ServerComponent {
+@ServerSide
+public final class AnnotationProfileParser {
 
   private final RuleFinder ruleFinder;
 
index 41b273f1e9d9c6f4c7912a1fe1c14a5045476edf..7905aa164ba43cdde15c9ed6b6962dc21653e12c 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.profiles;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.ValidationMessages;
 
 /**
@@ -28,7 +29,9 @@ import org.sonar.api.utils.ValidationMessages;
  *
  * @since 2.3
  */
-public abstract class ProfileDefinition implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class ProfileDefinition {
 
   public abstract RulesProfile createProfile(ValidationMessages validation);
 
index f8ca5084ae555754c05f6102d8273a09f67e4fc5..69ede33467b067f550d1ba5d898a50deb9b5cf08 100644 (file)
@@ -22,15 +22,19 @@ package org.sonar.api.profiles;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.BatchExtension;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import java.io.Writer;
 
 /**
  * @since 2.3
  */
-public abstract class ProfileExporter implements BatchExtension, ServerExtension {
+@BatchSide
+@ServerSide
+@ExtensionPoint
+public abstract class ProfileExporter {
 
   private String[] supportedLanguages = new String[0];
   private String key;
@@ -105,10 +109,10 @@ public abstract class ProfileExporter implements BatchExtension, ServerExtension
   @Override
   public String toString() {
     return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
-        .append("key", key)
-        .append("name", name)
-        .append("mimeType", mimeType)
-        .append("languages", supportedLanguages)
-        .toString();
+      .append("key", key)
+      .append("name", name)
+      .append("mimeType", mimeType)
+      .append("languages", supportedLanguages)
+      .toString();
   }
 }
index a468e2a9acc6007fe1d0c1487020a20cf526fcfe..8d58254f965a4983b2e8cbdfcfb88b4c3a1fc85b 100644 (file)
@@ -21,7 +21,8 @@ package org.sonar.api.profiles;
 
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.ValidationMessages;
 
 import java.io.Reader;
@@ -29,7 +30,9 @@ import java.io.Reader;
 /**
  * @since 2.3
  */
-public abstract class ProfileImporter implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class ProfileImporter {
 
   private String[] supportedLanguages = new String[0];
   private String importerKey;
@@ -92,9 +95,9 @@ public abstract class ProfileImporter implements ServerExtension {
   @Override
   public String toString() {
     return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
-        .append("key", importerKey)
-        .append("name", importerName)
-        .append("languages", supportedLanguages)
-        .toString();
+      .append("key", importerKey)
+      .append("name", importerName)
+      .append("languages", supportedLanguages)
+      .toString();
   }
 }
index 8519072307c912e65b219d5999d350056221c22c..84b971dbe92835947f25af418589da75f8ee5991 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.commons.lang.StringUtils;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rules.ActiveRule;
 import org.sonar.api.rules.Rule;
 import org.sonar.api.rules.RuleFinder;
@@ -34,6 +34,7 @@ import org.sonar.api.utils.ValidationMessages;
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
+
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.HashMap;
@@ -42,7 +43,8 @@ import java.util.Map;
 /**
  * @since 2.3
  */
-public class XMLProfileParser implements ServerComponent {
+@ServerSide
+public class XMLProfileParser {
 
   private final RuleFinder ruleFinder;
 
index 47822090414f8ab46eeec0e960f451dd07d11138..ec56276649da1a0b47dfda8b5515c4992eeb70fe 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.api.profiles;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rules.ActiveRule;
 import org.sonar.api.rules.ActiveRuleParam;
 import org.sonar.api.utils.SonarException;
@@ -32,7 +32,8 @@ import java.io.Writer;
 /**
  * @since 2.3
  */
-public class XMLProfileSerializer implements ServerComponent {
+@ServerSide
+public class XMLProfileSerializer {
 
   public void write(RulesProfile profile, Writer writer) {
     try {
@@ -47,8 +48,8 @@ public class XMLProfileSerializer implements ServerComponent {
 
   private void appendHeader(RulesProfile profile, Writer writer) throws IOException {
     writer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-        + "<!-- Generated by SonarQube -->"
-        + "<profile><name>");
+      + "<!-- Generated by SonarQube -->"
+      + "<profile><name>");
     StringEscapeUtils.escapeXml(writer, profile.getName());
     writer.append("</name><language>");
     StringEscapeUtils.escapeXml(writer, profile.getLanguage());
index a5665394c431d3927fc8543053bec14aaf0d5893..2634e3564a2f684c3b72041c54aa46ed8a289b59 100644 (file)
@@ -19,8 +19,9 @@
  */
 package org.sonar.api.resources;
 
-import org.sonar.api.BatchExtension;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.InstantiationStrategy;
 
 /**
@@ -30,8 +31,11 @@ import org.sonar.api.batch.InstantiationStrategy;
  *
  * @since 1.10
  */
+@BatchSide
 @InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public interface Language extends BatchExtension, ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface Language {
 
   /**
    * For example "java". Should not be more than 20 chars.
index 055b3897c1df799758a949fd35cb3b1298a58461..d0ae370809f5b899341298111fd6baadd76c8a50 100644 (file)
@@ -21,8 +21,8 @@ package org.sonar.api.resources;
 
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.ArrayUtils;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 
@@ -37,7 +37,9 @@ import java.util.Map;
  *
  * @since 1.10
  */
-public class Languages implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Languages {
 
   private static final Logger LOG = Loggers.get(Languages.class);
 
index f6fa337b482461e6ef5101c51ca1fdf11e5c1e3c..6d620e722ac6ebc776899ad5a9756e9e9ca622b3 100644 (file)
@@ -26,8 +26,8 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ListMultimap;
-import org.sonar.api.ServerExtension;
-import org.sonar.api.task.TaskExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,7 +37,9 @@ import java.util.List;
 /**
  * @since 2.14
  */
-public class ResourceTypeTree implements TaskExtension, ServerExtension {
+@BatchSide
+@ServerSide
+public class ResourceTypeTree {
 
   private final List<ResourceType> types;
   private final ListMultimap<String, String> relations;
index 83962edd5f85a505ae44caa1cc314773297a5573..b9be315c6fe423422fca21d74a48b25a7708b6d6 100644 (file)
@@ -30,8 +30,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import org.sonar.api.ServerComponent;
-import org.sonar.api.task.TaskComponent;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
 
@@ -44,7 +43,8 @@ import java.util.Map;
  * @since 2.14
  */
 @Beta
-public class ResourceTypes implements TaskComponent, ServerComponent {
+@ServerSide
+public class ResourceTypes {
 
   public static final Predicate<ResourceType> AVAILABLE_FOR_FILTERS = new Predicate<ResourceType>() {
     @Override
@@ -184,7 +184,7 @@ public class ResourceTypes implements TaskComponent, ServerComponent {
     return treeByQualifier.get(qualifier);
   }
 
-  public ResourceType getRoot(String qualifier){
+  public ResourceType getRoot(String qualifier) {
     return getTree(qualifier).getRootType();
   }
 
index a5ecacd1df94e811cde1d4ef3eb878e4084c490d..53a7498b039e6b35ffa96b714b1d49ecd77e0f62 100644 (file)
  */
 package org.sonar.api.rules;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.batch.rule.ActiveRules;
 import org.sonar.api.rule.RuleKey;
-import org.sonar.api.task.TaskComponent;
 
 import javax.annotation.CheckForNull;
 
@@ -33,7 +33,9 @@ import java.util.Collection;
  * @deprecated since 5.1. Use {@link ActiveRules} on batch side.
  */
 @Deprecated
-public interface RuleFinder extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface RuleFinder {
 
   /**
    * @since 2.5
index b5032895f83c35e9cc860009a1ed1fe80e23a63e..a9e19d4331e19cc2c63dbb067a69198bf07c2604 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.api.scan.filesystem;
 
 import com.google.common.collect.ObjectArrays;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
 import org.sonar.api.config.Settings;
 
@@ -35,7 +35,8 @@ import java.util.List;
  *
  * @since 3.5
  */
-public class FileExclusions implements BatchComponent {
+@BatchSide
+public class FileExclusions {
   private final Settings settings;
 
   public FileExclusions(Settings settings) {
index 7665b406f1b49eaae4ac82be41781af3a70e12c8..3fedb814ea48950e132cc6d0234c1a26109c2b77 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.scan.filesystem;
 
-import org.sonar.api.BatchExtension;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ExtensionPoint;
 import org.sonar.api.batch.fs.InputFileFilter;
 
 import java.io.File;
@@ -35,7 +36,9 @@ import java.io.File;
  * @deprecated since 4.2 use {@link InputFileFilter}
  */
 @Deprecated
-public interface FileSystemFilter extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface FileSystemFilter {
 
   /**
    * Plugins must not implement this interface. It is provided at runtime.
index b3c14832f88e1122d8e551ac0a9793605e184097..152a1c14fb83f188d5e7472f51fc1ef0ea0ba422 100644 (file)
@@ -19,7 +19,7 @@
  */
 package org.sonar.api.scan.filesystem;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.batch.fs.FileSystem;
 import org.sonar.api.batch.fs.InputFile;
 
@@ -34,7 +34,8 @@ import java.util.List;
  * @deprecated in 4.2. Replaced by {@link org.sonar.api.batch.fs.FileSystem}
  */
 @Deprecated
-public interface ModuleFileSystem extends BatchComponent {
+@BatchSide
+public interface ModuleFileSystem {
 
   /**
    * Base directory.
index 9bd4ac7be0c01696229e138eaafae709696d8864..d0468c24d97416388b1abdc27a598dc8b34aa6c3 100644 (file)
@@ -21,7 +21,7 @@ package org.sonar.api.scan.filesystem;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.utils.PathUtils;
 
 import javax.annotation.CheckForNull;
@@ -34,7 +34,8 @@ import java.util.List;
 /**
  * @since 3.5
  */
-public class PathResolver implements BatchComponent {
+@BatchSide
+public class PathResolver {
 
   public File relativeFile(File dir, String path) {
     Preconditions.checkArgument(dir.isDirectory(), "Not a directory: " + dir.getAbsolutePath());
index 6d096999a1788125436cc210814028fdce62c8d0..5c2a7dadf8e9a685d8b764b306415b2a8ea0b49a 100644 (file)
@@ -20,7 +20,8 @@
 package org.sonar.api.security;
 
 import com.google.common.base.Preconditions;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
@@ -29,7 +30,9 @@ import javax.servlet.http.HttpServletRequest;
  * @see SecurityRealm
  * @since 3.1
  */
-public abstract class Authenticator implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class Authenticator {
 
   /**
    * @return true if user was successfully authenticated with specified credentials, false otherwise
index 12f917efaccff4ffc62c99b00ae484dcc44a1b52..f09256dc5bbe7c73442f7d9e577242161affc5e4 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.security;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 1.12
@@ -27,7 +28,9 @@ import org.sonar.api.ServerExtension;
  * @deprecated replaced by Authenticator in version 3.1
  */
 @Deprecated
-public interface LoginPasswordAuthenticator extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface LoginPasswordAuthenticator {
 
   /**
    * @throws RuntimeException if the authenticator can not be initialized at sonar server startup, eg. if the connection to LDAP server is refused
index ab0628239870affb11fc1734647084f6648bcb35..54d8c44195e83e9e10205af328cdff12616a0bfa 100644 (file)
@@ -19,9 +19,9 @@
  */
 package org.sonar.api.security;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.resources.Resource;
-import org.sonar.api.task.TaskComponent;
 
 /**
  * Grant access to newly created projects.
@@ -30,7 +30,9 @@ import org.sonar.api.task.TaskComponent;
  *
  * @since 3.2
  */
-public interface ResourcePermissions extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface ResourcePermissions {
 
   /**
    * Limitation - the resource id is used instead of logical key.
index 53a03c1ac09e909704310b3371e336e56e201a06..ba310849d2b90535f145af8d1feb42d5cf986717 100644 (file)
  */
 package org.sonar.api.security;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 2.14
  */
-public abstract class SecurityRealm implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class SecurityRealm {
 
   /**
    * @return unique name of this realm, e.g. "ldap"
index dc6b50293f6ca0efaf0f76cb935bce29efb60dd6..c3f4a739cdd24156660e395e3428d7f391a0c29d 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.security;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.database.model.User;
 
 /**
@@ -28,7 +28,9 @@ import org.sonar.api.database.model.User;
  * @deprecated since 5.1 DB access will soon be removed from batch side
  */
 @Deprecated
-public interface UserFinder extends ServerComponent, BatchComponent {
+@BatchSide
+@ServerSide
+public interface UserFinder {
 
   User findById(int id);
 
index b2d668fa239362a9dadd9b9753db76324b5dc47f..d9a9234976d4abdf4a6af65d2acd23d11901ff1d 100644 (file)
 
 package org.sonar.api.server.debt;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import java.util.List;
 
 /**
  * @since 4.3
  */
-public interface DebtModel extends ServerComponent {
+@ServerSide
+public interface DebtModel {
 
   /**
    * @return all characteristics
index 6caa31b52178fac5f8c8e75d3369276f340fb894..c70a11a0de2fb7ee538f479af4df59b821c9324f 100644 (file)
 package org.sonar.api.server.rule;
 
 import com.google.common.base.Strings;
-import com.google.common.collect.*;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
 import org.sonar.api.server.debt.DebtRemediationFunction;
@@ -132,7 +139,9 @@ import java.util.Set;
  *
  * @since 4.3
  */
-public interface RulesDefinition extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface RulesDefinition {
 
   /**
    * Default sub-characteristics of technical debt model. See http://www.sqale.org
index 70973c5a124ba00252fac21930b5cbd0b1568c80..61d6ada23530dbca439e2611df2001250200d76c 100644 (file)
@@ -20,7 +20,7 @@
 package org.sonar.api.server.rule;
 
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.i18n.RuleI18n;
 
 /**
@@ -35,7 +35,8 @@ import org.sonar.api.i18n.RuleI18n;
  * @see org.sonar.api.server.rule.RulesDefinition for an example
  * @since 4.3
  */
-public class RulesDefinitionI18nLoader implements ServerComponent {
+@ServerSide
+public class RulesDefinitionI18nLoader {
 
   private final RuleI18n i18n;
 
index 55612d860aa3952d65b351e2b91980c8e2609759..910f56fe2fbe3274ff2565eac542a0c36d6a43a4 100644 (file)
@@ -23,7 +23,7 @@ import org.apache.commons.lang.StringUtils;
 import org.codehaus.staxmate.SMInputFactory;
 import org.codehaus.staxmate.in.SMHierarchicCursor;
 import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.rule.RuleStatus;
 import org.sonar.api.rule.Severity;
 import org.sonar.check.Cardinality;
@@ -81,7 +81,8 @@ import java.util.List;
  * @see org.sonar.api.server.rule.RulesDefinition
  * @since 4.3
  */
-public class RulesDefinitionXmlLoader implements ServerComponent {
+@ServerSide
+public class RulesDefinitionXmlLoader {
 
   public void load(RulesDefinition.NewRepository repo, InputStream input, String encoding) {
     load(repo, input, Charset.forName(encoding));
index 84eb2af2e903c23849c235d7a5146acc39217e32..7b45a5ea5f3311d9c233e13aeab17afa3b50dd02 100644 (file)
  */
 package org.sonar.api.server.ws;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 4.2
  */
-public interface RequestHandler extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface RequestHandler {
 
   void handle(Request request, Response response) throws Exception;
 
index af429ac9b69f1a741ced7da044c51a609bc8fb0f..2535dcd72b92b6597af389346349654f148f48bd 100644 (file)
@@ -27,7 +27,8 @@ import com.google.common.collect.Sets;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
@@ -100,7 +101,9 @@ import java.util.Set;
  *
  * @since 4.2
  */
-public interface WebService extends ServerExtension, Definable<WebService.Context> {
+@ServerSide
+@ExtensionPoint
+public interface WebService extends Definable<WebService.Context> {
 
   class Context {
     private final Map<String, Controller> controllers = Maps.newHashMap();
index 65d5e05509375f273e8697bc06547dcaf1bd207d..1aff5a5179690fafef0cc010450c8b64b7655049 100644 (file)
@@ -19,6 +19,9 @@
  */
 package org.sonar.api.task;
 
+import org.sonar.api.BatchSide;
+import org.sonar.api.batch.InstantiationStrategy;
+
 /**
  * All the classes implementing this interface can be injected in public constructors of {@link TaskExtension}.
  *
@@ -26,5 +29,7 @@ package org.sonar.api.task;
  * @deprecated since 5.1 all tasks (devcockpit, views) will be moved to server side
  */
 @Deprecated
+@BatchSide
+@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
 public interface TaskComponent {
 }
index 33eb7e48a7613ab315f5c02f31cf0c34098f5f32..56000eca6091445bae41a3ec4ff34489ed7a5509 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.sonar.api.technicaldebt.batch;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.technicaldebt.batch.internal.DefaultCharacteristic;
 
@@ -30,11 +30,11 @@ import java.util.List;
 
 /**
  * @since 4.1
- * Used by Views plugin
  * @deprecated since 4.3
  */
 @Deprecated
-public interface TechnicalDebtModel extends BatchComponent {
+@BatchSide
+public interface TechnicalDebtModel {
 
   @CheckForNull
   Characteristic characteristicById(Integer id);
index 1e303d01db97207945ce09082d08e71295d3039c..5d9a92d0c3b4fcc43e46955d1041c8df006557cf 100644 (file)
  */
 package org.sonar.api.user;
 
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
+
 import java.util.List;
 import java.util.Map;
 
 /**
  * @since 3.6
  */
-public interface RubyUserService extends ServerComponent {
+@ServerSide
+public interface RubyUserService {
 
   @CheckForNull
   User findByLogin(String login);
index 7e869810b2d6305553eabc09a503e9e8d191fe58..1a261424b7f4d7e5d793fcf1d5d9d466476d9b4a 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.user;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 
@@ -31,7 +31,9 @@ import java.util.List;
  * @deprecated since 5.1 DB access will soon be removed from batch side
  */
 @Deprecated
-public interface UserFinder extends BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface UserFinder {
 
   @CheckForNull
   User findByLogin(String login);
index 05f2ba422d55310d8b7fa59e0b2118daebfbab6a..5e3ae2a06322a06f4e4c01c500c7cbaa1d230faa 100644 (file)
@@ -20,9 +20,9 @@
 
 package org.sonar.api.utils;
 
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
 import org.sonar.api.CoreProperties;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
 import org.sonar.api.config.Settings;
 import org.sonar.api.i18n.I18n;
 
@@ -35,7 +35,9 @@ import java.util.Locale;
  *
  * @since 4.3
  */
-public class Durations implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Durations {
 
   public enum DurationFormat {
     /**
@@ -111,7 +113,7 @@ public class Durations implements BatchComponent, ServerComponent {
     return format(locale, days, hours, minutes, isNegative);
   }
 
-  private String format(Locale locale, int days, int hours, int minutes, boolean isNegative){
+  private String format(Locale locale, int days, int hours, int minutes, boolean isNegative) {
     StringBuilder message = new StringBuilder();
     if (days > 0) {
       message.append(message(locale, "work_duration.x_days", isNegative ? -1 * days : days));
index 4965f14d3d4353419e528ccb0553acbeb87f9f47..fc2d9d36c1cfcdda331328add7b10591ec56de69 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.utils;
 
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import java.io.File;
 import java.io.InputStream;
@@ -30,7 +30,9 @@ import java.net.URI;
  * This component is available in IoC container, so it should be injected through
  * a constructor parameter. It is available in both batch and server.
  */
-public abstract class HttpDownloader extends UriReader.SchemeProcessor implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public abstract class HttpDownloader extends UriReader.SchemeProcessor {
   public static final int TIMEOUT_MILLISECONDS = 20 * 1000;
 
   public abstract String downloadPlainText(URI uri, String encoding);
index 713d85265e21345d13ace71e40babc4fd07f19f1..a756709e0925ee99d1c047336f8b4f5025aedd8b 100644 (file)
  */
 package org.sonar.api.utils;
 
-import org.sonar.api.ServerComponent;
-import org.sonar.api.task.TaskComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
+
 import java.util.Date;
 
 /**
@@ -31,7 +32,9 @@ import java.util.Date;
  *
  * @since 3.4
  */
-public interface Semaphores extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface Semaphores {
 
   /**
    * Try to acquire a semaphore for a given duration.
index 2b05df0de8694db1395793fb72a49b245f165864..03e8f5122c8c5ca15390ecf350b85129ef213559 100644 (file)
@@ -20,8 +20,8 @@
 package org.sonar.api.utils;
 
 import org.apache.commons.lang.SystemUtils;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.CheckForNull;
 
@@ -63,7 +63,9 @@ import java.util.TimeZone;
  *
  * @since 4.2
  */
-public class System2 implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class System2 {
 
   public static final System2 INSTANCE = new System2();
 
index 92a695b57b16ff009eda8ebcac6c48596200f84c..8a15c2fcc7303428dbe0321a195610429e8705f5 100644 (file)
@@ -19,8 +19,8 @@
  */
 package org.sonar.api.utils;
 
-import org.sonar.api.ServerComponent;
-import org.sonar.api.task.TaskComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import javax.annotation.Nullable;
 
@@ -36,7 +36,9 @@ import java.io.File;
  * @since 4.0
  *
  */
-public interface TempFolder extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface TempFolder {
 
   /**
    * Create a directory in temp folder with a random unique name.
index ad435de7b23ca7112038dc496f048b1bd50c463c..9f5ceb4e80bcc19f5d04af29e176b56e36525fef 100644 (file)
@@ -25,8 +25,8 @@ import com.google.common.base.Throwables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.io.Files;
-import org.sonar.api.BatchComponent;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 
 import java.io.File;
 import java.io.IOException;
@@ -41,7 +41,9 @@ import java.util.Map;
  *
  * @since 3.2
  */
-public class UriReader implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class UriReader {
 
   private final Map<String, SchemeProcessor> processorsByScheme = Maps.newHashMap();
 
@@ -96,7 +98,6 @@ public class UriReader implements BatchComponent, ServerComponent {
     protected abstract String description(URI uri);
   }
 
-
   /**
    * This implementation is not exposed in API and is kept private.
    */
@@ -104,7 +105,7 @@ public class UriReader implements BatchComponent, ServerComponent {
 
     @Override
     public String[] getSupportedSchemes() {
-      return new String[]{"file"};
+      return new String[] {"file"};
     }
 
     @Override
index e0e8a87ca522df9a2360ec2715feceeef159adc3..8ba70571379196c2145768422fc89286348c0cb1 100644 (file)
 package org.sonar.api.utils.internal;
 
 import org.picocontainer.Startable;
-import org.sonar.api.ServerComponent;
-import org.sonar.api.task.TaskComponent;
+import org.sonar.api.BatchSide;
+import org.sonar.api.ServerSide;
 import org.sonar.api.utils.TempFolder;
 
-public class TempFolderCleaner implements TaskComponent, ServerComponent, Startable {
+@BatchSide
+@ServerSide
+public class TempFolderCleaner implements Startable {
 
   private TempFolder defaultTempFolder;
 
index ce40f5fe04139b0ae2becf7be102fe841d409e81..2060b0d7d9e25933c03c26ed261cbafb3bfe36dd 100644 (file)
  */
 package org.sonar.api.web;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * This extension point must be implemented to define a new dashboard.
  *
  * @since 2.13
  */
-public abstract class DashboardTemplate implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class DashboardTemplate {
 
   /**
    * Returns the {@link Dashboard} object that represents the dashboard to use.
index 5ba0cc14bf85aeea19b1ee15c5374df9143423c6..ec7e6fc918b61ed143478c35aba902718d7f090c 100644 (file)
  */
 package org.sonar.api.web;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * This extension point must be implemented to define a new filter.
  *
  * @since 3.1
  */
-public abstract class FilterTemplate implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class FilterTemplate {
 
   /**
    * Returns the {@link Filter} object that represents the filter to use.
index 4dbbdade3758d6dc44d5ff41cc8aeb94a58971e7..3aa3d3e97fa49085f40d037cddfa5b0858956609 100644 (file)
  */
 package org.sonar.api.web;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 1.10
  */
-public interface Footer extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface Footer {
 
   /**
    * Static HTML (no Ruby on Rails)
index 4505a42c32c050034f63d8a4a563f69c708647a7..b34a7913c023eb67dc518e2e27c46c75caae05bb 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.web;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * Adds content to HTML pages. A PageDecoration is a Rails template (html.erb file) that executes content_for blocks on predefined locations :
@@ -44,6 +45,8 @@ import org.sonar.api.ServerExtension;
  *
  * @since 3.3
  */
-public abstract class PageDecoration extends AbstractRubyTemplate implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class PageDecoration extends AbstractRubyTemplate {
 
 }
index 29e9c99ab01a03cb47f1dff5425ba4643fefa36c..e50462060f8812a9c1f19ed7f4510cb48e0dd64c 100644 (file)
@@ -21,14 +21,17 @@ package org.sonar.api.web;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 import javax.servlet.Filter;
 
 /**
  * @since 3.1
  */
-public abstract class ServletFilter implements ServerExtension, Filter {
+@ServerSide
+@ExtensionPoint
+public abstract class ServletFilter implements Filter {
 
   /**
    * Override to change URL. Default is /*
index adfac3917bab20c0f466cdd18eaebf77212c7044..fed5625d6b32c66afdbd1a305d0f34a31ae390c4 100644 (file)
  */
 package org.sonar.api.web;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * @since 1.11
  */
-public interface View extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface View {
 
   String getId();
 
index 1b33222abbadf3182b4b68f959d965fa425a3bdb..28b9d0f027aa63a05fc76c55b292f35d25752f19 100644 (file)
@@ -19,7 +19,8 @@
  */
 package org.sonar.api.web;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 
 /**
  * Interface to create a web service extension point
@@ -28,7 +29,9 @@ import org.sonar.api.ServerExtension;
  * @deprecated in 4.2. Replaced by {@link org.sonar.api.server.ws.WebService}
  */
 @Deprecated
-public interface Webservice extends ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface Webservice {
 
   /**
    * @return The id of the web service
index 09a8a5c1e40a0dfa00bf762c0a90e000e78af1f4..fda958539be6cafd8d68c8bab393179c6e6d5984 100644 (file)
  */
 package org.sonar.plugins.emailnotifications.api;
 
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
 import org.sonar.api.notifications.Notification;
 
 /**
  * @since 2.10
  */
-public abstract class EmailTemplate implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class EmailTemplate {
 
   public abstract EmailMessage format(Notification notification);