return key.cast(env);
} else if (value != null) {
return value;
} else if (key == TaskListener.class) {
if (listener == null) {
LogActionImpl la = getNode().getAction(LogActionImpl.class);
if (la == null) {
// TODO: use the default charset of the contextual Computer object
la = new LogActionImpl(getNode(), Charset.defaultCharset());
getNode().addAction(la);
}
listener = new StreamTaskListener(new FileOutputStream(la.getLogFile(), true));
}
return key.cast(listener);
} else if (Node.class.isAssignableFrom(key)) {
Computer c = get(Computer.class);
Node n = null;