123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /*
- * 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.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.sonar.api.batch.InstantiationStrategy;
- import org.sonar.api.batch.bootstrap.ProjectDefinition;
- import org.sonar.api.batch.fs.internal.FileMetadata;
- import org.sonar.api.batch.rule.CheckFactory;
- import org.sonar.api.checks.NoSonarFilter;
- import org.sonar.api.resources.Project;
- import org.sonar.api.scan.filesystem.FileExclusions;
- import org.sonar.batch.DefaultProjectTree;
- import org.sonar.batch.bootstrap.BatchExtensionDictionnary;
- 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.DefaultTimeMachine;
- import org.sonar.batch.deprecated.perspectives.BatchPerspectives;
- import org.sonar.batch.events.EventBus;
- import org.sonar.batch.index.DefaultIndex;
- import org.sonar.batch.issue.IssuableFactory;
- import org.sonar.batch.issue.IssueFilters;
- import org.sonar.batch.issue.ModuleIssues;
- import org.sonar.batch.issue.ignore.EnforceIssuesFilter;
- import org.sonar.batch.issue.ignore.IgnoreIssuesFilter;
- 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.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.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.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;
- 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.platform.ComponentContainer;
- import org.sonar.core.timemachine.Periods;
-
- public class ModuleScanContainer extends ComponentContainer {
- private static final Logger LOG = LoggerFactory.getLogger(ModuleScanContainer.class);
- private final Project module;
-
- public ModuleScanContainer(ProjectScanContainer parent, Project module) {
- super(parent);
- this.module = module;
- }
-
- @Override
- protected void doBeforeStart() {
- LOG.info("------------- Scan {}", module.getName());
- addCoreComponents();
- addExtensions();
- }
-
- private void addCoreComponents() {
- ProjectDefinition moduleDefinition = getComponentByType(DefaultProjectTree.class).getProjectDefinition(module);
- add(
- moduleDefinition,
- module,
- ModuleSettings.class);
-
- // hack to initialize settings before ExtensionProviders
- ModuleSettings moduleSettings = getComponentByType(ModuleSettings.class);
- module.setSettings(moduleSettings);
-
- add(
- EventBus.class,
- Periods.class,
- PhaseExecutor.class,
- RuleFinderCompatibility.class,
- PostJobsExecutor.class,
- DecoratorsExecutor.class,
- SensorsExecutor.class,
- PersistersExecutor.class,
- InitializersExecutor.class,
- ProjectInitializer.class,
- moduleDefinition.getContainerExtensions(),
-
- // file system
- ModuleInputFileCache.class,
- FileExclusions.class,
- ExclusionFilters.class,
- DeprecatedFileFilters.class,
- InputFileBuilderFactory.class,
- FileMetadata.class,
- StatusDetectionFactory.class,
- LanguageDetectionFactory.class,
- FileIndexer.class,
- ComponentIndexer.class,
- LanguageVerifier.class,
- FileSystemLogger.class,
- DefaultModuleFileSystem.class,
- ModuleFileSystemInitializer.class,
- ProjectFileSystemAdapter.class,
- QProfileVerifier.class,
-
- SensorOptimizer.class,
- PostJobOptimizer.class,
-
- DefaultSensorContext.class,
- DefaultPostJobContext.class,
- DefaultSensorStorage.class,
- DeprecatedSensorContext.class,
- BatchExtensionDictionnary.class,
- DefaultTimeMachine.class,
- IssueFilters.class,
- CoverageExclusions.class,
- ResourceFilters.class,
-
- // rules
- ModuleQProfiles.class,
- new RulesProfileProvider(),
- QProfileSensor.class,
- QProfileDecorator.class,
- CheckFactory.class,
-
- // report
- IssuesReports.class,
-
- // issues
- IssuableFactory.class,
- ModuleIssues.class,
- org.sonar.api.issue.NoSonarFilter.class,
-
- // issue exclusions
- IssueInclusionPatternInitializer.class,
- IssueExclusionPatternInitializer.class,
- IssueExclusionsRegexpScanner.class,
- IssueExclusionsLoader.class,
- EnforceIssuesFilter.class,
- IgnoreIssuesFilter.class,
- NoSonarFilter.class,
-
- // Perspectives
- BatchPerspectives.class,
- HighlightableBuilder.class,
- SymbolizableBuilder.class);
- }
-
- private void addExtensions() {
- ExtensionInstaller installer = getComponentByType(ExtensionInstaller.class);
- installer.install(this, new ExtensionMatcher() {
- @Override
- public boolean accept(Object extension) {
- return ExtensionUtils.isBatchSide(extension) && ExtensionUtils.isInstantiationStrategy(extension, InstantiationStrategy.PER_PROJECT);
- }
- });
- }
-
- @Override
- protected void doAfterStart() {
- DefaultIndex index = getComponentByType(DefaultIndex.class);
- index.setCurrentProject(module, getComponentByType(ModuleIssues.class));
-
- getComponentByType(PhaseExecutor.class).execute(module);
-
- // Free memory since module settings are no more used
- module.setSettings(null);
- }
-
- }
|