2011-12-27 16 views
5

Sono curioso di sapere se è possibile utilizzare un'annotazione su una classe o un metodo che, durante o prima del runtime, sostituisce i commenti con la registrazione della stringa di commento. Per esempio, se su Android:Sostituisci commento java con registrazione durante o prima del runtime

@LogComments 
class MyActivity extends Activity { 
    @Override public void onCreate(Bundle b) { 
     super.onCreate(b); 
     // set some local vars 
     int a = 1; 
     int b = 2; 
    } 
} 

si tradurrebbe in qualcosa di simile

class MyActivity extends Activity { 
    @Override public void onCreate(Bundle b) { 
     super.onCreate(b); 
     Log.d("TAG", "set some local vars"); 
     int a = 1; 
     int b = 2; 
    } 
} 
+3

Questo dovrebbe essere prima della compilazione, i commenti non vengono mantenuti nei file di classe. – Mat

+1

Non penso che ci sia un tale strumento e non credo che sarebbe una buona idea. I log hanno lo scopo di tracciare ciò che il prorgam fa in fase di debug (e di solito quei log dovrebbero essere rimossi). I log possono anche essere utilizzati per alcuni log di alto livello come la segnalazione di errori o gli sviluppatori di applicazioni che utilizzano uno strumento. I commenti servono a spiegare una parte difficile del codice. Non hanno lo stesso intento. * – Snicolas

+1

Oh, e in Android, è più che consigliato rimuovere ogni chiamata alla registrazione prima di rilasciare un prodotto. Solitamente attraverso l'offuscamento – Snicolas

risposta

1

Fuori dalla scatola. No, non esiste nulla che permetta questo.

Ora, se si volesse creare da sé, potrebbe essere possibile creare una sorta di estensione del compilatore che consenta di analizzare il file e tradurre i commenti in espressioni di registro a seconda dell'annotazione presente. Ma questo dovrebbe accadere come un passo della fase di compilazione perché i commenti non fanno parte del file di classe, quindi non ci sarebbe modo di verificarlo in fase di runtime.

Ma, stai parlando di un progetto collaterale piuttosto grande per creare qualcosa di simile. Inoltre ci sono limitazioni a questo approccio, come la scrittura di valori variabili in runtime non sarebbe possibile senza aggiungere qualche sorta di linguaggio di espressione ai commenti. Alla fine creerai qualcosa di complesso rispetto a qualcosa che esiste già, è robusto e usato milioni di volte usando l'API.

+0

questo è interessante, hai mai fatto prima e se sì, hai qualche lettura consigliata sull'argomento in generale? – dskinner

+0

Sembra davvero complicato. E non tutti i commenti possono essere trasformati in una chiamata di registro in modo semplice. – user802421

+0

stai guardando qualcosa in particolare? Ho fatto qualche ricerca un po 'fa e ho trovato Polyglot per java http://www.cs.cornell.edu/projects/polyglot/ ma dovrò fare delle ricerche un po' più avanti. – dskinner

0

No questo non è possibile perché i commenti sono stati rimossi in fase di esecuzione. Il meglio che posso pensare è leggere la javadoc in fase di esecuzione e registrarli. Ma questo non include i commenti non javadoc.

0

Cosa stai cercando di ottenere?

Se si desidera abilitare la registrazione su base per classe, è possibile utilizzare un tipo di flag (che verrà eseguito da static final) che disabiliterà o abiliterà la registrazione. Dai un'occhiata a questo thread: How do I enable/disable log levels in Android? per qualche altro consiglio su come accedere ad Android.

+0

Ho già un metodo statico per gestire i registri legati alla mia istanza dell'applicazione Android e basato sulla generazione di formiche proprietà. Il risultato è sapere come eseguire tali elementi prima o durante il runtime di java. La questione che ha sollevato la questione può essere vista in un commento sulla domanda principale, ma una soluzione per quell'unica questione è irrilevante per la domanda. – dskinner

Problemi correlati