2010-07-31 4 views
2

내 요구 사항은 Java 파일을 구문 분석하고 특정 인터페이스를 구현하는 클래스 또는 인터페이스를 찾는 것입니다. 따라서 PMD에서 사용자 지정 규칙을 구현하는 것으로 시작했습니다. XPath 표현식을 작성하여 & 클래스의 인터페이스를 검색 할 수 있었지만 XPath 규칙에 검색 할 인터페이스 이름을 전달하는 올바른 방법을 알 수 없었습니다. 한 가지 방법은 PMD를 호출하기 전에 속성을 정의하고 xml 파일을 업데이트하는 것이 었습니다.PMD가있는 사용자 지정 규칙 - 런타임에 규칙에 값 전달

<rule name="Implement or extend an interface" 
    message="Implement or extend an interface" 
    class="net.sourceforge.pmd.rules.XPathRule"> 
<description> 
This rule will help us to find out all the classes/interface which implement a particular interface 
</description> 
<properties> 
    <property name="xpath"> 
     <value> 
     <![CDATA[ 
     //ImplementsList/ClassOrInterfaceType[@Image=$interfaceName] | 
     //ExtendsList/ClassOrInterfaceType[@Image=$interfaceName] 
     ]]> 
     </value> 
    </property> 
    <property name="interfaceName"> 
     <value>Should be set at run time</value> 
    </property> 
</properties> 
<example> 

위의 접근 방식의 문제는 XML을 공유 할 것이기 때문에 PMD 스레드에서 호출 할 수 없다는 것입니다.

런타임에 값이 규칙에 전달되는 PMD와 관련하여 이러한 문제에 직면 한 사람이 있습니까?

+0

해결책을 찾았습니다. PMD를 사용하지는 않지만. Checkstyle은 사용자 정의 규칙을 정의하고이 규칙에 런타임 값을 전달할 수있는 또 다른 정적 분석 도구입니다. – Amit

답변

1

XPath 규칙에서 다른 값을 사용하려면 각 값에 대해 하나씩 규칙 사본을 여러 개 가져야합니다. PMD를 사용하는 대안은 Java 규칙을 사용하는 것입니다. 심지어 XPath를 호출 할 수도 있습니다. 차이점은 Java는 런타임이므로 나중에 값을 가져 오거나 값 집합을 반복 할 수 있다는 점입니다.

관련 문제