1 package net.sourceforge.pmd; 2 3 import java.text.MessageFormat ; 4 import java.util.Properties ; 5 6 import net.sourceforge.pmd.ast.Node; 7 import net.sourceforge.pmd.ast.SimpleNode; 8 9 15 public abstract class CommonAbstractRule implements Rule { 16 17 protected String name = getClass().getName(); 18 protected Properties properties = new Properties (); 19 protected String message; 20 protected String description; 21 protected String example; 22 protected String ruleSetName; 23 protected boolean include; 24 protected boolean usesDFA; 25 protected boolean usesTypeResolution; 26 protected int priority = LOWEST_PRIORITY; 27 protected String externalInfoUrl; 28 29 public String getRuleSetName() { 30 return ruleSetName; 31 } 32 33 public void setRuleSetName(String ruleSetName) { 34 this.ruleSetName = ruleSetName; 35 } 36 37 public String getDescription() { 38 return description; 39 } 40 41 public void setDescription(String description) { 42 this.description = description; 43 } 44 45 public String getExample() { 46 return example; 47 } 48 49 public void setExample(String example) { 50 this.example = example; 51 } 52 53 public boolean hasProperty(String name) { 54 return properties.containsKey(name); 55 } 56 57 public void addProperty(String name, String value) { 58 properties.setProperty(name, value); 59 } 60 61 public void addProperties(Properties properties) { 62 this.properties.putAll(properties); 63 } 64 65 public double getDoubleProperty(String name) { 66 return Double.parseDouble(properties.getProperty(name)); 67 } 68 69 public int getIntProperty(String name) { 70 return Integer.parseInt(properties.getProperty(name)); 71 } 72 73 public boolean getBooleanProperty(String name) { 74 return Boolean.valueOf(properties.getProperty(name)).booleanValue(); 75 } 76 77 public String getStringProperty(String name) { 78 return properties.getProperty(name); 79 } 80 81 public String getName() { 82 return name; 83 } 84 85 public void setName(String name) { 86 this.name = name; 87 } 88 89 public String getMessage() { 90 return message; 91 } 92 93 public void setMessage(String message) { 94 this.message = message; 95 } 96 97 public String getExternalInfoUrl() { 98 return externalInfoUrl; 99 } 100 101 public void setExternalInfoUrl(String url) { 102 this.externalInfoUrl = url; 103 } 104 105 112 public boolean equals(Object o) { 113 if (o == null) { 114 return false; } 116 117 if (this == o) { 118 return true; } 120 121 Rule rule = null; 122 boolean equality = this.getClass().getName().equals(o.getClass().getName()); 123 124 if (equality) { 125 rule = (Rule) o; 126 equality = this.getName().equals(rule.getName()) 127 && this.getPriority() == rule.getPriority() 128 && this.getProperties().equals(rule.getProperties()); 129 } 130 131 return equality; 132 } 133 134 137 public int hashCode() { 138 String s = this.getClass().getName() + this.getName() + this.getPriority() + this.getProperties().toString(); 139 return s.hashCode(); 140 } 141 142 143 public Properties getProperties() { 144 return properties; 145 } 146 147 public boolean include() { 148 return include; 149 } 150 151 public void setInclude(boolean include) { 152 this.include = include; 153 } 154 155 public int getPriority() { 156 return priority; 157 } 158 159 public String getPriorityName() { 160 return PRIORITIES[getPriority() - 1]; 161 } 162 163 public void setPriority(int priority) { 164 this.priority = priority; 165 } 166 167 public void setUsesDFA() { 168 this.usesDFA = true; 169 } 170 171 public boolean usesDFA() { 172 return this.usesDFA; 173 } 174 175 public void setUsesTypeResolution() { 176 this.usesTypeResolution= true; 177 } 178 179 public boolean usesTypeResolution() { 180 return this.usesTypeResolution; 181 } 182 183 184 190 protected final void addViolation(Object data, SimpleNode node) { 191 RuleContext ctx = (RuleContext) data; 192 ctx.getReport().addRuleViolation(new RuleViolation(this, ctx, node)); 193 } 194 195 202 protected final void addViolationWithMessage(Object data, SimpleNode node, String msg) { 203 RuleContext ctx = (RuleContext) data; 204 ctx.getReport().addRuleViolation(new RuleViolation(this, ctx, node, msg)); 205 } 206 207 214 protected final void addViolation(Object data, SimpleNode node, String embed) { 215 RuleContext ctx = (RuleContext) data; 216 ctx.getReport().addRuleViolation(new RuleViolation(this, ctx, node, MessageFormat.format(getMessage(), new Object []{embed}))); 217 } 218 219 226 protected final void addViolation(Object data, Node node, Object [] args) { 227 RuleContext ctx = (RuleContext) data; 228 ctx.getReport().addRuleViolation(new RuleViolation(this, ctx, (SimpleNode) node, MessageFormat.format(getMessage(), args))); 229 } 230 231 public PropertyDescriptor propertyDescriptorFor(String name) { 232 return null; } 234 } 235 | Popular Tags |