/** may return a single object, or a collection */
 public static Object getNavigationSelectionObject() {
   if (!PlatformUI.getWorkbench().hasService(IHandlerService.class)) return null;
   IHandlerService hs =
       (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
   IEvaluationContext ctx = hs.getCurrentState();
   if (ctx == null) return null;
   return ctx.getDefaultVariable();
 }
 /* (non-Javadoc)
  * @see Expression#evaluate(IVariablePool)
  */
 public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
   if (fTypeName == null) return EvaluationResult.FALSE;
   Object var = context.getDefaultVariable();
   Object adapted = null;
   IAdapterManager manager = Platform.getAdapterManager();
   if (Expressions.isInstanceOf(var, fTypeName)) {
     adapted = var;
   } else {
     if (manager.hasAdapter(var, fTypeName)) {
       adapted = manager.getAdapter(var, fTypeName);
     } else {
       // if the adapter manager doesn't have an adapter contributed,
       // try to see if the variable itself implements IAdaptable
       if (var instanceof IAdaptable) {
         try {
           Class typeClazz = Class.forName(fTypeName, false, var.getClass().getClassLoader());
           adapted = ((IAdaptable) var).getAdapter(typeClazz);
         } catch (ClassNotFoundException e) {
         }
       }
       if (adapted == null) {
         // all attempts failed, return false
         return EvaluationResult.FALSE;
       }
     }
   }
   // the adapted result is null but hasAdapter returned true check
   // if the adapter is loaded.
   if (adapted == null) {
     if (manager.queryAdapter(var, fTypeName) == IAdapterManager.NOT_LOADED) {
       return EvaluationResult.NOT_LOADED;
     } else {
       return EvaluationResult.FALSE;
     }
   }
   return evaluateAnd(new DefaultVariable(context, adapted));
 }