1. 程式人生 > >MyEclipse整合PMD程式碼檢測外掛自定義規則配置檔案

MyEclipse整合PMD程式碼檢測外掛自定義規則配置檔案

把我今天最新更新的MyEclipse2014整合PMD程式碼檢測外掛自定義規則配置檔案JAVA版釋出出來吧,方便自己以後回顧的同時,也看看能不能幫到有這方面需求的小夥伴們。 檔名:cplatform_pmd5.2.3_rules.xml <?xml version="1.0" encoding="UTF-8"?> <ruleset name="Favorites" xmlns="http://pmd.sf.net/ruleset/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> <description> 對應 PMD:V5.2.3 規則版本:V1.1(2015-01-13) 推薦指數:3、4、5級的規則 修改規則:EmptyCatchBlock、EmptyIfStmt、EmptyWhileStmt、EmptyTryBlock、EmptyFinallyBlock、EmptySwitchStatements、EmptySynchronizedBlock、 EmptyStaticInitializer、EmptyStatementNotInLoop等規則轉移到rulesets/java/empty.xml中 UnnecessaryFinalModifier、UselessOperationOnImmutable等規則轉移到rulesets/java/unnecessary.xml中 增加規則: 移除規則:UseSingleton 對應 PMD:V4.2.6 推薦指數:3、4、5級的規則 修改規則: 增加規則: 移除規則: </description> <!--====================Basic Rules begin(共33個)======================--> <!--不允許出現空的catch塊,避免遮蔽異常,不處理或不報告異常。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyCatchBlock"> <properties> <property name="allowCommentedBlocks" value="false"/> </properties> </rule> <!--不允許有空if語句塊(或空else塊)。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyIfStmt"/> <!--不允許有空while迴圈塊。注意:不包括do迴圈。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyWhileStmt"/> <!--不允許有空try塊。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyTryBlock"/> <!--不允許有空finally塊。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyFinallyBlock"/> <!--不允許有空switch塊。與這個規則重複:rulesets/java/design.xml/SwitchStmtsShouldHaveDefault、MissingBreakInSwitch。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptySwitchStatements"/> <!--避免混亂的迴圈變數賦值(避免在內迴圈裡修改外迴圈變數)。與這個規則有點重複:rulesets/java/controversial.xml/DataflowAnomalyAnalysis。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/JumbledIncrementer"/> <!--簡單的for迴圈可以用while迴圈取代。(FindBugs不檢查,注,FindBugs能發現死迴圈)--> <!--rule ref="rulesets/java/basic.xml/ForLoopShouldBeWhileLoop"/--> <!--當基本型資料轉換成String時,避免不必要的臨時物件。(FindBugs檢查)--> <!--rule ref="rulesets/java/basic.xml/UnnecessaryConversionTemporary"/--> <!--equals和hashcode同時定義。(FindBugs檢查)--> <rule ref="rulesets/java/basic.xml/OverrideBothEqualsAndHashcode"/> <!--doublecheck問題。(FindBugs檢查)--> <!--rule ref="rulesets/java/basic.xml/DoubleCheckedLocking"/--> <!--禁止在finally塊裡return,避免遮蔽異常。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/ReturnFromFinallyBlock"/> <!--避免空的同步塊。(FindBugs檢查)--> <rule ref="rulesets/java/empty.xml/EmptySynchronizedBlock"/> <!--方法返回值void,避免不必要的return。(FindBugs不檢查)--> <!--rule ref="rulesets/java/basic.xml/UnnecessaryReturn"/--> <!--空的static初始化。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyStaticInitializer"/> <!--if語句的條件始終是true或false。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/UnconditionalIfStatement"/> <!--出現了空語句(就一個分號),如果在迴圈裡則可以。(FindBugs不檢查)--> <rule ref="rulesets/java/empty.xml/EmptyStatementNotInLoop"/> <!--避免例項化Boolean物件,而應用常量Boolean.TRUE, Boolean.FALSE。(FindBugs只檢查構造方法生成物件的情況,不檢查valueOf)--> <rule ref="rulesets/java/basic.xml/BooleanInstantiation"/> <!--當一個類定義成final後,它所有的方法自動final。(FindBugs不檢查)--> <rule ref="rulesets/java/unnecessary.xml/UnnecessaryFinalModifier"/> <!--內嵌的if語句能夠和外層的if語句合併成一個if語句。(FindBugs不檢查)--> <!--rule ref="rulesets/java/basic.xml/CollapsibleIfStatements"/--> <!--被覆蓋的方法僅僅呼叫了基類的方法。(FindBugs檢查)--> <!--rule ref="rulesets/java/basic.xml/UselessOverridingMethod"/--> <!--Collection.toArray呼叫轉換成陣列,應主動傳一個明確型別的陣列物件,否則執行時會拋ClassCastException異常。相似規則:rulesets/java/design.xml/OptimizableToArrayCall。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/ClassCastExceptionWithToArray"/> <!--new BigDecimal建議用String引數的構造方法,而不是十進位制小數常量(整數除外)。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"/> <!--不可變物件(如BigDecimal、BigInteger)上的操作結果被忽略。(FindBugs檢查)--> <rule ref="rulesets/java/unnecessary.xml/UselessOperationOnImmutable"/> <!--空指標判斷放錯了位置。要麼之前已報空指標,要麼此處永遠不可能是空指標。(FindBugs檢查)--> <rule ref="rulesets/java/basic.xml/MisplacedNullCheck"/> <!--在判斷了物件是否是空指標後,後面緊接著呼叫該物件的equals方法,而不是將物件作為另一個物件的equals引數。(FindBugs不檢查)--> <!--rule ref="rulesets/java/basic.xml/UnusedNullCheckInEquals"/--> <!--不建議用ThreadGroup,因為它的方法不是執行緒安全的。(FindBugs不檢查)--> <!--rule ref="rulesets/java/basic.xml/AvoidThreadGroup"/--> <!--應該用&&取代||或反之。(FindBugs檢查)--> <rule ref="rulesets/java/basic.xml/BrokenNullCheck"/> <!--不要再建立已經有的物件(BigDecimal.ZERO, BigDecimal.ONE, BigDecimal.TEN)。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/BigIntegerInstantiation"/> <!--避免使用八進位制值。(FindBugs不檢查)--> <!--rule ref="rulesets/java/basic.xml/AvoidUsingOctalValues"/--> <!--避免硬編碼IPv4和IPv6,以免在某些情況下變的不可能佈署。(FindBugs不檢查)--> <!-- <rule ref="rulesets/java/basic.xml/AvoidUsingHardCodedIP"> <properties> <property name="pattern" value=""/> </properties> </rule> --> <!--對ResultSet的方法(next,previous,first,last)呼叫結果要進行是否是真的判斷。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/CheckResultSet"/> <!--避免多個一元操作符,要麼是一個錯誤,要麼易引起混淆。(FindBugs不檢查)--> <rule ref="rulesets/java/basic.xml/AvoidMultipleUnaryOperators"/> <!--====================Basic Rules end======================--> <!--====================braces Rules begin(共4個)======================--> <!--避免使用if語句時不使用大括號--> <rule ref="rulesets/java/braces.xml/IfStmtsMustUseBraces"/> <!--避免使用while迴圈時不使用大括號--> <rule ref="rulesets/java/braces.xml/WhileLoopsMustUseBraces"/> <!--避免使用if-else語句時不使用大括號--> <rule ref="rulesets/java/braces.xml/IfElseStmtsMustUseBraces"/> <!--避免使用for迴圈時不使用大括號--> <rule ref="rulesets/java/braces.xml/ForLoopsMustUseBraces"/> <!--====================braces Rules end======================--> <!--====================clone Rules begin(共3個)======================--> <!--適當的克隆實現:物件的clone()方法中應該包含super.clone()實現--> <rule ref="rulesets/java/clone.xml/ProperCloneImplementation"/> <!--克隆方法要丟擲不支援克隆異常:clone()方法應該丟擲CloneNotSupportedException--> <rule ref="rulesets/java/clone.xml/CloneThrowsCloneNotSupportedException"/> <!--克隆方法必須實現Cloneable介面:如果類實現Cloneable介面,clone()方法應該被實現為一個final的方法並且只丟擲CloneNotSupportedException的異常--> <rule ref="rulesets/java/clone.xml/CloneMethodMustImplementCloneable"/> <!--====================clone Rules end======================--> <!--====================codesize Rules begin(共11個)======================--> <!--n條路徑複雜度:NPath複雜度是一個方法中各種可能的執行路徑總和,一般把200作為考慮降低複雜度的臨界點--> <!-- <rule ref="rulesets/java/codesize.xml/NPathComplexity"> <properties> <property name="minimum" value="200"/> </properties> </rule> --> <!--方法太長:這種違例就是方法中做了太多事,通過建立輔助方法或移除拷貝/貼上的程式碼試著減小方法的規模--> <!-- <rule ref="rulesets/java/codesize.xml/ExcessiveMethodLength"> <properties> <property name="minimum" value="100"/> </properties> </rule> --> <!--太多的引數:過長的引數列表表明應該建立一個新的物件包裝眾多的引數值,就是把引數組織到一起--> <rule ref="rulesets/java/codesize.xml/ExcessiveParameterList"> <properties> <property name="minimum" value="6"/> </properties> </rule> <!--太長的類:太長的類檔案表明類試圖做太多的事,試著分解它,減少到易於管理的規模--> <!-- <rule ref="rulesets/java/codesize.xml/ExcessiveClassLength"> <properties> <property name="minimum" value="1000"/> </properties> </rule> --> <!--秩複雜性:由if,while,for,case labels等決策點確定的複雜度,1-4是低複雜度,5-7為中,8到10是高複雜度,11以上是非常高--> <!-- <rule ref="rulesets/java/codesize.xml/CyclomaticComplexity"> <properties> <property name="reportLevel" value="10"/> property name="showClassesComplexity" value="true"/> property name="showMethodsComplexity" value="true"/> </properties> </rule> --> <!--過多的公共成員:一個類中如果聲明瞭大量的公共方法和屬性表明類需要分解,因為想完全測試這個類需要大量的努力--> <!-- <rule ref="rulesets/java/codesize.xml/ExcessivePublicCount"> <properties> <property name="minimum" value="45"/> </properties> </rule> --> <!--太多的域:類包含太多域可以被重新設計為包含更少的域,可以通過將一些資訊組織為巢狀類。比如:一個類包含了city/state/zip域,可以用一個Address域組織這三個域--> <!-- <rule ref="rulesets/java/codesize.xml/TooManyFields"> <properties> <property name="maxfields" value="15"/> </properties> </rule> --> <!--NCSS方法程式碼計算:這個規則採用NCSS(非註釋程式碼塊)演算法計算給定的方法(不含構造方法)的程式碼行數。NCSS忽略程式碼中的註釋並且計算實際程式碼行數。用這種演算法,一行單獨的程式碼被計算為1. (也同時忽略空行)--> <!-- <rule ref="rulesets/java/codesize.xml/NcssMethodCount"> <properties> <property name="minimum" value="100"/> </properties> </rule> --> <!--NCSS類程式碼計算:這個規則採用NCSS(非註釋程式碼塊)演算法計算給定型別的程式碼行數。NCSS忽略程式碼中的註釋並且計算實際程式碼行數。用這種演算法,一行單獨的程式碼被計算為1.(也同時忽略空行)--> <!-- <rule ref="rulesets/java/codesize.xml/NcssTypeCount"> <properties> <property name="minimum" value="1500"/> </properties> </rule> --> <!--NCSS構造器程式碼計算:這個規則適用NCSS(非註釋程式碼塊)演算法計算給定的構造方法的程式碼行數。NCSS忽略程式碼中的註釋並且計算實際程式碼行數。用這種演算法,一行單獨的程式碼被計算為1.(也同時忽略空行)--> <!-- <rule ref="rulesets/java/codesize.xml/NcssConstructorCount"> <properties> <property name="minimum" value="100"/> </properties> </rule> --> <!--太多的方法:類中包含太多方法可能需要重構,以減低複雜度和獲取更加細粒度的物件--> <!-- <rule ref="rulesets/java/codesize.xml/TooManyMethods"> <properties> <property name="maxmethods" value="20"/> </properties> </rule> --> <!--====================codesize Rules end===============================--> <!--==============controversial Rules begin(共19個)====================--> <!--非必要的構造器:本規則檢查不必要的構造器,例如:只存在一個公共的,空方法體的,無參的構造器--> <rule ref="rulesets/java/controversial.xml/UnnecessaryConstructor"/> <!--Null賦值:將null賦值給變數(在宣告之外)常常是不好的形式。某些時候這種賦值表示程式設計師沒有想好程式碼的下一步該做什麼。--> <!--備註:當你需要把變數賦值為null提示垃圾收集器去進行垃圾收集時這是有用的,那麼請忽略這個規則--> <!--rule ref="rulesets/java/controversial.xml/NullAssignment"/--> <!--只有一個返回:一個方法應該有且只有一處返回點,且應該是方法的最後一條語句。--> <!--rule ref="rulesets/java/controversial.xml/OnlyOneReturn"/--> <!--無用的修飾符:在介面中定義的域自動為public static final的,方法自動是public abstract的,介面中巢狀的類或介面自動是public static的。由於歷史原因,上下文暗示的修飾符是被編譯器接受的,但是是多餘的。--> <!--rule ref="rulesets/java/controversial.xml/UnusedModifier"/--> <!--在操作中賦值:避免在操作中賦值;這會使程式碼複雜並且難以閱讀--> <!--rule ref="rulesets/java/controversial.xml/AssignmentInOperand"/--> <!--至少有一個構造器:每個類應該至少宣告一個構造器--> <!--rule ref="rulesets/java/controversial.xml/AtLeastOneConstructor"/--> <!--不要引入Sun包:避免從”sun.*”引入任何類,這些包不是輕便的而且可能更改--> <rule ref="rulesets/java/controversial.xml/DontImportSun"/> <!--令人迷惑的八進位制轉義序列:在字串字面量中出現令人迷惑的八進位制轉義序列--> <!--rule ref="rulesets/java/controversial.xml/SuspiciousOctalEscape"/--> <!--在構造器中呼叫super():在構造器中呼叫super()方法是很好的做法.如果沒有呼叫super(),但是呼叫了另外的構造器,那麼這個規則不會報告出來--> <!--rule ref="rulesets/java/controversial.xml/CallSuperInConstructor"/--> <!--不必要的圓括號:有時候表示式被包在一個不必要的圓括號中,使它們看起來像是一個函式呼叫--> <!--rule ref="rulesets/java/controversial.xml/UnnecessaryParentheses"/--> <!--預設的包:使用明確的範圍代替預設的包私有的級別--> <!--rule ref="rulesets/java/controversial.xml/DefaultPackage"/--> <!--布林轉換:使用按位轉換來轉換布林值-這是最快的方法--> <!--rule ref="rulesets/java/controversial.xml/BooleanInversion"/--> <!--資料流異常分析:資料流分析是跟蹤本地的變數定義與否及在資料流中不同路徑的變數引用。--> <!--由此可以發現多種問題:1.UR-異常:指向一個之前沒有定義的變數,這是bug且可導致錯誤2.DU-異常:一個剛剛定義的變數是未定義的。這些異常可能出現在普通的原始碼文字中3.DD-異常:一個剛剛定義的變數重新定義。這是不好的但並非一定是個bug。--> <!--注:這個規則實在有點繞,具體含義我也不是很透徹理解!--> <!-- <rule ref="rulesets/java/controversial.xml/DataflowAnomalyAnalysis"> <properties> <property name="maxviolations" value="100"/> <property name="maxpaths" value="1000"/> </properties> </rule> --> <!--避免Final型別的本地變數:避免使用final型別的本地變數,將它們轉為類域--> <!--rule ref="rulesets/java/controversial.xml/AvoidFinalLocalVariable"/--> <!--避免使用short型別:Java使用’short’型別來減少記憶體開銷,而不是優化計算。事實上,JVM不具備short型別的算術能力:jvm必須將short型別轉化為int型別,然後進行適當的計算再把int型別轉回short型別。因此,和記憶體開銷比起來使用’short’型別會對效能有更大的影響--> <!--rule ref="rulesets/java/controversial.xml/AvoidUsingShortType"/--> <!--避免使用Volatile:使用關鍵字’volatile’一般用來調整一個Java應用,因此,需要一個專業的Java記憶體模型。此外,它的作用範圍一定程度上是令人誤解的。因此,volatile關鍵字應該不要被用做維護和移植的目的。--> <!--rule ref="rulesets/java/controversial.xml/AvoidUsingVolatile"/--> <!--避免使用原生代碼:jvm和Java語言已經提供了很多建立應用程式的幫助,依賴非Java程式碼應該是非常罕見的。即使如此,事實上必須使用Java本地介面也是罕見的。因為使用JNI使得應用可移植性降低,而且難以維護,所以是不推薦的。--> <!--rule ref="rulesets/java/controversial.xml/AvoidUsingNativeCode"/--> <!--避免改變訪問控制:getDeclaredConstructors(), getDeclaredConstructor(Class[]) 和 setAccessible(),還有PrivilegedAction介面,允許在執行時改變變數、類和方法的可見性,甚至它們是私有的。顯然,這是不應該的,因為這種動作違背了封裝原則--> <rule ref="rulesets/java/controversial.xml/AvoidAccessibilityAlteration"/> <!--不要顯示的呼叫垃圾收集器:呼叫System.gc(), Runtime.getRuntime().gc(), 和 System.runFinalization()是不推薦的。當垃圾收集器使用配置項-Xdisableexplicitgc關閉時,使用程式碼可以同樣進行垃圾收集。此外,現代JVM對於垃圾收集工作做得很棒。當開發一個應用時記憶體使用的影響無關於記憶體洩露時,垃圾收集應該交給JVM配置項進行管理而非程式碼本身。--> <rule ref="rulesets/java/controversial.xml/DoNotCallGarbageCollectionExplicitly"/> <!--=========================controversial Rules end========================--> <!--====================coupling Rules begin(共3個)======================--> <!--物件間的耦合:這個規則統計一個物件中單個的屬性、本地變數和返回型別的數目。如果統計數目大於指定的上限值表示耦合度太高。--> <!-- <rule ref="rulesets/java/coupling.xml/CouplingBetweenObjects"> <properties> <property name="threshold" value="20"/> </properties> </rule> --> <!--過多的引入:大量的import表明物件有很高的耦合度。本規則統計單一的import數目,如果數目大於使用者定義的上限則報告一個違例。--> <!-- <rule ref="rulesets/java/coupling.xml/ExcessiveImports"> <properties> <property name="minimum" value="30"/> </properties> </rule> --> <!--鬆耦合:避免使用具體實現型別(如:HashSet);用介面(如:Set)代替。--> <rule ref="rulesets/java/coupling.xml/LooseCoupling"/> <!--====================coupling Rules end======================--> <!--====================Design Rules begin(共48個)======================--> <!--如果成員方法都是static,建議使用Singletom模式,或定義成abstract類。(FindBugs不檢查)--> <!--<rule ref="rulesets/java/design.xml/UseSingleton"/>--> <!--避免以下程式碼 if (bar == x) { return true; } else { return false; }(FindBugs不檢查) --> <rule ref="rulesets/java/design.xml/SimplifyBooleanReturns"/> <!--避免以下程式碼 boolean bar = (isFoo() == true);(FindBugs不檢查) --> <rule ref="rulesets/java/design.xml/SimplifyBooleanExpressions"/> <!--switch語句應該有一個default。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/SwitchStmtsShouldHaveDefault"/> <!--避免較深的if語句,注意:有else的不算。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/AvoidDeeplyNestedIfStmts"> <properties> <property name="problemDepth" value="5"/> </properties> </rule> <!--避免方法引數未使用就被賦值。(FindBugs檢查)--> <!-- <rule ref="rulesets/java/design.xml/AvoidReassigningParameters"/> --> <!--label下的語句太多,建議優化重構。(FindBugs不檢查)--> <!-- <rule ref="rulesets/java/design.xml/SwitchDensity"> <properties> <property name="minimum" value="10"/> </properties> </rule> --> <!-- 在構造方法中呼叫了可能會被覆蓋的成員方法,後果:可能會有空指標錯誤。(FindBugs不檢查) --> <!--rule ref="rulesets/java/design.xml/ConstructorCallsOverridableMethod"/--> <!-- 避免以下程式碼,私有構造方法類在類定義外生成例項,這會導致the generation of an accessor。(FindBugs不檢查) public class Outer { void method(){ Inner ic = new Inner();//Causes generation of accessor class } public class Inner { private Inner(){} } } --> <rule ref="rulesets/java/design.xml/AccessorClassGeneration"/> <!-- final成員變數(field,類欄位)建議定義成static,這樣可以節省空間 。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/FinalFieldCouldBeStatic"/> <!-- Connection,Statement,ResultSet物件使用後要close。(FindBugs不檢查) --> <!--rule ref="rulesets/java/design.xml/CloseResource"/--> <!-- 不建議使用非靜態初始化塊 ,易引起混亂。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/NonStaticInitializer"/--> <!-- switch中的default應放在最後一個。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/DefaultLabelNotLastInSwitchStmt"/> <!-- switch中有非case的label。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/NonCaseLabelInSwitchStatement"/> <!-- Collection.toArray(T[] a)呼叫中new a陣列時要指定陣列長度。(FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/OptimizableToArrayCall"/--> <!-- 避免與Double.NaN進行是否相等比較(==)。(FindBugs檢查)--> <rule ref="rulesets/java/design.xml/BadComparison"/> <!-- 避免與null比較,如x.equals(null) (FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/EqualsNull"/> <!-- 避免if(x!=y),要先if(x==y) (FindBugs不檢查)--> <!-- <rule ref="rulesets/java/design.xml/ConfusingTernary"/> --> <!-- 為了獲得Class物件,請用類的class成員,而不要例項化物件然後getClass (FindBugs檢查)--> <rule ref="rulesets/java/design.xml/InstantiationToGetClass"/> <!-- 避免冪等操作,如變數賦值給它自己 (FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/IdempotentOperations"/--> <!-- 生成SimpleDateFormat例項的時候要求指定Locale(FindBugs不檢查) --> <!--rule ref="rulesets/java/design.xml/SimpleDateFormatNeedsLocale"/--> <!-- field在變數定義時或構造方法中賦值後就再也沒有改變過,則可以定義成final的。(FindBugs不檢查) --> <!--rule ref="rulesets/java/design.xml/ImmutableField"/--> <!-- 在進行大小字轉換(String.toLowerCase()/toUpperCase() )的時候請使用Locale,可以避免某些Locale帶來的問題(FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/UseLocaleWithCaseConversions"/--> <!-- final類不要出現protected欄位(FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/AvoidProtectedFieldInFinalClass"/--> <!-- 賦值給靜態非final變數,可能會不安全。在靜態區賦值或定義時賦值則沒問題。(FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/AssignmentToNonFinalStatic"/--> <!-- 在不能例項化的類裡(定義了私有構造方法的類)沒有靜態方法,這樣這個類不可用。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/MissingStaticMethodInNonInstantiatableClass"/> <!-- 用塊級別的同步代替方法級的同步,這樣能夠保證讓真正需要的程式碼同步(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/AvoidSynchronizedAtMethodLevel"/--> <!-- case沒有break(FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/MissingBreakInSwitch"/--> <!-- 用notifyAll取代notify(FindBugs檢查)--> <rule ref="rulesets/java/design.xml/UseNotifyAllInsteadOfNotify"/> <!-- 避免在catch子句裡再判斷具體的異常型別,就是用instanceof。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/AvoidInstanceofChecksInCatchClause"/> <!-- 抽象類沒有定義任何抽象方法,如果類僅希望作為基類使用,但又不需要抽象方法,則建議提供一個protected構造方法。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/AbstractClassWithoutAbstractMethod"/--> <!-- 條件表示式中沒有必要在instanceof之前進行空指標判斷。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/SimplifyConditional"/--> <!-- 建議用equals物件,而不是用==.(FindBugs檢查)--> <!--rule ref="rulesets/java/design.xml/CompareObjectsWithEquals"/--> <!-- 字串變數與常量比較時,先寫常量,這樣可以避免空指標異常。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/PositionLiteralsFirstInComparisons"/--> <!-- 避免不必要的本地變數。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/UnnecessaryLocalBeforeReturn"/--> <!-- 執行緒不安全的Singleton。(FindBugs不檢查)--> <!-- <rule ref="rulesets/java/design.xml/NonThreadSafeSingleton"> <properties> <property name="checkNonStaticMethods" value="true"/> <property name="checkNonStaticFields" value="true"/> </properties> </rule> --> <!-- 未加註釋的空方法,在方法的花括弧之間未加註釋。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/UncommentedEmptyMethod"/--> <!-- 未加註釋的空構造方法,在方法的花括弧之間未加註釋。注意,在super或this前的註釋不算。(FindBugs不檢查)--> <!-- <rule ref="rulesets/java/design.xml/UncommentedEmptyConstructor"> <properties> <property name="ignoreExplicitConstructorInvocation" value="true"/> </properties> </rule> --> <!-- 避免只有常量的介面定義,可以考慮將其轉換成類。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/AvoidConstantsInterface"/--> <!-- 靜態SimpleDateFormat成員變數訪問未加同步。(FindBugs檢查,另外FindBugs不建議定義靜態SimpleDateFormat成員變數)--> <!--rule ref="rulesets/java/design.xml/UnsynchronizedStaticDateFormatter"/--> <!-- catch到了異常後又重新throw新的異常,未保留源異常,源異常的stack trace可能會丟失,不利於程式除錯。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/PreserveStackTrace"/> <!-- 對Collection物件,建議用isEmpty()取代size()與0的判斷。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/UseCollectionIsEmpty"/> <!-- 只有私有構造方法的類應該申明為final的,除非構造方法被內部類呼叫。注,私有構造方法的類能夠被它的內部類使用。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/> <!-- 抽象類裡的空方法應該定義成abstract。(FindBugs不檢查)--> <!-- <rule ref="rulesets/java/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/> --> <!-- 某個類欄位僅在一個方法中使用,建議改用本地變數。構造方法中有賦值不算,但定義時有初始值算。(FindBugs不檢查)--> <!-- <rule ref="rulesets/java/design.xml/SingularField"> <properties> <property name="CheckInnerClasses" value="true"/> <property name="DisallowNotAssignment" value="true"/> </properties> </rule> --> <!-- 返回空陣列,而不是null。(FindBugs檢查)--> <rule ref="rulesets/java/design.xml/ReturnEmptyArrayRatherThanNull"/> <!-- 如果一個抽象類不包含任何方法,只有資料欄位,則建議定義private或protected的構造方法以不允許例項化。(FindBugs不檢查)--> <!--rule ref="rulesets/java/design.xml/AbstractClassWithoutAnyMethod"/--> <!-- switch的case語句如果太少的話建議用if取代,以增加程式碼可讀性。(FindBugs不檢查)--> <rule ref="rulesets/java/design.xml/TooFewBranchesForASwitchStatement"/> <!-- <properties> <property name="minimumNumberCaseForASwitch" value="3"/> </properties> --> <!--====================Design Rules end======================--> <!--====================finalizers Rules begin(共6個)======================--> <!--空的finalize():如果finalize()方法是空的,那麼它就不需要存在。--> <rule ref="rulesets/java/finalizers.xml/EmptyFinalizer"/> <!--finalize方法呼叫父類finalize:如果finalize()被實現,它應該除了呼叫super.finalize()之外還應該做點別的。--> <rule ref="rulesets/java/finalizers.xml/FinalizeOnlyCallsSuperFinalize"/> <!--finalize過載:方法名是finalize()的方法應該具有引數。因為不帶引數容易令人迷惑且可能是一個bug,那樣就不會被JVM呼叫。--> <rule ref="rulesets/java/finalizers.xml/FinalizeOverloaded"/> <!--finalize沒有呼叫父類的finalize:如果finalize()方法被重新實現,它最後一個動作應該是呼叫super.finalize();--> <rule ref="rulesets/java/finalizers.xml/FinalizeDoesNotCallSuperFinalize"/> <!--finalize應該是受保護的:如果你覆蓋finalize(),使他是protected的,如果作為public的,其它類就可以呼叫了。--> <!--rule ref="rulesets/java/finalizers.xml/FinalizeShouldBeProtected"/--> <!--避免呼叫finalize:Object.finalize()是由垃圾收集器發現沒有引用指向這個物件的時候呼叫的,應儘量避免人為呼叫--> <rule ref="rulesets/java/finalizers.xml/AvoidCallingFinalize"/> <!--==========================finalizers Rules end==========================--> <!--====================imports Rules begin(共5個)========================--> <!--重複的引入:避免重複的import--> <rule ref="rulesets/java/imports.xml/DuplicateImports"/> <!--不要引入java.lang:避免從’java.lang’包引入任何東西,它裡面的類是自動引入的--> <rule ref="rulesets/java/imports.xml/DontImportJavaLang"/> <!--未使用的imports:去掉不使用的import--> <rule ref="rulesets/java/imports.xml/UnusedImports"/> <!--從同一個包引入:不需要從同一包引入型別--> <rule ref="rulesets/java/imports.xml/ImportFromSamePackage"/> <!--太多的靜態引入:如果濫用靜態引入特性,會使你的程式不具有可讀性和可維護性,你引入的太多的靜態成員汙染--> <!-- <rule ref="rulesets/java/imports.xml/TooManyStaticImports"> <properties> <property name="maximumStaticImports" value="4"/> </properties> </rule> --> <!--=======================imports Rules end===========================--> <!--====================j2ee Rules begin(共9個)======================--> <!--使用合適的類載入器:在J2EE中getClassLoader()方法可能不會按照期望工作。使用Thread.currentThread().getContextClassLoader()來代替。--> <!--rule ref="rulesets/java/j2ee.xml/UseProperClassLoader"/--> <!--訊息驅動bean和會話bean命名規則:EJB規範表示任何訊息驅動bean和會話bean的命名應該以’Bean’結尾。 程式碼示例: /* Proper name */ public class SomeBean implements SessionBean{} /* Bad name */ public class MissingTheProperSuffix implements SessionBean {} --> <!--rule ref="rulesets/java/j2ee.xml/MDBAndSessionBeanNamingConvention"/--> <!--遠端會話介面命名規則:會話EJB的remote home介面命名應該以‘Home’結尾。 程式碼示例: /* Proper name */ public interface MyBeautifulHome extends javax.ejb.EJBHome {} /* Bad name */ public interface MissingProperSuffix extends javax.ejb.EJBHome {} --> <!--rule ref="rulesets/java/j2ee.xml/RemoteSessionInterfaceNamingConvention"/--> <!--本地介面會話命名規則:會話EJB的本地介面應該以‘Local’結尾。 程式碼示例: /* Proper name */ public interface MyLocal extends javax.ejb.EJBLocalObject {} /* Bad name */ public interface MissingProperSuffix extends javax.ejb.EJBLocalObject {} --> <!--rule ref="rulesets/java/j2ee.xml/LocalInterfaceSessionNamingConvention"/--> <!--本地Home命名規則:會話EJB的本地home介面應該以’LocalHome’結尾 程式碼示例: /* Proper name */ public interface MyBeautifulLocalHome extends javax.ejb.EJBLocalHome {} /* Bad name */ public interface MissingProperSuffix extends javax.ejb.EJBLocalHome {} --> <!--rule ref="rulesets/java/j2ee.xml/LocalHomeNamingConvention"/--> <!--遠端介面命名規則:會話EJB的遠端介面應該沒有後綴。 程式碼示例: /* Bad Session suffix */ public interface BadSuffixSession extends javax.ejb.EJBObject {} /* Bad EJB suffix */ public interface BadSuffixEJB extends javax.ejb.EJBObject {} /* Bad Bean suffix */ public interface BadSuffixBean extends javax.ejb.EJBObject {} --> <!--rule ref="rulesets/java/j2ee.xml/RemoteInterfaceNamingConvention"/--> <!--不要呼叫System.exit:web應用不該呼叫System.exit(),因為只有web容器或應用伺服器才能停止JVM.--> <!--rule ref="rulesets/java/j2ee.xml/DoNotCallSystemExit"/--> <!--靜態EJB域應該是final的:根據J2EE規範(p.494),EJB不應該有任何具有寫入訪問權的靜態域,然而,只讀靜態域是允許的。這樣能夠保證合適的行為,尤其當例項分佈存在於多個JRE的容器中--> <!--rule ref="rulesets/java/j2ee.xml/StaticEJBFieldShouldBeFinal"/--> <!--不用使用執行緒:J2EE規範明確禁止使用執行緒。備註:意思是已經由J2EE規範和成熟類庫幫你封裝了執行緒處理,自己儘量不要用執行緒。--> <!--rule ref="rulesets/java/j2ee.xml/DoNotUseThreads"/--> <!--====================j2ee Rules end======================--> <!--====================logging-jakarta-commons Rules begin(共2個)======================--> <!--使用正確的異常日誌:保證打印出完全的異常堆疊,記錄或丟擲異常日誌時使用包含兩個引數的表示式:一個引數是字串,一個是Throwable型別--> <!--rule ref="rulesets/java/logging-jakarta-commons.xml/UseCorrectExceptionLogging"/--> <!--合適的日誌記錄器:日誌記錄器一般應該被定義為private static final的,而且應該有正確的類。Private final Log log;也被允許使用在需要傳遞的這種極少的情況中,具有這種限制日誌記錄器就需要被傳入構造器中。--> <!-- <rule ref="rulesets/java/logging-jakarta-commons.xml/ProperLogger"> <properties> <property name="staticLoggerName" value="log"/> </properties> </rule> --> <!--====================logging-jakarta-commons Rules end======================--> <!--====================logging-java Rules begin(共4個)======================--> <!--多於一個日誌記錄器:一般而言一個日誌記錄器只用於一個類中。-->

相關推薦

MyEclipse整合PMD程式碼檢測外掛定義規則配置檔案

把我今天最新更新的MyEclipse2014整合PMD程式碼檢測外掛自定義規則配置檔案JAVA版釋出出來吧,方便自己以後回顧的同時,也看看能不能幫到有這方面需求的小夥伴們。 檔名:cplatform_pmd5.2.3_rules.xml <?xml version=

MyEclipse整合JS程式碼提示外掛

2.進行解壓,複製到MyEclipse下 下載完成後進行解壓,將所有的東西都複製到MyEclipse目錄下的dropins下 重新啟動MyEclipse 3.在MyEclipse進行配置 開啟window --> Preferences -->Spket -->JavaScript Pr

定義xml配置檔案讀取更新

說明:webconfig的檔案中的值的更新會引起網站重啟,網站重啟記憶體揮手,session等資訊會丟失,所以下面這些場景我們需要自定義配置檔案。          1,網站執行中,我們需要更新配置檔案來關閉某些功能,不能造成使用者cookie等

定義讀取配置檔案

#include<iostream> #include<string.h> #include<vector> #include<map> #include<set> #include <fstream> #include<

web工程讀取定義xml配置檔案的方法

       以前都是在c++中我都是習慣用ini配置檔案,接觸webx框架後,一般都是用得配置好的xml檔案,偷懶結果就是把自己給坑了。在需要自定義配置檔案的之後踩到了坑,特此記錄下。         此處我想讀取

【Highchart】定義儀表盤配置檔案,儀表盤分段及漸變色

highchart配置出儀表盤 chart: { type: 'gauge', plotBackgroundColor: null, plotBackgroundImage: null, plotBorderWi

Spring-boot中讀取核心配置檔案application和定義properties配置檔案的方式

前言:瞭解過spring-Boot這個技術的,應該知道Spring-Boot的核心配置檔案application.properties,當然也可以通過註解自定義配置檔案**.properties的資

springboot 定義yml 配置檔案

springboot 在1.5版本以後,@ConfigurationProperties去除location引數,因此無法直接匯出yml配置檔案,而properties配置檔案可以通過@PropertySource或者@ImportResource 來直接匯入,因此整理兩種匯

定義Log4j配置檔案位置

預設設定:Log4j配置檔案放在src下則可以被log4j.jar讀取到。 如果想要把log4j.properties檔案遷移到專案的其他位置,則可以做如下配置: <!-- 設定由Spring載入的Log4j配置檔案位置 --><context-para

Unity3D定義資源配置檔案

配置資原始檔估計大家瞭解很多,比如XML、JSON、Protobuf、Excel、TXT等等在開發過程中,將遊戲資料序列化到配置檔案中,專案執行時讀取配置檔案中的資料本文另外介紹一個Unity的配置檔案(.asset)該配置檔案的優點:當我們需要將遊戲資源裡的貼圖(Textu

定義log4j2配置檔案地址

預設情況下,只要把log4j配置檔案放在 CLASSPATH 環境變數所指定的目錄, JAVA 啟動時會制動載入。實際專案中經常需要把配置檔案與打包分離,方便修改,所以需要自定義配置檔案載入地址。 SpringMvc 採用spring mvc框架時需要一

Unity3d進階學習(8)-- 定義資源配置檔案、序列化

一、資源配置檔案、序列化的介紹 資源配置檔案:在遊戲開發中,經常會用到一些配置檔案儲存一些資料,然後專案執行中讀取這些配置檔案中的資料在遊戲中使用。比如 XML、JSON、Protobuf、Excel

maven+mybatis+mybatis-generator+sql server 2005自動生成程式碼,加上定義分頁外掛和批量插入更新外掛

第一步:準備需要的jar包。由於maven只要配置pom.xml就可以從倉庫下載jar包。因此我們首先配置pom.xml。 注意com.microsoft.sqlserver需要自己加入maven倉庫的。 <dependencies> ......

1. PMD 使用,編譯和定義規則

自定義 pmd 規則 一 PMD簡介PMD是一款代碼靜態檢查工具,可以檢查出很多代碼中潛在的bug以及讓人感到疑惑的代碼,具體大家可以百度下。二 PMD源代碼下載下載地址:https://github.com/pmd/pmd/tree/pmd/5.5.x需要註意的是註意選擇branch,一般選擇最

javaSE_day8_構造方法_super關鍵字_final關鍵字_static關鍵字_內部類_訪問許可權和修飾符_程式碼塊_定義資料型別

1.構造方法 作用:用來給類的成員進行初始化操作 定義格式:許可權  方法名(引數列表){ ... } //注意:方法的名字必須和類名完全一致,構造方法不允許寫返回值型別,void也不能寫 構造方法在什麼時候執行呢:在new物件的時候,自動執行,且

點聚weboffice外掛定義選單

https://blog.csdn.net/u014547764/article/details/53818637   1、在jsp中引用excel外掛:首先專案中要有:WebOffice.zip、weboffice_Set.exe這是點聚weboffice的外掛 <object id

jjqGrid表格外掛定義頁碼

修改jqgrid原始碼 1定容器 大概2225行 if(ts.p.pgbuttons===true) { var po=["first"+tp,"prev"+tp, "next"+tp,"last"+tp]; if(dir==="rtl") { po.reverse(

CSS3_拖曳原理_設定全域性點選捕獲_九宮格碰撞檢測_定義滾動條

拖曳原理: 元素的初始位置 + 滑鼠距離差 = 元素最終位置   使元素可以拖動 function dragElement(obj){ obj.onmousedown = function(e){ e =

IIS7的整合模式下如何讓定義的HttpModule不處理靜態檔案(.html .css .js .jpeg等)請求

轉載:https://www.cnblogs.com/opencoder/p/5854454.html ASP.NET 4.0後Web.config檔案的Module配置節點有一個可選項叫preCondition如下面程式碼所示: <system.webServer> <mod

Idea使用筆記——定註釋模板&定義程式碼模板&定義File and Code Templates

設定類註釋: File-->settings-->Editor-->File and Code Templates-->Files 類註釋模板: /** * @Classname ${NAME} * @Description TODO * @autho