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;
extensions.add(
DefaultResourceTypes.class,
UserManagedMetrics.class,
- Periods.class,
// measure filters
ProjectFilter.class,
*/
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";
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;
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;
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;
*/
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;
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;
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;
* @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;
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);
*/
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;
import java.util.Date;
-public class ActivityDao implements DaoComponent, ServerComponent {
+@ServerSide
+public class ActivityDao implements DaoComponent {
private final MyBatis mybatis;
private final System2 system;
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;
/**
* 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;
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;
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);
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;
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())) {
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;
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;
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;
import static com.google.common.collect.Lists.newArrayList;
-public class ComponentService implements ServerComponent {
+@ServerSide
+public class ComponentService {
private final DbClient dbClient;
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;
/**
* @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);
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 + ".%");
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;
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);
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;
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);
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;
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);
}
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;
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;
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;
/**
* <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;
*/
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;
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.
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;
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;
*/
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;
/**
* Facade for all db components, mainly DAOs
*/
-public class DbClient implements ServerComponent {
+@ServerSide
+public class DbClient {
private final Database db;
private final MyBatis myBatis;
*/
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;
* 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;
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;
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));
}
}
- static String convertKey(String key){
+ static String convertKey(String key) {
if ("NETWORK_USE_EFFICIENCY".equals(key)) {
return RulesDefinition.SubCharacteristics.NETWORK_USE;
}
*/
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;
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);
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;
import static com.google.common.collect.Lists.newArrayList;
-public class DebtModelLookup implements ServerComponent {
+@ServerSide
+public class DebtModelLookup {
private final CharacteristicDao dao;
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;
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;
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;
* 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";
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;
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;
/**
* 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";
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;
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);
}
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) {
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;
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);
return session.getMapper(FileDependencyMapper.class).selectAll();
}
-
public void insert(DbSession session, FileDependencyDto dto) {
session.getMapper(FileDependencyMapper.class).insert(dto);
}
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;
import static com.google.common.collect.Maps.newHashMap;
-public class DuplicationsJsonWriter implements ServerComponent {
+@ServerSide
+public class DuplicationsJsonWriter {
private final ComponentDao componentDao;
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;
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;
*/
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) {
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;
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;
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;
/**
* 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);
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();
}
}
-
void define(IndexDefinitionContext context);
}
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}
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;
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);
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;
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();
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;
/**
* @since 3.7
*/
-public abstract class Action implements ServerComponent {
+@ServerSide
+public abstract class Action {
private final String key;
private final List<Condition> conditions;
}
}
-
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;
/**
* @since 3.6
*/
-public class ActionService implements ServerComponent {
+@ServerSide
+public class ActionService {
private final DbClient dbClient;
private final IssueService issueService;
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";
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;
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";
}
@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);
@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);
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;
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";
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;
*
* @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";
*/
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;
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.";
*/
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;
/**
* @since 3.6
*/
-public class IssueChangelogService implements ServerComponent {
+@ServerSide
+public class IssueChangelogService {
private final IssueChangeDao changeDao;
private final UserFinder userFinder;
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;
/**
* @since 3.6
*/
-public class IssueCommentService implements ServerComponent {
+@ServerSide
+public class IssueCommentService {
private final DbClient dbClient;
private final IssueService issueService;
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;
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;
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__";
}
String uniqueQualifier = qualifiers.iterator().next();
- switch(uniqueQualifier) {
+ switch (uniqueQualifier) {
case Qualifiers.VIEW:
case Qualifiers.SUBVIEW:
addViewsOrSubViews(builder, componentUuids, uniqueQualifier);
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;
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;
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;
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";
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";
*/
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;
/**
* @since 3.6
*/
-public class ServerIssueStorage extends IssueStorage implements ServerComponent {
+@ServerSide
+public class ServerIssueStorage extends IssueStorage {
private final DbClient dbClient;
private final IssueIndexer indexer;
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;
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";
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;
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";
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;
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;
/**
* @since 3.6
*/
-public class ActionPlanService implements ServerComponent {
+@ServerSide
+public class ActionPlanService {
private final DbClient dbClient;
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;
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);
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;
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;
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()
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;
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;
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;
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");
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;
import java.util.Collections;
import java.util.List;
-public class MeasureFilterExecutor implements ServerComponent {
+@ServerSide
+public class MeasureFilterExecutor {
private MyBatis mybatis;
private Database database;
}
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);
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;
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;
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;
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;
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;
import java.util.List;
-public class MetricDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class MetricDao implements DaoComponent {
@CheckForNull
public MetricDto selectByKey(DbSession session, String key) {
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);
}
}
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;
/**
* @since 3.5
*/
-public class NotificationCenter implements ServerComponent {
+@ServerSide
+public class NotificationCenter {
private static final Logger LOG = Loggers.get(NotificationCenter.class);
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;
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);
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;
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;
/**
* Used by ruby code <pre>Internal.permissions</pre>
*/
-public class InternalPermissionService implements ServerComponent {
+@ServerSide
+public class InternalPermissionService {
private enum Operation {
ADD, REMOVE
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;
/**
* 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;
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;
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;
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",
*/
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
*/
* 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();
}
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;
/**
* Loads the plugins server extensions and injects them to DI container
*/
-public class ServerExtensionInstaller implements ServerComponent {
+@ServerSide
+public class ServerExtensionInstaller {
private final PluginRepository pluginRepository;
}
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);
}
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;
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;
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;
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;
* 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;
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;
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;
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;
import java.util.Map;
import java.util.Set;
-public class QProfileComparison implements ServerComponent {
+@ServerSide
+public class QProfileComparison {
private final DbClient dbClient;
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;
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;
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;
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);
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;
/**
* Create, delete, rename and set as default profile.
*/
-public class QProfileFactory implements ServerComponent {
+@ServerSide
+public class QProfileFactory {
private final DbClient db;
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;
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;
new QueryContext().setLimit(0)).getTotal();
}
-
}
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;
import static com.google.common.collect.Lists.newArrayList;
-public class QProfileLookup implements ServerComponent {
+@ServerSide
+public class QProfileLookup {
private final DbClient db;
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;
import java.util.List;
import java.util.Map;
-public class QProfileProjectLookup implements ServerComponent {
+@ServerSide
+public class QProfileProjectLookup {
private final DbClient db;
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;
* 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;
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;
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;
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;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
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;
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;
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;
* 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";
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;
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";
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;
/**
* 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;
*/
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;
import java.util.Collection;
-public class RuleActivatorContextFactory implements ServerComponent {
+@ServerSide
+public class RuleActivatorContextFactory {
private final DbClient db;
*/
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;
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";
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;
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";
(!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);
}
*/
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;
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";
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;
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;
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);
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;
* @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;
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;
import static com.google.common.collect.Lists.newArrayList;
-public class RuleCreator implements ServerComponent {
+@ServerSide
+public class RuleCreator {
private final DbClient dbClient;
}
}
- 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");
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());
}
@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())
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())
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())
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());
*/
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;
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;
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;
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;
* @deprecated to be dropped in 4.4
*/
@Deprecated
-public class RuleOperations implements ServerComponent {
+@ServerSide
+public class RuleOperations {
private final DbClient dbClient;
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;
*
* @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;
*/
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;
/**
* @since 4.4
*/
-public class RuleService implements ServerComponent {
+@ServerSide
+public class RuleService {
private final RuleIndex index;
private final RuleUpdater ruleUpdater;
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;
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;
}
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));
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;
* 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);
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;
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);
*/
package org.sonar.server.search;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
import java.util.Collection;
import java.util.HashMap;
/**
* 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);
}
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;
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;
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;
/**
* 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();
/**
* 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) {
}
}
- 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) {
}
}
- 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) {
}
}
- 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) {
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) {
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;
import java.util.List;
-public class SourceService implements ServerComponent {
+@ServerSide
+public class SourceService {
private final HtmlSourceDecorator sourceDecorator;
private final SourceLineIndex sourceLineIndex;
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;
import java.sql.ResultSet;
import java.sql.SQLException;
-public class FileSourceDao implements ServerComponent, DaoComponent {
+@ServerSide
+public class FileSourceDao implements DaoComponent {
private final MyBatis mybatis;
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;
*
* @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);
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
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;
import java.util.Map;
-public class CoverageService implements ServerComponent {
+@ServerSide
+public class CoverageService {
public enum TYPE {
UT, IT, OVERALL
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) {
*/
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;
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;
*
* Bridge between JRuby webapp and Java I18n component
*/
-public class JRubyI18n implements ServerComponent {
+@ServerSide
+public class JRubyI18n {
private I18n i18n;
private Durations durations;
*/
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;
/**
* @since 3.3
*/
-public final class PageDecorations implements ServerComponent {
+@ServerSide
+public final class PageDecorations {
private final PageDecoration[] decorations;
}
public PageDecoration[] get() {
- return decorations;//NOSONAR expose internal representation
+ return decorations;// NOSONAR expose internal representation
}
}
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;
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();
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;
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;
/**
* 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";
*/
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;
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;
/**
* @since 2.14
*/
-public class SecurityRealmFactory implements ServerComponent, Startable {
+@ServerSide
+public class SecurityRealmFactory implements Startable {
private final boolean ignoreStartupFailure;
private final SecurityRealm realm;
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;
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";
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;
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
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();
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;
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;
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;
.setTypes(ViewIndexDefinition.TYPE_VIEW)
.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termsFilter(ViewIndexDefinition.FIELD_UUID, viewUuids)
- ))
+ ))
.get();
}
}
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;
/**
* @since 4.2
*/
-public class WebServiceEngine implements ServerComponent, Startable {
+@ServerSide
+public class WebServiceEngine implements Startable {
private final WebService.Context context;
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;
* 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;
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;
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;
// 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
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;
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);
}
}
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;
/**
* 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;
*/
package org.sonar.batch.bootstrap;
+import org.sonar.api.BatchSide;
+
/**
* @since 3.6
*/
+@BatchSide
public interface ExtensionMatcher {
boolean accept(Object extension);
}
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;
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) {
new FileCacheProvider(),
System2.INSTANCE,
DefaultI18n.class,
+ Durations.class,
new GlobalRepositoriesProvider(),
UserRepository.class);
addIfMissing(BatchPluginInstaller.class, PluginInstaller.class);
PastSnapshotFinderByPreviousAnalysis.class,
PastSnapshotFinderByVersion.class,
PastSnapshotFinderByPreviousVersion.class,
- PastSnapshotFinder.class,
- Durations.class);
+ PastSnapshotFinder.class);
}
@Override
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;
import java.util.List;
+@BatchSide
@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public class MetricProvider extends ExtensionProvider implements BatchComponent {
+public class MetricProvider extends ExtensionProvider {
private Metrics[] factories;
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;
*
* @since 3.4
*/
-public class ServerClient implements BatchComponent {
+@BatchSide
+public class ServerClient {
private static final String GET = "GET";
private BootstrapProperties props;
*/
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;
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;
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
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(
*/
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;
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;
/**
* Can't be moved. Used by devcockpit.
*/
-public class PastMeasuresLoader implements BatchComponent {
+@BatchSide
+public class PastMeasuresLoader {
private Map<Integer, Metric> metricByIds;
private DatabaseSession session;
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;
/**
* 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);
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;
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);
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);
*/
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;
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;
import javax.annotation.Nullable;
-public class IndexFactory implements BatchComponent {
+@BatchSide
+public class IndexFactory {
private static final Logger LOG = LoggerFactory.getLogger(IndexFactory.class);
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;
* Decorator that computes the technical debt metric
*/
@DependsUpon(DecoratorBarriers.ISSUES_TRACKED)
+@RequiresDB
public final class DebtDecorator implements Decorator {
private final ResourcePerspectives perspectives;
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;
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) {
@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)) {
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;
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;
/**
* Decorator that computes the technical debt metric
*/
+@RequiresDB
@DependsUpon(DecoratorBarriers.ISSUES_TRACKED)
public final class NewDebtDecorator implements Decorator {
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;
*/
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;
import static org.sonar.api.utils.DateUtils.dateToLong;
-public class PastSnapshotFinderByDate implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByDate {
private DatabaseSession session;
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;
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;
*/
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;
import static org.sonar.api.utils.DateUtils.longToDate;
-public class PastSnapshotFinderByPreviousAnalysis implements BatchExtension {
+@BatchSide
+public class PastSnapshotFinderByPreviousAnalysis {
private DatabaseSession session;
*/
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;
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;
*/
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;
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;
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;
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;
/**
* 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;
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;
*
* @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;
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;
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
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;
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 {}";
*/
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();
*/
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;
/**
* 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;
*/
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;
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;
}
public boolean hasMulticriteriaPatterns() {
- return ! multicriteriaPatterns.isEmpty();
+ return !multicriteriaPatterns.isEmpty();
}
public abstract void initializePatternsForPath(String relativePath, String componentKey);
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, "*"));
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;
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);
}
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();
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;
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;
*/
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;
import javax.annotation.Nullable;
-public class IssueHandlers implements BatchComponent {
+@BatchSide
+public class IssueHandlers {
private final IssueHandler[] handlers;
private final DefaultContext context;
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)
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;
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);
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;
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);
*/
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);
}
*/
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);
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;
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;
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);
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;
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;
*/
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;
/**
* 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;
+++ /dev/null
-/*
- * 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);
-
-}
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;
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) {
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;
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;
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);
*/
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;
import java.util.List;
+@RequiresDB
public class GenerateQualityGateEvents implements Decorator {
private final QualityGate 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;
*/
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;
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;
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;
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";
*/
package org.sonar.batch.repository.language;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
import javax.annotation.CheckForNull;
* Languages repository
* @since 4.4
*/
-public interface LanguagesRepository extends BatchComponent {
+@BatchSide
+public interface LanguagesRepository {
/**
* Get language.
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;
/**
* 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;
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;
import java.util.List;
import java.util.Map;
+@RequiresDB
public class QProfileEventsDecorator implements Decorator {
private final TimeMachine timeMachine;
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);
+++ /dev/null
-/*
- * 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;
- }
-
-}
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;
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;
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;
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);
protected void doBeforeStart() {
LOG.info("------------- Scan {}", module.getName());
addCoreComponents();
- if (analysisMode.isDb()) {
- addDataBaseComponents();
- }
addExtensions();
}
module.setSettings(moduleSettings);
add(
+ Periods.class,
PhaseExecutor.class,
RuleFinderCompatibility.class,
EventBus.class,
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.
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;
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;
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;
new ProjectRepositoriesProvider(),
DefaultResourceCreationLock.class,
CodeColorizers.class,
- DefaultNotificationManager.class,
MetricProvider.class,
ProjectConfigurator.class,
DefaultIndex.class,
IssueWorkflow.class,
IssueCache.class,
DefaultProjectIssues.class,
- IssueChangelogDebtCalculator.class,
LocalIssueTracking.class,
ServerIssueRepository.class,
+ // metrics
+ DefaultMetricFinder.class,
+ DeprecatedMetricFinder.class,
+
// tests
TestPlanPerspectiveLoader.class,
TestablePerspectiveLoader.class,
private void addDataBaseComponents() {
add(
+ PastMeasuresLoader.class,
ResourcePersister.class,
ResourceKeyMigration.class,
GraphPersister.class,
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);
}
}
DefaultProjectTree.class,
ProjectExclusions.class,
ProjectReactorValidator.class,
- ProjectReactorReady.class,
- DefaultSensorMatcher.class);
+ ProjectReactorReady.class);
scanContainer.execute();
}
}
*/
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;
*
* @since 4.2
*/
-public class ComponentIndexer implements BatchComponent {
+@BatchSide
+public class ComponentIndexer {
private final Languages languages;
private final SonarIndex sonarIndex;
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);
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;
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);
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;
import java.util.List;
import java.util.Locale;
-public class FileSystemLogger implements BatchComponent {
+@BatchSide
+public class FileSystemLogger {
private final DefaultModuleFileSystem fs;
*/
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;
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;
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<>();
*/
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;
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;
/**
* @since 3.5
*/
-public class ModuleFileSystemInitializer implements BatchComponent {
+@BatchSide
+public class ModuleFileSystemInitializer {
private File baseDir, workingDir, buildDir;
private List<File> sourceDirsOrFiles = Lists.newArrayList();
*/
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;
*/
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;
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;
/**
* 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;
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;
import javax.annotation.CheckForNull;
-public class IssuesReportBuilder implements BatchExtension {
+@BatchSide
+public class IssuesReportBuilder {
private static final Logger LOG = LoggerFactory.getLogger(IssuesReportBuilder.class);
*/
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;
*/
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();
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) {
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;
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;
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;
)
})
@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";
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;
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);
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;
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;
/**
* Central point for sonar-colorizer extensions
*/
-public class CodeColorizers implements BatchComponent {
+@BatchSide
+public class CodeColorizers {
private static final Logger LOG = LoggerFactory.getLogger(CodeColorizers.class);
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;
}
@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
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 {
}
}
.newScanTask(new File(projectDir, "sonar-project.properties"))
.start();
- assertThat(result.allMeasures()).hasSize(58);
+ assertThat(result.allMeasures()).hasSize(79);
}
@Test
.build())
.start();
- assertThat(result.allMeasures()).hasSize(28);
+ assertThat(result.allMeasures()).hasSize(37);
assertThat(result.allMeasures()).contains(new DefaultMeasure<Integer>()
.forMetric(CoreMetrics.LINES)
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)
*/
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;
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;
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;
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();
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;
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;
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;
*
* @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);
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;
import java.util.List;
-public class ActiveDashboardDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class ActiveDashboardDao implements DaoComponent {
private MyBatis mybatis;
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;
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;
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;
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);
@Override
public void stop() {
if (classloader instanceof Closeable) {
- IOUtils.closeQuietly((Closeable)classloader);
+ IOUtils.closeQuietly((Closeable) classloader);
}
classloader = null;
propertyToBundles = null;
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;
* @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.";
return getParamDescription(repositoryKey, ruleKey, paramKey);
}
-
@Override
@CheckForNull
public String getName(String repositoryKey, String ruleKey) {
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.");
}
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;
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 = "=";
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()) {
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;
/**
* 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";
}));
Set<String> oldTags = Sets.newHashSet(issue.tags());
-
+
if (!oldTags.equals(newTags)) {
issue.setFieldChange(context, TAGS,
oldTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(oldTags),
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;
/**
* @since 3.6
*/
-public class ActionPlanDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class ActionPlanDao implements DaoComponent {
private final MyBatis mybatis;
List<ActionPlanDto> dtos = session.getMapper(ActionPlanMapper.class).findByKeys(partition);
dtosList.addAll(dtos);
}
- return dtosList;
+ return dtosList;
} finally {
MyBatis.closeQuietly(session);
}
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;
/**
* @since 3.6
*/
-public class ActionPlanStatsDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class ActionPlanStatsDao {
private final MyBatis mybatis;
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;
/**
* @since 3.6
*/
-public class IssueChangeDao implements DaoComponent, BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueChangeDao implements DaoComponent {
private final MyBatis mybatis;
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;
/**
* @since 3.6
*/
-public class IssueDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueDao {
private final MyBatis mybatis;
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;
/**
* @since 3.7
*/
-public class IssueFilterDao implements BatchComponent, ServerComponent, DaoComponent {
+@BatchSide
+@ServerSide
+public class IssueFilterDao implements DaoComponent {
private final MyBatis mybatis;
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;
/**
* @since 3.7
*/
-public class IssueFilterFavouriteDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class IssueFilterFavouriteDao {
private final MyBatis mybatis;
*/
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;
import javax.annotation.Nullable;
-public class FunctionExecutor implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class FunctionExecutor {
private final IssueUpdater updater;
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;
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;
.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)
.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()
);
}
.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()
);
}
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) {
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;
/**
* @since 2.10
*/
+@RequiresDB
public class DefaultNotificationManager implements NotificationManager {
private static final Logger LOG = LoggerFactory.getLogger(DefaultNotificationManager.class);
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;
/**
* @since 3.7.1
*/
-public class NotificationQueueDao implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class NotificationQueueDao {
private final MyBatis mybatis;
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";
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;
*
* 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;
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;
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";
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;
/**
* @since 3.0
*/
-public class DatabaseVersion implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class DatabaseVersion {
public static final int LAST_VERSION = 914;
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;
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;
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;
/**
* @since 3.5
*/
-public class SemaphoreUpdater implements TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class SemaphoreUpdater {
private static final Logger LOG = LoggerFactory.getLogger(SemaphoreUpdater.class);
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;
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;
*/
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();
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;
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;
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;
* @deprecated use the ActiveRuleDao class defined in sonar-server
*/
@Deprecated
-public class ActiveRuleDao implements ServerComponent {
+@ServerSide
+public class ActiveRuleDao {
private final MyBatis mybatis;
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;
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;
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;
* @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;
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;
import static com.google.common.collect.Lists.newArrayList;
+@RequiresDB
public class DefaultTechnicalDebtModel implements TechnicalDebtModel {
private final DebtModel model;
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;
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;
return session.getMapper(LoadedTemplateMapper.class).countByTypeAndKey(type, key);
}
-
public void insert(LoadedTemplateDto loadedTemplateDto) {
SqlSession session = mybatis.openSession(false);
try {
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;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
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;
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;
*
* 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;
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;
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;
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);
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;
/**
* @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;
*/
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/>
*/
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
* @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();
-
+
}
*/
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;
/**
* @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);
-
+
}
*/
package org.sonar.api.charts;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ServerSide;
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();
/**
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;
* @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);
}
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) {
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;
* @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;
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;
* @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) {
* </pre>
*
* @since 2.2
+ * @deprecated since 5.2 use {@link BatchSide} annotation
*/
+@Deprecated
+@BatchSide
public interface BatchComponent {
}
* by plugins.
*
* @since 1.10
+ * @deprecated since 5.2 replaced by {@link BatchSide} and {@link ExtensionPoint} annotations
*/
+@Deprecated
public interface BatchExtension extends Extension, BatchComponent {
}
--- /dev/null
+/*
+ * 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 {
+}
* Plugin extension point
*
* @since 1.10
+ * @deprecated since 5.2 replaced by {@link ExtensionPoint} annotation
*/
+@Deprecated
+@ExtensionPoint
public interface Extension {
}
--- /dev/null
+/*
+ * 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 {
+}
* 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 {
}
* 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 {
}
--- /dev/null
+/*
+ * 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 {
+}
*/
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();
*/
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 {
}
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;
* 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();
*/
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>
*/
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;
/**
*
* @since 2.6
*/
-public abstract class Initializer implements BatchExtension, CheckProject {
+@BatchSide
+@ExtensionPoint
+public abstract class Initializer implements CheckProject {
@Override
public boolean shouldExecuteOnProject(Project project) {
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
*/
*/
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;
/**
*
* @since 1.10
*/
-public interface PostJob extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface PostJob {
void executeOn(Project project, SensorContext context);
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;
* @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;
*/
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;
/**
*
* @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 :
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();
*/
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;
*/
@Deprecated
@RequiresDB
-public interface TimeMachine extends BatchComponent {
+@BatchSide
+public interface TimeMachine {
/**
* Past measures, sorted by date. Returns all fields.
*/
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;
/**
*
* @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}
public interface Context {
ProjectReactor projectReactor();
}
+
/**
* Don't inject ProjectReactor as it may not be available
* @deprecated since 3.7 use {@link #ProjectBuilder()}
*/
package org.sonar.api.batch.bootstrap;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
import java.util.ArrayList;
import java.util.List;
/**
* @since 2.9
*/
-public class ProjectReactor implements BatchComponent {
+@BatchSide
+public class ProjectReactor {
private ProjectDefinition root;
*/
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 {
}
*/
package org.sonar.api.batch.fs;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
import javax.annotation.CheckForNull;
*
* @since 4.2
*/
-public interface FileSystem extends BatchComponent {
+@BatchSide
+public interface FileSystem {
/**
* Absolute base directory of module
*/
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);
*/
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;
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;
* 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);
*/
package org.sonar.api.batch.measure;
-import org.sonar.api.BatchComponent;
+import org.sonar.api.BatchSide;
import javax.annotation.CheckForNull;
/**
* @since 4.5
*/
-public interface MetricFinder extends BatchComponent {
+@BatchSide
+public interface MetricFinder {
@CheckForNull
Metric findByKey(String key);
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
* @since 5.2
*/
@Beta
-public interface PostJob extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface PostJob {
/**
* Populate {@link PostJobDescriptor} of this PostJob.
*/
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;
*
* @since 4.2
*/
-public interface ActiveRules extends BatchComponent {
+@BatchSide
+public interface ActiveRules {
/**
* Find a {@link ActiveRule} by the associated rule key. <code>null</code>
*/
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
*
* @since 4.2
*/
-public class CheckFactory implements BatchComponent {
+@BatchSide
+public class CheckFactory {
private final ActiveRules activeRules;
*/
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;
*
* @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.
*/
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;
* @since 5.0
*/
@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public abstract class BlameCommand implements BatchComponent {
+@BatchSide
+public abstract class BlameCommand {
/**
* Compute blame of the provided files.
*/
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;
* 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}
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>
* @since 5.1
*/
@Beta
-public interface Sensor extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface Sensor {
/**
* Populate {@link SensorDescriptor} of this sensor.
*/
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;
* Interface for storing data computed by sensors.
* @since 5.1
*/
-public interface SensorStorage extends BatchComponent {
+@BatchSide
+public interface SensorStorage {
void store(Measure measure);
*/
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);
*/
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);
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";
*/
package org.sonar.api.config;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
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;
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;
*
* @since 3.6
*/
-public final class PropertyDefinition implements BatchExtension, ServerExtension {
+@BatchSide
+@ServerSide
+@ExtensionPoint
+public final class PropertyDefinition {
private String key;
private String defaultValue;
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;
*
* @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<>();
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;
* </p>
* @since 2.12
*/
-public class Settings implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Settings {
protected Map<String, String> properties;
protected PropertyDefinitions definitions;
*/
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;
/**
*
* @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();
*/
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;
*
* @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.
*/
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;
* @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.
* 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();
*/
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);
*/
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;
/**
* @since 3.6
*/
-public interface IssueHandler extends BatchExtension {
+@BatchSide
+@ExtensionPoint
+public interface IssueHandler {
interface Context {
Issue issue();
/**
* 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.
*
*/
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;
* @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.
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;
* @since 3.6
*/
@Beta
-public class Actions implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public class Actions {
private final List<Action> actions = new ArrayList<>();
*/
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;
/**
* @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:
*/
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;
*
* @since 2.14
*/
-public interface FileLinesContextFactory extends BatchComponent {
+@BatchSide
+public interface FileLinesContextFactory {
/**
* @deprecated since 4.4 use {@link #createFor(InputFile)}
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;
*/
@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
*/
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;
* @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);
*/
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;
/**
* @since 1.10
*/
+@BatchSide
@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
-public interface Metrics extends BatchExtension, ServerExtension {
+@ServerSide
+@ExtensionPoint
+public interface Metrics {
List<Metric> getMetrics();
}
*/
package org.sonar.api.notifications;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
/**
* <p>
*
* @since 2.10
*/
-public abstract class NotificationChannel implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class NotificationChannel {
/**
* Returns the unique key of this channel.
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>
*
* @since 2.10
*/
-public abstract class NotificationDispatcher implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class NotificationDispatcher {
private final String notificationType;
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;
*
* @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";
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;
*
* @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.
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;
*/
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;
/**
* @since 2.2
*/
-public abstract class Server implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public abstract class Server {
public abstract String getId();
*/
package org.sonar.api.platform;
-import org.sonar.api.ServerComponent;
+import org.sonar.api.ServerSide;
import java.io.File;
import java.util.List;
/**
* @since 2.3
*/
-public interface ServerFileSystem extends ServerComponent {
+@ServerSide
+public interface ServerFileSystem {
File getHomeDir();
*/
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);
*/
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);
*/
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.
* The database version before the server startup. Returns <=0 if db created from scratch.
*/
int getInitialDbVersion();
-
+
}
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;
/**
* @since 2.3
*/
-public final class AnnotationProfileParser implements ServerComponent {
+@ServerSide
+public final class AnnotationProfileParser {
private final RuleFinder ruleFinder;
*/
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;
/**
*
* @since 2.3
*/
-public abstract class ProfileDefinition implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class ProfileDefinition {
public abstract RulesProfile createProfile(ValidationMessages validation);
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;
@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();
}
}
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;
/**
* @since 2.3
*/
-public abstract class ProfileImporter implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class ProfileImporter {
private String[] supportedLanguages = new String[0];
private String importerKey;
@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();
}
}
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;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
+
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
/**
* @since 2.3
*/
-public class XMLProfileParser implements ServerComponent {
+@ServerSide
+public class XMLProfileParser {
private final RuleFinder ruleFinder;
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;
/**
* @since 2.3
*/
-public class XMLProfileSerializer implements ServerComponent {
+@ServerSide
+public class XMLProfileSerializer {
public void write(RulesProfile profile, Writer writer) {
try {
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());
*/
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;
/**
*
* @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.
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;
*
* @since 1.10
*/
-public class Languages implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Languages {
private static final Logger LOG = Loggers.get(Languages.class);
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;
/**
* @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;
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;
* @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
return treeByQualifier.get(qualifier);
}
- public ResourceType getRoot(String qualifier){
+ public ResourceType getRoot(String qualifier) {
return getTree(qualifier).getRootType();
}
*/
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;
* @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
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;
*
* @since 3.5
*/
-public class FileExclusions implements BatchComponent {
+@BatchSide
+public class FileExclusions {
private final Settings settings;
public FileExclusions(Settings settings) {
*/
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;
* @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.
*/
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;
* @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.
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;
/**
* @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());
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;
* @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
*/
package org.sonar.api.security;
-import org.sonar.api.ServerExtension;
+import org.sonar.api.ExtensionPoint;
+import org.sonar.api.ServerSide;
/**
* @since 1.12
* @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
*/
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.
*
* @since 3.2
*/
-public interface ResourcePermissions extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface ResourcePermissions {
/**
* Limitation - the resource id is used instead of logical key.
*/
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"
*/
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;
/**
* @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);
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
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;
*
* @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
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;
/**
* @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;
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;
* @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));
*/
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;
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;
*
* @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();
*/
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}.
*
* @deprecated since 5.1 all tasks (devcockpit, views) will be moved to server side
*/
@Deprecated
+@BatchSide
+@InstantiationStrategy(InstantiationStrategy.PER_BATCH)
public interface TaskComponent {
}
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;
/**
* @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);
*/
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);
*/
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;
* @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);
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;
*
* @since 4.3
*/
-public class Durations implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class Durations {
public enum DurationFormat {
/**
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));
*/
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;
* 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);
*/
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;
/**
*
* @since 3.4
*/
-public interface Semaphores extends TaskComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public interface Semaphores {
/**
* Try to acquire a semaphore for a given duration.
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;
*
* @since 4.2
*/
-public class System2 implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class System2 {
public static final System2 INSTANCE = new System2();
*/
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;
* @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.
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;
*
* @since 3.2
*/
-public class UriReader implements BatchComponent, ServerComponent {
+@BatchSide
+@ServerSide
+public class UriReader {
private final Map<String, SchemeProcessor> processorsByScheme = Maps.newHashMap();
protected abstract String description(URI uri);
}
-
/**
* This implementation is not exposed in API and is kept private.
*/
@Override
public String[] getSupportedSchemes() {
- return new String[]{"file"};
+ return new String[] {"file"};
}
@Override
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;
*/
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.
*/
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.
*/
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)
*/
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 :
*
* @since 3.3
*/
-public abstract class PageDecoration extends AbstractRubyTemplate implements ServerExtension {
+@ServerSide
+@ExtensionPoint
+public abstract class PageDecoration extends AbstractRubyTemplate {
}
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 /*
*/
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();
*/
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
* @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
*/
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);