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?

È stato utile?

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() = …
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top