/******************************************************************************* * Copyright (c) 2009, 2011 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.jdt.internal.ui.callhierarchy; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.jdt.internal.corext.callhierarchy.MethodWrapper; import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; import org.eclipse.jdt.internal.ui.JavaPluginImages; /** * Action class to refresh a single element in the call hierarchy. * *@since 3.6 */ public class RefreshElementAction extends Action { /** * The call hierarchy viewer. */ private final CallHierarchyViewer fViewer; /** * Creates the action to refresh a single element in the call hierarchy. * * @param viewer the call hierarchy viewer */ public RefreshElementAction(CallHierarchyViewer viewer) { fViewer= viewer; setText(CallHierarchyMessages.RefreshSingleElementAction_text); setToolTipText(CallHierarchyMessages.RefreshSingleElementAction_tooltip); setDescription(CallHierarchyMessages.RefreshSingleElementAction_description); JavaPluginImages.setLocalImageDescriptors(this, "refresh.gif");//$NON-NLS-1$ setActionDefinitionId(IWorkbenchCommandConstants.FILE_REFRESH); PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.CALL_HIERARCHY_REFRESH_SINGLE_ELEMENT_ACTION); setEnabled(true); } /** * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { IStructuredSelection selection= (IStructuredSelection)getSelection(); if (selection.isEmpty()) { fViewer.getPart().refresh(); return; } List<MethodWrapper> toExpand= new ArrayList<MethodWrapper>(); for (Iterator<?> iter= selection.iterator(); iter.hasNext();) { MethodWrapper element= (MethodWrapper)iter.next(); boolean isExpanded= fViewer.getExpandedState(element); element.removeFromCache(); if (isExpanded) { fViewer.setExpandedState(element, false); toExpand.add(element); } fViewer.refresh(element); } for (Iterator<MethodWrapper> iter= toExpand.iterator(); iter.hasNext();) { MethodWrapper elem= iter.next(); fViewer.setExpandedState(elem, true); } } /** * Gets the selection from the call hierarchy view part. * * @return the current selection */ private ISelection getSelection() { return fViewer.getSelection(); } }