質問

私はScalaでsrictfpを強制する方法については、ウェブを検索するが、それのいずれかのヒントを見つけることができませんでした。そこに文句を何人かの人々がありますが、本当の解決策を見つけることができません。ほぼ二歳それについてバグトラッカーエントリではあります。私が回避策を探している途中で、それにはエレガントな修正が存在しないようだ通ります。

私の現在の考えは何とか自分で生成されたバイトコードでappropiate方法フラグACC_STRICTを設定することですが、私はそうするための最善の解決策になるかわかりません。 A Scalaのコンパイラプラグインは心に来るか、単にバイナリエディタでフラグをハッキング。たぶん誰かが同じ課題に直面していましたし、私に彼または彼女の解決策を伝えることができますか?

役に立ちましたか?

解決

あなたは(あなたが言うように、すなわち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")));

あなたはその後、どのクラス/メソッドをこのように変更する必要があるのconfigureへの道を見つけなければならないでしょう。

他のヒント

スカラ今strictfp注釈があります:

@strictfp
def f() = …
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top