- /** runs statics, resolves string references to other templates into actual Template instance references, and sets <tt>change</tt> as needed */
- void link() { link(false); }
-
- /** same as link(), except that with a true value, it will force a re-link */
- private void link(boolean force) {
-
- if (staticscript != null) try {
- Scriptable s = Static.getStatic(nodeName);
- if (staticscript != null) {
- Script temp = staticscript;
- ((InterpretedScript)temp).setParentScope(s); // so we know how to handle Static.get("xwt")
- staticscript = null;
- temp.exec(Context.enter(), s);
- }
- } catch (EcmaError e) {
- if (Log.on) Log.log(this, "WARNING: uncaught interpreter exception: " + e.getMessage());
- if (Log.on) Log.log(this, " thrown while executing <static/> block for " + nodeName +
- " at " + e.getSourceName() + ":" + e.getLineNumber());
- } catch (JavaScriptException e) {
- if (Log.on) Log.log(this, "WARNING: uncaught ecmascript exception: " + e.getMessage());
- if (Log.on) Log.log(this, " thrown while executing <static/> block for " + nodeName + " at " + e.sourceFile + ":" + e.line);
- }
-
- if (!(force || (preapply != null && _preapply == null) || (postapply != null && _postapply == null))) return;
-
- if (preapply != null) {
- if (_preapply == null) _preapply = new Template[preapply.length];
- for(int i=0; i<_preapply.length; i++) {
- Template t = getTemplate(preapply[i], importlist);
- if (t != _preapply[i]) changed = true;
- _preapply[i] = t;
- }
- }
- if (postapply != null) {
- if (_postapply == null) _postapply = new Template[postapply.length];
- for(int i=0; i<_postapply.length; i++) {
- Template t = getTemplate(postapply[i], importlist);
- if (t != _postapply[i]) changed = true;
- _postapply[i] = t;
- }
- }
-
- for(int i=0; children != null && i<children.length; i++) children[i].link(force);
- }