2011-12-27 32 views
5

Ciekaw jestem, czy możliwe jest użycie adnotacji na klasie lub metodzie, która podczas lub przed uruchomieniem zastępuje komentarze logowaniem ciągu komentarza. Na przykład, jeśli na Androidzie:Zastąp komentarz java protokołowaniem podczas lub przed uruchomieniem środowiska wykonawczego

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

byłoby tłumaczyć coś jak

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

To musi być przed kompilacją, komentarze nie są zachowywane w plikach klas. – Mat

+1

Nie sądzę, że istnieje takie narzędzie i nie sądzę, że byłoby to taki dobry pomysł. Logi mają na celu śledzenie tego, co robi prorgam na etapie debugowania (zazwyczaj te logi powinny zostać usunięte). Dzienniki mogą być również używane do rejestrowania wysokiego poziomu, takiego jak zgłaszanie błędów lub pomoc dla programistów przy korzystaniu z narzędzia. Komentarze mają na celu wyjaśnienie trudnej części kodu. Nie mają tego samego zamiaru. * – Snicolas

+1

Aha, w Androidzie bardziej niż zalecane jest usunięcie każdego połączenia do Rejestrowania przed wydaniem produktu. Zwykle poprzez zaciemnianie – Snicolas

Odpowiedz

1

Po wyjęciu z pudełka. Nie ma niczego, co by na to pozwalało.

Teraz, jeśli chcesz zbudować to samodzielnie, możesz utworzyć rozszerzenie kompilatora, które umożliwi analizowanie pliku i tłumaczenie komentarzy na wyrażenia dziennika w zależności od adnotacji. Ale musiałoby to nastąpić jako etap kompilacji, ponieważ komentarze nie są oddzielone od pliku klasy, więc nie byłoby możliwości, aby wystąpił w czasie wykonywania.

Ale mówisz o dość dużym projekcie pobocznym, by stworzyć coś takiego. Ponadto istnieją ograniczenia tego podejścia, ponieważ zapisywanie wartości zmiennych w czasie wykonywania nie byłoby możliwe bez dodawania do komentarzy jakiegoś języka wyrażenia. W końcu stworzysz coś skomplikowanego w porównaniu z czymś, co już istnieje, jest solidne i używane miliony razy przy użyciu API.

+0

To ciekawe, czy kiedykolwiek robiłeś to wcześniej, a jeśli tak, to czy masz jakieś zalecane lektury na ten temat w ogóle? – dskinner

+0

To naprawdę wydaje się skomplikowane. I nie każdy komentarz może zostać przekształcony w wywołanie dziennika w prosty sposób. – user802421

+0

szukasz czegoś konkretnego? Kilka krótkich poszukiwań znalazłem trochę wcześniej i natknąłem się na Polyglot dla java http://www.cs.cornell.edu/projects/polyglot/, ale będę musiał trochę później zbadać. – dskinner

0

Nie jest to niemożliwe, ponieważ komentarze są usuwane w czasie wykonywania. Najlepsze, o czym mogę pomyśleć, to czytanie javadoc w czasie wykonywania i rejestrowanie tych danych. Ale to nie zawiera komentarzy innych niż javadoc.

0

Co próbujesz osiągnąć?

Jeśli chcesz włączyć logowanie dla poszczególnych klas, możesz użyć jakiejś flagi (zrobi to statyczne ostatnie polecenie), która wyłączy lub włączy logowanie. Przeczytaj ten wątek: How do I enable/disable log levels in Android?, aby uzyskać więcej wskazówek dotyczących logowania na Androida.

+0

Mam już statyczną metodę do obsługi logów związanych z moją instancją aplikacji Android i opartą na kompilacji mrówek nieruchomości. Osiągnięciem jest wiedza, jak wykonać takie elementy przed lub podczas uruchamiania java. Kwestię, która podniosła kwestię, można dostrzec w komentarzu do głównego pytania, ale rozwiązanie tej jednej kwestii jest nieistotne dla tego pytania. – dskinner

Powiązane problemy