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

📄 mainframe.java

📁 A static analysis tool to find bugs in Java programs
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		menuBar.add(navMenu);		JMenu designationMenu = newJMenu("menu.designation", "Designation");		int i = 0;		int keyEvents [] = {KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_4, KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9};		for(String key :  I18N.instance().getUserDesignationKeys(true)) {			String name = I18N.instance().getUserDesignation(key);			addDesignationItem(designationMenu, name, keyEvents[i++]);		}		menuBar.add(designationMenu);		if (!MAC_OS_X) {					// On Mac, 'About' appears under Findbugs menu, so no need for it here			JMenu helpMenu = newJMenu("menu.help_menu", "Help");			JMenuItem aboutItem = newJMenuItem("menu.about_item", "About FindBugs");			helpMenu.add(aboutItem);				aboutItem.addActionListener(new java.awt.event.ActionListener() {						public void actionPerformed(java.awt.event.ActionEvent evt) {							about();						}					});				menuBar.add(helpMenu);		}		return menuBar;	}	/**	 * @param map	 * @param navMenu	 */	private void addNavItem(final ActionMap map, JMenu navMenu, String menuNameKey, String menuNameDefault, String actionName, int keyEvent) {		JMenuItem toggleItem = newJMenuItem(menuNameKey, menuNameDefault);		toggleItem.addActionListener(treeActionAdapter(map, actionName));			attachAcceleratorKey(toggleItem, keyEvent);		navMenu.add(toggleItem);	}	ActionListener treeActionAdapter(ActionMap map, String actionName) {		final Action selectPrevious = map.get(actionName);		return new ActionListener() {			public void actionPerformed(ActionEvent e) {				e.setSource(tree);					selectPrevious.actionPerformed(e);				}};	}	static void attachAcceleratorKey(JMenuItem item, int keystroke) {		attachAcceleratorKey(item, keystroke, 0);	}	static void attachAcceleratorKey(JMenuItem item, int keystroke,																	 int additionalMask) {		// As far as I know, Mac is the only platform on which it is normal		// practice to use accelerator masks such as Shift and Alt, so		// if we're not running on Mac, just ignore them		if (!MAC_OS_X && additionalMask != 0) {			return;		}		item.setAccelerator(KeyStroke.getKeyStroke(keystroke, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | additionalMask));	}	void newProject(){		clearSourcePane();		redoAnalysis.setEnabled(true);		if(newProject){			setProjectChanged(true);//			setTitle(TITLE_START_TXT + Project.UNNAMED_PROJECT);			saveFile = null;			saveMenuItem.setEnabled(false);			reconfigMenuItem.setEnabled(true);			newProject=false;		}			}	/**	 * This method is for when the user wants to open a file.	 */	private void open(){		saveComments(currentSelectedBugLeaf, currentSelectedBugAspects);		if (projectChanged)		{			int response = JOptionPane.showConfirmDialog(MainFrame.this, 					edu.umd.cs.findbugs.L10N.getLocalString("dlg.save_current_changes", "The current project has been changed, Save current changes?")					,edu.umd.cs.findbugs.L10N.getLocalString("dlg.save_changes", "Save Changes?"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);			if (response == JOptionPane.YES_OPTION)			{				if (saveFile!=null)					save();				else					saveAs();			}			else if (response == JOptionPane.CANCEL_OPTION)				return;			//IF no, do nothing.		}		boolean loading = true;		SaveType fileType = SaveType.NOT_KNOWN;		tryAgain: while (loading)		{			int value=saveOpenFileChooser.showOpenDialog(MainFrame.this);			if(value!=JFileChooser.APPROVE_OPTION) return;			loading = false;			fileType = convertFilterToType(saveOpenFileChooser.getFileFilter());			final File f = saveOpenFileChooser.getSelectedFile();			if(!fileType.isValid(f)){				JOptionPane.showMessageDialog(saveOpenFileChooser,						"That file is not compatible with the choosen file type", "Invalid File",						JOptionPane.WARNING_MESSAGE);				loading = true;				continue;			}						switch (fileType) {			case PROJECT:				File xmlFile = OriginalGUI2ProjectFile.fileContainingXMLData(f);								if (!xmlFile.exists())				{					JOptionPane.showMessageDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("dlg.no_xml_data_lbl", "This directory does not contain saved bug XML data, please choose a different directory."));					loading=true;					continue tryAgain;				}				openProject(f);				break;			case XML_ANALYSIS:				if(!f.getName().endsWith(".xml")){					JOptionPane.showMessageDialog(saveOpenFileChooser, edu.umd.cs.findbugs.L10N.getLocalString("dlg.not_xml_data_lbl", "This is not a saved bug XML data file."));					loading=true;					continue tryAgain;				}				if(!openAnalysis(f, fileType)){					//TODO: Deal if something happens when loading analysis					JOptionPane.showMessageDialog(saveOpenFileChooser, "An error occurred while trying to load the analysis.");					loading=true;					continue tryAgain;				}				break;			case FBP_FILE:				if(!openFBPFile(f)){					//TODO: Deal if something happens when loading analysis					JOptionPane.showMessageDialog(saveOpenFileChooser, "An error occurred while trying to load the analysis.");					loading=true;					continue tryAgain;				}				break;			case FBA_FILE:				if(!openFBAFile(f)){					//TODO: Deal if something happens when loading analysis					JOptionPane.showMessageDialog(saveOpenFileChooser, "An error occurred while trying to load the analysis.");					loading=true;					continue tryAgain;				}				break;			}		}	}	/**	 * Method called to open FBA file.     * @param f     * @return     */    private boolean openFBAFile(File f) {	   return openAnalysis(f, SaveType.FBA_FILE);    }	/**	 * Method called to open FBP file.     * @param f     * @return     */    private boolean openFBPFile(File f) {    		if (!f.exists() || !f.canRead()) {    			return false;    		}    		prepareForFileLoad(f, SaveType.FBP_FILE);      		loadProjectFromFile(f);    		    		return true;    		    	    }	private boolean saveAs(){		saveComments(currentSelectedBugLeaf, currentSelectedBugAspects);				saveOpenFileChooser.setDialogTitle(edu.umd.cs.findbugs.L10N.getLocalString("dlg.saveas_ttl", "Save as..."));		if (curProject==null)		{			JOptionPane.showMessageDialog(MainFrame.this,edu.umd.cs.findbugs.L10N.getLocalString("dlg.no_proj_save_lbl", "There is no project to save"));			return false;		}		boolean retry = true;		SaveType fileType = SaveType.NOT_KNOWN;		boolean alreadyExists = true;		File f = null;		while(retry){			retry = false;			int value=saveOpenFileChooser.showSaveDialog(MainFrame.this);			if (value!=JFileChooser.APPROVE_OPTION) return false;			fileType = convertFilterToType(saveOpenFileChooser.getFileFilter());			if(fileType == SaveType.NOT_KNOWN){				Debug.println("Error! fileType == SaveType.NOT_KNOWN");				//This should never happen b/c saveOpenFileChooser can only display filters				//given it.				retry = true;				continue;			}			f = saveOpenFileChooser.getSelectedFile();						f = convertFile(f, fileType);			if(!fileType.isValid(f)){				JOptionPane.showMessageDialog(saveOpenFileChooser,						"That file is not compatible with the chosen file type", "Invalid File",						JOptionPane.WARNING_MESSAGE);				retry = true;				continue;			}			alreadyExists = fileAlreadyExists(f, fileType);			if(alreadyExists){				int response = -1;				switch(fileType){				case XML_ANALYSIS:					response = JOptionPane.showConfirmDialog(saveOpenFileChooser, 							edu.umd.cs.findbugs.L10N.getLocalString("dlg.analysis_exists_lbl", "This analysis already exists.\nReplace it?"),							edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);					break;				case PROJECT:					response = JOptionPane.showConfirmDialog(saveOpenFileChooser, 							edu.umd.cs.findbugs.L10N.getLocalString("dlg.proj_already_exists_lbl", "This project already exists.\nDo you want to replace it?"),							edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);					break;				case FBP_FILE:					response = JOptionPane.showConfirmDialog(saveOpenFileChooser, 							edu.umd.cs.findbugs.L10N.getLocalString("FB Project File already exists", "This FB project file already exists.\nDo you want to replace it?"),							edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);					break;				case FBA_FILE:					response = JOptionPane.showConfirmDialog(saveOpenFileChooser, 							edu.umd.cs.findbugs.L10N.getLocalString("FB Analysis File already exists", "This FB analysis file already exists.\nDo you want to replace it?"),							edu.umd.cs.findbugs.L10N.getLocalString("dlg.warning_ttl", "Warning!"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);					break;				}								if(response == JOptionPane.OK_OPTION)					retry = false;				if(response == JOptionPane.CANCEL_OPTION){					retry = true;					continue;				}			}			SaveReturn successful = SaveReturn.SAVE_ERROR;			switch(fileType){			case PROJECT:				successful = saveProject(f);				break;			case XML_ANALYSIS:				successful = saveAnalysis(f);				break;			case FBA_FILE:				successful = saveFBAFile(f);				break;			case FBP_FILE:				successful = saveFBPFile(f);				break;			}						if (successful != SaveReturn.SAVE_SUCCESSFUL)			{				JOptionPane.showMessageDialog(MainFrame.this, edu.umd.cs.findbugs.L10N.getLocalString("dlg.saving_error_lbl", "An error occurred in saving."));				return false;			}		}//		saveProjectMenuItem.setEnabled(false);		saveMenuItem.setEnabled(false);		setSaveType(fileType);		saveFile = f;		File xmlFile;		if (getSaveType()==SaveType.PROJECT)			xmlFile=new File(f.getAbsolutePath() + File.separator + f.getName() + ".xml");		else			xmlFile=f;		addFileToRecent(xmlFile, getSaveType());		return true;	}	/*	 * Returns SaveType equivalent depending on what kind of FileFilter passed.	 */	private	SaveType convertFilterToType(FileFilter f){		if (f instanceof FindBugsFileFilter)			return ((FindBugsFileFilter)f).getSaveType();		return SaveType.NOT_KNOWN;	}	/*	 * Depending on File and SaveType determines if f already exists. Returns false if not	 * exist, true otherwise. For a project calls	 * OriginalGUI2ProjectFile.fileContainingXMLData(f).exists	 */	private boolean fileAlreadyExists(File f, SaveType fileType){		if(fileType == SaveType.PROJECT){			/*File xmlFile=new File(f.getAbsolutePath() + File.separator + f.getName() + ".xml");			File fasFile=new File(f.getAbsolutePath() + File.separator + f.getName() + ".fas");			return xmlFile.exists() || fasFile.exists();*/			return (OriginalGUI2ProjectFile.fileContainingXMLData(f).exists());		}		return f.exists();	}	/*	 * If f is not of type FileType will convert file so it is.	 */	private File convertFile(File f, SaveType fileType){		//WARNING: This assumes the filefilter for project is working so f can only be a directory.		if(fileType == SaveType.PROJECT)			return f;		//Checks that it has the correct file extension, makes a new file if it doesn't.		if(!f.getName().endsWith(fileType.getFileExtension()))			f = new File(f.getAbsolutePath() + fileType.getFileExtension());		return f;	}	private void save(){		saveComments(currentSelectedBugLeaf, currentSelectedBugAspects);				SaveReturn result = SaveReturn.SAVE_ERROR;				switch(getSaveType()){		case PROJECT:			result = saveProject(saveFile);			break;		case XML_ANALYSIS:			result = saveAnalysis(saveFile);			break;		case FBA_FILE:			result = saveFBAFile(saveFile);			break;		case FBP_FILE:			result = saveFBPFile(saveFile);			break;		}		if(result != SaveReturn.SAVE_SUCCESSFUL){			JOptionPane.showMessageDialog(MainFrame.this, edu.umd.cs.findbugs.L10N.getLocalString(					"dlg.saving_error_lbl", "An error occurred in saving."));		}	}	/**     * @param saveFile2     * @return     */    private SaveReturn saveFBAFile(File saveFile2) {	    return saveAnalysis(saveFile2);    }	/**     * @param saveFile2     * @return     */    private SaveReturn saveFBPFile(File saveFile2) {    		saveComments(currentSelectedBugLeaf, currentSelectedBugAspects);    		try {	            curProject.writeXML(saveFile2);            } catch (IOException e) {	            AnalysisContext.logError("Couldn't save FBP file to " + saveFile2, e);	            return SaveReturn.SAVE_IO_EXCEPTION;

⌨️ 快捷键说明

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