2016-01-12 28 views
6

È possibile verificare con stile di controllo se un progetto java utilizza nomi completi nel codice. Vogliamo evitare codice comeCome impedire nomi completi in codice Java

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

e si desidera imporre che invece i pacchetti vengano importati.

Ci sono altri strumenti che possono aiutarci a realizzarlo?

+4

Cosa ti aspetti dallo strumento se ci sono conflitti tra nomi di classi? – varevarao

+0

È possibile controllarlo con la regola di controllo dell'importazione. Quindi configura il plugin Maven Checkstyle in modo che eventuali violazioni non consentano la compilazione ...? – Codexer

+1

Interessante domanda. Ma sei sicuro di voler abilitare questo? Ho avuto bisogno di usare nomi pienamente qualificati nei momenti in cui ho a che fare con il codice legacy, e qualcuno ha fatto uso di una classe * custom * 'StringUtils'. Considerata l'inadeguatezza di questa classe, finisco per usare gli Apache Commons 'StringUtils' in quella classe, mentre l'importazione è già usata negli" StringUtils "personalizzati, e quindi ne ho bisogno. – entpnerd

risposta

2

Per quanto ne so, Checkstyle non può farlo. Tuttavia, esiste una regola PMD chiamata UnnecessaryFullyQualifiedName che potrebbe valere la pena dare un'occhiata. Esistono plugin IntelliJ per PMD, ad esempio QAPlug PMD, che è possibile scaricare gratuitamente.

Preparatevi a vedere molti falsi positivi. Ad esempio, due classi che condividono lo stesso nome semplice non possono essere referenziate senza un nome di classe completo (ad esempio foo.A e bar.A). Potrebbe anche essere che PMD controlli effettivamente per questo caso, potrebbe valere la pena di provarlo.

+0

Il controllo PMD avverte solo se esiste già una forma importata della classe (penso che confronta le importazioni e i nomi completi nel codice), quindi non ci sono molti falsi positivi, ma non avviserà se la classe completamente qualificata non è 'ancora elencato nelle importazioni. Una ricerca regex case sensitive come [az] + [.] [Az] + [.] [AZ] può aiutare a catturare alcuni dei non importati, ma questo avrà sicuramente dei falsi positivi :) – HairyFotr