import org.sonar.api.component.ResourcePerspectives; public class MySensor extends Sensor { private final ResourcePerspectives perspectives; public MySensor(ResourcePerspectives p) { this.perspectives = p; } public void analyse(Project project, SensorContext context) { Resource myResource; // to be set Issuable issuable = perspectives.as(Issuable.class, myResource); if (issuable != null) { // can be used Issue issue = issuable.newIssueBuilder() .setRuleKey(RuleKey.of("pmd", "AvoidArrayLoops") .setLine(10) .build(); issuable.addIssue(issue); } } }
private void reportIssueBeforeSQ52(InputPath inputFile, RuleKey key, @Nullable Double cost, String message, @Nullable Integer line) { Issuable issuable = issuableFor(inputFile); if (issuable != null) { Issuable.IssueBuilder newIssueBuilder = issuable.newIssueBuilder() .ruleKey(key) .message(message) .line(line) .effortToFix(cost); issuable.addIssue(newIssueBuilder.build()); } }
protected void createIssue(Resource resource, ResourcePerspectives perspectives, RuleKey ruleKey, @Nullable Double effortToFix, String message) { Issuable issuable = perspectives.as(Issuable.class, resource); if (issuable != null) { issuable.addIssue(issuable.newIssueBuilder() .ruleKey(ruleKey) .effortToFix(effortToFix) .message(message) .build()); } }
public void reportIssueForPackageInfo(Directory directory, Project project) { if (dirsWithoutPackageInfo == null) { initSetOfDirs(project); } if (dirsWithoutPackageInfo.contains(directory)) { Issuable issuable = resourcePerspectives.as(Issuable.class, directory); if (issuable != null) { Issue issue = issuable.newIssueBuilder().ruleKey(RuleKey.of(CheckList.REPOSITORY_KEY, PackageInfoCheck.RULE_KEY)) .message("Add a 'package-info.java' file to document the '" + directory.getPath() + "' package").build(); issuable.addIssue(issue); } } }
private Directory createIssueOnDir(Directory dir) { Issuable issuable = perspectives.as(Issuable.class, dir); issuable.addIssue(issuable.newIssueBuilder() .ruleKey(RuleKey.of(XooRulesDefinition.XOO_REPOSITORY, RULE_KEY)) .message("Issue created using deprecated API") .build()); return dir; }
private void addIssue(String ruleKey, String fileName, Integer line, String message) { DelphiUtils.LOG.debug("PMD Violation - rule: " + ruleKey + " file: " + fileName + " message: " + message); InputFile inputFile = delphiProjectHelper.getFile(fileName); Issuable issuable = perspectives.as(Issuable.class, inputFile); if (issuable != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(RuleKey.of(DelphiPmdConstants.REPOSITORY_KEY, ruleKey)) .line(line) .message(message) .build(); issuable.addIssue(issue); } } }
private void addIssue(InputFile resource, FunctionInterface func) { if (func.getComplexity() > threshold.intValue()) { Issuable issuable = perspectives.as(Issuable.class, resource); if (issuable != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(methodCyclomaticComplexityRule.ruleKey()) .line(func.getBodyLine()) .message(String.format("The Cyclomatic Complexity of this method \"%s\" is %d which is greater than %d authorized.", func.getRealName(), func.getComplexity(), threshold)) .build(); issuable.addIssue(issue); } } } }
@VisibleForTesting protected void saveIssue(XmlSourceCode sourceCode) { for (XmlIssue xmlIssue : sourceCode.getXmlIssues()) { Issuable issuable = resourcePerspectives.as(Issuable.class, sourceCode.getSonarFile()); issuable.addIssue( issuable.newIssueBuilder() .ruleKey(xmlIssue.getRule().ruleKey()) .line(xmlIssue.getLine()) .message(xmlIssue.getMessage()) .build()); } }
public void reportIssues(SourceFile squidFile, Resource sonarFile) { if (squidFile.hasCheckMessages()) { Issuable issuable = resourcePerspectives.as(Issuable.class, sonarFile); Set<CheckMessage> messages = squidFile.getCheckMessages(); if(issuable != null) { for (CheckMessage checkMessage : messages) { Object check = checkMessage.getCheck(); RuleKey ruleKey = getRuleKey((JavaCheck) check); if (ruleKey != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(ruleKey) .line(checkMessage.getLine()) .message(checkMessage.formatDefaultMessage()) .effortToFix(checkMessage.getCost()) .build(); issuable.addIssue(issue); } else { throw new IllegalStateException("Cannot find rule key for instance of "+check.getClass()); } } } // Remove from memory: messages.clear(); } }
/** * Saves issues form input file and source file. * * @param sonarFile input file. * @param squidFile source file. */ private void saveIssues(InputFile sonarFile, SourceFile squidFile) { Collection<CheckMessage> messages = squidFile.getCheckMessages(); messages.forEach(message -> { RuleKey ruleKey = checks.ruleKey((SquidAstVisitor<Grammar>) message.getCheck()); Issuable issuable = resourcePerspectives.as(Issuable.class, sonarFile); if (issuable != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(ruleKey) .line(message.getLine()) .message(message.getText(Locale.ENGLISH)) .build(); issuable.addIssue(issue); } }); }
private void saveIssues(Set<Edge> feedbackEdges) { for (Edge feedbackEdge : feedbackEdges) { for (Dependency subDependency : resourceMapping.getSubDependencies((Dependency) feedbackEdge)) { Resource fromFile = subDependency.getFrom(); Resource toFile = subDependency.getTo(); Issuable issuable = resourcePerspectives.as(Issuable.class, fromFile); if (issuable != null) { issuable.addIssue(issuable.newIssueBuilder() .ruleKey(CycleBetweenPackagesCheck.RULE_KEY) .message("Remove the dependency on the source file \"" + toFile.getLongName() + "\" to break a package cycle.") .build()); } } } }
@Override public void addError(AuditEvent event) { String ruleKey = getRuleKey(event); if (ruleKey != null) { String message = getMessage(event); // In Checkstyle 5.5 exceptions are reported as an events from TreeWalker if ("com.puppycrawl.tools.checkstyle.TreeWalker".equals(ruleKey)) { LOG.warn(event.getFileName() + ": " + message); } initResource(event); Issuable issuable = perspectives.as(Issuable.class, File.create(currentResource.relativePath())); Rule rule = ruleFinder.findByKey(CheckstyleConstants.REPOSITORY_KEY, ruleKey); if (rule != null && issuable != null) { IssueBuilder issueBuilder = issuable.newIssueBuilder() .ruleKey(rule.ruleKey()) .message(message) .line(getLineId(event)); issuable.addIssue(issueBuilder.build()); } } }
Issuable issuable = perspectives.as(Issuable.class, resource); if (issuable != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(unitRule.ruleKey()) .line(unit.getLine()) Issuable issuable = perspectives.as(Issuable.class, resource); if (issuable != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(functionRule.ruleKey()) .line(function.getLine())
private void saveIssues(File sonarFile, SourceFile squidFile) { Collection<CheckMessage> messages = squidFile.getCheckMessages(); if (messages != null) { for (CheckMessage message : messages) { RuleKey ruleKey = checks.ruleKey((CodeVisitor) message.getCheck()); Issuable issuable = resourcePerspectives.as(Issuable.class, sonarFile); if (issuable != null) { Issue issue = issuable.newIssueBuilder() .ruleKey(ruleKey) .line(message.getLine()) .message(message.getText(Locale.ENGLISH)) .build(); issuable.addIssue(issue); } } } }
public void saveViolation(RuleViolation pmdViolation) { InputFile inputFile = findResourceFor(pmdViolation); if (inputFile == null) { // Save violations only for existing resources return; } Issuable issuable = perspectives.as(Issuable.class, inputFile); Rule rule = findRuleFor(pmdViolation); if (issuable == null || rule == null) { // Save violations only for enabled rules return; } IssueBuilder issueBuilder = issuable.newIssueBuilder() .ruleKey(rule.ruleKey()) .message(pmdViolation.getDescription()) .line(pmdViolation.getBeginLine()); issuable.addIssue(issueBuilder.build()); }
} else { issuable.addIssue( issuable.newIssueBuilder() .ruleKey(RuleKey.of(fxCopConf.repositoryKey(), ruleKey(issue.ruleConfigKey()))) .line(issue.line())
@Override public void analyse(Project module, org.sonar.api.batch.SensorContext context) { createIssueOnDir(new Directory("")); File src = module.getFileSystem().getSourceDirs().get(0); for (File f : fileSystem.files(FileQuery.onMain().onLanguage(Xoo.KEY))) { String relativePathFromSourceDir = new PathResolver().relativePath(src, f); org.sonar.api.resources.File sonarFile = new org.sonar.api.resources.File(relativePathFromSourceDir); Issuable issuable = perspectives.as(Issuable.class, sonarFile); issuable.addIssue(issuable.newIssueBuilder() .ruleKey(RuleKey.of(XooRulesDefinition.XOO_REPOSITORY, RULE_KEY)) .message("Issue created using deprecated API") .line(1) .build()); sonarFile = context.getResource(sonarFile); Directory parent = sonarFile.getParent(); createIssueOnDir(parent); } }
LOG.debug("Add issue "+issue.getRulekey()+" on file "+file.getPath()); IssueBuilder issueBuilder = issuable.newIssueBuilder() .line(issue.getLine()==null ? null : issue.getLine().intValue()) .message(issue.getMessage());