private static TreeMultimap<Integer, String> collectIssues(final SourceCode sourceCode) { final TreeMultimap<Integer, String> issues = TreeMultimap.create(); for (final CheckMessage checkMessage : sourceCode.getCheckMessages()) { Integer line = checkMessage.getLine(); if (line == null) { line = 0; } issues.put(line, checkMessage.getText(Locale.US)); } return issues; } }
private void logMessage(String fromClass, String toClass, int sourceLineNumber) { CheckMessage message = new CheckMessage(this, fromClass + " must not use " + toClass); if(sourceLineNumber != 0) { message.setLine(sourceLineNumber); } internalNames.put(toClass, message); }
@Override public int compare(CheckMessage left, CheckMessage right) { if (Objects.equal(left.getLine(), right.getLine())) { return left.getDefaultMessage().compareTo(right.getDefaultMessage()); } else if (left.getLine() == null) { return -1; } else if (right.getLine() == null) { return 1; } else { return left.getLine().compareTo(right.getLine()); } } };
/** * Cost is set if <code>cost<code/> is more than zero. * */ private void commonAddIssue(JavaScriptCheck check, int line, String message, double cost){ Preconditions.checkNotNull(check); Preconditions.checkNotNull(message); CheckMessage checkMessage = new CheckMessage(check, message); if (cost > 0) { checkMessage.setCost(cost); } if (line > 0) { checkMessage.setLine(line); } sourceFile.log(checkMessage); }
private void saveIssues(InputFile inputFile, SourceFile squidFile) { Collection<CheckMessage> messages = squidFile.getCheckMessages(); if (inputFile != null) { for (CheckMessage message : messages) { RuleKey ruleKey = checks.ruleKey((SquidCheck<ObjectiveCGrammar>) message.getCheck()); NewIssue issue = context.newIssue() .forRule(ruleKey); NewIssueLocation dil = new DefaultIssueLocation() .on(inputFile) .at(inputFile.selectLine(message.getLine())) .message(message.getText(Locale.ENGLISH)); issue.at(dil); if (message.getCost() != null) { issue.gap(message.getCost()); } issue.save(); } } }
/** * 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); } }); }
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(); } }
private void saveViolations(File sonarFile, SourceFile squidFile) { Collection<CheckMessage> messages = squidFile.getCheckMessages(); if (messages != null) { for (CheckMessage message : messages) { Violation violation = Violation.create(annotationCheckFactory.getActiveRule(message.getChecker()), sonarFile) .setLineId(message.getLine()) .setMessage(message.getText(Locale.ENGLISH)); context.saveViolation(violation); } } }
public void noMore() { if (iterator.hasNext()) { CheckMessage next = iterator.next(); throw new AssertionError("\nNo more violations expected\ngot: at line " + next.getLine()); } }
@Override public void visitToken(Token token) { for (Trivia trivia : token.getTrivia()) { if (trivia.isComment()) { String[] commentLines = getContext().getCommentAnalyser().getContents(trivia.getToken().getOriginalValue()).split("(\r)?\n|\r", -1); int line = trivia.getToken().getLine(); for (String commentLine : commentLines) { if (commentLine.contains("NOSONAR")) { CheckMessage violation = new CheckMessage((Object) this, "Is NOSONAR usage acceptable or does it hide a real quality flaw?"); violation.setLine(line); violation.setBypassExclusion(true); getContext().log(violation); } line++; } } } }
@Override public void leaveFile(AstNode node) { Set<CheckMessage> violationsOnCurrentFile = new HashSet<CheckMessage>(getContext().peekSourceCode().getCheckMessages()); for (CheckMessage violation : violationsOnCurrentFile) { violationCounter.increment(getRelativePath(getContext().getFile()), violation.getChecker().getClass().getSimpleName(), violation.getLine() == null ? -1 : violation.getLine()); } }
@Override public void leaveFile(@Nullable AstNode astNode) { if ((nbClass + nbInterface) > 1) { CheckMessage msg = new CheckMessage((Object) this, "There are {0}{1}{2}in this file; move all but one of them to other files.", nbClass > 0 ? nbClass + " independent classes " : "", nbClass > 0 && nbInterface > 0 ? "and " : "", nbInterface > 0 ? nbInterface + " independent interfaces " : ""); int cost = nbClass + nbInterface - 1; msg.setCost(cost); getContext().log(msg); } } }
public CheckMessagesVerifier withMessage(String expectedMessage) { checkStateOfCurrent(); String actual = current.getText(Locale.ENGLISH); if (!actual.equals(expectedMessage)) { throw assertionError("\"" + expectedMessage + "\"", "\"" + actual + "\""); } return this; }
@Override protected void onMethodFound(MethodInvocationTree mit) { context.addIssue(mit, new CheckMessage(this, "Remove this forbidden call")); }
@Override public void addIssue(Tree tree, CheckMessage checkMessage) { checkMessage.setLine(((JavaTree) tree).getLine()); sourceFile.log(checkMessage); }
private void saveIssues(InputFile inputFile, SourceFile squidFile) { Collection<CheckMessage> messages = squidFile.getCheckMessages(); if (inputFile != null) { for (CheckMessage message : messages) { RuleKey ruleKey = checks.ruleKey((SquidCheck<SwiftGrammar>) message.getCheck()); NewIssue issue = context.newIssue() .forRule(ruleKey); NewIssueLocation dil = new DefaultIssueLocation() .on(inputFile) .at(inputFile.selectLine(message.getLine())) .message(message.getText(Locale.ENGLISH)); issue.at(dil); if (message.getCost() != null) { issue.gap(message.getCost()); } issue.save(); } } }
@Override public void addIssue(int line, JavaCheck javaCheck, String message, @Nullable Double cost) { Preconditions.checkNotNull(javaCheck); Preconditions.checkNotNull(message); CheckMessage checkMessage = new CheckMessage(javaCheck, message); if (line > 0) { checkMessage.setLine(line); } if (cost == null) { Annotation linear = AnnotationUtils.getAnnotation(javaCheck, SqaleLinearRemediation.class); Annotation linearWithOffset = AnnotationUtils.getAnnotation(javaCheck, SqaleLinearWithOffsetRemediation.class); if(linear != null || linearWithOffset != null) { throw new IllegalStateException("A check annotated with a linear sqale function should provide an effort to fix"); } } else { checkMessage.setCost(cost); } sourceFile.log(checkMessage); }
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); } } } }