public Object getActive(final String name) {
    final String internalName = ACTIVE_VARIABLE + name;
    if (containsKey(internalName, false)) {
      trackAccess(internalName);
      return internalGet(this, internalName, false);
    }

    final EclipseContext originatingContext = this;

    runAndTrack(
        new RunAndTrack() {
          public boolean changed(IEclipseContext context) {
            IEclipseContext activeContext = getActiveLeaf();
            Object result = activeContext.get(name);
            originatingContext.set(internalName, result);
            return true;
          }
        });
    trackAccess(internalName);
    return internalGet(this, internalName, true);
  }
 public IEclipseContext getActiveChild() {
   trackAccess(ACTIVE_CHILD);
   return (EclipseContext) internalGet(this, ACTIVE_CHILD, true);
 }
 public Object get(String name) {
   trackAccess(name);
   return internalGet(this, name, false);
 }
 public Object getLocal(String name) {
   trackAccess(name);
   return internalGet(this, name, true);
 }
 public boolean containsKey(String name) {
   trackAccess(name);
   return containsKey(name, false);
 }