net.sourceforge.pmd.lang.java.rule.coupling
Class LoosePackageCouplingRule

java.lang.Object
  extended by net.sourceforge.pmd.AbstractPropertySource
      extended by net.sourceforge.pmd.lang.rule.AbstractRule
          extended by net.sourceforge.pmd.lang.java.rule.AbstractJavaRule
              extended by net.sourceforge.pmd.lang.java.rule.coupling.LoosePackageCouplingRule
All Implemented Interfaces:
JavaParserVisitor, ImmutableLanguage, PropertySource, Rule

public class LoosePackageCouplingRule
extends AbstractJavaRule

The loose package coupling Rule can be used to ensure coupling outside of a package hierarchy is minimized to all but an allowed set of classes from within the package hierarchy.

For example, supposed you have the following package hierarchy:

And the allowed class org.sample.SampleInterface.

This rule can be used to ensure that all classes within the org.sample package and its sub-packages are not used outside of the org.sample package hierarchy. Further, the only allowed usage outside of a class in the org.sample hierarchy would be via org.sample.SampleInterface.


Field Summary
static StringMultiProperty CLASSES_DESCRIPTOR
           
static StringMultiProperty PACKAGES_DESCRIPTOR
           
 
Fields inherited from class net.sourceforge.pmd.AbstractPropertySource
propertyDescriptors, propertyValuesByDescriptor
 
Fields inherited from interface net.sourceforge.pmd.Rule
VIOLATION_SUPPRESS_REGEX_DESCRIPTOR, VIOLATION_SUPPRESS_XPATH_DESCRIPTOR
 
Constructor Summary
LoosePackageCouplingRule()
           
 
Method Summary
 boolean checksNothing()
           
 String dysfunctionReason()
           
protected  List<String> getRestrictedPackages()
           
protected  boolean isAllowedClass(ASTImportDeclaration node)
           
protected  boolean isContainingPackage(String pkg1, String pkg2)
           
 Object visit(ASTCompilationUnit node, Object data)
           
 Object visit(ASTImportDeclaration node, Object data)
           
 Object visit(ASTPackageDeclaration node, Object data)
           
 
Methods inherited from class net.sourceforge.pmd.lang.java.rule.AbstractJavaRule
apply, getDeclaringType, importsPackage, isQualifiedName, isSuppressed, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitAll
 
Methods inherited from class net.sourceforge.pmd.lang.rule.AbstractRule
addExample, addRuleChainVisit, addRuleChainVisit, addViolation, addViolation, addViolation, addViolationWithMessage, addViolationWithMessage, addViolationWithMessage, deepCopyValuesTo, end, equals, getDescription, getExamples, getExternalInfoUrl, getLanguage, getMaximumLanguageVersion, getMessage, getMinimumLanguageVersion, getName, getParserOptions, getPriority, getRuleChainVisits, getRuleClass, getRuleSetName, getSince, hashCode, isDeprecated, setDeprecated, setDescription, setExternalInfoUrl, setLanguage, setMaximumLanguageVersion, setMessage, setMinimumLanguageVersion, setName, setPriority, setRuleClass, setRuleSetName, setSince, setUsesDFA, setUsesTypeResolution, start, usesDFA, usesRuleChain, usesTypeResolution
 
Methods inherited from class net.sourceforge.pmd.AbstractPropertySource
copyPropertyDescriptors, copyPropertyValues, definePropertyDescriptor, getPropertiesByPropertyDescriptor, getProperty, getPropertyDescriptor, getPropertyDescriptors, hasDescriptor, ignoredProperties, setProperty, useDefaultValueFor, usesDefaultValues
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface net.sourceforge.pmd.PropertySource
definePropertyDescriptor, getPropertiesByPropertyDescriptor, getProperty, getPropertyDescriptor, getPropertyDescriptors, hasDescriptor, ignoredProperties, setProperty, useDefaultValueFor, usesDefaultValues
 

Field Detail

PACKAGES_DESCRIPTOR

public static final StringMultiProperty PACKAGES_DESCRIPTOR

CLASSES_DESCRIPTOR

public static final StringMultiProperty CLASSES_DESCRIPTOR
Constructor Detail

LoosePackageCouplingRule

public LoosePackageCouplingRule()
Method Detail

visit

public Object visit(ASTCompilationUnit node,
                    Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class AbstractJavaRule

visit

public Object visit(ASTPackageDeclaration node,
                    Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class AbstractJavaRule

visit

public Object visit(ASTImportDeclaration node,
                    Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class AbstractJavaRule

getRestrictedPackages

protected List<String> getRestrictedPackages()

isContainingPackage

protected boolean isContainingPackage(String pkg1,
                                      String pkg2)

isAllowedClass

protected boolean isAllowedClass(ASTImportDeclaration node)

checksNothing

public boolean checksNothing()

dysfunctionReason

public String dysfunctionReason()
Specified by:
dysfunctionReason in interface PropertySource
Overrides:
dysfunctionReason in class AbstractPropertySource
See Also:
PropertySource.dysfunctionReason()


Copyright © 2002-2015 InfoEther. All Rights Reserved.