/** 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)); }