2014-03-05 1 views
2

XPath를 사용하여 몇 가지 문제가 있습니다. (나중에 내가 xaram 패턴에 대한 규칙에 SonarQube를 추가하여 자기 자신의 규칙을 만들 수 있습니다.하지만 SonarQube는 아직 필요하지 않습니다.)XPath에서 주석 및/또는 TRIVIA 파일에 액세스

프로젝트를 분석하고 예외를 throw하는 규칙을 만들고 싶습니다. 내 Java 프로젝트 (예 : myXPathTry.java)의 주석 (예 : "ERROR")에 특별한 내용이 기록되었습니다.

내 모든 표현을이 SSLR Toolkit으로 테스트하고 있습니다. 다운로드하여 실행하십시오.

사용법은 간단합니다. 왼쪽에 코드를 추가하고 상자 아래의 "소스 코드 파싱"을 클릭하십시오. 그런 다음 하단에있는 상자에 xpath 규칙을 추가하고 마지막으로 "XPath 평가"를 클릭하십시오. 결과를 표시해야합니다. 오른쪽 상자 위의 xml 단추를 클릭하면 소스 코드에 대해 자동으로 작성된 XML을 볼 수 있습니다.

내 문제는입니다 : 모든 주석은 "액세스 할 수없는"TRIVIA 경로에 저장됩니다 (AST에서 볼 수 있듯이). 나는 다른 모든 것들에 접근 할 수 있고 값과 매개 변수를 대조 할 수 있지만이 TRIVIA 물건은 아닙니다. (JavaCode, AST (Abstract Syntax Tree) 및 XML이 아래에 추가되었습니다.)

의견에 어떻게 접근 할 수 있는지 알고 계십니까? 도움 주셔서 감사합니다. :)

Already tested: 
neighter //*/comment() , nor //*/TOKEN/TRIVIA does have any effect. 
//*/TOKEN works and has affect, but does not contain the needed information. 

자바 코드 :

public class MyXPathTry{ 
    public static void main(String[] args){ 
    System.out.println("Just to have some code"); 
     //This is a comment 
     /* This is a second comment */ 
     /* This is a second comment with ERROR*/ 
    } 
} 
대서양 표준시 파란색 선 (RWING, 이미지가 뚜렷한 아닌 경우) 내가 왼쪽에 어떤 코멘트를 클릭 한 후 selectet이었다에서

AST-Image

툴킷의 아래쪽 경로는 기본적으로 opend되지 않았습니다. 나는 RWING과 TOKEN 하위 폴더를 열었습니다. TRIVIA 파일을 통해 무엇을 의미하는지 보여줍니다.)

