| /********************************************************************** |
| * 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.Iterator; |
| import java.util.List; |
| |
| 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.mpi.analysis.IDs; |
| import org.eclipse.ptp.pldt.mpi.analysis.analysis.MPICallGraphNode; |
| import org.eclipse.ptp.pldt.mpi.analysis.analysis.BarrierTable.BarrierInfo; |
| import org.eclipse.ptp.pldt.mpi.analysis.cdt.graphs.ICallGraph; |
| import org.eclipse.ptp.pldt.mpi.analysis.cdt.graphs.ICallGraphNode; |
| |
| public class BarrierArtifacts { |
| private ICallGraph CG_; |
| private ScanReturn scanReturn_; |
| private MPIArtifactMarkingVisitor visitor_; |
| private String markerID = IDs.barrierMarkerID; |
| public BarrierArtifacts(ICallGraph cg, MPIArtifactMarkingVisitor visitor){ |
| CG_ = cg; |
| visitor_ = visitor; |
| } |
| |
| public void run(){ |
| /* first clear all existing markers */ |
| IWorkspaceRoot wsResource = ResourcesPlugin.getWorkspace().getRoot(); |
| try { |
| int depth = IResource.DEPTH_INFINITE; |
| wsResource.deleteMarkers(markerID, false, depth); |
| |
| } catch (CoreException e) { |
| System.out.println("RM: exception deleting markers."); |
| e.printStackTrace(); |
| } |
| |
| for(ICallGraphNode n = CG_.topEntry(); n != null; n = n.topNext()){ |
| MPICallGraphNode node = (MPICallGraphNode)n; |
| List<BarrierInfo> barriers = node.getAllBarriers(); |
| scanReturn_ = new ScanReturn(); |
| for(Iterator<BarrierInfo> i = barriers.iterator(); i.hasNext();){ |
| BarrierInfo bar = i.next(); |
| SourceInfo sourceInfo = bar.getSourceInfo(); |
| ArtifactWithParent awp = new ArtifactWithParent(node.getFileName(), |
| sourceInfo.getStartingLine(), 1, node.getFuncName(), |
| "Artifact Call", sourceInfo, 0, 0, "", |
| bar.getID()-4); |
| scanReturn_.addArtifact(awp); |
| } |
| visitor_.visitFile(node.getResource(), scanReturn_.getArtifactList()); |
| } |
| } |
| } |