2011-07-06 76 views
0

關於如何安裝和運行自定義checkstyle,我有另一個StackOverflow question。我已經學會了如何做到這一點,並且我會很快更新這個答案並提供詳細的說明。現在我無法定製我的支票。以下是我的代碼。問題是我希望看到完全合格的包是一個字符串(例如com.amir.foo) - 但是當我運行getText()或只是toString()時,我得到一些模糊的結果([checkstyle] package set:ANNOTATIONS)。有誰知道如何使用它來達到預期的效果?創建自定義Checkstyle

import com.puppycrawl.tools.checkstyle.api.*; 

public class MyCheck extends Check 
{ 

    FullIdent packageDeclaration; 

    public int[] getDefaultTokens() { 
     return new int[]{TokenTypes.PACKAGE_DEF}; 
    } 

    public void visitToken(DetailAST ast) 
    { 

     switch(ast.getType()) { 
      case TokenTypes.PACKAGE_DEF: 
       System.out.println("got package!"); 
       visitPackage(ast); 
       break; 
      default: 
       System.out.println("naughty!"); 
     } 

    } 

    private void visitPackage(DetailAST pack) { 
     packageDeclaration = FullIdent.createFullIdentBelow(pack); 
     System.out.println("package set to : " +packageDeclaration); 
    } 
} 

回答

2

你想找的是使用的檢查程序包的名字,你應該使用類似於下面的代碼:

@Override 
public void visitToken(DetailAST aAST) 
{ 
    final DetailAST nameAST = aAST.getLastChild().getPreviousSibling(); 
    final FullIdent full = FullIdent.createFullIdent(nameAST); 
    final String package = full.getText(); 


    // do some fancy stuff with package name 
} 

欲瞭解更多詳細信息,請參閱PackageNameCheck的源代碼: http://checkstyle.hg.sourceforge.net/hgweb/checkstyle/checkstyle/file/cd352660c53a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/naming/PackageNameCheck.java

+0

感謝您的快速回復。你能解釋一下這段代碼在做什麼嗎?爲什麼我們要getLastChild然後getPreviousSibling? –

+0

請注意,由於您在代碼中使用了package關鍵字,因此此代碼無法編譯。 –