Toolkit Auto-Created XML: 
<compilationUnit tokenValue="public" tokenLine="1" tokenColumn="0"> 
    <typeDeclaration tokenValue="public" tokenLine="1" tokenColumn="0"> 
    <modifier tokenValue="public" tokenLine="1" tokenColumn="0"> 
     <PUBLIC tokenValue="public" tokenLine="1" tokenColumn="0"> 
     <TOKEN tokenValue="public" tokenLine="1" tokenColumn="0"/> 
     </PUBLIC> 
    </modifier> 
    <classDeclaration tokenValue="class" tokenLine="1" tokenColumn="7"> 
     <CLASS tokenValue="class" tokenLine="1" tokenColumn="7"> 
     <TOKEN tokenValue="class" tokenLine="1" tokenColumn="7"/> 
     </CLASS> 
     <IDENTIFIER tokenValue="MyXPathTry" tokenLine="1" tokenColumn="13"> 
     <TOKEN tokenValue="MyXPathTry" tokenLine="1" tokenColumn="13"/> 
     </IDENTIFIER> 
     <classBody tokenValue="{" tokenLine="1" tokenColumn="23"> 
     <LWING tokenValue="{" tokenLine="1" tokenColumn="23"> 
      <TOKEN tokenValue="{" tokenLine="1" tokenColumn="23"/> 
     </LWING> 
     <classBodyDeclaration tokenValue="public" tokenLine="2" tokenColumn="4"> 
      <modifier tokenValue="public" tokenLine="2" tokenColumn="4"> 
      <PUBLIC tokenValue="public" tokenLine="2" tokenColumn="4"> 
       <TOKEN tokenValue="public" tokenLine="2" tokenColumn="4"/> 
      </PUBLIC> 
      </modifier> 
      <modifier tokenValue="static" tokenLine="2" tokenColumn="11"> 
      <STATIC tokenValue="static" tokenLine="2" tokenColumn="11"> 
       <TOKEN tokenValue="static" tokenLine="2" tokenColumn="11"/> 
      </STATIC> 
      </modifier> 
      <memberDecl tokenValue="void" tokenLine="2" tokenColumn="18"> 
      <VOID tokenValue="void" tokenLine="2" tokenColumn="18"> 
       <TOKEN tokenValue="void" tokenLine="2" tokenColumn="18"/> 
      </VOID> 
      <IDENTIFIER tokenValue="main" tokenLine="2" tokenColumn="23"> 
       <TOKEN tokenValue="main" tokenLine="2" tokenColumn="23"/> 
      </IDENTIFIER> 
      <voidMethodDeclaratorRest tokenValue="(" tokenLine="2" tokenColumn="27"> 
       <formalParameters tokenValue="(" tokenLine="2" tokenColumn="27"> 
       <LPAR tokenValue="(" tokenLine="2" tokenColumn="27"> 
        <TOKEN tokenValue="(" tokenLine="2" tokenColumn="27"/> 
       </LPAR> 
       <formalParameterDecls tokenValue="String" tokenLine="2" tokenColumn="28"> 
        <type tokenValue="String" tokenLine="2" tokenColumn="28"> 
        <classType tokenValue="String" tokenLine="2" tokenColumn="28"> 
         <IDENTIFIER tokenValue="String" tokenLine="2" tokenColumn="28"> 
         <TOKEN tokenValue="String" tokenLine="2" tokenColumn="28"/> 
         </IDENTIFIER> 
        </classType> 
        <dim tokenValue="[" tokenLine="2" tokenColumn="34"> 
         <LBRK tokenValue="[" tokenLine="2" tokenColumn="34"> 
         <TOKEN tokenValue="[" tokenLine="2" tokenColumn="34"/> 
         </LBRK> 
         <RBRK tokenValue="]" tokenLine="2" tokenColumn="35"> 
         <TOKEN tokenValue="]" tokenLine="2" tokenColumn="35"/> 
         </RBRK> 
        </dim> 
        </type> 
        <formalParametersDeclsRest tokenValue="args" tokenLine="2" tokenColumn="37"> 
        <variableDeclaratorId tokenValue="args" tokenLine="2" tokenColumn="37"> 
         <IDENTIFIER tokenValue="args" tokenLine="2" tokenColumn="37"> 
         <TOKEN tokenValue="args" tokenLine="2" tokenColumn="37"/> 
         </IDENTIFIER> 
        </variableDeclaratorId> 
        </formalParametersDeclsRest> 
       </formalParameterDecls> 
       <RPAR tokenValue=")" tokenLine="2" tokenColumn="41"> 
        <TOKEN tokenValue=")" tokenLine="2" tokenColumn="41"/> 
       </RPAR> 
       </formalParameters> 
       <methodBody tokenValue="{" tokenLine="2" tokenColumn="42"> 
       <block tokenValue="{" tokenLine="2" tokenColumn="42"> 
        <LWING tokenValue="{" tokenLine="2" tokenColumn="42"> 
        <TOKEN tokenValue="{" tokenLine="2" tokenColumn="42"/> 
        </LWING> 
        <blockStatements tokenValue="System" tokenLine="3" tokenColumn="1"> 
        <blockStatement tokenValue="System" tokenLine="3" tokenColumn="1"> 
         <statement tokenValue="System" tokenLine="3" tokenColumn="1"> 
         <expressionStatement tokenValue="System" tokenLine="3" tokenColumn="1"> 
          <statementExpression tokenValue="System" tokenLine="3" tokenColumn="1"> 
          <expression tokenValue="System" tokenLine="3" tokenColumn="1"> 
           <primary tokenValue="System" tokenLine="3" tokenColumn="1"> 
           <qualifiedIdentifier tokenValue="System" tokenLine="3" tokenColumn="1"> 
            <IDENTIFIER tokenValue="System" tokenLine="3" tokenColumn="1"> 
            <TOKEN tokenValue="System" tokenLine="3" tokenColumn="1"/> 
            </IDENTIFIER> 
            <DOT tokenValue="." tokenLine="3" tokenColumn="7"> 
            <TOKEN tokenValue="." tokenLine="3" tokenColumn="7"/> 
            </DOT> 
            <IDENTIFIER tokenValue="out" tokenLine="3" tokenColumn="8"> 
            <TOKEN tokenValue="out" tokenLine="3" tokenColumn="8"/> 
            </IDENTIFIER> 
            <DOT tokenValue="." tokenLine="3" tokenColumn="11"> 
            <TOKEN tokenValue="." tokenLine="3" tokenColumn="11"/> 
            </DOT> 
            <IDENTIFIER tokenValue="println" tokenLine="3" tokenColumn="12"> 
            <TOKEN tokenValue="println" tokenLine="3" tokenColumn="12"/> 
            </IDENTIFIER> 
           </qualifiedIdentifier> 
           <identifierSuffix tokenValue="(" tokenLine="3" tokenColumn="19"> 
            <arguments tokenValue="(" tokenLine="3" tokenColumn="19"> 
            <LPAR tokenValue="(" tokenLine="3" tokenColumn="19"> 
             <TOKEN tokenValue="(" tokenLine="3" tokenColumn="19"/> 
            </LPAR> 
            <expression tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"> 
             <primary tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"> 
             <literal tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"> 
              <LITERAL tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"> 
              <TOKEN tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"/> 
              </LITERAL> 
             </literal> 
             </primary> 
            </expression> 
            <RPAR tokenValue=")" tokenLine="3" tokenColumn="44"> 
             <TOKEN tokenValue=")" tokenLine="3" tokenColumn="44"/> 
            </RPAR> 
            </arguments> 
           </identifierSuffix> 
           </primary> 
          </expression> 
          </statementExpression> 
          <SEMI tokenValue=";" tokenLine="3" tokenColumn="45"> 
          <TOKEN tokenValue=";" tokenLine="3" tokenColumn="45"/> 
          </SEMI> 
         </expressionStatement> 
         </statement> 
        </blockStatement> 
        </blockStatements> 
        <RWING tokenValue="}" tokenLine="7" tokenColumn="4"> 
        <TOKEN tokenValue="}" tokenLine="7" tokenColumn="4"/> 
        </RWING> 
       </block> 
       </methodBody> 
      </voidMethodDeclaratorRest> 
      </memberDecl> 
     </classBodyDeclaration> 
     <RWING tokenValue="}" tokenLine="8" tokenColumn="0"> 
      <TOKEN tokenValue="}" tokenLine="8" tokenColumn="0"/> 
     </RWING> 
     </classBody> 
    </classDeclaration> 
    </typeDeclaration> 
    <EOF tokenValue="" tokenLine="8" tokenColumn="1"/> 
