Question

Je recherche sur le web pour savoir comment appliquer srictfp à Scala, mais n'a pas pu trouver aucune trace de celui-ci. Il y a des gens qui se plaignent, mais des solutions réelles ne peuvent pas être trouvées. Il y a un bugtracker entrée à ce qui est presque deux ans. Comme il semble qu'il n'y ait pas de solution élégante pour elle sur la façon dont je suis à la recherche de solutions de contournement.

Mon idée actuelle est de définir le ACC_STRICT de drapeau de la méthode dans le bytecode correspond le produit par moi-même en quelque sorte, mais je ne sais pas quelle serait la meilleure solution pour le faire. Un Scala compilateur Plugin vient à l'esprit ou tout simplement des drapeaux dans un hacking éditeur hexadécimal. Peut-être que quelqu'un a fait face au même défi et peut me dire sa solution?

Était-ce utile?

La solution

Vous pouvez ajouter un post-processeur dans votre processus de construction qui ajouterait le modificateur de strictfp à la classe générée (à savoir la définition du drapeau de ACC_STRICT comme vous le dites).

Vous pouvez mettre en œuvre un tel post-processeur en utilisant Javassist par exemple. Cela pourrait ressembler à ceci:

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

Vous auriez alors de trouver un moyen de configurer les besoins des classes / méthode pour modifier cette façon.

Autres conseils

Scala a une annotation strictfp maintenant:

@strictfp
def f() = …
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top