⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setbugdatabaseinfo.java

📁 A static analysis tool to find bugs in Java programs
💻 JAVA
字号:
/* * FindBugs - Find bugs in Java programs * Copyright (C) 2003-2005 William Pugh * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */package edu.umd.cs.findbugs.workflow;import java.awt.PageAttributes.OriginType;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Set;import org.dom4j.DocumentException;import edu.umd.cs.findbugs.BugCollection;import edu.umd.cs.findbugs.BugInstance;import edu.umd.cs.findbugs.DetectorFactoryCollection;import edu.umd.cs.findbugs.Project;import edu.umd.cs.findbugs.SortedBugCollection;import edu.umd.cs.findbugs.SourceLineAnnotation;import edu.umd.cs.findbugs.ba.SourceFinder;import edu.umd.cs.findbugs.config.CommandLine;import edu.umd.cs.findbugs.filter.Filter;/** * Java main application to compute update a historical bug collection with * results from another build/analysis. *  * @author William Pugh */public class SetBugDatabaseInfo {	/**	 * 	 */	private static final String USAGE = "Usage: <cmd> " 			+ " [options] [<oldData> [<newData>]]";	static class SetInfoCommandLine extends CommandLine {		String revisionName;		String exclusionFilterFile;	 boolean withMessages = false;		long revisionTimestamp = 0L;		public  List<String> sourcePaths = new LinkedList<String>();		public  List<String> searchSourcePaths = new LinkedList<String>();		SetInfoCommandLine() {			addOption("-name", "name", "set name for (last) revision");			addOption("-timestamp", "when", "set timestamp for (last) revision");			addSwitch("-resetSource", "remove all source search paths");			addOption("-source", "directory", "Add this directory to the source search path");			addOption("-findSource", "directory", "Find and add all relevant source directions contained within this directory");			addOption("-suppress", "filter file", "Suppress warnings matched by this file (replaces previous suppressions)");			addSwitch("-withMessages", "Add bug descriptions");		}		@Override		protected void handleOption(String option, String optionExtraPart)				throws IOException {			if (option.equals("-withMessages"))				withMessages = true;			else if (option.equals("-resetSource"))				sourcePaths.clear();		else		   throw new IllegalArgumentException("no option " + option);		}		@Override		protected void handleOptionWithArgument(String option, String argument)				throws IOException {			if (option.equals("-name"))				revisionName = argument;			else if (option.equals("-suppress"))				exclusionFilterFile = argument;			else if (option.equals("-timestamp"))				revisionTimestamp = Date.parse(argument);			else if (option.equals("-source"))				sourcePaths.add(argument);			else if (option.equals("-findSource"))				searchSourcePaths.add(argument);			else				throw new IllegalArgumentException("Can't handle option "						+ option);		}	}	public static void main(String[] args) throws IOException,			DocumentException {		DetectorFactoryCollection.instance();		SetInfoCommandLine commandLine = new SetInfoCommandLine();		int argCount = commandLine.parse(args, 0, 2, USAGE);		Project project = new Project();		BugCollection origCollection;		origCollection = new SortedBugCollection();		if (argCount < args.length) 			origCollection.readXML(args[argCount++], project);		else			origCollection.readXML(System.in, project);		if (commandLine.revisionName != null)			origCollection.setReleaseName(commandLine.revisionName);		if (commandLine.revisionTimestamp != 0)			origCollection.setTimestamp(commandLine.revisionTimestamp);		origCollection.setWithMessages(commandLine.withMessages);		if (commandLine.exclusionFilterFile != null) {			project.setSuppressionFilter(Filter.parseFilter(commandLine.exclusionFilterFile));		}		for(String source : commandLine.sourcePaths)			project.addSourceDir(source);		Map<String,Set<String>> missingFiles = new HashMap<String,Set<String>>();		if (!commandLine.searchSourcePaths.isEmpty()) {			sourceSearcher = new SourceSearcher(project);			for(BugInstance bug : origCollection.getCollection()) {				SourceLineAnnotation src = bug.getPrimarySourceLineAnnotation();				if (!sourceSearcher.sourceNotFound.contains(src.getClassName())						&& !sourceSearcher.findSource(src)) {					Set<String> paths = missingFiles.get(src.getSourceFile());					if (paths == null) {						paths = new HashSet<String>();						missingFiles.put(src.getSourceFile(), paths);					}					String fullPath = fullPath(src);					// System.out.println("Missing " + fullPath);					paths.add(fullPath);				}			}			Set<String> foundPaths = new HashSet<String>();			for(String f : commandLine.searchSourcePaths) 				for(File javaFile :  RecursiveSearchForJavaFiles.search(new File(f))) {					Set<String> matchingMissingClasses = missingFiles.get(javaFile.getName());					if (matchingMissingClasses == null) {						// System.out.println("Nothing for " + javaFile);					} else for(String sourcePath : matchingMissingClasses) {						String path = javaFile.getAbsolutePath();						if (path.endsWith(sourcePath)) {							String dir = path.substring(0,path.length() - sourcePath.length());							if (foundPaths.add(dir)) {								project.addSourceDir(dir);								if (argCount < args.length) 									System.out.println("Found " + dir);							}						}					}				}				}			// OK, now we know all the missing source files			// we also know all the .java files in the directories we were pointed to		if (argCount < args.length) 			origCollection.writeXML(args[argCount++], project);		else			origCollection.writeXML(System.out, project);	}	static String fullPath(SourceLineAnnotation src) {		return src.getPackageName().replace('.', File.separatorChar)		+ File.separatorChar + src.getSourceFile();	}	static SourceSearcher sourceSearcher;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -