Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 153132 - [Model] Adapters not requested for IWorkbenchAdapter and IActionFilter
Summary: [Model] Adapters not requested for IWorkbenchAdapter and IActionFilter
Status: RESOLVED WORKSFORME
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.2   Edit
Hardware: All Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Tod Creasey CLA
QA Contact:
URL: http://www.eclipsezone.com/eclipse/fo...
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-08-08 13:43 EDT by Vincent Giguere CLA
Modified: 2007-06-19 14:43 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vincent Giguere CLA 2006-08-08 13:43:47 EDT
ActionExpression, BaseWorkbenchContentProvider and BaseWorkbenchLabelProvider do not look for adapters registered in the platform when working with an Object that either does not implement IAdaptable or the interface that it needs to adapt to.

In ActionExpression, the getActionFilter implementation should be something like:  (Added extra else expression around line 9)

private IActionFilter getActionFilter(Object object) {
    IActionFilter filter = null;    
    if (object instanceof IActionFilter) {
        filter = (IActionFilter) object;
    } else if (object instanceof IAdaptable) {
        filter = (IActionFilter) ((IAdaptable) object).getAdapter(IActionFilter.class);
    } else{
        filter = (IActionFilter) Platform.getAdapterManager().getAdapter(object,IActionFilter.class);
    }
    
 return filter;
}

Similarly, BaseWorkbenchContentProvider and BaseWorkbenchLabelProvider's getAdapter method should try to adapt Objects to IWorkbenchAdapter through registered Adapters or AdapterFactories if it cannot otherwise.

IWorkbenchAdapter adapter = (IWorkbenchAdapter) Platform.getAdapterManager().getAdapter(anElement, IWorkbenchAdapter.class);


Regards,
Vincent Giguère









protected IWorkbenchAdapter getAdapter(Object element) {
		IWorkbenchAdapter adapter = (IWorkbenchAdapter) Platform.getAdapterManager().getAdapter(element, IWorkbenchAdapter.class);
		if (!(element instanceof IAdaptable) || adapter != null) {
			return adapter;
		}
		return (IWorkbenchAdapter) ((IAdaptable) element).getAdapter(IWorkbenchAdapter.class);		
	}
Comment 1 Boris Bokowski CLA 2006-09-12 15:18:46 EDT
This one should have been fixed by the fix to bug 156581.
Comment 2 Tod Creasey CLA 2007-06-19 14:43:22 EDT
Marking WORKSFORME