2006/11/09
RhinoのScriptableObject.defineClass(Scriptable, Class, Boolean, Boolean)で死なないためのパッチ
RhinoのScriptableObject.defineClass(Scriptable scope, Class clazz, boolean sealed, boolean mapInheritence)でInstantiatationExceptionになる人はScriptableObject.javaを以下のようにいじくってみるといいかも。
ScriptableObject.java:850付近:
-if (ScriptableRuntime.ScriptableClass.isAssignableFrom(superClass)) { +if (ScriptableRuntime.ScriptableClass.isAssignableFrom(superClass) && !superClass.isAssignableFrom(ScriptableObject.class)) {
どうやらScriptableオブジェクトを作るのにabstractなクラスのScriptableObjectで実装しているとScriptableObjectのnewInstanceで死んでしまうらしい。上のパッチはScriptableObject以上のクラス階層をprototype展開しないようにする適当コード。ScriptableObjectで実装しなければたぶんこの問題はでてこないだろうけど、
http://www.mozilla.org/rhino/apidocs/org/mozilla/javascript/ScriptableObject.html
ここを見る限りではScriptableObjectを使ったほうがよさ気な雰囲気をだしている。
http://lxr.mozilla.org/mozilla/source/js/rhino/examples/Counter.java
これでも使ってるし。おそらくこのサンプルクラスもmapInheritenceありでdefineClassしたら死ぬんじゃないかと。CVSの最新でもいまだに直ってないような雰囲気。やる気ないのかな。
- Category(s)
- java
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/rhino-scriptableobject-defineclass-patch/tbping
Re:RhinoのScriptableObject.defineClass(Scriptable, Class, Boolean, Boolean)で死なないためのパッチ