| /**************************************************************************** |
| * Tuning and Analysis Utilities |
| * http://www.cs.uoregon.edu/research/paracomp/tau |
| **************************************************************************** |
| * Copyright (c) 1997-2006 |
| * Department of Computer and Information Science, University of Oregon |
| * Advanced Computing Laboratory, Los Alamos National Laboratory |
| * Research Center Juelich, ZAM Germany |
| * |
| * 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: |
| * Wyatt Spear - initial API and implementation |
| ****************************************************************************/ |
| package org.eclipse.ptp.etfw.tau.selinst.popup.actions; |
| |
| import java.util.HashSet; |
| import java.util.Iterator; |
| |
| import org.eclipse.cdt.core.model.ICElement; |
| import org.eclipse.cdt.core.model.IFunctionDeclaration; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.ptp.etfw.tau.selinst.Selector; |
| import org.eclipse.ptp.etfw.tau.selinst.messages.Messages; |
| import org.eclipse.ui.IActionDelegate; |
| import org.eclipse.ui.IObjectActionDelegate; |
| import org.eclipse.ui.IWorkbenchPart; |
| |
| /** |
| * Action to clear instrumention from a CDT/Photran element |
| * @author wspear |
| * |
| */ |
| public class Clear implements IObjectActionDelegate { |
| |
| /** |
| * Constructor for Action1. |
| */ |
| public Clear() { |
| super(); |
| } |
| IStructuredSelection selection; |
| /** |
| * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) |
| */ |
| public void setActivePart(IAction action, IWorkbenchPart targetPart) { |
| } |
| |
| /** |
| * @see IActionDelegate#run(IAction) |
| */ |
| public void run(IAction action) { |
| //If nothing is selected we can not proceed |
| if(selection==null) |
| { |
| System.out.println(Messages.Clear_NoSelection); |
| return; |
| } |
| /** |
| * The current element being examined for removal |
| */ |
| ICElement cbit=null; |
| /** |
| * The iterator over all selected elements |
| */ |
| Iterator<ICElement> selit = selection.iterator(); |
| /** |
| * The list of selected files |
| */ |
| HashSet<String> selfiles=new HashSet<String>(); |
| /** |
| * The list of selected routines |
| */ |
| HashSet<String> selrouts=new HashSet<String>(); |
| /** |
| * List of file-level 'simple' selection commands |
| */ |
| HashSet<String> clearFileSelSec=new HashSet<String>(); |
| /** |
| * List of routine-level 'simple' selection commands |
| */ |
| HashSet<String> clearRoutSelSec=new HashSet<String>(); |
| /** |
| * List of other, old-style instrumentation commands to clear |
| */ |
| HashSet<String> clearOtherSelSec=new HashSet<String>(); |
| /** |
| * The component of the selection line after the variable selection type |
| */ |
| String selSect=null; |
| int type; |
| int tot=0; |
| while(selit.hasNext()) |
| { |
| cbit=selit.next(); |
| type = cbit.getElementType(); |
| //For Selected Routines: |
| if(type==ICElement.C_FUNCTION) |
| { |
| //Get the function declaration |
| String fullsig = Selector.getFullSigniture((IFunctionDeclaration)cbit); |
| clearRoutSelSec.add(" routine=\""+fullsig+"\""); //$NON-NLS-1$ //$NON-NLS-2$ |
| //Selected routines |
| selrouts.add(fullsig); |
| // selSect=" file=\""+cbit.getUnderlyingResource().getName()+"\" routine=\""+fullsig+"\""; |
| // |
| // for(int i=0;i<SelectiveInstrument.instTypes.length;i++) |
| // { |
| // clearRoutSelSec.add(SelectiveInstrument.instTypes[i]+selSect); |
| // } |
| tot++; |
| } |
| else |
| if(type == ICElement.C_UNIT) |
| { |
| selfiles.add(cbit.getElementName()); |
| |
| selSect=" file=\""+cbit.getElementName()+"\" routine=\"#\""; //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| clearFileSelSec.add("file=\""+cbit.getElementName()+"\""); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| // for(int i=0;i<SelectiveInstrument.instTypes.length;i++) |
| // { |
| // clearFileSelSec.add(SelectiveInstrument.instTypes[i]+selSect); |
| // } |
| |
| clearOtherSelSec.add("file=\""+cbit.getElementName()+"\""); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| clearOtherSelSec.add("entry file=\""+cbit.getUnderlyingResource().getName()+"\" routine=\"#\" code = \""); //$NON-NLS-1$ //$NON-NLS-2$ |
| tot++; |
| } |
| else |
| if(type==-1) |
| { |
| String fortclass =cbit.getClass().getName(); |
| if(fortclass.equals("org.eclipse.photran.internal.core.model.FortranElement$Subroutine")||fortclass.equals("org.eclipse.photran.internal.core.model.FortranElement$MainProgram")) //$NON-NLS-1$ //$NON-NLS-2$ |
| { |
| selrouts.add("#"+cbit.getElementName().toUpperCase()); //$NON-NLS-1$ |
| selSect=" file=\""+cbit.getUnderlyingResource().getName()+"\" routine=\""+"#"+cbit.getElementName().toUpperCase()+"\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ |
| |
| for(int i=0;i<SelectiveInstrument.instTypes.length;i++) |
| { |
| clearOtherSelSec.add(SelectiveInstrument.instTypes[i]+selSect); |
| } |
| } |
| tot++; |
| } |
| } |
| if(tot>0) |
| { |
| Selector excludeinst = new Selector(cbit.getCProject().getResource().getLocation().toOSString()); |
| excludeinst.clearFile(selfiles); |
| excludeinst.clearRout(selrouts); |
| |
| excludeinst.clearGenInst(clearOtherSelSec); |
| excludeinst.clearInstrumentSection(clearFileSelSec); |
| excludeinst.clearInstrumentSection(clearRoutSelSec); |
| } |
| } |
| |
| /** |
| * @see IActionDelegate#selectionChanged(IAction, ISelection) |
| */ |
| public void selectionChanged(IAction action, ISelection selection) { |
| if (selection instanceof IStructuredSelection) |
| this.selection = (IStructuredSelection) selection; |
| else |
| { //if the selection is invalid, stop |
| this.selection = null; |
| System.out.println(Messages.Clear_InvalidSelection); |
| } |
| } |
| |
| } |