/** @generated */
 public ImageDescriptor getItemImageDescriptor(Object item) {
   IItemLabelProvider labelProvider =
       (IItemLabelProvider) adapterFactory.adapt(item, IItemLabelProvider.class);
   if (labelProvider != null) {
     return ExtendedImageRegistry.getInstance().getImageDescriptor(labelProvider.getImage(item));
   }
   return null;
 }
  /** @generated */
  protected ItemPropertyDescriptor createItemPropertyDescriptor(
      AdapterFactory adapterFactory,
      ResourceLocator resourceLocator,
      String displayName,
      String description,
      EStructuralFeature feature,
      boolean isSettable,
      boolean multiLine,
      boolean sortChoices,
      Object staticImage,
      String category,
      String[] filterFlags) {

    ComposedAdapterFactory composedAdapterFactory =
        new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);

    IItemPropertyDescriptorProvider descriptorProvider =
        (IItemPropertyDescriptorProvider)
            composedAdapterFactory.adapt(getTarget(), IItemPropertyDescriptorProvider.class);

    if (descriptorProvider != null)
      return descriptorProvider.createItemPropertyDescriptor(
          adapterFactory,
          resourceLocator,
          displayName,
          description,
          feature,
          isSettable,
          multiLine,
          sortChoices,
          staticImage,
          category,
          filterFlags);

    return super.createItemPropertyDescriptor(
        adapterFactory,
        resourceLocator,
        displayName,
        description,
        feature,
        isSettable,
        multiLine,
        sortChoices,
        staticImage,
        category,
        filterFlags);
  }
  private IStructuredSelection buildStructuredSelection(final EObject object) {
    if (object == null) {
      return new StructuredSelection();
    }
    final IItemPropertySource source =
        (IItemPropertySource) adapterFactory.adapt(object, IItemPropertySource.class);
    return new StructuredSelection() {
      public Object[] toArray() {
        return new Object[] {
          new URIBasedPropertySource(object, source, document) {

            protected IPropertyDescriptor createPropertyDescriptor(
                EObject object, IItemPropertyDescriptor itemPropertyDescriptor) {
              return new EFactoryPropertyDescriptor(object, itemPropertyDescriptor) {
                @Override
                protected CellEditor createEDataTypeCellEditor(
                    final EDataType eDataType, Composite composite) {
                  return new EFactoryEDataTypeCellEditor(eDataType, composite);
                }

                @Override
                public CellEditor createPropertyEditor(final Composite composite) {
                  CellEditor editor = null;
                  final Object feature = itemPropertyDescriptor.getFeature(this.object);
                  if (feature instanceof EReference) {
                    final EReference eReference = (EReference) feature;
                    editor =
                        new ExtendedDialogCellEditor(composite, getEditLabelProvider()) {
                          @Override
                          protected Object openDialogBox(Control cellEditorWindow) {
                            EObject result = null;
                            XtextEObjectSearchDialog2 dlg =
                                new XtextEObjectSearchDialog2(
                                    composite.getShell(),
                                    eObjectSearch,
                                    globalDescriptionLabelProvider);
                            eReference.getClass();
                            dlg.setInitialTypePattern(
                                eReference.getEReferenceType().getName(), false);
                            dlg.open();
                            Object[] dlgResult = dlg.getResult();
                            if (dlgResult != null && dlgResult.length == 1) {
                              result = ((IEObjectDescription) dlgResult[0]).getEObjectOrProxy();
                            }
                            // This is probably more of a work-around than a fix of the actual root
                            // cause :( but it works
                            if (result != null && result.eIsProxy())
                              result = EcoreUtil.resolve(result, eReference.eResource());
                            return result;
                          }
                        };
                  } else {
                    // return the default cell editor
                    editor = super.createPropertyEditor(composite);
                  }
                  return editor;
                }
              };
            }
          }
        };
      }
    };
  }