2016-01-12 7 views
6

Ist es möglich, mit Checkstyle zu überprüfen, ob ein Java-Projekt vollständig qualifizierte Namen im Code verwendet. Wir möchten Code wieSo verhindern Sie voll qualifizierte Namen in Java-Code

if (org.apache.commons.lang3.StringUtils.isBlank(name)) { 
.... 
.... 
} 

verhindern und möchten erzwingen, dass stattdessen Pakete stattdessen importiert werden.

Gibt es andere Tools, die uns dabei helfen können?

+4

Was würden Sie von dem Tool erwarten, wenn Klassenkonflikte auftreten? – varevarao

+0

Sie können dies mit der Importkontrollregel überprüfen. Dann konfigurieren Sie das Maven Checkstyle Plugin, damit eventuelle Verstöße den Build nicht zulassen ...? – Codexer

+1

Interessante Frage. Aber sind Sie sicher, dass Sie dies aktivieren möchten? Ich musste zu Zeiten, in denen ich mit Legacy-Code zu tun hatte, voll qualifizierte Namen verwenden, und jemand hat eine * custom * 'StringUtils'-Klasse verwendet. Angesichts der Unzulänglichkeit dieser Klasse verwende ich die Apache Commons "StringUtils" in dieser Klasse, während der Import bereits für die benutzerdefinierten "StringUtils" verwendet wird, und daher meine Notwendigkeit dafür. – entpnerd

Antwort

2

Soweit ich weiß, kann Checkstyle dies nicht tun. Es gibt jedoch eine PMD-Regel namens UnnecessaryFullyQualifiedName, die einen Blick wert ist. IntelliJ-Plugins für PMD existieren zum Beispiel QAPlug PMD, die kostenlos heruntergeladen werden können.

Seien Sie jedoch darauf vorbereitet, viele falsche Positive zu sehen. Zum Beispiel können zwei Klassen, die denselben einfachen Namen teilen, nicht ohne einen vollständig qualifizierten Klassennamen referenziert werden (z. B. foo.A und bar.A). Es könnte auch sein, dass PMD tatsächlich nach diesem Fall sucht, es kann einen Versuch wert sein.

+0

Die PMD-Prüfung warnt nur, wenn es bereits eine importierte Form der Klasse gibt (ich denke, es vergleicht die Importe und voll qualifizierten Namen im Code), so gibt es nicht viele falsche Positive, aber es warnt nicht, wenn die voll qualifizierte Klasse isn ist Noch nicht in den Importen aufgeführt. Eine Groß-/Kleinschreibungssuche wie [az] + [.] [Az] + [.] [AZ] kann dabei helfen, einige der nicht importierten zu fangen, aber diese wird definitiv falsche positive haben :) – HairyFotr