Podczas przeglądania kodu źródłowego Java, znalazłem kilka nietypowych plików, głównie związanych z ByteBuffer
s w pakiecie java.nio
, które miały bardzo niechlujny kod źródłowy i zostały oznaczone etykietą This file was mechanically generated: Do not edit!
."Mechanicznie generowane" pliki źródłowe java w kodzie źródłowym Java
Pliki te zawierały również duże porcje pustych linii (niektóre nawet w środku javadocs (!!?)), Prawdopodobnie w celu uniemożliwienia zmiany numerów linii. Widziałem także kilka dekompilatorów java, takich jak procyon-decompiler
, które mają opcję zachowania numerów linii, ale wątpię, aby tak było, ponieważ umieszczanie pustych wierszy przed ostatecznym wyróżnieniem niczego nie zmienia.
Oto kilka z tych plików (nie mogłem znaleźć żadnych linków do nich w Internecie i nie piszę ich, ponieważ nie chcę łamać żadnych praw autorskich, ale można je znaleźć w folderze src.zip
korzeń folderu instalacyjnego JDK):
- java.nio.ByteBuffer
- java.nio.DirectByteBufferR
- java.nio.Bits
- java.nio.BufferOverflowException
byłbym ciekaw:
- Które narzędzie generowane te pliki?
- Dlaczego narzędzie zachowuje numery linii tak samo? Czy to ułatwia debagowanie (stacktraces)?
- Po co używać narzędzia do ich generowania, podczas gdy wszystkie inne klasy są programowane przez ludzi?
- Dlaczego narzędzie wstawiało puste linie losowo w nawiasach, przed ostatecznym wyróżnieniem, czy nawet w javadocs?
Wątpię, że dostaniesz odpowiedź, ponieważ ten kod zdaje się być tam od dawna - sprawdź [ten post na blogu z 2006 r.] (Http://www.iggdawg.com/blog/2006/09/jaaaavaaaaa /), gdy Java nadal była własnością Sun. – APC
Wygląda na to, że pliki te są generowane podczas kompilacji przez niektóre preprocesory z plików szablonów: http://hg.openjdk.java.net/jdk9/dev/jdk/file/3b298c230549/src/share/classes/java/nio/ ByteBufferAs-X-Buffer.java.template –
IIRC, preprocesor C wstawia puste linie ze względu na pomijanie po #if lub #else. Tutaj uzasadnienie jest jasne, myślę: jeśli jakiś kompilator zgłasza błąd w ouput, znajdziesz go na oryginalnym wejściu. – laune