All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codenarc.rule.size.AbcMetricRule.groovy Maven / Gradle / Ivy

There is a newer version: 3.5.0-groovy-4.0
Show newest version
/*
 * Copyright 2012 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.codenarc.rule.size

import org.codenarc.rule.AbstractAstVisitorRule
import org.gmetrics.metric.abc.AbcMetric

/**
 * Rule that calculates the ABC metric score for methods/classes and checks against
 * configured threshold values.
 * 

* The maxMethodAbcScore property holds the threshold value for the ABC score * (magnitude) for each method. If this value is non-zero, a method with an ABC score greater than * this value is considered a violation. The value does not have to be an integer (i.e., 1.7 is allowed). The * maxMethodAbcScore property defaults to 60. *

* The maxClassAverageMethodAbcScore property holds the threshold value for the average ABC * score for each class. If this value is non-zero, a class with an average ABC score * greater than this value is considered a violation. The value does not have to be an integer * (i.e., 1.7 is allowed). The maxClassAverageMethodAbcScore property defaults to 60. *

* The maxClassAbcScore property holds the threshold value for the total ABC * score value for each class. If this value is non-zero, a class with a total ABC score * greater than this value is considered a violation. The value does not have to be an integer * (i.e., 1.7 is allowed). The maxClassAbcScore property defaults to 0. *

* The ignoreMethodNames property optionally specifies one or more (comma-separated) method * names that should be ignored (i.e., that should not cause a rule violation). The name(s) may optionally * include wildcard characters ('*' or '?'). Note that the ignored methods still contribute to the class * complexity value. *

* This rule treats "closure fields" as methods. If a class field is initialized to a Closure (ClosureExpression), * then that Closure is analyzed and checked just like a method. * * @see ABC Metric specification. * @see Blog post describing guidelines for interpreting an ABC score. * @see GMetrics ABC metric. * * @author Chris Mair */ class AbcMetricRule extends AbstractAstVisitorRule { String name = 'AbcMetric' int priority = 2 Class astVisitorClass = AbcMetricAstVisitor int maxMethodAbcScore = 60 int maxClassAverageMethodAbcScore = 60 int maxClassAbcScore = 0 String ignoreMethodNames } class AbcMetricAstVisitor extends AbstractMethodMetricAstVisitor { final String metricShortDescription = 'ABC score' protected Object createMetric() { new AbcMetric() } protected Object getMaxMethodMetricValue() { rule.maxMethodAbcScore } protected Object getMaxClassAverageMethodMetricValue() { rule.maxClassAverageMethodAbcScore } protected Object getMaxClassMetricValue() { rule.maxClassAbcScore } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy