2014-03-05 59 views
2

我遇到了一些麻煩,使用XPath。 (後來我想在SonarQube上添加我的表達式來規則xpath模式,所以我可以在那裏創建我自己的規則,但是SonarQube不是必需的)訪問XPath中的註釋和/或TRIVIA文件

我想創建一個規則,如果分析了項目並拋出異常在我的Java項目(例如myXPathTry.java)的評論(例如「錯誤」)中寫了一些特別的東西。

我正在測試我的這個SSLR Toolkit的所有表情。只需要下載並執行它。

用法很簡單:在左側添加您的代碼,點擊框旁邊的「解析源代碼」。然後在底部的框中​​添加您的xpath規則,最後點擊「評估XPath」。結果應該被標記。如果您單擊右側框上方的xml按鈕,您也可以查看自動創建的源代碼XML。

我的問題是:所有的註釋都保存在「無法訪問」的TRIVIA路徑中(正如您在AST中所見)。我可以訪問所有其他的東西,並檢查值和參數,但不是這個TRIVIA的東西。 (JavaCode,AST(抽象語法樹)和XML添加到下面)。

你知道我如何獲得評論的方式嗎? 感謝您的幫助! :)

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

Java代碼:

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*/ 
    } 
} 

AST-Image

在AST藍線(RWING,如果圖像是不visable)是selectet後,我在左邊任何評論點擊的工具包。向下的路徑默認情況下不是打開的。我打開RWING和令牌子由我自己,只是告訴你我是什麼意思瑣事文件)

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。該工具包提供了有關SonarQube的一些信息,但您可以不使用它。如果它在工具包中工作,它也將在以後的SonarQube(V.3.7)中使用。 SonarQube目前還沒有影響這個xpath表達式,我想。但是我添加了SonarQube標籤。 – Krummy

+0

我沒有看到任何類似於您向我們展示的XML中對這些評論的引用。如果它不在那裏,XPath將無法訪問它。 – keshlam

回答

2

這是不可能的。爲了您的信息,在XPath中編寫自定義規則的能力將被放棄,以便用Java編寫它們。

+0

感謝您的回答! 但我必須說:我沒有經驗在Java中編寫自己的xpath規則。輸入評論的問題對我來說也是一樣的。對我來說最簡單的方法是:以同樣的方式忽略Sonar中的XPath:D 感謝您的幫助! – Krummy