/** * Run analysis on a resource (e.g. File or Folder) Will descend to members of folder * * @param atu the resource * @param indent number of levels of nesting/recursion for prettyprinting * @param includes contains header files include paths from the Preference page * @return true if an error was encountered * @throws InterruptedException */ public boolean runResource( IProgressMonitor monitor, ICElement ce, int indent, List<String> includes) throws InterruptedException { indent += INDENT_INCR; ScanReturn results; boolean foundError = false; if (!monitor.isCanceled()) { if (ce instanceof ITranslationUnit) { IResource res = ce.getResource(); // null if not part of C // project in ws // cdt40: eventually shd be able to deal with just tu; // tu.getResource() can always work later... if (res instanceof IFile) { // shd always be true (but might be // null) IFile file = (IFile) res; String filename = file.getName(); // String fn2 = ce.getElementName();// shd be filename too // cdt40 boolean cpp = isCPPproject(ce); // if (AnalysisUtil.validForAnalysis(filename,cpp)) { if (validForAnalysis(filename, cpp)) { if (traceOn) { println(getSpaces(indent) + "file: " + filename); // $NON-NLS-1$ } results = analyse(monitor, (ITranslationUnit) ce, includes); foundError = foundError || results == null || results.wasError(); if (foundError) { int stopHere = 0; System.out.println( "found error on " //$NON-NLS-1$ + file.getName() + " " + stopHere); //$NON-NLS-1$ } if (traceOn) { println( "******** RunAnalyseBase, analysis complete; ScanReturn=" //$NON-NLS-1$ + results); } if (results != null) { // apply markers to the file processResults(results, file); } } else { if (traceOn) { println(getSpaces(indent) + "---omit: not valid file: " + filename); // $NON-NLS-1$ } } return foundError; } } else if (ce instanceof ICContainer) { ICContainer container = (ICContainer) ce; try { ICElement[] mems = container.getChildren(); for (int i = 0; i < mems.length; i++) { if (monitor.isCanceled()) { // this is usually hit while processing normal // analysis of e.g. container throw new InterruptedException(); } boolean err = runResource(monitor, mems[i], indent, includes); foundError = foundError || err; } } catch (CoreException e) { e.printStackTrace(); } } else if (ce instanceof ICProject) { ICProject proj = (ICProject) ce; try { ICElement[] mems = proj.getChildren(); for (int i = 0; i < mems.length; i++) { if (monitor.isCanceled()) { // this is usually hit while processing normal // analysis of e.g. container throw new InterruptedException(); } boolean err = runResource(monitor, mems[i], indent, includes); foundError = foundError || err; } } catch (CoreException e) { e.printStackTrace(); } } // container could be project or folder } // end if !monitor.isCanceled() else { String name = ""; // $NON-NLS-1$ // cdt40 name = ce.getElementName(); // String p=ce.getPath().toString(); System.out.println( "Cancelled by User, aborting analysis on subsequent files... " //$NON-NLS-1$ + name); throw new InterruptedException(); } return foundError; }
protected void processResults(ScanReturn results, IResource resource) { List<Artifact> artifacts = results.getArtifactList(); visitor.visitFile(resource, artifacts); }
public ScanReturn analyse(IProgressMonitor monitor, ITranslationUnit tu, List<String> includes) { if (traceOn) { println("RunAnalyseBase.analyse()..."); // $NON-NLS-1$ } // ScanReturn nr = null; String errMsg = null; monitor.subTask(Messages.RunAnalyseHandlerBase_42); String rawPath = tu.getLocationURI().toString(); if (traceOn) { println("RunAnalyseBase: file = " + rawPath); // $NON-NLS-1$ } monitor.subTask(Messages.RunAnalyseHandlerBase_on + rawPath); ScanReturn scanReturn = doArtifactAnalysis(tu, includes); monitor.worked(1); if (traceOn) { println("Artifact analysis complete..."); // $NON-NLS-1$ } int numArtifacts = scanReturn.getArtifactList().size(); cumulativeArtifacts = cumulativeArtifacts + numArtifacts; if (traceOn) { System.out.println( "Artifacts found for " //$NON-NLS-1$ + tu.getResource().getProjectRelativePath() + ": " + numArtifacts); //$NON-NLS-1$ } if (traceOn) { System.out.println(" Total # found: " + cumulativeArtifacts); // $NON-NLS-1$ } if (scanReturn == null) { System.out.println( "ScanReturn result is NULL. No results for " //$NON-NLS-1$ + tu.getResource().getProjectRelativePath()); errMsg = "Error: No results were returned from analysis of " //$NON-NLS-1$ + tu.getResource().getProjectRelativePath(); MessageDialog.openError(shell, "Error in Analysis", errMsg); // $NON-NLS-1$ } else { if (traceOn) { System.out.println( "RunAnalyzeBase: ScanReturn received for " //$NON-NLS-1$ + tu.getElementName()); } } if (scanReturn != null) { boolean wasError = scanReturn.wasError(); if (traceOn) { System.out.println("error occurred =" + wasError); // $NON-NLS-1$ } if (wasError) { System.out.println("RunAnalyseBase.analyse...Error..."); // $NON-NLS-1$ } } return scanReturn; }