В Scala нет строгих паролей - обходные пути? - PullRequest
8 голосов
/ 27 октября 2010

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

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

Ответы [ 2 ]

5 голосов
/ 27 октября 2010

Вы можете добавить постпроцессор в ваш процесс сборки, который добавит модификатор 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")));

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

0 голосов
/ 16 марта 2015

Scala теперь имеет strictfp аннотацию:

@strictfp
def f() = …
...