No strictf in Scala - soluzioni alternative?
Domanda
ho cercato nel web per come far rispettare srictfp
a Scala, ma non riusciva a trovare alcuna traccia di esso. Ci sono alcune persone che si lamentano, ma vere soluzioni non possono essere trovate. C'è un bugtracker su di esso, che è quasi due anni. A quanto pare non c'è elegante soluzione per esso sulla strada che sto cercando soluzioni alternative.
La mia idea attuale è quella di impostare il metodo di appropriata bandierina ACC_STRICT
nel bytecode generato da me in qualche modo, ma non ho idea di che cosa sarebbe la soluzione migliore per farlo. A Scala Compiler plugin viene in mente o bandiere solo di hacking in un editor esadecimale. Forse qualcuno ha affrontato la stessa sfida e mi può dire la sua soluzione?
Soluzione
Si potrebbe aggiungere un post-processore del processo di compilazione che dovrebbe aggiungere il modificatore strictfp
alla classe generata (cioè impostando il flag ACC_STRICT
come dici tu).
È possibile implementare un tale post-processor utilizzando Javassist per esempio. Questo potrebbe assomigliare a questo:
CtClass clazz = ClassPool.getDefault().makeClass(
new FileInputStream("old/HelloWorld.class"));
CtMethod method = clazz.getDeclaredMethod("testMethod");
method.setModifiers(method.getModifiers() | Modifier.STRICT);
clazz.detach();
clazz.toBytecode(new DataOutputStream(new FileOutputStream(
"new/HelloWorld.class")));
Si dovrebbe quindi trovare un modo per configurare quali classi / metodo devono essere modificate in questo modo.
Altri suggerimenti
Scala ha un'annotazione strictfp
ora:
@strictfp
def f() = …