2015-03-04 17 views
24

Ho scritto un processore di annotazione cliente per generare vari file di origine, racchiusi in un plug-in Eclipse. Come parte di questo processo registra anche vari errori e avvisi utilizzando la normale chiamata ProcessingEnvironment#getMessager().printMesssage(Kind, String, Element).Errori/avvisi generati dal processore di annotazione Errori non visualizzati nell'editor di Eclipse o nella vista Problemi

Ho testato il processore eseguendo il debug del plug-in in Eclipse. Nell'istanza secondaria lanciata di Eclipse, il processore funziona come previsto: i file di origine vengono generati, raccolti e interpretati dal compilatore come desiderato. Tutti gli errori del compilatore (cioè non personalizzati) nei generati e non generati vengono visualizzati nell'editor, nella vista Problemi ecc. Come previsto.

Tuttavia, vedo molte incongruenze in termini di visualizzazione degli errori e degli avvisi personalizzati. Il comportamento che vedo è il seguente:

  1. Se non viene specificato alcun elemento, tutti i messaggi vengono visualizzati nel registro errori sotto il tipo Informazioni, indipendentemente dal tipo specificato durante la registrazione dell'errore.
  2. Se un messaggio è di tipo NOTE, viene sempre visualizzato nel registro errori in Tipo di informazioni, indipendentemente dal fatto che sia specificato o meno un elemento.
  3. Altrimenti, se viene specificato un elemento, gli errori e gli avvertimenti compaiono in modo intermittente nella vista Problemi e nell'editor; a volte essi non vengono visualizzati ovunque. Essi appaiono mai nel Registro errori, se il tipo è ERROR o WARNING

Come per l'enfasi di cui sopra, il vero problema è il punto 3 - che in certe situazioni semplicemente non posso ottenere gli errori di apparire nell'editor pur essendo registrati elementi validi. In effetti, sono riuscito a far apparire gli errori in modo affidabile e non apparire semplicemente cambiando il nome di un particolare file sorgente generato.

Ovviamente il problema non è il nome del file stesso, ma è certamente il caso che generare la classe con un nome che corrisponde ai riferimenti già nel codice fa sì che gli errori vengano nascosti, generandolo con un nome diverso (o meno) tutto) causa la visualizzazione degli errori (così come tutti gli errori regolari del compilatore causati da una classe mancante). La cosa più strana è che non c'è nulla di fondamentalmente diverso in questa classe generata rispetto a una qualsiasi delle altre (di cui ce ne sono molte), sebbene sia unica nella sua struttura e in che modo viene citata. Anche ragionevolmente lungo (circa 400 metodi), ma accorciarlo artificialmente non ha fatto alcuna differenza. Altre classi generate hanno anche riferimenti esistenti nel codice e non sopprimono gli errori.

Purtroppo non ho ancora avuto il tempo di testare se questo problema si verifica quando viene distribuito il plug-in Eclipse (cioè in esecuzione in un'istanza "reale" di Eclipse), o effettivamente se il problema si verifica quando si chiama javac esplicitamente o invocando una build di Maven.

Senza pubblicare il codice completo del plug-in Non mi aspetto che nessuno possa aiutare direttamente, ma sono molto aperto a qualsiasi suggerimento o consiglio se qualcuno ha problemi con gli errori generati dal processore di annotazione. Mi sembra un errore in Eclipse, ma non sono stato in grado di trovare alcun riferimento ad esso online. Inoltre, non riesco a trovare alcun errore nei file .metadata/.log dell'istanza di Eclipse sottostante o dell'istanza secondaria lanciata di Eclipse. Finalmente mi sono assicurato che non ci siano eccezioni soppresse o segnalate nel codice del processore di annotazione.

Eclipse dettagli della versione:

Version: Luna Service Release 1a (4.4.1) 
Build id: 20150109-0600 

Qualsiasi aiuto apprezzato e molte grazie in anticipo :)

+0

Una cosa che ho notato è che Eclipse ha i propri programmi di caricamento di classi (e anche utilità di modifica del codice utente?) Che a volte hanno un comportamento inaspettato, soprattutto per rendere l'esperienza utente nell'IDE migliore. Probabilmente hai già pensato a questo, ma aggiungendo 'new Throwable (" messaggio di debug "). PrintStackTrace()' come una dichiarazione di debug in varie parti del codice è di solito dove inizio quando non riesco a capire altro. – Marco

risposta

1

Se un problema/errore deve essere mostrato nella vista Problemi di Eclipse, è necessario creare un marcatore sulla risorsa particolare (file/cartella/progetto). Si prega di consultare i seguenti link su come creare i marcatori in un plugin Eclipse:

https://wiki.eclipse.org/FAQ_How_do_I_create_problem_markers_for_my_compiler%3F https://www.eclipse.org/articles/Article-Mark%20My%20Words/mark-my-words.html

In termini di come gli errori personalizzati/compaiono avvertimenti, la vista Problemi (o la MarkersView generica) è completamente flessibile per mostrare/nascondere determinati elementi. Dai un'occhiata al menu "Configura contenuto ..." nella vista Problemi per avere più idea.

Problemi correlati