Heiner KückerASM bytecode lib improved |
|
Home Java-Seite Bit Packed Array ASM Improved heterogene Map, HMap Constraint Code Generator JSP WorkFlow PageFlow FlowControl Page Flow Engine Web Flow Engine Control_and_Command JSP_Spreadsheet Code-Generator für Option-Either-Stil in Java verbesserter Comparator Fluent-Interface Code-Generator auf Basis einer Grammatik Visitor mit Multidispatch for-Schleife mit yield-return Kognitions-Maschine semantisches Netz Domain Parser Codegenerator_für hierarchische Datenstrukturen Expression_Engine Formula_Parser Thread Preprocessor State Transition Engine AspectJ Java_Explorer DBF_Library Kalender_Applet SetGetGen BeanSetGet CheckPackage LineNumbers GradDms Excel-Export StringTokenizer JspDoc JspCheck JSP-Schulung Java Server Pages Struts Ascii-Tabellen- Layouter Ascii-Baum- Layouter Ascii-Art-Fluss- Diagramm- Parser AsciiArt AssignmentMatrix Layouter StringSerial Silbentrennung JDBC_Schlüssel- Generierung bidirektional/ unidirektional gelinkte Liste Java_Sitemap Generator XmlBuilder RangeMap StringFormatter VersionSafe XCopy JTextField CommandLine- ParamReader Bitmap-Grafik MultiMarkable- Buffered- InputStream JavaCache JdomUtil CollectionUtil XML Really Pull Parser Log-Filter Remote-Protokoll Sudoku-Generator Delegation statt Mehrfachvererbung Disjunct Interval Set WebCam_Demo Weiterentwicklung_Java Alaska-XBase++-Seite Projekte Philosophien Techniken Konzepte Sudoku Kontakt / Impressum Links SiteMap Letzte Aktualisierung: 06.09.2016 |
ASM bytecode lib improvedThis is a Library to get generics type information and type annotations from java bytecode (class file, jar file, war file, ear file and so on) with the ASM-Bytecode-Lib under consideration generic type arguments, generic type parameters with bound, wildcards with bounds and so on. Diese Lib verbessert das API der ASM-Bytecode-Lib durch das Bereitstellen eines Baumes im Gegensatz zur Visitor-Arbeitsweise mit den Informationen zu Klassen (Klassen, Interfaces, Enums, Annotationen) (alles, was ein *.class-File erzeugt, auch package-info.class), Annotationen, Feldern und Methoden sowie strukturierter und getypter Informationen zu Typen einschliesslich Generics. Ziel ist das Erhalten von Informationen über Klassen, Annotationen, Felder, Methoden und Generics ohne das Laden der Klasse, was bei der Benutzung von Reflection notwendig wäre und eventuell aufgrund vorhandenen Initialisierungscodes schwierig sein könnte oder scheitern könnte.
Es werden prinzipiell nur die Informationen geliefert,
die auch mit Reflection erreichbar wären,
Executables (Methoden, Konstruktoren,
statische Initialisierer und
Initialisierungs-Ausdrücke von Feldern)
werden nicht beachtet.
Bytecode-Manipulation wird von meiner Lib nicht unterstützt.
Ich habe meine Lib unter Java8 entwickelt,
aber bewusst keine Java8-Sprach-Features
genutzt.
Die von mir genutzte Version der ASM-Lib liegt im lib-Verzeichnis des Auslieferungs-Zip bei. Zur Benutzung finden sich entsprechende Code-Beispiele im test-Verzeichnis mit den JUnit4-Tests. Eventuell wäre die Benutzung der BCEL-Lib günstiger gewesen. Übrigens sind beide Libs Bestandteil des Java8-JDK. Intern werden die von dem ASM-Visitoren gelieferten Informationen in einer DOM-Struktur vermerkt und von dieser aus die generischen Typ-Informationen in eine typ-sichere Objekt-Struktur umgewandelt.
Der Code enthält die Java-Klasse InnerOrNestedClassNameResolver
zum Auflösen der im Java-Bytecode und als Class-File-Namen verwendeten Dollar-Zeichen-separierten
Namen für innere und geschachtelte Java-Klassen
(Name mangling - Java - Wikipedia, the free encyclopedia). Es können beliebig tief geschachtelte Annotationen gescannt und in eine DOM-Form umgewandelt werden. Dabei werden selbstverständlich auch Annotationen mit @Retention( RetentionPolicy.CLASS ) berücksichtigt.
Die aktuelle Version beherrscht auch Typ-Annotationen.
Dabei bin ich auf folgenden Fehler gestossen: Download der Quelldateien ASM_IMPROVED.zip Installation: Entpacken in ein Verzeichnis Ihrer Wahl und Import als Eclipse-Projekt
Achtung: Erweiterungen und Fixes stelle ich ohne Historie
und ohne Ankündigung hier bereit. Lizenzbedingungen:
Die Programme, Quelltexte und Dokumentationen können ohne
irgendwelche Bedingungen kostenlos verwendet werden. |