</compilationUnit> 

.

+0

이것은 'sonarqube'관련 질문입니다. 왜 태그를 삭제 했습니까? – Tomalak

+0

내가 SonarQube에 어떤 영향을 미치는지 확신 할 수 없었기 때문에. Toolkit은 SonarQube에 대해 말하고 있지만, 당신은 SonarQube없이 사용할 수 있습니다. 툴킷에서 작업하고 있다면, 나중에 SonarQube (V.3.7)에서도 작업 할 것입니다. SonarQube는 지금까지 xpath 표현에 영향을 미치지 않습니다. 하지만 SonarQube 태그를 다시 추가합니다. – Krummy

+0

우리가 본 XML의 주석에 대한 언급과 닮은 것을 보지 못했습니다. 거기에 없으면 XPath에서 액세스 할 수 없습니다. – keshlam

답변

2

이것은 불가능합니다. 사용자 정보를 위해 XPath에서 사용자 지정 규칙을 작성하는 기능이 Java로 작성되는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다! 하지만 나는 이렇게 말해야한다 : 나는 자바에서 내 자신의 xpath 규칙을 작성하는 데 경험이 없다. 그리고 의견을 입력하는 문제는 나에게도 동일합니다. 나를위한 가장 쉬운 방법은 다음과 같습니다. 소나에서 XPath와 같은 방식으로 주석을 무시하십시오. D 도움을 주셔서 감사합니다! – Krummy