From aec83bafc952d4786fa9552fb8749c9efce517b5 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Fri, 9 Nov 2018 11:19:38 +0100 Subject: SONAR-11465 Introduce a new annotation for project level extensions and deprecate issue filters --- .../src/main/java/org/sonar/xoo/XooPlugin.java | 4 +- .../org/sonar/xoo/extensions/XooIssueFilter.java | 49 ++++++++++++++++++++++ .../src/test/java/org/sonar/xoo/XooPluginTest.java | 8 ++-- 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/extensions/XooIssueFilter.java (limited to 'plugins/sonar-xoo-plugin') diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/XooPlugin.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/XooPlugin.java index 5445c753ea2..ba3c4ef0528 100644 --- a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/XooPlugin.java +++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/XooPlugin.java @@ -28,6 +28,7 @@ import org.sonar.api.utils.Version; import org.sonar.xoo.coverage.ItCoverageSensor; import org.sonar.xoo.coverage.OverallCoverageSensor; import org.sonar.xoo.coverage.UtCoverageSensor; +import org.sonar.xoo.extensions.XooIssueFilter; import org.sonar.xoo.extensions.XooPostJob; import org.sonar.xoo.extensions.XooProjectBuilder; import org.sonar.xoo.global.GlobalSensor; @@ -154,7 +155,8 @@ public class XooPlugin implements Plugin { // Other XooProjectBuilder.class, - XooPostJob.class); + XooPostJob.class, + XooIssueFilter.class); if (context.getRuntime().getProduct() != SonarProduct.SONARLINT) { context.addExtension(MeasureSensor.class); diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/extensions/XooIssueFilter.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/extensions/XooIssueFilter.java new file mode 100644 index 00000000000..57f923fa797 --- /dev/null +++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/extensions/XooIssueFilter.java @@ -0,0 +1,49 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.xoo.extensions; + +import org.sonar.api.batch.fs.TextRange; +import org.sonar.api.config.Configuration; +import org.sonar.api.scan.issue.filter.FilterableIssue; +import org.sonar.api.scan.issue.filter.IssueFilter; +import org.sonar.api.scan.issue.filter.IssueFilterChain; + +public class XooIssueFilter implements IssueFilter { + + private final Configuration config; + + public XooIssueFilter(Configuration config) { + this.config = config; + } + + + @Override + public boolean accept(FilterableIssue issue, IssueFilterChain chain) { + if (config.getBoolean("sonar.xoo.excludeAllIssuesOnOddLines").orElse(false) && isOdd(issue)) { + return false; + } + return chain.accept(issue); + } + + private static boolean isOdd(FilterableIssue issue) { + TextRange textRange = issue.textRange(); + return textRange != null && textRange.start().line() % 2 == 1; + } +} diff --git a/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/XooPluginTest.java b/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/XooPluginTest.java index 2fcf3a38458..3e4c6aa5a82 100644 --- a/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/XooPluginTest.java +++ b/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/XooPluginTest.java @@ -40,7 +40,7 @@ public class XooPluginTest { Plugin.Context context = new PluginContextImpl.Builder().setSonarRuntime(runtime).build(); new XooPlugin().define(context); assertThat(getExtensions(context)) - .hasSize(46) + .hasSize(47) .doesNotContain(XooBuiltInQualityProfilesDefinition.class); } @@ -50,7 +50,7 @@ public class XooPluginTest { Plugin.Context context = new PluginContextImpl.Builder().setSonarRuntime(runtime).build(); new XooPlugin().define(context); assertThat(getExtensions(context)) - .hasSize(49) + .hasSize(50) .contains(XooBuiltInQualityProfilesDefinition.class); } @@ -60,7 +60,7 @@ public class XooPluginTest { Plugin.Context context = new PluginContextImpl.Builder().setSonarRuntime(runtime).build(); new XooPlugin().define(context); assertThat(getExtensions(context)) - .hasSize(53) + .hasSize(54) .contains(OneExternalIssuePerLineSensor.class); } @@ -70,7 +70,7 @@ public class XooPluginTest { Plugin.Context context = new PluginContextImpl.Builder().setSonarRuntime(runtime).build(); new XooPlugin().define(context); assertThat(getExtensions(context)) - .hasSize(54) + .hasSize(55) .contains(OneExternalIssuePerLineSensor.class); } -- cgit v1.2.3