Rules that flag suboptimal code.
Table of Contents

AvoidAxisNavigation

Since: PMD 5.0

Priority: Medium (3)

Avoid using the ‘following’ or ‘preceding’ axes whenever possible, as these can cut through 100% of the document in the worst case. Also, try to avoid using ‘descendant’ or ‘descendant-or-self’ axes, as if you’re at the top of the Document, it necessarily means cutting through 100% of the document.

This rule is defined by the following XPath expression:

//node()[
  contains(@select,'preceding::')
  or
  contains(@select,'following::')
  or
  contains(@select,'descendant::')
  or
  contains(@select,'descendant-self::')
  or (
    ($checkSelfDescendantAbreviation = true() )
    and
    contains(@select,'//')
    )
]

Example(s):

<xsl:variable name="var" select="//item/descendant::child"/>

This rule has the following properties:

Name Default Value Description
checkSelfDescendantAbreviation false descendant::self abreviation, ‘//’, will also trigger this rule.

Use this rule with the default properties by just referencing it:

<rule ref="category/xsl/performance.xml/AvoidAxisNavigation" />

Use this rule and customize it:

<rule ref="category/xsl/performance.xml/AvoidAxisNavigation">
    <properties>
        <property name="checkSelfDescendantAbreviation" value="false" />
    </properties>
</rule>