@Override public void checkResource(Resource resource, DecoratorContext context, RuleKey rule, ResourcePerspectives perspectives) { if (minimumCommentDensity < 0 || minimumCommentDensity >= 100) { throw new IllegalArgumentException(minimumCommentDensity + " is not a valid value for minimum required comment density for rule 'CommentDensityCheck' (must be >= 0 and < 100)."); } double commentDensity = MeasureUtils.getValue(context.getMeasure(CoreMetrics.COMMENT_LINES_DENSITY), 0.0); double linesOfCode = MeasureUtils.getValue(context.getMeasure(CoreMetrics.NCLOC), 0.0); if (commentDensity < minimumCommentDensity && Double.doubleToRawLongBits(linesOfCode) != 0L) { double commentLines = MeasureUtils.getValue(context.getMeasure(CoreMetrics.COMMENT_LINES), 0.0); double missingCommentLines = Math.ceil(minimumCommentDensity * linesOfCode / (100 - minimumCommentDensity) - commentLines); createIssue(resource, rule, missingCommentLines, perspectives); } }
private Measure calculateForFile(FormulaData data, FormulaContext context) { Measure result = null; Double fallbackMeasure = fallbackMetric != null ? MeasureUtils.getValue(data.getMeasure(fallbackMetric), null) : null; Double byMeasure = MeasureUtils.getValue(data.getMeasure(byMetric), null); Double mainMeasure = MeasureUtils.getValue(data.getMeasure(mainMetric), fallbackMeasure); if (mainMeasure != null && byMeasure != null && byMeasure > 0.0) { result = new Measure(context.getTargetMetric(), mainMeasure / byMeasure); } return result; }
@Override public void checkResource(Resource resource, DecoratorContext context, RuleKey ruleKey, ResourcePerspectives perspectives) { double lineCoverage = MeasureUtils.getValue(context.getMeasure(CoreMetrics.LINE_COVERAGE), 0.0); if (context.getMeasure(CoreMetrics.LINE_COVERAGE) != null && lineCoverage < minimumLineCoverageRatio) { double uncoveredLines = MeasureUtils.getValue(context.getMeasure(CoreMetrics.UNCOVERED_LINES), 0.0); double linesToCover = MeasureUtils.getValue(context.getMeasure(CoreMetrics.LINES_TO_COVER), 0.0); double linesToCoverToReachThreshold = Math.ceil((linesToCover * minimumLineCoverageRatio / 100) - (linesToCover - uncoveredLines)); createIssue(resource, ruleKey, linesToCoverToReachThreshold, perspectives); } }
@Override public void checkResource(Resource resource, DecoratorContext context, RuleKey rule, ResourcePerspectives perspectives) { double lineCoverage = MeasureUtils.getValue(context.getMeasure(CoreMetrics.BRANCH_COVERAGE), 0.0); if (context.getMeasure(CoreMetrics.BRANCH_COVERAGE) != null && lineCoverage < minimumBranchCoverageRatio) { double uncoveredConditions = MeasureUtils.getValue(context.getMeasure(CoreMetrics.UNCOVERED_CONDITIONS), 0.0); double conditionsToCover = MeasureUtils.getValue(context.getMeasure(CoreMetrics.CONDITIONS_TO_COVER), 0.0); double conditionsToCoverToReachThreshold = Math.ceil((conditionsToCover * minimumBranchCoverageRatio / 100) - (conditionsToCover - uncoveredConditions)); createIssue(resource, rule, conditionsToCoverToReachThreshold, perspectives); } }
@SuppressWarnings("rawtypes") @Override public void checkResource(Resource resource, DecoratorContext context, org.sonar.api.rules.Rule rule) { if (minimumCommentDensity < 0 || minimumCommentDensity >= 100) { throw new IllegalArgumentException(minimumCommentDensity + " is not a valid value for minimum required comment density for rule 'CommentDensityCheck' (must be >= 0 and < 100)."); } double commentDensity = MeasureUtils.getValue(context.getMeasure(CoreMetrics.COMMENT_LINES_DENSITY), 0.0); double linesOfCode = MeasureUtils.getValue(context.getMeasure(CoreMetrics.NCLOC), 0.0); if (commentDensity < minimumCommentDensity && linesOfCode != 0) { double commentLines = MeasureUtils.getValue(context.getMeasure(CoreMetrics.COMMENT_LINES), 0.0); double missingCommentLines = Math.ceil(minimumCommentDensity * linesOfCode / (100 - minimumCommentDensity) - commentLines); Violation violation = createViolation(resource, rule, missingCommentLines); context.saveViolation(violation); } }
@Override public void checkResource(Resource resource, DecoratorContext context, RuleKey ruleKey, ResourcePerspectives perspectives) { double testErrors = MeasureUtils.getValue(context.getMeasure(CoreMetrics.TEST_ERRORS), 0.0); double testFailures = MeasureUtils.getValue(context.getMeasure(CoreMetrics.TEST_FAILURES), 0.0); double testFailuresAndErrors = testErrors + testFailures; if (ResourceUtils.isUnitTestClass(resource) && testFailuresAndErrors > 0) { createIssue(resource, ruleKey, testFailuresAndErrors, perspectives); } }
@SuppressWarnings("rawtypes") @Override public void checkResource(Resource resource, DecoratorContext context, org.sonar.api.rules.Rule rule) { double lineCoverage = MeasureUtils.getValue(context.getMeasure(CoreMetrics.LINE_COVERAGE), 0.0); if (context.getMeasure(CoreMetrics.LINE_COVERAGE) != null && lineCoverage < minimumLineCoverageRatio) { double uncoveredLines = MeasureUtils.getValue(context.getMeasure(CoreMetrics.UNCOVERED_LINES), 0.0); double linesToCover = MeasureUtils.getValue(context.getMeasure(CoreMetrics.LINES_TO_COVER), 0.0); double linesToCoverToReachThreshold = Math.ceil((linesToCover * minimumLineCoverageRatio / 100) - (linesToCover - uncoveredLines)); Violation violation = createViolation(resource, rule, linesToCoverToReachThreshold); context.saveViolation(violation); } }
@SuppressWarnings("rawtypes") @Override public void checkResource(Resource resource, DecoratorContext context, org.sonar.api.rules.Rule rule) { double lineCoverage = MeasureUtils.getValue(context.getMeasure(CoreMetrics.BRANCH_COVERAGE), 0.0); if (context.getMeasure(CoreMetrics.BRANCH_COVERAGE) != null && lineCoverage < minimumBranchCoverageRatio) { double uncoveredConditions = MeasureUtils.getValue(context.getMeasure(CoreMetrics.UNCOVERED_CONDITIONS), 0.0); double conditionsToCover = MeasureUtils.getValue(context.getMeasure(CoreMetrics.CONDITIONS_TO_COVER), 0.0); double conditionsToCoverToReachThreshold = Math.ceil((conditionsToCover * minimumBranchCoverageRatio / 100) - (conditionsToCover - uncoveredConditions)); Violation violation = createViolation(resource, rule, conditionsToCoverToReachThreshold); context.saveViolation(violation); } }
@Override public void checkResource(Resource resource, DecoratorContext context, RuleKey rule, ResourcePerspectives perspectives) { double duplicatedBlocks = MeasureUtils.getValue(context.getMeasure(CoreMetrics.DUPLICATED_BLOCKS), 0.0); if (duplicatedBlocks > 0) { createIssue(resource, rule, duplicatedBlocks, perspectives); } }
private Measure calculateOnChildren(FormulaData data, FormulaContext context) { Measure result = null; double totalByMeasure = 0; double totalMainMeasure = 0; boolean hasApplicableChildren = false; for (FormulaData childrenData : data.getChildren()) { Double fallbackMeasure = fallbackMetric != null ? MeasureUtils.getValue(childrenData.getMeasure(fallbackMetric), null) : null; Double childrenByMeasure = MeasureUtils.getValue(childrenData.getMeasure(byMetric), null); Double childrenMainMeasure = MeasureUtils.getValue(childrenData.getMeasure(mainMetric), fallbackMeasure); if (childrenMainMeasure != null && childrenByMeasure != null && childrenByMeasure > 0.0) { totalByMeasure += childrenByMeasure; totalMainMeasure += childrenMainMeasure; hasApplicableChildren = true; } } if (hasApplicableChildren) { result = new Measure(context.getTargetMetric(), totalMainMeasure / totalByMeasure); } return result; }
@Override public void checkResource(Resource resource, DecoratorContext context, RuleKey ruleKey, ResourcePerspectives perspectives) { double skippedTests = MeasureUtils.getValue(context.getMeasure(CoreMetrics.SKIPPED_TESTS), 0.0); if (ResourceUtils.isUnitTestClass(resource) && skippedTests > 0) { createIssue(resource, ruleKey, skippedTests, perspectives); } }
@SuppressWarnings("rawtypes") @Override public void checkResource(Resource resource, DecoratorContext context, org.sonar.api.rules.Rule rule) { double duplicatedBlocks = MeasureUtils.getValue(context.getMeasure(CoreMetrics.DUPLICATED_BLOCKS), 0.0); if (duplicatedBlocks > 0) { Violation violation = createViolation(resource, rule, duplicatedBlocks); context.saveViolation(violation); } }
@SuppressWarnings("rawtypes") @Override public void checkResource(Resource resource, DecoratorContext context, org.sonar.api.rules.Rule rule) { double testErrors = MeasureUtils.getValue(context.getMeasure(CoreMetrics.TEST_ERRORS), 0.0); double testFailures = MeasureUtils.getValue(context.getMeasure(CoreMetrics.TEST_FAILURES), 0.0); double testFailuresAndErrors = testErrors + testFailures; if (ResourceUtils.isUnitTestClass(resource) && testFailuresAndErrors > 0) { Violation violation = Violation.create(rule, resource).setCost(testFailuresAndErrors); violation.setMessage("Some tests are not successful. You should fix them."); context.saveViolation(violation); } }
@Override public void decorate(Resource resource, DecoratorContext context) { if (!ResourceUtils.isFile(resource) && !ResourceUtils.isPackage(resource)) { double lines = 0.0; Measure duplicated = context.getMeasure(TrackerMetrics.USELESS_DUPLICATED_LINES); if (duplicated != null ) { lines += MeasureUtils.getValue(duplicated, 0.0); context.saveMeasure(TrackerMetrics.TOTAL_USELESS_LINES, lines); } } }
private void computeMethodDistribution(Resource resource, DecoratorContext context) { JavaMethod method = (JavaMethod) resource; int lineNumber = method.getFromLine(); int numberOfLines = MeasureUtils.getValue(context.getMeasure(CoreMetrics.LINES), 0.0).intValue(); CountDistributionBuilder builder = new CountDistributionBuilder(TrackerMetrics.TEMP_METHOD_LINES); builder.add(lineNumber, numberOfLines); context.saveMeasure(builder.build().setPersistenceMode(PersistenceMode.MEMORY)); }
@SuppressWarnings("rawtypes") @Override public void checkResource(Resource resource, DecoratorContext context, org.sonar.api.rules.Rule rule) { double skippedTests = MeasureUtils.getValue(context.getMeasure(CoreMetrics.SKIPPED_TESTS), 0.0); if (ResourceUtils.isUnitTestClass(resource) && skippedTests > 0) { Violation violation = Violation.create(rule, resource).setCost(skippedTests); violation.setMessage("Some tests are skipped. You should activate them or remove them."); context.saveViolation(violation); } }
private void computeAbacusComplexity(Resource rsrc, DecoratorContext dc) { if (ResourceUtils.isFile(rsrc) || ResourceUtils.isPackage(rsrc) || ResourceUtils.isDirectory(rsrc) || ResourceUtils.isRootProject(rsrc) || ResourceUtils.isModuleProject(rsrc)) { Double fileComplexity = MeasureUtils.getValue(dc.getMeasure(CoreMetrics.FILE_COMPLEXITY), Double.NaN); if (!Double.isNaN(fileComplexity)) { dc.saveMeasure(new Measure(AbacusMetrics.ABACUS_COMPLEXITY, ComplexityThresholdsUtils.convertCyclomaticComplexityToAbacusComplexity(fileComplexity, complexityThresholds))); } } }
/** * {@inheritDoc} */ @Override public final void decorate(Resource resource, DecoratorContext context) { if (!shouldDecorateResource(context)) { return; } Measure tangles = context.getMeasure(tanglesMetric); Measure totalweight = context.getMeasure(edgesWeightMetric); if (MeasureUtils.hasValue(totalweight)) { context.saveMeasure(new Measure(tangleIndexMetric, compute(MeasureUtils.getValue(tangles, 0.0), totalweight.getValue()))); } }