Personal tools
You are here: Home ブログ matsuyama RhinoのScriptableObject.defineClass(Scriptable, Class, Boolean, Boolean)で死なないためのパッチ
Document Actions

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)で死なないためのパッチ

Posted by matsuyama at 2006-11-09 07:27
(getModifiers() & Modifier.ABSTRACT) != 0とかのほうが確実かも。
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.