| /********************************************************************** |
| * Copyright (c) 2008 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.upc.actions; |
| |
| import java.util.List; |
| |
| import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; |
| import org.eclipse.cdt.core.dom.upc.UPCLanguage; |
| import org.eclipse.cdt.core.model.ILanguage; |
| import org.eclipse.cdt.core.model.ITranslationUnit; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.ptp.pldt.common.ScanReturn; |
| import org.eclipse.ptp.pldt.common.actions.RunAnalyseHandlerBase; |
| import org.eclipse.ptp.pldt.common.util.ViewActivater; |
| import org.eclipse.ptp.pldt.upc.UPCArtifactMarkingVisitor; |
| import org.eclipse.ptp.pldt.upc.UPCIDs; |
| import org.eclipse.ptp.pldt.upc.UPCPlugin; |
| import org.eclipse.ptp.pldt.upc.analysis.UPCCASTVisitor; |
| |
| /** |
| * The "Find UPC Artifacts" action/command |
| * @author Beth Tibbitts |
| * |
| */ |
| public class RunAnalyseUPCcommandHandler extends RunAnalyseHandlerBase |
| { |
| /** |
| * Constructor for the "Run Analysis" action |
| */ |
| public RunAnalyseUPCcommandHandler() { |
| super("UPC", new UPCArtifactMarkingVisitor(UPCIDs.MARKER_ID), UPCIDs.MARKER_ID); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Returns UPC analysis artifacts for file |
| * |
| * @param file |
| * @param includes |
| * UPC include paths |
| * @return |
| */ |
| @Override |
| public ScanReturn doArtifactAnalysis(final ITranslationUnit tu, final List<String> includes) { |
| final ScanReturn msr = new ScanReturn(); |
| final String fileName = tu.getElementName(); |
| ILanguage lang; |
| try { |
| lang = tu.getLanguage(); |
| |
| IASTTranslationUnit atu = tu.getAST(); |
| if (lang.getId().equals(UPCLanguage.ID)) {// cdt40 |
| atu.accept(new UPCCASTVisitor(includes, fileName, msr)); |
| } |
| |
| } catch (CoreException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| return msr; |
| } |
| |
| /** |
| * Determination of whether or not a given filename is valid for UPC artifact analysis |
| * <br>TODO Consider using language or content-type instead of file extension? |
| * Re-visit after https://bugs.eclipse.org/bugs/show_bug.cgi?id=237331 is resolved (UPC content-type not recognized) |
| * |
| * @param filename |
| * @param isCPP is the project a C++ project or not |
| * @return |
| * |
| */ |
| @Override |
| protected boolean validForAnalysis(String filename, boolean isCPP) { |
| int loc = filename.lastIndexOf("."); |
| if (loc <= 0) // if no dot, or filename is ".foo", not valid for |
| // analysis. |
| return false; |
| String ext = filename.substring(loc + 1); |
| ext = ext.toLowerCase(); |
| boolean result = true; |
| if (ext.equals("upc")) |
| result = true; |
| else |
| result = false; |
| return result; |
| } |
| @Override |
| protected List<String> getIncludePath() { |
| return UPCPlugin.getDefault().getUPCIncludeDirs(); |
| } |
| @Override |
| protected void activateArtifactView() { |
| ViewActivater.activateView(UPCIDs.UPC_VIEW_ID); |
| } |
| } |