1
2
3
4 package net.sourceforge.pmd.lang;
5
6 import java.io.Reader;
7 import java.util.ArrayList;
8 import java.util.Arrays;
9 import java.util.Collections;
10 import java.util.List;
11 import java.util.Map;
12
13 import net.sourceforge.pmd.Rule;
14 import net.sourceforge.pmd.RuleContext;
15 import net.sourceforge.pmd.RuleViolation;
16 import net.sourceforge.pmd.lang.ast.DummyNode;
17 import net.sourceforge.pmd.lang.ast.Node;
18 import net.sourceforge.pmd.lang.ast.ParseException;
19 import net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor;
20 import net.sourceforge.pmd.lang.rule.AbstractRuleViolationFactory;
21 import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
22
23
24
25
26
27 public class DummyLanguageModule extends BaseLanguageModule {
28
29 public static final String NAME = "Dummy";
30 public static final String TERSE_NAME = "dummy";
31
32 public DummyLanguageModule() {
33 super(NAME, null, TERSE_NAME, DummyRuleChainVisitor.class, "dummy");
34 addVersion("1.0", new Handler(), true);
35 addVersion("1.1", new Handler(), false);
36 addVersion("1.2", new Handler(), false);
37 addVersion("1.3", new Handler(), false);
38 addVersion("1.4", new Handler(), false);
39 addVersion("1.5", new Handler(), false);
40 addVersion("1.6", new Handler(), false);
41 addVersion("1.7", new Handler(), false);
42 addVersion("1.8", new Handler(), false);
43 }
44
45 public static class DummyRuleChainVisitor extends AbstractRuleChainVisitor {
46 @Override
47 protected void visit(Rule rule, Node node, RuleContext ctx) {
48 rule.apply(Arrays.asList(node), ctx);
49 }
50 @Override
51 protected void indexNodes(List<Node> nodes, RuleContext ctx) {
52 for (Node n : nodes) {
53 indexNode(n);
54 List<Node> childs = new ArrayList<Node>();
55 for (int i = 0; i < n.jjtGetNumChildren(); i++) {
56 childs.add(n.jjtGetChild(i));
57 }
58 indexNodes(childs, ctx);
59 }
60 }
61 }
62
63 public static class Handler extends AbstractLanguageVersionHandler {
64 @Override
65 public RuleViolationFactory getRuleViolationFactory() {
66 return new RuleViolationFactory();
67 }
68
69 @Override
70 public Parser getParser(ParserOptions parserOptions) {
71 return new AbstractParser(parserOptions) {
72 @Override
73 public Node parse(String fileName, Reader source) throws ParseException {
74 DummyNode node = new DummyNode(1);
75 node.testingOnly__setBeginLine(1);
76 node.testingOnly__setBeginColumn(1);
77 node.setImage("Foo");
78 return node;
79 }
80 @Override
81 public Map<Integer, String> getSuppressMap() {
82 return Collections.emptyMap();
83 }
84 @Override
85 public boolean canParse() {
86 return true;
87 }
88 @Override
89 protected TokenManager createTokenManager(Reader source) {
90 return null;
91 }
92 };
93 }
94 }
95
96 public static class RuleViolationFactory extends AbstractRuleViolationFactory {
97 @Override
98 protected RuleViolation createRuleViolation(Rule rule, RuleContext ruleContext, Node node, String message) {
99 return createRuleViolation(rule, ruleContext, node, message, 0, 0);
100 }
101 @Override
102 protected RuleViolation createRuleViolation(Rule rule, RuleContext ruleContext, Node node, String message,
103 int beginLine, int endLine) {
104 ParametricRuleViolation<Node> rv = new ParametricRuleViolation<Node>(rule, ruleContext, node, message) {
105 {
106 this.packageName = "foo";
107 }
108 };
109 rv.setLines(beginLine, endLine);
110 return rv;
111 }
112 }
113 }