Andrew Bwogi

En teknik för meta-metaprogrammering i Java

Sammanfattning
Metaprogrammering används för att abstrahera bort komplicerad kod genom att erbjuda ett mer intuitivt gränssnitt som automatiskt genererar den komplicerade koden. Spoon och ASM är två metaprogrammeringsbibliotek för Java som hanterar program på käll- respektive bytekodnivå. Avhandlingen undersöker vilken delmängd av metaprogram som använder Spoon kan omvandlas till funktionellt ekvivalenta metaprogram som använder ASM, hur Spoon fungerar som ett gränssnitt till ASM och hur genererade metaprogram i ASM fungerar. Metaprogramsomvandlaren kombinerar kodmallar med utmatningen från kodgenereringsprogrammet ASMifier. Metoden för att verifiera ekvivalens kör semantiskt ekvivalenta testprogram genom metaprogram som använder Spoon och genererade metaprogram som använder ASM. Sedan jämförs metaprogrammens utmatningar med hjälp av programmet SootDiff som upptäcker kodkloner. Resultaten visar att det finns en delmängd av omvandlingsbara Spoonprogram som inför ett metodanrop och en motsvarande definition i början av en vald metod eller som ersätter alla returuttryck i metoden med anropet om returtyperna överensstämmer. Spoon kan självt abstraheras bort och en vanlig Javaklass kvarstår som gränssnitt för att generera metaprogram på bytekodnivå. De genererade metaprogrammen som använder ASM tillämpar ett besöksmönster och Javas reflektions-API för att omvandla inmatningsprogrammen.