1
2
3
4 package net.sourceforge.pmd.lang.xml.rule;
5
6 import java.util.List;
7
8 import net.sourceforge.pmd.RuleContext;
9 import net.sourceforge.pmd.lang.LanguageRegistry;
10 import net.sourceforge.pmd.lang.ParserOptions;
11 import net.sourceforge.pmd.lang.ast.Node;
12 import net.sourceforge.pmd.lang.rule.AbstractRule;
13 import net.sourceforge.pmd.lang.rule.ImmutableLanguage;
14 import net.sourceforge.pmd.lang.rule.properties.BooleanProperty;
15 import net.sourceforge.pmd.lang.xml.XmlLanguageModule;
16 import net.sourceforge.pmd.lang.xml.XmlParserOptions;
17 import net.sourceforge.pmd.lang.xml.ast.XmlNode;
18
19
20
21
22
23
24 public class AbstractXmlRule extends AbstractRule implements ImmutableLanguage {
25
26 public static final BooleanProperty COALESCING_DESCRIPTOR = XmlParserOptions.COALESCING_DESCRIPTOR;
27 public static final BooleanProperty EXPAND_ENTITY_REFERENCES_DESCRIPTOR = XmlParserOptions.EXPAND_ENTITY_REFERENCES_DESCRIPTOR;
28 public static final BooleanProperty IGNORING_COMMENTS_DESCRIPTOR = XmlParserOptions.IGNORING_COMMENTS_DESCRIPTOR;
29 public static final BooleanProperty IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR = XmlParserOptions.IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR;
30 public static final BooleanProperty NAMESPACE_AWARE_DESCRIPTOR = XmlParserOptions.NAMESPACE_AWARE_DESCRIPTOR;
31 public static final BooleanProperty VALIDATING_DESCRIPTOR = XmlParserOptions.VALIDATING_DESCRIPTOR;
32 public static final BooleanProperty XINCLUDE_AWARE_DESCRIPTOR = XmlParserOptions.XINCLUDE_AWARE_DESCRIPTOR;
33
34 public AbstractXmlRule() {
35 super.setLanguage(LanguageRegistry.getLanguage(XmlLanguageModule.NAME));
36 definePropertyDescriptor(COALESCING_DESCRIPTOR);
37 definePropertyDescriptor(EXPAND_ENTITY_REFERENCES_DESCRIPTOR);
38 definePropertyDescriptor(IGNORING_COMMENTS_DESCRIPTOR);
39 definePropertyDescriptor(IGNORING_ELEMENT_CONTENT_WHITESPACE_DESCRIPTOR);
40 definePropertyDescriptor(NAMESPACE_AWARE_DESCRIPTOR);
41 definePropertyDescriptor(VALIDATING_DESCRIPTOR);
42 definePropertyDescriptor(XINCLUDE_AWARE_DESCRIPTOR);
43 }
44
45 @Override
46 public ParserOptions getParserOptions() {
47 return new XmlParserOptions(this);
48 }
49
50 public void apply(List<? extends Node> nodes, RuleContext ctx) {
51 visitAll(nodes, ctx);
52 }
53
54 protected void visitAll(List<? extends Node> nodes, RuleContext ctx) {
55 for (Object element : nodes) {
56 XmlNode node = (XmlNode) element;
57 visit(node, ctx);
58 }
59 }
60
61 protected void visit(XmlNode node, RuleContext ctx) {
62 final int numChildren = node.jjtGetNumChildren();
63 for (int i = 0; i < numChildren; i++) {
64 XmlNode child = (XmlNode) node.jjtGetChild(i);
65 visit(child, ctx);
66 }
67 }
68 }