Sin strictfp en Scala - soluciones?
Pregunta
He buscado en la web para cómo hacer cumplir srictfp
en Scala, pero no pudo encontrar ningún indicio de ello. Hay algunas personas que se quejan de ello, pero las soluciones reales no se pueden encontrar. Hay una bugtracker entrada al respecto que es casi dos años. Por lo que parece no hay una solución elegante para que en la forma en que estoy en busca de soluciones.
Mi idea actual es fijar la bandera apropiada ACC_STRICT
método en el código de bytes generada por mí de alguna manera, pero no tengo idea de lo que sería la mejor solución para ello. Un compilador Scala Plugin viene a la mente o simplemente banderas de piratería en un editor hexadecimal. Tal vez alguien se enfrentó al mismo reto y me puede decir su solución?
Solución
Se podría añadir un post-procesador en su proceso de construcción que añadir el modificador strictfp
a la clase generada (es decir, el establecimiento de la bandera ACC_STRICT
como usted dice).
Puede implementar tal un post-procesador utilizando Javassist por ejemplo. Esto podría tener este aspecto:
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")));
A continuación, tendría que encontrar una manera de configurar qué clases / métodos deben ser modificados de esta manera.
Otros consejos
Scala tiene una anotación strictfp
ahora:
@strictfp
def f() = …