You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

OneIssuePerLineSensor.java 3.4KB

пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 9 година
пре 10 година
пре 10 година
пре 8 година
пре 10 година
пре 8 година
пре 8 година
пре 10 година
пре 8 година
пре 10 година
пре 10 година
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2022 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.xoo.rule;
  21. import org.sonar.api.batch.fs.FilePredicates;
  22. import org.sonar.api.batch.fs.FileSystem;
  23. import org.sonar.api.batch.fs.InputFile;
  24. import org.sonar.api.batch.fs.InputFile.Type;
  25. import org.sonar.api.batch.rule.Severity;
  26. import org.sonar.api.batch.sensor.Sensor;
  27. import org.sonar.api.batch.sensor.SensorContext;
  28. import org.sonar.api.batch.sensor.SensorDescriptor;
  29. import org.sonar.api.batch.sensor.issue.NewIssue;
  30. import org.sonar.api.rule.RuleKey;
  31. import org.sonar.api.utils.Version;
  32. import org.sonar.xoo.Xoo;
  33. import org.sonar.xoo.Xoo2;
  34. public class OneIssuePerLineSensor implements Sensor {
  35. public static final String RULE_KEY = "OneIssuePerLine";
  36. public static final String EFFORT_TO_FIX_PROPERTY = "sonar.oneIssuePerLine.effortToFix";
  37. public static final String FORCE_SEVERITY_PROPERTY = "sonar.oneIssuePerLine.forceSeverity";
  38. @Override
  39. public void describe(SensorDescriptor descriptor) {
  40. descriptor
  41. .name("One Issue Per Line")
  42. .onlyOnLanguages(Xoo.KEY, Xoo2.KEY)
  43. .createIssuesForRuleRepositories(XooRulesDefinition.XOO_REPOSITORY, XooRulesDefinition.XOO2_REPOSITORY)
  44. .processesFilesIndependently();
  45. }
  46. @Override
  47. public void execute(SensorContext context) {
  48. analyse(context, Xoo.KEY, XooRulesDefinition.XOO_REPOSITORY);
  49. analyse(context, Xoo2.KEY, XooRulesDefinition.XOO2_REPOSITORY);
  50. }
  51. private void analyse(SensorContext context, String language, String repo) {
  52. FileSystem fs = context.fileSystem();
  53. FilePredicates p = fs.predicates();
  54. for (InputFile file : fs.inputFiles(p.and(p.hasLanguages(language), p.hasType(Type.MAIN)))) {
  55. createIssues(file, context, repo);
  56. }
  57. }
  58. private void createIssues(InputFile file, SensorContext context, String repo) {
  59. RuleKey ruleKey = RuleKey.of(repo, RULE_KEY);
  60. String severity = context.config().get(FORCE_SEVERITY_PROPERTY).orElse(null);
  61. for (int line = 1; line <= file.lines(); line++) {
  62. NewIssue newIssue = context.newIssue();
  63. newIssue
  64. .forRule(ruleKey)
  65. .at(newIssue.newLocation()
  66. .on(file)
  67. .at(file.selectLine(line))
  68. .message("This issue is generated on each line"))
  69. .overrideSeverity(severity != null ? Severity.valueOf(severity) : null);
  70. if (context.getSonarQubeVersion().isGreaterThanOrEqual(Version.create(5, 5))) {
  71. newIssue.gap(context.config().getDouble(EFFORT_TO_FIX_PROPERTY).orElse(null));
  72. } else {
  73. newIssue.gap(context.config().getDouble(EFFORT_TO_FIX_PROPERTY).orElse(null));
  74. }
  75. newIssue.save();
  76. }
  77. }
  78. }