누가 해보신분있으면 좀 링크라도 걸어주세요 ㅠㅠ
pmd에서 RuleSet을 사용자 정의로 만드는 방법에는 XPath 방법과 javaRuleSet을 상속받아서 구현하는 법이 있습니다.(단순이 ruleSet을 분류하여 커스터마이징 하는것말고요)
저는 아래와 같이 했는데 xml파일을 인식못하는건지 java를 인식못하는건지 어렵네요 우선은 기록해두고
나중에 해결이 되면 다시금 올리려고요~!
1. ruleset파일
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ruleset xmlns="http://pmd.sf.net/ruleset/1.0.0" name="pmd-ruleset-v3-3.2.3over"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>PMD Plugin preferences rule set</description>
<rule ref="rulesets/basic.xml/EmptyCatchBlock" />
<rule name="WhileLoopsMustUseBracesRule"
message="Avoid using 'while' statements without curly braces"
class="WhileLoopsMustUseBracesRule.java">
<description>
Avoid using 'while' statements without using curly braces
</description>
<priority>3</priority>
<ruleset xmlns="http://pmd.sf.net/ruleset/1.0.0" name="pmd-ruleset-v3-3.2.3over"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd">
<description>PMD Plugin preferences rule set</description>
<rule ref="rulesets/basic.xml/EmptyCatchBlock" />
<rule name="WhileLoopsMustUseBracesRule"
message="Avoid using 'while' statements without curly braces"
class="WhileLoopsMustUseBracesRule.java">
<description>
Avoid using 'while' statements without using curly braces
</description>
<priority>3</priority>
<example>
<![CDATA[
public void doSomething() {
while (true)
x++;
}
]]>
</example>
</rule>
</ruleset>
2. java파일
package com;
import net.sourceforge.pmd.AbstractRule;
import net.sourceforge.pmd.ast.ASTBlock;
import net.sourceforge.pmd.ast.ASTWhileStatement;
import net.sourceforge.pmd.ast.SimpleNode;
public class WhileLoopsMustUseBracesRule extends AbstractRule {
public Object visit(ASTWhileStatement node, Object data) {
SimpleNode firstStmt = (SimpleNode)node.jjtGetChild(1);
if (!hasBlockAsFirstChild(firstStmt)) {
addViolation(data, node);
}
return super.visit(node,data);
}
private boolean hasBlockAsFirstChild(SimpleNode node) {
return (node.jjtGetNumChildren() != 0 && (node.jjtGetChild(0) instanceof ASTBlock));
}
}
import net.sourceforge.pmd.AbstractRule;
import net.sourceforge.pmd.ast.ASTBlock;
import net.sourceforge.pmd.ast.ASTWhileStatement;
import net.sourceforge.pmd.ast.SimpleNode;
public class WhileLoopsMustUseBracesRule extends AbstractRule {
public Object visit(ASTWhileStatement node, Object data) {
SimpleNode firstStmt = (SimpleNode)node.jjtGetChild(1);
if (!hasBlockAsFirstChild(firstStmt)) {
addViolation(data, node);
}
return super.visit(node,data);
}
private boolean hasBlockAsFirstChild(SimpleNode node) {
return (node.jjtGetNumChildren() != 0 && (node.jjtGetChild(0) instanceof ASTBlock));
}
}
'2014년 > JAVA' 카테고리의 다른 글
[java] Runtime waitfor (0) | 2015.05.20 |
---|---|
[eclipse] jad plugin (0) | 2013.08.07 |
VisualVM 으로 모니터링 하기 (0) | 2013.05.10 |
[checkStyle] Eclipse 적용 (0) | 2013.04.23 |
[javadoc] javadoc 시 한글깨짐 (0) | 2013.04.18 |