blob: 66d69efa839588be33c21e8e81e38cb4f9e2fe86 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2021 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* QNX Software Systems - Initial API and implementation
* Andrew Gvozdev (Quoin Inc.)
* Gaetano Santoro (STMicroelectronics)
*******************************************************************************/
package org.eclipse.cdt.make.ui.views;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
import org.eclipse.cdt.core.settings.model.ICSourceEntry;
import org.eclipse.cdt.make.core.IMakeTarget;
import org.eclipse.cdt.make.core.IMakeTargetManager;
import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
import org.eclipse.cdt.make.internal.ui.dnd.AbstractContainerAreaDropAdapter;
import org.eclipse.cdt.make.internal.ui.dnd.AbstractSelectionDragAdapter;
import org.eclipse.cdt.make.internal.ui.dnd.FileTransferDropTargetListener;
import org.eclipse.cdt.make.internal.ui.dnd.LocalTransferDragSourceListener;
import org.eclipse.cdt.make.internal.ui.dnd.LocalTransferDropTargetListener;
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransfer;
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferDragSourceListener;
import org.eclipse.cdt.make.internal.ui.dnd.MakeTargetTransferDropTargetListener;
import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDragSourceListener;
import org.eclipse.cdt.make.internal.ui.dnd.TextTransferDropTargetListener;
import org.eclipse.cdt.make.ui.IMakeHelpContextIds;
import org.eclipse.cdt.make.ui.MakeContentProvider;
import org.eclipse.cdt.make.ui.MakeLabelProvider;
import org.eclipse.cdt.make.ui.TargetSourceContainer;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.bindings.BindingManagerEvent;
import org.eclipse.jface.bindings.IBindingManagerListener;
import org.eclipse.jface.util.DelegatingDragAdapter;
import org.eclipse.jface.util.DelegatingDropAdapter;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.IWorkingSetManager;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ResourceWorkingSetFilter;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.TextActionHandler;
import org.eclipse.ui.actions.WorkingSetFilterActionGroup;
import org.eclipse.ui.keys.IBindingService;
import org.eclipse.ui.part.DrillDownAdapter;
import org.eclipse.ui.part.ViewPart;
/**
* Implementation of Make Target View.
*
* @noextend This class is not intended to be subclassed by clients.
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class MakeView extends ViewPart {
private static final String TARGET_BUILD_LAST_COMMAND = "org.eclipse.cdt.make.ui.targetBuildLastCommand"; //$NON-NLS-1$
// Persistance tags.
private static final String TAG_SELECTION = "selection"; //$NON-NLS-1$
private static final String TAG_EXPANDED = "expanded"; //$NON-NLS-1$
private static final String TAG_CONTAINER = "container"; //$NON-NLS-1$
private static final String TAG_PATH = "path"; //$NON-NLS-1$
private static final String TAG_MAKE_TARGET = "makeTarget"; //$NON-NLS-1$
private static final String TAG_SOURCE_CONTAINER = "sourceContainer"; //$NON-NLS-1$
private static final String TAG_NAME = "name"; //$NON-NLS-1$
private static final String TAG_VERTICAL_POSITION = "verticalPosition"; //$NON-NLS-1$
private static final String TAG_HORIZONTAL_POSITION = "horizontalPosition"; //$NON-NLS-1$
private static final String TAG_WORKINGSET = "workingSet"; //$NON-NLS-1$
private Clipboard clipboard;
private BuildTargetAction buildTargetAction;
private RebuildLastTargetAction buildLastTargetAction;
private EditTargetAction editTargetAction;
private DeleteTargetAction deleteTargetAction;
private AddTargetAction newTargetAction;
private CopyTargetAction copyTargetAction;
private PasteTargetAction pasteTargetAction;
private TreeViewer fViewer;
private DrillDownAdapter drillDownAdapter;
private FilterEmtpyFoldersAction trimEmptyFolderAction;
private IBindingService bindingService;
private ResourceWorkingSetFilter workingSetFilter = new ResourceWorkingSetFilter();
private WorkingSetFilterActionGroup workingSetGroup;
private IMemento memento;
private IPropertyChangeListener workingSetListener = ev -> {
String property = ev.getProperty();
Object newValue = ev.getNewValue();
Object oldValue = ev.getOldValue();
IWorkingSet filterWorkingSet = workingSetFilter.getWorkingSet();
if (property == null) {
return;
}
if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property) && oldValue == filterWorkingSet) {
setWorkingSet(null);
} else if (IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE.equals(property)
&& newValue == filterWorkingSet) {
fViewer.refresh();
}
};
IPropertyChangeListener workingSetUpdater = new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
String property = event.getProperty();
if (WorkingSetFilterActionGroup.CHANGE_WORKING_SET.equals(property)) {
Object newValue = event.getNewValue();
if (newValue instanceof IWorkingSet) {
setWorkingSet((IWorkingSet) newValue);
} else if (newValue == null) {
setWorkingSet(null);
}
}
}
};
public MakeView() {
super();
}
@Override
public void setFocus() {
fViewer.getTree().setFocus();
}
@Override
public void createPartControl(Composite parent) {
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IMakeHelpContextIds.MAKE_VIEW);
fViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
fViewer.setUseHashlookup(true);
fViewer.setContentProvider(new MakeContentProvider());
fViewer.setLabelProvider(new MakeLabelProvider());
initFilters(fViewer);
initDragAndDrop();
drillDownAdapter = new DrillDownAdapter(fViewer);
fViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
handleDoubleClick(event);
}
});
fViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
handleSelectionChanged(event);
}
});
fViewer.setComparator(new ViewerComparator() {
@Override
public int category(Object element) {
if (element instanceof TargetSourceContainer) {
return 1;
} else if (element instanceof IResource) {
return 2;
}
return 3;
}
});
fViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
if (memento != null) {
// The working set selection needs to be restored prior to making the actions
// and connecting to the manager
restoreStateWorkingSetSelection(memento);
}
//Add the property changes after all of the UI work has been done.
IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager();
wsmanager.addPropertyChangeListener(workingSetListener);
getSite().setSelectionProvider(fViewer);
makeActions();
hookContextMenu();
contributeToActionBars();
updateActions((IStructuredSelection) fViewer.getSelection());
bindingService = PlatformUI.getWorkbench().getService(IBindingService.class);
if (bindingService != null) {
bindingService.addBindingManagerListener(bindingManagerListener);
}
if (memento != null) {
restoreState(memento);
}
memento = null;
}
/**
* Initialize drag and drop operations.
*/
private void initDragAndDrop() {
int opers = DND.DROP_COPY | DND.DROP_MOVE;
// LocalSelectionTransfer is used inside Make Target View
// TextTransfer is used to drag outside the View or eclipse
Transfer[] dragTransfers = { LocalSelectionTransfer.getTransfer(), MakeTargetTransfer.getInstance(),
TextTransfer.getInstance(), };
AbstractSelectionDragAdapter[] dragListeners = { new LocalTransferDragSourceListener(fViewer),
new MakeTargetTransferDragSourceListener(fViewer), new TextTransferDragSourceListener(fViewer), };
DelegatingDragAdapter delegatingDragAdapter = new DelegatingDragAdapter();
for (AbstractSelectionDragAdapter dragListener : dragListeners) {
delegatingDragAdapter.addDragSourceListener(dragListener);
}
fViewer.addDragSupport(opers, dragTransfers, delegatingDragAdapter);
Transfer[] dropTransfers = { LocalSelectionTransfer.getTransfer(), MakeTargetTransfer.getInstance(),
FileTransfer.getInstance(), TextTransfer.getInstance(), };
AbstractContainerAreaDropAdapter[] dropListeners = { new LocalTransferDropTargetListener(fViewer),
new MakeTargetTransferDropTargetListener(fViewer), new FileTransferDropTargetListener(fViewer),
new TextTransferDropTargetListener(fViewer), };
DelegatingDropAdapter delegatingDropAdapter = new DelegatingDropAdapter();
for (AbstractContainerAreaDropAdapter dropListener : dropListeners) {
delegatingDropAdapter.addDropTargetListener(dropListener);
}
fViewer.addDropSupport(opers | DND.DROP_DEFAULT, dropTransfers, delegatingDropAdapter);
}
private void makeActions() {
Shell shell = fViewer.getControl().getShell();
clipboard = new Clipboard(shell.getDisplay());
buildTargetAction = new BuildTargetAction(shell);
buildLastTargetAction = new RebuildLastTargetAction();
newTargetAction = new AddTargetAction(shell);
copyTargetAction = new CopyTargetAction(shell, clipboard, pasteTargetAction);
pasteTargetAction = new PasteTargetAction(shell, clipboard);
deleteTargetAction = new DeleteTargetAction(shell);
editTargetAction = new EditTargetAction(shell);
trimEmptyFolderAction = new FilterEmtpyFoldersAction(fViewer);
workingSetGroup = new WorkingSetFilterActionGroup(shell, workingSetUpdater);
workingSetGroup.setWorkingSet(getWorkingSet());
}
private void contributeToActionBars() {
IActionBars actionBars = getViewSite().getActionBars();
fillLocalPullDown(actionBars.getMenuManager());
fillLocalToolBar(actionBars.getToolBarManager());
TextActionHandler textActionHandler = new TextActionHandler(actionBars); // hooks handlers
textActionHandler.setCopyAction(copyTargetAction);
textActionHandler.setPasteAction(pasteTargetAction);
textActionHandler.setDeleteAction(deleteTargetAction);
actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), editTargetAction);
workingSetGroup.fillActionBars(actionBars);
}
private void fillLocalToolBar(IToolBarManager toolBar) {
toolBar.add(newTargetAction);
toolBar.add(editTargetAction);
toolBar.add(buildTargetAction);
toolBar.add(new Separator());
drillDownAdapter.addNavigationActions(toolBar);
toolBar.add(trimEmptyFolderAction);
}
private void fillLocalPullDown(IMenuManager manager) {
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
@Override
public void menuAboutToShow(IMenuManager manager) {
MakeView.this.fillContextMenu(manager);
updateActions((IStructuredSelection) fViewer.getSelection());
}
});
Menu menu = menuMgr.createContextMenu(fViewer.getControl());
fViewer.getControl().setMenu(menu);
// getSite().registerContextMenu(menuMgr, viewer);
}
protected void fillContextMenu(IMenuManager manager) {
manager.add(newTargetAction);
manager.add(editTargetAction);
manager.add(new Separator());
drillDownAdapter.addNavigationActions(manager);
manager.add(new Separator());
manager.add(copyTargetAction);
manager.add(pasteTargetAction);
manager.add(deleteTargetAction);
manager.add(new Separator());
manager.add(buildTargetAction);
manager.add(buildLastTargetAction);
// Other plug-ins can contribute there actions here
// manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
protected void handleDoubleClick(DoubleClickEvent event) {
buildTargetAction.run();
}
void handleSelectionChanged(SelectionChangedEvent event) {
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
updateActions(sel);
}
void updateActions(IStructuredSelection sel) {
newTargetAction.selectionChanged(sel);
buildTargetAction.selectionChanged(sel);
buildLastTargetAction.selectionChanged(sel);
deleteTargetAction.selectionChanged(sel);
editTargetAction.selectionChanged(sel);
copyTargetAction.selectionChanged(sel);
pasteTargetAction.selectionChanged(sel);
workingSetGroup.updateActionBars();
}
/**
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
@Override
public void dispose() {
if (clipboard != null) {
clipboard.dispose();
clipboard = null;
}
if (bindingService != null) {
bindingService.removeBindingManagerListener(bindingManagerListener);
bindingService = null;
}
IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager();
if (workingSetListener != null) {
wsmanager.removePropertyChangeListener(workingSetListener);
workingSetListener = null;
}
super.dispose();
}
private IBindingManagerListener bindingManagerListener = new IBindingManagerListener() {
@Override
public void bindingManagerChanged(BindingManagerEvent event) {
if (event.isActiveBindingsChanged()) {
String keyBinding = bindingService
.getBestActiveBindingFormattedFor(IWorkbenchCommandConstants.FILE_RENAME);
if (keyBinding != null)
editTargetAction
.setText(MakeUIPlugin.getResourceString("EditTargetAction.label") + "\t" + keyBinding); //$NON-NLS-1$ //$NON-NLS-2$
keyBinding = bindingService.getBestActiveBindingFormattedFor(IWorkbenchCommandConstants.EDIT_COPY);
if (keyBinding != null)
copyTargetAction
.setText(MakeUIPlugin.getResourceString("CopyTargetAction.label") + "\t" + keyBinding); //$NON-NLS-1$ //$NON-NLS-2$
keyBinding = bindingService.getBestActiveBindingFormattedFor(IWorkbenchCommandConstants.EDIT_PASTE);
if (keyBinding != null)
pasteTargetAction
.setText(MakeUIPlugin.getResourceString("PasteTargetAction.label") + "\t" + keyBinding); //$NON-NLS-1$ //$NON-NLS-2$
keyBinding = bindingService.getBestActiveBindingFormattedFor(IWorkbenchCommandConstants.EDIT_DELETE);
if (keyBinding != null)
deleteTargetAction
.setText(MakeUIPlugin.getResourceString("DeleteTargetAction.label") + "\t" + keyBinding); //$NON-NLS-1$ //$NON-NLS-2$
keyBinding = bindingService.getBestActiveBindingFormattedFor(TARGET_BUILD_LAST_COMMAND);
if (keyBinding != null)
buildLastTargetAction
.setText(MakeUIPlugin.getResourceString("BuildLastTargetAction.label") + "\t" + keyBinding); //$NON-NLS-1$ //$NON-NLS-2$
}
}
};
/**
* Returns the working set filter for this view.
*
* @return the working set
* @since 8.1
*/
public IWorkingSet getWorkingSet() {
return workingSetFilter.getWorkingSet();
}
/**
* Adds the filters to the viewer.
*
* @param viewer
* the viewer
*/
void initFilters(TreeViewer viewer) {
viewer.addFilter(workingSetFilter);
}
private void saveState(IMemento memento, Object[] elements) {
for (Object element : elements) {
if (element instanceof IMakeTarget) {
IMakeTarget makeTarget = (IMakeTarget) element;
IContainer c = makeTarget.getContainer();
if (c.getFullPath() != null) {
IMemento elementMem = memento.createChild(TAG_MAKE_TARGET);
elementMem.putString(TAG_PATH, c.getFullPath().toPortableString());
elementMem.putString(TAG_NAME, makeTarget.getName());
}
} else if (element instanceof TargetSourceContainer) {
TargetSourceContainer targetSourceContainer = (TargetSourceContainer) element;
IContainer c = targetSourceContainer.getContainer();
if (c.getFullPath() != null) {
IMemento elementMem = memento.createChild(TAG_SOURCE_CONTAINER);
elementMem.putString(TAG_PATH, c.getFullPath().toPortableString());
}
} else if (element instanceof IContainer) {
IContainer c = (IContainer) element;
if (c.getLocation() != null) {
IMemento elementMem = memento.createChild(TAG_CONTAINER);
elementMem.putString(TAG_PATH, c.getFullPath().toPortableString());
}
} else {
// Unexpected/unknown type, expansion or selection of it will not be restored
}
}
}
private List<Object> restoreStateElements(IMemento memento) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IMakeTargetManager makeTargetManager = MakeCorePlugin.getDefault().getTargetManager();
List<Object> elements = new ArrayList<>();
IMemento[] makeTargetMementos = memento.getChildren(TAG_MAKE_TARGET);
for (IMemento mem : makeTargetMementos) {
String path = mem.getString(TAG_PATH);
String name = mem.getString(TAG_NAME);
if (path == null || name == null) {
continue;
}
IResource res = root.findMember(Path.fromPortableString(path));
if (res instanceof IContainer) {
IContainer container = (IContainer) res;
try {
IMakeTarget makeTarget = makeTargetManager.findTarget(container, name);
if (makeTarget != null) {
elements.add(makeTarget);
}
} catch (CoreException e) {
continue;
}
}
}
IMemento[] sourceContainerMementos = memento.getChildren(TAG_SOURCE_CONTAINER);
for (IMemento mem : sourceContainerMementos) {
String path = mem.getString(TAG_PATH);
if (path == null) {
continue;
}
IResource res = root.findMember(Path.fromPortableString(path));
if (res == null) {
continue;
}
IProject project = res.getProject();
ICSourceEntry[] srcEntries = getSourceEntries(project);
for (ICSourceEntry srcEntry : srcEntries) {
if (srcEntry.getFullPath().equals(res.getFullPath())) {
elements.add(new TargetSourceContainer(srcEntry));
}
}
}
IMemento[] containerMementos = memento.getChildren(TAG_CONTAINER);
for (IMemento mem : containerMementos) {
String path = mem.getString(TAG_PATH);
if (path == null) {
continue;
}
IResource res = root.findMember(Path.fromPortableString(path));
if (res == null) {
continue;
}
elements.add(res);
}
return elements;
}
@Override
public void saveState(IMemento memento) {
if (fViewer == null) {
if (this.memento != null) { //Keep the old state;
memento.putMemento(this.memento);
}
return;
}
//save expanded elements
Tree tree = fViewer.getTree();
Object[] expandedElements = fViewer.getExpandedElements();
if (expandedElements.length > 0) {
IMemento expandedMem = memento.createChild(TAG_EXPANDED);
saveState(expandedMem, expandedElements);
}
//save selection
Object[] elements = ((IStructuredSelection) fViewer.getSelection()).toArray();
if (elements.length > 0) {
IMemento selectionMem = memento.createChild(TAG_SELECTION);
saveState(selectionMem, elements);
}
//save vertical position
ScrollBar bar = tree.getVerticalBar();
int position = bar != null ? bar.getSelection() : 0;
memento.putInteger(TAG_VERTICAL_POSITION, position);
//save horizontal position
bar = tree.getHorizontalBar();
position = bar != null ? bar.getSelection() : 0;
memento.putInteger(TAG_HORIZONTAL_POSITION, position);
//Save the working set away
if (workingSetFilter.getWorkingSet() != null) {
String wsname = workingSetFilter.getWorkingSet().getName();
if (wsname != null) {
memento.putString(TAG_WORKINGSET, wsname);
}
}
}
private void restoreState(IMemento memento) {
IMemento expandedMemento = memento.getChild(TAG_EXPANDED);
if (expandedMemento != null) {
fViewer.setExpandedElements(restoreStateElements(expandedMemento).toArray());
}
IMemento selectionMemento = memento.getChild(TAG_SELECTION);
if (selectionMemento != null) {
fViewer.setSelection(new StructuredSelection(restoreStateElements(selectionMemento)));
}
Tree tree = fViewer.getTree();
ScrollBar bar = tree.getVerticalBar();
if (bar != null) {
Integer position = memento.getInteger(TAG_VERTICAL_POSITION);
if (position != null) {
bar.setSelection(position);
}
}
bar = tree.getHorizontalBar();
if (bar != null) {
Integer position = memento.getInteger(TAG_HORIZONTAL_POSITION);
if (position != null) {
bar.setSelection(position);
}
}
}
private void restoreStateWorkingSetSelection(IMemento memento) {
String wsname = memento.getString(TAG_WORKINGSET);
if (wsname != null && !wsname.isEmpty()) {
IWorkingSetManager wsmanager = getViewSite().getWorkbenchWindow().getWorkbench().getWorkingSetManager();
IWorkingSet workingSet = wsmanager.getWorkingSet(wsname);
if (workingSet != null) {
workingSetFilter.setWorkingSet(workingSet);
}
}
}
/**
* @since 8.1
*/
public void setWorkingSet(IWorkingSet workingSet) {
Object[] expanded = fViewer.getExpandedElements();
ISelection selection = fViewer.getSelection();
workingSetFilter.setWorkingSet(workingSet);
fViewer.refresh();
fViewer.setExpandedElements(expanded);
if (selection.isEmpty() == false && selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
fViewer.reveal(structuredSelection.getFirstElement());
}
}
@Override
public void init(IViewSite site, IMemento memento) throws PartInitException {
super.init(site, memento);
this.memento = memento;
}
/**
* Get source entries for default setting configuration (i.e. configuration shown in UI).
*/
private static ICSourceEntry[] getSourceEntries(IProject project) {
ICProjectDescriptionManager mgr = CCorePlugin.getDefault().getProjectDescriptionManager();
ICProjectDescription prjDescription = mgr.getProjectDescription(project, false);
if (prjDescription != null) {
ICConfigurationDescription cfgDescription = prjDescription.getDefaultSettingConfiguration();
if (cfgDescription != null) {
ICSourceEntry[] srcEntries = cfgDescription.getResolvedSourceEntries();
return srcEntries;
}
}
return new ICSourceEntry[0];
}
}