/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* 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
*
* Contributors:
* Elliott Baron <ebaron@redhat.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.valgrind.massif;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.linuxtools.internal.valgrind.ui.ValgrindUIPlugin;
import org.eclipse.linuxtools.profiling.launch.IRemoteFileProxy;
import org.eclipse.linuxtools.profiling.launch.RemoteProxyManager;
import org.eclipse.linuxtools.profiling.ui.ProfileUIUtils;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
public class MassifPlugin extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "org.eclipse.linuxtools.valgrind.massif"; //$NON-NLS-1$
public static final String EDITOR_ID = PLUGIN_ID + ".chartEditor"; //$NON-NLS-1$
// The shared instance
private static MassifPlugin plugin;
// Needed for source lookup on massif output, since massif only supplies filenames
// and not full paths
private ISourceLocator locator;
public static final String TOOL_ID = "org.eclipse.linuxtools.valgrind.launch.massif"; //$NON-NLS-1$
/**
* The constructor
*/
public MassifPlugin() {
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
@Override
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
public static FontMetrics getFontMetrics(Control control) {
GC gc = new GC(control);
gc.setFont(control.getFont());
FontMetrics fontMetrics = gc.getFontMetrics();
gc.dispose();
return fontMetrics;
}
public void openEditorForNode(MassifHeapTreeNode element) {
IRemoteFileProxy proxy = null;
try {
proxy = RemoteProxyManager.getInstance().getFileProxy(ValgrindUIPlugin.getDefault().getProfiledProject());
} catch (CoreException e1) {
e1.printStackTrace();
return;
}
IFileStore fs = proxy.getResource(element.getFilename());
// New versions of massif (e.g. 3.10) prints the full path
if(fs.fetchInfo().exists()) {
try {
ProfileUIUtils.openEditorAndSelect(element.getFilename(), element.getLine(), ValgrindUIPlugin.getDefault().getProfiledProject());
} catch (BadLocationException | CoreException e) {
// do nothing, the editor will not open.
e.printStackTrace();
}
}
else {
// do source lookup
if (locator instanceof ISourceLookupDirector) {
Object obj = ((ISourceLookupDirector) locator).getSourceElement(element.getFilename());
try {
if (obj instanceof IFile) {
ProfileUIUtils.openEditorAndSelect(((IFile)obj), element.getLine());
}
} catch (PartInitException|BadLocationException e) {
e.printStackTrace();
}
}
}
}
protected void setSourceLocator(ISourceLocator locator) {
this.locator = locator;
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static MassifPlugin getDefault() {
return plugin;
}
}