From: Tobias Stadler Date: Sat, 25 Jul 2020 20:02:39 +0000 (+0200) Subject: SONAR-15056 It should be possible to create external issues with project location X-Git-Tag: 9.0.0.45539~71 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7b3853ad9c32b823ea3a70023e462b6b813e1a22;p=sonarqube.git SONAR-15056 It should be possible to create external issues with project location --- 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 e493d286402..0880d497f44 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 @@ -52,6 +52,7 @@ import org.sonar.xoo.rule.OneBugIssuePerTestLineSensor; import org.sonar.xoo.rule.OneCodeSmellIssuePerLineSensor; import org.sonar.xoo.rule.OneCodeSmellIssuePerTestLineSensor; import org.sonar.xoo.rule.OneDayDebtPerFileSensor; +import org.sonar.xoo.rule.OneExternalIssueOnProjectSensor; import org.sonar.xoo.rule.OneExternalIssuePerLineSensor; import org.sonar.xoo.rule.OneIssueOnDirPerFileSensor; import org.sonar.xoo.rule.OneIssuePerDirectorySensor; @@ -146,6 +147,7 @@ public class XooPlugin implements Plugin { OneIssuePerUnknownFileSensor.class, OneExternalIssuePerLineSensor.class, + OneExternalIssueOnProjectSensor.class, OnePredefinedRuleExternalIssuePerLineSensor.class, OnePredefinedAndAdHocRuleExternalIssuePerLineSensor.class, diff --git a/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneExternalIssueOnProjectSensor.java b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneExternalIssueOnProjectSensor.java new file mode 100644 index 00000000000..047b90637e0 --- /dev/null +++ b/plugins/sonar-xoo-plugin/src/main/java/org/sonar/xoo/rule/OneExternalIssueOnProjectSensor.java @@ -0,0 +1,62 @@ +/* + * SonarQube + * Copyright (C) 2009-2021 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.rule; + +import org.sonar.api.batch.rule.Severity; +import org.sonar.api.batch.sensor.Sensor; +import org.sonar.api.batch.sensor.SensorContext; +import org.sonar.api.batch.sensor.SensorDescriptor; +import org.sonar.api.batch.sensor.issue.NewExternalIssue; +import org.sonar.api.rules.RuleType; +import org.sonar.xoo.Xoo; + +public class OneExternalIssueOnProjectSensor implements Sensor { + public static final String ENGINE_ID = "XooEngine"; + public static final String SEVERITY = "MAJOR"; + public static final RuleType TYPE = RuleType.BUG; + public static final String ACTIVATE = "sonar.oneExternalIssueOnProject.activate"; + public static final String RULE_ID = "OneExternalIssueOnProject"; + + @Override + public void describe(SensorDescriptor descriptor) { + descriptor + .name("One External Issue At Project Level") + .onlyOnLanguages(Xoo.KEY) + .onlyWhenConfiguration(c -> c.getBoolean(ACTIVATE).orElse(false)); + } + + @Override + public void execute(SensorContext context) { + analyse(context); + } + + private static void analyse(SensorContext context) { + NewExternalIssue newIssue = context.newExternalIssue(); + newIssue + .engineId(ENGINE_ID) + .ruleId(RULE_ID) + .at(newIssue.newLocation() + .on(context.project()) + .message("This issue is generated at project level")) + .severity(Severity.valueOf(SEVERITY)) + .type(TYPE) + .save(); + } +} diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultExternalIssue.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultExternalIssue.java index eca02788543..93c298d76ea 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultExternalIssue.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultExternalIssue.java @@ -20,11 +20,11 @@ package org.sonar.api.batch.sensor.issue.internal; import javax.annotation.Nullable; +import org.sonar.api.batch.fs.internal.DefaultInputProject; import org.sonar.api.batch.rule.Severity; import org.sonar.api.batch.sensor.internal.SensorStorage; import org.sonar.api.batch.sensor.issue.ExternalIssue; import org.sonar.api.batch.sensor.issue.NewExternalIssue; -import org.sonar.api.batch.fs.internal.DefaultInputProject; import org.sonar.api.rule.RuleKey; import org.sonar.api.rules.RuleType; @@ -86,7 +86,6 @@ public class DefaultExternalIssue extends AbstractDefaultIssue externalIssues = result.externalIssuesFor(result.project()); + assertThat(externalIssues).hasSize(1); + } + @Test public void findActiveRuleByInternalKey() throws Exception { File projectDir = new File("test-resources/mediumtest/xoo/sample");