Merge branch 'pr-580'

This commit is contained in:
Andreas Dangel
2017-08-26 11:06:33 +02:00
6 changed files with 46 additions and 17 deletions

View File

@ -242,4 +242,5 @@ All existing rules have been updated to reflect these changes. If you have custo
* [#573](https://github.com/pmd/pmd/pull/573): \[java] Data class rule - [Clément Fournier](https://github.com/oowekyala)
* [#576](https://github.com/pmd/pmd/pull/576): \[doc]\[java] Add hint for Guava users in InefficientEmptyStringCheck - [mmoehring](https://github.com/mmoehring)
* [#578](https://github.com/pmd/pmd/pull/578): \[java] Refactored god class rule - [Clément Fournier](https://github.com/oowekyala)
* [#580](https://github.com/pmd/pmd/pull/580): \[core] Add AbstractMetric to topple the class hierarchy of metrics - [Clément Fournier](https://github.com/oowekyala)
* [#581](https://github.com/pmd/pmd/pull/581): \[java] Relax AbstractClassWithoutAnyMethod when class is annotated by @AutoValue - [Niklas Baudy](https://github.com/vanniktech)

View File

@ -4,12 +4,16 @@
package net.sourceforge.pmd.lang.apex.metrics;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.metrics.AbstractMetric;
/**
* Base class for all Apex metrics.
*
* @author Clément Fournier
*/
public class AbstractApexMetric {
public abstract class AbstractApexMetric<N extends Node> extends AbstractMetric<N> {
protected ApexSignatureMatcher getSignatureMatcher() {
return ApexMetrics.getFacade().getProjectMirror();

View File

@ -14,7 +14,8 @@ import net.sourceforge.pmd.lang.apex.metrics.api.ApexClassMetric;
*
* @author Clément Fournier
*/
public abstract class AbstractApexClassMetric extends AbstractApexMetric implements ApexClassMetric {
public abstract class AbstractApexClassMetric extends AbstractApexMetric<ASTUserClassOrInterface<?>>
implements ApexClassMetric {
@Override
public boolean supports(ASTUserClassOrInterface<?> node) {

View File

@ -14,7 +14,7 @@ import net.sourceforge.pmd.lang.apex.metrics.api.ApexOperationMetric;
*
* @author Clément Fournier
*/
public abstract class AbstractApexOperationMetric extends AbstractApexMetric implements ApexOperationMetric {
public abstract class AbstractApexOperationMetric extends AbstractApexMetric<ASTMethod> implements ApexOperationMetric {
/**
* Checks if the metric can be computed on the node. For now, we filter out {@literal <clinit>, <init> and clone},

View File

@ -0,0 +1,35 @@
/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.metrics;
import net.sourceforge.pmd.lang.ast.Node;
/**
* Abstract class for all metrics.
*
* @param <N> Type of nodes the metric can be computed on
*
* @author Clément Fournier
* @since 6.0.0
*/
public abstract class AbstractMetric<N extends Node> implements Metric<N> {
/**
* Metrics should be stateless, thus any instance of the same metric class should be equal.
*
* {@inheritDoc}
*/
@Override
public final boolean equals(Object o) {
return o != null && o.getClass() == this.getClass();
}
@Override
public final int hashCode() {
return getClass().hashCode();
}
}

View File

@ -10,7 +10,7 @@ import java.util.List;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.java.ast.ASTMethodOrConstructorDeclaration;
import net.sourceforge.pmd.lang.java.ast.JavaQualifiedName;
import net.sourceforge.pmd.lang.metrics.Metric;
import net.sourceforge.pmd.lang.metrics.AbstractMetric;
/**
@ -21,7 +21,7 @@ import net.sourceforge.pmd.lang.metrics.Metric;
*
* @author Clément Fournier
*/
public abstract class AbstractJavaMetric<N extends Node> implements Metric<N> {
public abstract class AbstractJavaMetric<N extends Node> extends AbstractMetric<N> {
protected List<JavaQualifiedName> findAllCalls(ASTMethodOrConstructorDeclaration node) {
@ -33,18 +33,6 @@ public abstract class AbstractJavaMetric<N extends Node> implements Metric<N> {
}
@Override
public final boolean equals(Object o) {
return o != null && o.getClass() == this.getClass();
}
@Override
public final int hashCode() {
return getClass().hashCode();
}
/**
* Gives access to a signature matcher to metrics. They can use it to perform signature matching.
*