2012-04-11 8 views
0

EDIT: ich am Ende meiner Post bearbeiten die Regex ichWie ein regulärer Ausdruck verwenden, ersetzen zu korrigieren „gleich Null vermeiden“ von check

Sonar verwendet, wodurch man die Qualität eines Codes zu überwachen ist groß, aber auf der Nachteil, mit einem beschissenen Projekt muss man viel korrigieren. Mein Problem ist, dass ich etwa 500 "Equals vermeiden Null" Verletzungen von checkstyle (com.puppycrawl.tools.checkstyle.checks.coding.EqualsAvoidNullCheck) korrigieren muss. Mit einem Regex zu korrigieren wäre es halb automatisch toll.

Das Ziel dieser Verletzung ist

myObject.getMyMember().toString().equals("one string") 

zu

"one string".equals(myObject.getMyMember().toString()) 

EDIT zu ändern: ich auf diese Weise verwendet und es funktionierte gut, auch wenn ich es überprüfen müssen und nicht Starten Sie eine sed auf meinem gesamten Quellbaum

Die Regex auf die gesamte Linie

([\(|& \t!])([^\(|& \t!])([a-zA-Z0-9_\[\]\(\)\.]*)\.(equals|equalsIgnoreCase)\(("[^"]*")\) 

Die Regex für die Linie zu ersetzen

\1\5.\4(\2\3) 

Es dauerte einen Tag die 500 Verletzungen zu korrigieren. Noch eine Menge Arbeit, aber es wäre schmerzhafter gewesen, wenn ich es von Hand machen müsste.

+2

Es ist nicht die Null-Kontrollen nicht vermeiden. Eine NullPointerException würde weiterhin ausgelöst werden. Denk nochmal darüber nach, du wirst sehen warum. –

+1

Nimm keine Abkürzungen - behandle die Übung in Langeweile als Buße für deine Sünden. In jedem Fall brauchen Sie noch Null-Prüfungen an "myObject" und "myObject.getMyMember()" ... – Alnitak

+0

Richtig Matijn und Alnitak, ich weiß nicht, warum ich das gesagt habe ... Wie auch immer, mag ich nicht Buße, die von anderen genommen werden sollte: p – Dolanor

Antwort

0

nicht sicher, es ist die Lösung, sondern versuchen:

final String sTmp = myObject.getMyMember(); 
    if(null != sTmp) {<br> 
    // Test .equals() here <br> 
    ..<br> 

}