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

## Class LoosePackageCouplingRule

- java.lang.Object
- - net.sourceforge.pmd.AbstractPropertySource
  - - net.sourceforge.pmd.lang.rule.AbstractRule
    - - net.sourceforge.pmd.lang.java.rule.AbstractJavaRule
      - - 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:

- `org.sample`
- `org.sample.impl`
- `org.sample.util`

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

Fields
`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

Constructors
Constructor and Description
`LoosePackageCouplingRule()`

### Method Summary

Methods
`boolean` `checksNothing()`
`String` `dysfunctionReason()` Returns a description of why the receiver may be dysfunctional.
`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, 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()

Description copied from interface: `PropertySource`
Returns a description of why the receiver may be dysfunctional. Usually due to missing property values or some kind of conflict between values. Returns null if the receiver is ok.

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