package com.google.dart.tools.ui.internal.typehierarchy;
import com.google.dart.engine.element.ClassElement;
import com.google.dart.engine.element.Element;
import com.google.dart.engine.services.util.HierarchyUtils;
import com.google.dart.tools.internal.corext.refactoring.util.ExecutionUtils;
import com.google.dart.tools.internal.corext.refactoring.util.RunnableEx;
import com.google.dart.tools.ui.DartElementComparator;
import com.google.dart.tools.ui.DartElementLabelProvider;
import com.google.dart.tools.ui.DartPluginImages;
import com.google.dart.tools.ui.actions.MemberFilterActionGroup;
import com.google.dart.tools.ui.internal.text.DartHelpContextIds;
import com.google.dart.tools.ui.internal.typehierarchy.TypeHierarchyContentProvider_OLD.TypeItem;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.PlatformUI;
import java.util.List;
/**
* {@link MethodsViewer} shows a list of methods of {@link ClassElement}.
*/
public class MethodsViewer extends TableViewer {
private class ShowInheritedMembersAction extends Action {
public ShowInheritedMembersAction() {
super(TypeHierarchyMessages.ShowInheritedMembersAction_label, IAction.AS_CHECK_BOX);
setDescription(TypeHierarchyMessages.ShowInheritedMembersAction_description);
setToolTipText(TypeHierarchyMessages.ShowInheritedMembersAction_tooltip);
DartPluginImages.setLocalImageDescriptors(this, "inher_co.gif"); //$NON-NLS-1$
PlatformUI.getWorkbench().getHelpSystem().setHelp(
this,
DartHelpContextIds.SHOW_INHERITED_ACTION);
}
@Override
public void run() {
BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
@Override
public void run() {
showInheritedMethods(isChecked());
}
});
}
}
private static final String TAG_SHOWINHERITED = "showinherited"; //$NON-NLS-1$
private boolean showInheritedMembers;
private ClassElement inputType;
private final IAction showInheritedMembersAction = new ShowInheritedMembersAction();
private final MemberFilterActionGroup fMemberFilterActionGroup;
public MethodsViewer(Composite parent) {
super(parent, SWT.FULL_SELECTION);
setContentProvider(new ArrayContentProvider());
setLabelProvider(new DartElementLabelProvider());
setComparator(new DartElementComparator());
fMemberFilterActionGroup = new MemberFilterActionGroup(
this,
"HierarchyMethodView",
false,
MemberFilterActionGroup.ALL_FILTERS);
addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof Element) {
if (((Element) element).isSynthetic()) {
return false;
}
}
return true;
}
});
}
/**
* Fills the {@link ToolBarManager} with items for the {@link MethodsViewer}.
*/
public void contributeToToolBar(IToolBarManager tbm) {
tbm.add(showInheritedMembersAction);
fMemberFilterActionGroup.contributeToToolBar(tbm);
}
/**
* Restores the state of the filter actions.
*/
public void restoreState(IMemento memento) {
fMemberFilterActionGroup.restoreState(memento);
{
boolean showInherited = Boolean.valueOf(memento.getString(TAG_SHOWINHERITED)).booleanValue();
showInheritedMembersAction.setChecked(showInherited);
showInheritedMethods(showInherited);
}
}
/**
* Saves the state of the filter actions.
*/
public void saveState(IMemento memento) {
fMemberFilterActionGroup.saveState(memento);
memento.putString(TAG_SHOWINHERITED, String.valueOf(showInheritedMembers));
}
public void setInputType(Object _inputType) {
if (_inputType instanceof TypeItem) {
_inputType = ((TypeItem) _inputType).element;
}
if (!(_inputType instanceof ClassElement)) {
setInput(null);
return;
}
this.inputType = (ClassElement) _inputType;
// may be no type
if (inputType == null) {
setInput(null);
return;
}
// show methods
ExecutionUtils.runLog(new RunnableEx() {
@Override
public void run() throws Exception {
List<Element> members;
if (showInheritedMembers) {
members = HierarchyUtils.getMembers(inputType, false);
} else {
members = HierarchyUtils.getDirectMembers(inputType, false);
}
setInput(members);
}
});
}
private void showInheritedMethods(boolean checked) {
showInheritedMembers = checked;
if (inputType != null) {
setInputType(inputType);
}
}
}