Remove fluent API for sigmasks

This commit is contained in:
Clément Fournier
2017-08-27 23:18:22 +02:00
parent 584041e1e7
commit 8b0eaa6c3d
4 changed files with 81 additions and 126 deletions

View File

@ -4,8 +4,6 @@
package net.sourceforge.pmd.lang.java.multifile.signature;
import net.sourceforge.pmd.lang.java.multifile.signature.JavaSignature.Visibility;
/**
* Signature mask for a field. Newly created masks cover any field.
*
@ -17,76 +15,40 @@ public final class JavaFieldSigMask extends JavaSigMask<JavaFieldSignature> {
private boolean coverStatic = true;
/**
* Creates a field mask covering any field.
*/
public JavaFieldSigMask() {
// everything's initialized
super();
}
/**
* Sets the mask to cover final fields.
*
* @return this
*/
public JavaFieldSigMask coverFinal() {
/** Include final fields?. */
public void coverFinal(boolean coverFinal) {
this.coverFinal = coverFinal;
}
public void coverFinal() {
this.coverFinal = true;
return this;
}
/**
* Forbid final fields.
*
* @return this
*/
public JavaFieldSigMask forbidFinal() {
coverFinal = false;
return this;
public void forbidFinal() {
this.coverFinal = false;
}
/**
* Sets the mask to cover static fields.
*
* @return this
*/
public JavaFieldSigMask coverStatic() {
/** Include static fields?. */
public void coverStatic(boolean coverStatic) {
this.coverStatic = coverStatic;
}
public void coverStatic() {
this.coverStatic = true;
return this;
}
/**
* Forbid abstract operations.
*
* @return this
*/
public JavaFieldSigMask forbidStatic() {
coverStatic = false;
return this;
}
@Override
public JavaFieldSigMask coverAllVisibilities() {
super.coverAllVisibilities();
return this;
}
@Override
public JavaFieldSigMask restrictVisibilitiesTo(Visibility... visibilities) {
super.restrictVisibilitiesTo(visibilities);
return this;
}
@Override
public JavaFieldSigMask forbid(Visibility... visibilities) {
super.forbid(visibilities);
return this;
public void forbidStatic() {
this.coverStatic = false;
}

View File

@ -9,7 +9,6 @@ import java.util.EnumSet;
import java.util.Set;
import net.sourceforge.pmd.lang.java.multifile.signature.JavaOperationSignature.Role;
import net.sourceforge.pmd.lang.java.multifile.signature.JavaSignature.Visibility;
/**
* Signature mask for an operation. Newly created masks cover any operation that is not abstract.
@ -22,20 +21,11 @@ public final class JavaOperationSigMask extends JavaSigMask<JavaOperationSignatu
private boolean coverAbstract = false;
/**
* Creates an operation sig mask that covers any non-abstract operation.
*/
public JavaOperationSigMask() {
// everything's initialized
}
/**
* Sets the mask to cover all roles.
*/
public JavaOperationSigMask coverAllRoles() {
public void coverAllRoles() {
roleMask.addAll(Arrays.asList(JavaOperationSignature.Role.values()));
return this;
}
@ -44,10 +34,9 @@ public final class JavaOperationSigMask extends JavaSigMask<JavaOperationSignatu
*
* @param roles The roles to cover
*/
public JavaOperationSigMask restrictRolesTo(JavaOperationSignature.Role... roles) {
public void restrictRolesTo(JavaOperationSignature.Role... roles) {
roleMask.clear();
roleMask.addAll(Arrays.asList(roles));
return this;
}
@ -56,50 +45,28 @@ public final class JavaOperationSigMask extends JavaSigMask<JavaOperationSignatu
*
* @param roles The roles to forbid
*/
public JavaOperationSigMask forbid(JavaOperationSignature.Role... roles) {
public void forbid(JavaOperationSignature.Role... roles) {
roleMask.removeAll(Arrays.asList(roles));
return this;
}
/**
* Sets the mask to cover abstract operations.
*/
public JavaOperationSigMask coverAbstract() {
this.coverAbstract = true;
return this;
}
/**
* Forbid abstract operations.
* Forbid all mentioned visibilities.
*
* @return this
* @param coverAbstract The visibilities to forbid
*/
public JavaOperationSigMask forbidAbstract() {
coverAbstract = false;
return this;
public void coverAbstract(boolean coverAbstract) {
this.coverAbstract = coverAbstract;
}
@Override
public JavaOperationSigMask coverAllVisibilities() {
super.coverAllVisibilities();
return this;
public void coverAbstract() {
this.coverAbstract = true;
}
@Override
public JavaOperationSigMask restrictVisibilitiesTo(Visibility... visibilities) {
super.restrictVisibilitiesTo(visibilities);
return this;
}
@Override
public JavaOperationSigMask forbid(Visibility... visibilities) {
super.forbid(visibilities);
return this;
public void forbidAbstract() {
this.coverAbstract = false;
}

View File

@ -24,19 +24,11 @@ public abstract class JavaSigMask<T extends JavaSignature<?>> implements SigMask
private Set<JavaSignature.Visibility> visMask = EnumSet.allOf(Visibility.class);
protected JavaSigMask() {
}
/**
* Sets the mask to cover all visibilities.
*
* @return this
*/
public JavaSigMask<T> coverAllVisibilities() {
public void coverAllVisibilities() {
visMask.addAll(Arrays.asList(JavaSignature.Visibility.values()));
return this;
}
@ -44,13 +36,10 @@ public abstract class JavaSigMask<T extends JavaSignature<?>> implements SigMask
* Restricts the visibilities covered by the mask to the parameters.
*
* @param visibilities The visibilities to cover
*
* @return this
*/
public JavaSigMask<T> restrictVisibilitiesTo(JavaSignature.Visibility... visibilities) {
public void restrictVisibilitiesTo(JavaSignature.Visibility... visibilities) {
visMask.clear();
visMask.addAll(Arrays.asList(visibilities));
return this;
}
@ -58,12 +47,9 @@ public abstract class JavaSigMask<T extends JavaSignature<?>> implements SigMask
* Forbid all mentioned visibilities.
*
* @param visibilities The visibilities to forbid
*
* @return this
*/
public JavaSigMask<T> forbid(JavaSignature.Visibility... visibilities) {
public void forbid(JavaSignature.Visibility... visibilities) {
visMask.removeAll(Arrays.asList(visibilities));
return this;
}

View File

@ -37,16 +37,18 @@ public class ClassStatsTest {
final ClassMirror classMirror = toplevel.getClassMirror(JavaQualifiedName.ofClass(SignatureCountTestData.class));
final JavaOperationSigMask opSigMask = new JavaOperationSigMask().coverAbstract();
final FluentOperationSigMask opSigMask = new FluentOperationSigMask();
opSigMask.mask.coverAbstract();
opSigMask.restrictRolesTo(Role.STATIC);
assertEquals(4, classMirror.countMatchingOpSigs(opSigMask));
assertEquals(4, classMirror.countMatchingOpSigs(opSigMask.mask));
assertEquals(2, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PRIVATE)));
assertEquals(2, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PUBLIC)));
opSigMask.restrictRolesTo(Role.METHOD).coverAllVisibilities();
assertEquals(6, classMirror.countMatchingOpSigs(opSigMask));
assertEquals(6, classMirror.countMatchingOpSigs(opSigMask.mask));
assertEquals(1, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PUBLIC)));
assertEquals(1, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PRIVATE)));
assertEquals(4, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PROTECTED)));
@ -54,26 +56,64 @@ public class ClassStatsTest {
opSigMask.restrictRolesTo(Role.GETTER_OR_SETTER).coverAllVisibilities();
assertEquals(8, classMirror.countMatchingOpSigs(opSigMask));
assertEquals(8, classMirror.countMatchingOpSigs(opSigMask.mask));
assertEquals(4, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PACKAGE)));
assertEquals(4, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PUBLIC)));
opSigMask.restrictRolesTo(Role.CONSTRUCTOR).coverAllVisibilities();
assertEquals(3, classMirror.countMatchingOpSigs(opSigMask));
assertEquals(3, classMirror.countMatchingOpSigs(opSigMask.mask));
assertEquals(3, classMirror.countMatchingOpSigs(opSigMask.restrictVisibilitiesTo(Visibility.PUBLIC)));
JavaFieldSigMask fieldSigMask = new JavaFieldSigMask();
FluentFieldSigMask fieldSigMask = new FluentFieldSigMask();
assertEquals(6, classMirror.countMatchingFieldSigs(fieldSigMask));
assertEquals(6, classMirror.countMatchingFieldSigs(fieldSigMask.mask));
assertEquals(3, classMirror.countMatchingFieldSigs(fieldSigMask.restrictVisibilitiesTo(Visibility.PUBLIC)));
assertEquals(1, classMirror.countMatchingFieldSigs(fieldSigMask.restrictVisibilitiesTo(Visibility.PROTECTED)));
assertEquals(2, classMirror.countMatchingFieldSigs(fieldSigMask.restrictVisibilitiesTo(Visibility.PRIVATE)));
assertEquals(0, classMirror.countMatchingFieldSigs(fieldSigMask.restrictVisibilitiesTo(Visibility.PRIVATE).forbidFinal()));
fieldSigMask.mask.forbidFinal();
assertEquals(0, classMirror.countMatchingFieldSigs(fieldSigMask.restrictVisibilitiesTo(Visibility.PRIVATE)));
}
// Containers to clear up tests
private class FluentOperationSigMask {
JavaOperationSigMask mask = new JavaOperationSigMask();
JavaOperationSigMask forbidAbstract() {
mask.coverAbstract(false);
return mask;
}
JavaOperationSigMask restrictVisibilitiesTo(Visibility... visibilities) {
mask.restrictVisibilitiesTo(visibilities);
return mask;
}
JavaOperationSigMask restrictRolesTo(Role... roles) {
mask.restrictRolesTo(roles);
return mask;
}
}
private class FluentFieldSigMask {
JavaFieldSigMask mask = new JavaFieldSigMask();
JavaFieldSigMask restrictVisibilitiesTo(Visibility... visibilities) {
mask.restrictVisibilitiesTo(visibilities);
return mask;
}
}
}