| /********************************************************************** |
| * Copyright (c) 2007 IBM Corporation. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.ptp.pldt.mpi.analysis.view; |
| |
| import java.util.ArrayList; |
| import java.util.Enumeration; |
| import java.util.Iterator; |
| |
| 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.ptp.pldt.common.ScanReturn; |
| import org.eclipse.ptp.pldt.common.util.SourceInfo; |
| import org.eclipse.ptp.pldt.common.util.ViewActivater; |
| import org.eclipse.ptp.pldt.mpi.analysis.IDs; |
| import org.eclipse.ptp.pldt.mpi.analysis.analysis.BarrierTable; |
| import org.eclipse.ptp.pldt.mpi.analysis.analysis.BarrierTable.BarrierInfo; |
| |
| public class MatchingSet { |
| protected BarrierTable btable_ = null; |
| |
| public MatchingSet(BarrierTable table){ |
| btable_ = table; |
| } |
| |
| public void run(){ |
| IWorkspaceRoot wsResource = ResourcesPlugin.getWorkspace().getRoot(); |
| try { |
| int depth = IResource.DEPTH_INFINITE; |
| wsResource.deleteMarkers(IDs.matchingSetMarkerID, false, depth); |
| |
| } catch (CoreException e) { |
| System.out.println("RM: exception deleting markers."); //$NON-NLS-1$ |
| e.printStackTrace(); |
| } |
| |
| MPIArtifactMarkingVisitor visitor = new MPIArtifactMarkingVisitor(IDs.matchingSetMarkerID); |
| int count = 0; |
| |
| // create the markers for all the matched barriers |
| for(Enumeration e = btable_.getTable().elements(); e.hasMoreElements();){ |
| ArrayList barrierList = (ArrayList)e.nextElement(); |
| for(Iterator ii = barrierList.iterator(); ii.hasNext();){ |
| BarrierInfo barrier = (BarrierInfo)ii.next(); |
| count ++; |
| int parentID = count; |
| String name = "Barrier " + (barrier.getID()-4) + " (" + barrier.getMatchingSet().size() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| // create a marker for each parent(barrier) |
| ScanReturn sr = new ScanReturn(); |
| SourceInfo sourceInfo = barrier.getSourceInfo(); |
| String filename = barrier.getFileName(); |
| int line = sourceInfo.getStartingLine(); |
| String fn = barrier.getEnclosingFunc(); |
| ArtifactWithParent a = new ArtifactWithParent(filename, line, 1, fn, |
| "Artifact Call", sourceInfo, 0, parentID, name, barrier.getID()-4); //$NON-NLS-1$ |
| sr.addArtifact(a); |
| visitor.visitFile(barrier.getResource(), sr.getArtifactList()); |
| |
| for(Iterator i = barrier.getMatchingSet().iterator(); i.hasNext();){ |
| BarrierInfo matchedBar = (BarrierInfo)i.next(); |
| count ++; |
| int myID = count; |
| name = "Barrier " + (matchedBar.getID()-4); //$NON-NLS-1$ |
| sr = new ScanReturn(); |
| sourceInfo = matchedBar.getSourceInfo(); |
| filename = matchedBar.getFileName(); |
| line = sourceInfo.getStartingLine(); |
| fn = matchedBar.getEnclosingFunc(); |
| a = new ArtifactWithParent(filename, line, 1, fn,"Artifact Call", //$NON-NLS-1$ |
| sourceInfo, parentID, myID, name, matchedBar.getID()-4); |
| sr.addArtifact(a); |
| visitor.visitFile(matchedBar.getResource(), sr.getArtifactList()); |
| } |
| |
| } |
| } |
| // Done creating markers, now show the view |
| ViewActivater.activateView(IDs.matchingSetViewID); |
| } |
| |
| /* |
| protected void showNode(IASTNode node, String markerType) |
| { |
| Utility.Location l = Utility.getLocation(node); |
| |
| IAnnotationModel am = editor_.getDocumentProvider().getAnnotationModel(editor_.getEditorInput()); |
| |
| // We need to add an annotation type to the annotation painter (see SourceViewerDecorationSupport) |
| Annotation a = new Annotation(markerType, true, "Hi"); |
| int end = l.high_-l.low_+1; |
| Position p = new Position(l.low_, end); |
| am.addAnnotation(a, p); |
| } |
| */ |
| |
| } |