blob: 1866692808f1d8fa291d742a616d8b0f5f31c4d9 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}