2013-07-08 17 views
17

Sto cercando uno strumento di manipolazione di codice di alto livello come Javassist, ma che comprende alcune delle peculiarità di Scala. Gli strumenti di manipolazione del codice byte di livello più basso dovrebbero essere relativamente agnostici, ma per i miei casi d'uso qualcosa al livello di Javassist è molto meglio. Tuttavia, uno strumento a quel livello deve conoscere la lingua di origine e la sua mappatura bytecode. Esiste qualcosa come questo per Scala? Finora sono stato in grado di usare Javassist con Scala per cose molto semplici, ma sono stato morso da alcune differenze Scala/Java per un paio di altre cose.Esiste uno strumento di manipolazione del codice byte ad alto livello di Scala come Javassist?

+0

Quali attività stai cercando di fare? – Antimony

+0

Un problema a cui mi sono imbattuto è descritto [qui] (http://stackoverflow.com/questions/17385725/how-to-add-a-serialversionuid-to-a-class-instance-in-scala) e [qui] (http://stackoverflow.com/questions/17384913/can-scala-2-10-reflection-emulate-this-javassist-functionality) –

risposta

1

Non credo che questo strumento esista (ancora). La situazione attuale è che non è possibile mescolare unità di compilazione compilate con versioni diverse di Scala, ad esempio una classe compilata con Scala 2.9 non interagirà con una classe compilata con Scala 2.10.

Quando si utilizza Scala 2.10, è possibile utilizzare Scala reflection e Scala macros per raggiungere obiettivi simili con la modifica del codice byte. Per me questo sembra il modo più a prova di futuro.

Una delle tue domande mirava ad aggiungere un ID di versione seriale. Questo dovrebbe essere sicuramente possibile con i macro Scala. Con i macro Scala è anche possibile gestire gli ID delle versioni seriali in un database esterno in base alle modifiche API.