Program: 11772
Project: 11772
Buggy source:
private TreeViewer init(Composite parent,Foundation foundation){
  ObservableListTreeContentProvider cp=new ObservableListTreeContentProvider(new TreeFactoryImpl(),new TreeStructureAdvisorImpl());
  IObservableSet set=cp.getKnownElements();
  IObservableMap[] map=new IObservableMap[4];
  map[0]=EMFProperties.value(ProjectPackage.Literals.PROJECT__SHORTNAME).observeDetail(set);
  map[1]=EMFProperties.value(ProjectPackage.Literals.PROJECT__COMMITTERS).observeDetail(set);
  map[2]=EMFProperties.value(FeaturePath.fromList(ProjectPackage.Literals.COMMITTER_SHIP__PERSON,ProjectPackage.Literals.PERSON__FIRSTNAME)).observeDetail(set);
  map[3]=EMFProperties.value(FeaturePath.fromList(ProjectPackage.Literals.COMMITTER_SHIP__PERSON,ProjectPackage.Literals.PERSON__LASTNAME)).observeDetail(set);
  IEMFListProperty projects=EMFProperties.list(ProjectPackage.Literals.FOUNDATION__PROJECTS);
  TreeViewer viewer=new TreeViewer(parent);
  viewer.setContentProvider(cp);
  viewer.setLabelProvider(new TreeLabelProviderImpl(map));
  viewer.setInput(projects.observe(foundation));
  MenuManager mgr=new MenuManager();
  mgr.add(new GroupMarker("String_Node_Str"));
  viewer.getControl().setMenu(mgr.createContextMenu(viewer.getControl()));
  site.registerContextMenu(Activator.PLUGIN_ID + "String_Node_Str",mgr,viewer);
  site.setSelectionProvider(viewer);
  ColumnViewerToolTipSupportImpl.enableFor(viewer,toolkit);
  IObservableValue treeObs=ViewerProperties.singleSelection().observe(viewer);
  treeObs.addValueChangeListener(new IValueChangeListener(){
    public void handleValueChange(    ValueChangeEvent event){
      ISourceProviderService s=(ISourceProviderService)site.getService(ISourceProviderService.class);
      ResourceProvider p=(ResourceProvider)s.getSourceProvider(ResourceProvider.MODEL_RESOURCE_NAME);
      if (event.diff.getNewValue() instanceof Project) {
        Project pr=(Project)event.diff.getNewValue();
        master.setValue(pr);
        p.setCommitter(null);
        p.setProject(pr);
      }
 else       if (event.diff.getNewValue() != null) {
        CommitterShip cm=(CommitterShip)event.diff.getNewValue();
        master.setValue(cm.getProject());
        p.setCommitter(cm);
        p.setProject(cm.getProject());
      }
 else {
        p.setCommitter(null);
        p.setProject(null);
      }
    }
  }
);
  return viewer;
}

Fixed version (ground truth):
private TreeViewer init(Composite parent,Foundation foundation){
  TreeViewer viewer=new TreeViewer(parent);
  ObservableListTreeContentProvider cp=new ObservableListTreeContentProvider(new TreeFactoryImpl(),new TreeStructureAdvisorImpl());
  viewer.setContentProvider(cp);
  IObservableSet set=cp.getKnownElements();
  IObservableMap[] map=new IObservableMap[4];
  map[0]=EMFProperties.value(ProjectPackage.Literals.PROJECT__SHORTNAME).observeDetail(set);
  map[1]=EMFProperties.value(ProjectPackage.Literals.PROJECT__COMMITTERS).observeDetail(set);
  map[2]=EMFProperties.value(FeaturePath.fromList(ProjectPackage.Literals.COMMITTER_SHIP__PERSON,ProjectPackage.Literals.PERSON__FIRSTNAME)).observeDetail(set);
  map[3]=EMFProperties.value(FeaturePath.fromList(ProjectPackage.Literals.COMMITTER_SHIP__PERSON,ProjectPackage.Literals.PERSON__LASTNAME)).observeDetail(set);
  viewer.setLabelProvider(new TreeLabelProviderImpl(map));
  IEMFListProperty projects=EMFProperties.list(ProjectPackage.Literals.FOUNDATION__PROJECTS);
  viewer.setInput(projects.observe(foundation));
  MenuManager mgr=new MenuManager();
  mgr.add(new GroupMarker("String_Node_Str"));
  viewer.getControl().setMenu(mgr.createContextMenu(viewer.getControl()));
  site.registerContextMenu(Activator.PLUGIN_ID + "String_Node_Str",mgr,viewer);
  site.setSelectionProvider(viewer);
  ColumnViewerToolTipSupportImpl.enableFor(viewer,toolkit);
  IObservableValue treeObs=ViewerProperties.singleSelection().observe(viewer);
  treeObs.addValueChangeListener(new IValueChangeListener(){
    public void handleValueChange(    ValueChangeEvent event){
      ISourceProviderService s=(ISourceProviderService)site.getService(ISourceProviderService.class);
      ResourceProvider p=(ResourceProvider)s.getSourceProvider(ResourceProvider.MODEL_RESOURCE_NAME);
      if (event.diff.getNewValue() instanceof Project) {
        Project pr=(Project)event.diff.getNewValue();
        master.setValue(pr);
        p.setCommitter(null);
        p.setProject(pr);
      }
 else       if (event.diff.getNewValue() != null) {
        CommitterShip cm=(CommitterShip)event.diff.getNewValue();
        master.setValue(cm.getProject());
        p.setCommitter(cm);
        p.setProject(cm.getProject());
      }
 else {
        p.setCommitter(null);
        p.setProject(null);
      }
    }
  }
);
  return viewer;
}