Tra Java 5 e Java 6, le regole relative alle annotazioni @Override
per i metodi che hanno origine nelle interfacce (al contrario delle superclassi) sono state modificate, prima che non fossero consentite, ma dopo lo erano. Tuttavia, non sono richiesti da javac.Come posso rilevare staticamente le annotazioni @Override mancanti?
Alcuni IDE, come Eclipse, possono generare errori o avvisi per tali sostituzioni mancanti. Sto cercando qualsiasi tipo di strumento di analisi statica in grado di rilevare le sostituzioni mancanti, quindi posso segnalarle/bloccarle a livello di codice.
Non sembra come qualsiasi di quelle più grandi io sappia come findbugs, et al può farlo - probabilmente perché @Override
ha solo livello di ritenzione fonte, quindi non è presente in file .class sul quale questi strumenti operare e gli strumenti a livello di sorgente come checkstyle non comprendono la gerarchia di classi completa.
Quando invoco il checkstyle non c'è posto per un classpath. Questo va bene per i controlli stile, ma come dovrebbe sapere checkstyle il mio 'void doStuff()' sovrascrive il metodo 'void doStuff()' senza avere le tue classi (nel percorso di origine o in classpath). – emory
Sì, esattamente, a prescindere dal problema di conservazione del runtime, checkstyle sta semplicemente eseguendo verifiche "locali" su un file e probabilmente non è stato possibile rilevarlo. – BeeOnRope
Non capisco perché la ritenzione sia un problema. Il correttore avrà bisogno di accedere al tuo codice sorgente e ai file di classe delle tue dipendenze. Non avrà bisogno di accedere al codice sorgente delle tue dipendenze. (Se nel codice sorgente manca '@ Sovrascrivi 'nel codice sorgente che non si dispone dei privilegi di scrittura, cosa farebbe?) – emory