Program: 662
Project: 662
Buggy source:
@Override public void initialise(){
  availableAssetDropdown=find("String_Node_Str",UIDropdownScrollable.class);
  editorTreeView=find("String_Node_Str",UITreeView.class);
  selectedScreenContainer=find("String_Node_Str",UIBox.class);
  availableAssetList.addAll(assetManager.getAvailableAssets(UIElement.class).stream().collect(Collectors.toList()));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(this.ASSET_URI));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(ContextMenuScreen.ASSET_URI));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(NUIEditorSettingsScreen.ASSET_URI));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(WidgetSelectionScreen.ASSET_URI));
  availableAssetList.sort(Comparator.comparing(ResourceUrn::toString));
  availableAssetDropdown.setOptions(availableAssetList);
  availableAssetDropdown.bindSelection(new Binding<ResourceUrn>(){
    @Override public ResourceUrn get(){
      return selectedUrn;
    }
    @Override public void set(    ResourceUrn value){
      if (selectedUrn != value) {
        selectFile(value);
      }
    }
  }
);
  editorTreeView.subscribeTreeViewUpdate(() -> {
    JsonTree tree=(JsonTree)(editorTreeView.getModel().getItem(0).getRoot());
    if (editorHistoryPosition < editorHistory.size() - 1) {
      editorHistory=editorHistory.subList(0,editorHistoryPosition + 1);
    }
    editorHistory.add(tree);
    editorHistoryPosition++;
    updateWidget(tree);
  }
);
  editorTreeView.subscribeItemMouseClick((event,item) -> {
    if (event.getMouseButton() == MouseInput.MOUSE_RIGHT) {
      item.setSelected(true);
      ContextMenuBuilder contextMenuBuilder=new ContextMenuBuilder();
      contextMenuBuilder.addOption(OPTION_COPY,this::copy,(JsonTree)item);
      contextMenuBuilder.addOption(OPTION_PASTE,this::paste,(JsonTree)item);
      if (((JsonTree)item).getValue().getType() == JsonTreeNode.ElementType.ARRAY && ((JsonTree)item).getValue().getKey().equals("String_Node_Str")) {
        contextMenuBuilder.addOption(OPTION_ADD_WIDGET,this::addWidget,(JsonTree)item);
      }
      if (((JsonTree)item).getValue().getType() == JsonTreeNode.ElementType.KEY_VALUE_PAIR) {
        contextMenuBuilder.addOption(OPTION_EDIT,this::edit,(JsonTree)item);
      }
      contextMenuBuilder.subscribeClose(() -> {
        item.setSelected(false);
      }
);
      contextMenuBuilder.show(getManager(),event.getMouse().getPosition());
    }
  }
);
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> {
    getManager().pushScreen(NUIEditorSettingsScreen.ASSET_URI,NUIEditorSettingsScreen.class);
  }
);
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> {
    copyJson();
  }
);
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> {
    pasteJson();
  }
);
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> {
    undo();
  }
);
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> {
    redo();
  }
);
}

Fixed version (ground truth):
@Override public void initialise(){
  availableAssetDropdown=find("String_Node_Str",UIDropdownScrollable.class);
  editorTreeView=find("String_Node_Str",UITreeView.class);
  selectedScreenContainer=find("String_Node_Str",UIBox.class);
  availableAssetList.addAll(assetManager.getAvailableAssets(UIElement.class).stream().collect(Collectors.toList()));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(ASSET_URI));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(ContextMenuScreen.ASSET_URI));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(NUIEditorSettingsScreen.ASSET_URI));
  availableAssetList.removeIf(asset -> asset.getRootUrn().equals(WidgetSelectionScreen.ASSET_URI));
  availableAssetList.sort(Comparator.comparing(ResourceUrn::toString));
  availableAssetDropdown.setOptions(availableAssetList);
  availableAssetDropdown.bindSelection(new Binding<ResourceUrn>(){
    @Override public ResourceUrn get(){
      return selectedUrn;
    }
    @Override public void set(    ResourceUrn value){
      if (selectedUrn != value) {
        selectFile(value);
      }
    }
  }
);
  editorTreeView.subscribeTreeViewUpdate(() -> {
    JsonTree tree=(JsonTree)(editorTreeView.getModel().getItem(0).getRoot());
    if (editorHistoryPosition < editorHistory.size() - 1) {
      editorHistory=editorHistory.subList(0,editorHistoryPosition + 1);
    }
    editorHistory.add(tree);
    editorHistoryPosition++;
    updateWidget(tree);
  }
);
  editorTreeView.subscribeItemMouseClick((event,item) -> {
    if (event.getMouseButton() == MouseInput.MOUSE_RIGHT) {
      item.setSelected(true);
      ContextMenuBuilder contextMenuBuilder=new ContextMenuBuilder();
      contextMenuBuilder.addOption(OPTION_COPY,this::copy,(JsonTree)item);
      contextMenuBuilder.addOption(OPTION_PASTE,this::paste,(JsonTree)item);
      JsonTreeNode.ElementType type=((JsonTree)item).getValue().getType();
      if (type == JsonTreeNode.ElementType.ARRAY && ((JsonTree)item).getValue().getKey().equals("String_Node_Str")) {
        contextMenuBuilder.addOption(OPTION_ADD_WIDGET,this::addWidget,(JsonTree)item);
      }
      if (type == JsonTreeNode.ElementType.KEY_VALUE_PAIR) {
        contextMenuBuilder.addOption(OPTION_EDIT,this::editKeyValuePair,(JsonTree)item);
      }
 else       if (type == JsonTreeNode.ElementType.OBJECT) {
        contextMenuBuilder.addOption(OPTION_EDIT,this::editObject,(JsonTree)item);
      }
 else       if (type == JsonTreeNode.ElementType.ARRAY) {
        contextMenuBuilder.addOption(OPTION_EDIT,this::editArray,(JsonTree)item);
      }
      contextMenuBuilder.subscribeClose(() -> item.setSelected(false));
      contextMenuBuilder.show(getManager(),event.getMouse().getPosition());
    }
  }
);
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> getManager().pushScreen(NUIEditorSettingsScreen.ASSET_URI,NUIEditorSettingsScreen.class));
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> copyJson());
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> pasteJson());
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> undo());
  WidgetUtil.trySubscribe(this,"String_Node_Str",button -> redo());
}