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
    Modifier and Type | Field and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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()`

Copyright © 2002-2013 InfoEther. All Rights Reserved.