public class Static extends JSObject {
public static Static getStatic(String resourcename) {
+ Template t = Template.getTemplate(resourcename, null);
+ if (t != null) t.link();
+ return (Static)cache.get(resourcename);
+ }
+
+ public static Static createStatic(String resourcename, boolean isPackage) {
Static ret = (Static)cache.get(resourcename);
- if (ret == null) {
- Template t = Template.getTemplate(resourcename, null);
- if (t == null) return null;
- ret = new Static(resourcename, false);
- t.link();
- return ret;
- }
+ if (ret != null) return ret;
+ if (resourcename.indexOf('.') != -1)
+ createStatic(resourcename.substring(0, resourcename.lastIndexOf('.')), true);
+ ret = new Static(resourcename, isPackage);
return ret;
}
}
/** creates a new static representing a package */
- public Static(String resourcename) {
- this(resourcename, true);
- }
+ public Static(String resourcename) { this(resourcename, true); }
public Object get(String name, Scriptable start) {
if (name == null) return null;
if (name.equals("Function")) return JSObject.defaultObjects.get("Function", null);
if (name.equals("TypeError")) return JSObject.defaultObjects.get("TypeError", null);
- if ("xwt".equals(name)) return XWT.singleton;
+ if ("xwt".equals(name))
+ for(Scriptable cur = Context.enter().currentFunction; cur != null; cur = cur.getParentScope())
+ if (cur == this) return XWT.singleton;
+
if (!ispackage) return super.get(name, start);
return getStatic(resourcename + (resourcename.length() == 0 ? "" : ".") + name);
}
+ static { createStatic("", true); }
+
}