Sem strictfp em scala - soluções alternativas?
Pergunta
Eu procurei na web como aplicar srictfp
em Scala, mas não conseguiu encontrar nenhuma dica disso. Algumas pessoas reclamam disso, mas soluções reais não podem ser encontradas. Existe um Entrada do Bugtracker Sobre isso, que tem quase dois anos. Como parece que não há uma correção elegante para isso no caminho que estou procurando soluções alternativas.
Minha ideia atual é definir o sinalizador de método apropado ACC_STRICT
No bytecode gerado, de alguma forma, mas não tenho idéia de qual seria a melhor solução para fazê -lo. Um plug -in do Scala Compiler vem à mente ou apenas hackeando sinalizadores em um editor hexadecimente. Talvez alguém tenha enfrentado o mesmo desafio e possa me dizer sua solução?
Solução
Você pode adicionar um pós-processador em seu processo de construção que adicionaria o strictfp
modificador para a classe gerada (ou seja, definindo o ACC_STRICT
bandeira como você diz).
Você pode implementar esse pós-processador usando Javassist por exemplo. Isso pode ser assim:
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")));
Você precisaria encontrar uma maneira de configurar quais classes/método precisará ser modificado dessa maneira.
Outras dicas
Scala tem um strictfp
Anotação agora:
@strictfp
def f() = …