Вопрос

Я искал в Интернете, как принуждать srictfp в Scala, но не смог найти никого намека. Есть некоторые люди, жалующиеся на это, но реальные решения не могут быть найдены. Eсть запись agttracker Об этом, который почти два года. Как кажется, нет элегантного исправления для этого на пути, я ищу обходные пути.

Моя текущая идея - установить флаг подходящего метода ACC_STRICT В сгенерированном байтекоде сами как-то, но я понятия не имею, что было бы лучшее решение для этого. Плагин Scala Compiler приходит на ум или просто взломал флаги в шестнадцатеричном редакторе. Может быть, кто-то столкнулся с тем же вызовом и может сказать мне его или ее решение?

Это было полезно?

Решение

Вы можете добавить постпроцессор в процессе сборки, который добавит бы strictfp модификатор в сгенерированный класс (т.е. установка ACC_STRICT Флаг как вы говорите).

Вы можете реализовать такой постпроцессор, используя Javassist Например. Это может выглядеть так:

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")));

Затем вам придется найти способ настроить, какие классы / методы должны быть изменены таким образом.

Другие советы

Scala A. strictfp Аннотация сейчас:

@strictfp
def f() = …
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top