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?

Foi útil?

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() = …
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top