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

📄 mainframe.java

📁 A static analysis tool to find bugs in Java programs
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            }    		setProjectChanged(false);    		return SaveReturn.SAVE_SUCCESSFUL;    }        	static final String TREECARD = "Tree";	static final String WAITCARD = "Wait";	public void showWaitCard() {		showCard(WAITCARD, new Cursor(Cursor.WAIT_CURSOR));	}	public void showTreeCard() {		showCard(TREECARD, new Cursor(Cursor.DEFAULT_CURSOR));	}	private void showCard(final String c, final Cursor cursor) {		if (SwingUtilities.isEventDispatchThread()) {			setCursor(cursor);			CardLayout layout = (CardLayout) cardPanel.getLayout();			layout.show(cardPanel, c);		} else			SwingUtilities.invokeLater(new Runnable() {				public void run() {					setCursor(cursor);					CardLayout layout = (CardLayout) cardPanel.getLayout();					layout.show(cardPanel, c);				}			});	}	JPanel waitPanel, cardPanel;	/**	 * 	 * @return	 */	JPanel bugListPanel()	{		cardPanel = new JPanel(new CardLayout());		JPanel topPanel = new JPanel();		waitPanel = new JPanel();		waitPanel.add(new JLabel("Please wait..."));		cardPanel.add(topPanel, TREECARD);		cardPanel.add(waitPanel, WAITCARD);		topPanel.setMinimumSize(new Dimension(200,200));		tableheader = new JTableHeader();		//Listener put here for when user double clicks on sorting		//column header SorterDialog appears.		tableheader.addMouseListener(new MouseAdapter(){			@Override			public void mouseClicked(MouseEvent e) {				Debug.println("tableheader.getReorderingAllowed() = " + tableheader.getReorderingAllowed());				if (!tableheader.getReorderingAllowed())					return;				if (e.getClickCount()==2)					SorterDialog.getInstance().setVisible(true);			}			@Override			public void mouseReleased(MouseEvent arg0) {				if (!tableheader.getReorderingAllowed())					return;				BugTreeModel bt=(BugTreeModel) (MainFrame.this.getTree().getModel());				bt.checkSorter();			}		});		sorter = GUISaveState.getInstance().getStarterTable();		tableheader.setColumnModel(sorter);		tableheader.setToolTipText(edu.umd.cs.findbugs.L10N.getLocalString("tooltip.reorder_message", "Drag to reorder tree folder and sort order"));		tree = new JTree();		treeUI = (BasicTreeUI) tree.getUI();		tree.setLargeModel(true);		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);		tree.setCellRenderer(new BugRenderer());		tree.setRowHeight((int)(Driver.getFontSize() + 7));		if (false) {		System.out.println("Left indent had been " + treeUI.getLeftChildIndent());		System.out.println("Right indent had been " + treeUI.getRightChildIndent());		treeUI.setLeftChildIndent(30 );		treeUI.setRightChildIndent(30 );		}		tree.setModel(new BugTreeModel(tree, sorter, new BugSet(new ArrayList<BugLeafNode>())));		setupTreeListeners();		curProject= new Project();		treeScrollPane = new JScrollPane(tree);		topPanel.setLayout(new BorderLayout());		//New code to fix problem in Windows		JTable t = new JTable(new DefaultTableModel(0, Sortables.values().length));		t.setTableHeader(tableheader);		JScrollPane sp = new JScrollPane(t);		//This sets the height of the scrollpane so it is dependent on the fontsize.		int num = (int) (Driver.getFontSize()*1.2);		sp.setPreferredSize(new Dimension(0, 10+num));		//End of new code.		//Changed code.		topPanel.add(sp, BorderLayout.NORTH);		//topPanel.add(tableheader, BorderLayout.NORTH);		//End of changed code.		topPanel.add(treeScrollPane, BorderLayout.CENTER);		return cardPanel;	}	public void newTree(final JTree newTree, final BugTreeModel newModel)	{		SwingUtilities.invokeLater(new Runnable()		{			public void run()			{				tree = newTree;				tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);				tree.setLargeModel(true);				tree.setCellRenderer(new BugRenderer());				showTreeCard();				Container container = treeScrollPane.getParent();				container.remove(treeScrollPane);				treeScrollPane = new JScrollPane(newTree);				container.add(treeScrollPane, BorderLayout.CENTER);				setFontSizeHelper(container.getComponents(), Driver.getFontSize());				tree.setRowHeight((int)(Driver.getFontSize() + 7));				MainFrame.getInstance().getContentPane().validate();				MainFrame.getInstance().getContentPane().repaint();				setupTreeListeners();				newModel.openPreviouslySelected(((BugTreeModel)(tree.getModel())).getOldSelectedBugs());				MainFrame.this.getSorter().addColumnModelListener(newModel);				FilterActivity.addFilterListener(newModel.bugTreeFilterListener);				MainFrame.this.setSorting(true);			}		});	}	private void setupTreeListeners()	{		tree.addTreeSelectionListener(new TreeSelectionListener(){			public void valueChanged(TreeSelectionEvent selectionEvent) {				TreePath path = selectionEvent.getNewLeadSelectionPath();				if (path != null)				{					saveComments(currentSelectedBugLeaf, currentSelectedBugAspects);					Object lastPathComponent = path.getLastPathComponent();					if (lastPathComponent instanceof BugLeafNode)					{							boolean beforeProjectChanged = projectChanged;						currentSelectedBugLeaf = (BugLeafNode)lastPathComponent;						currentSelectedBugAspects = null;						syncBugInformation();						setProjectChanged(beforeProjectChanged);					}					else					{						boolean beforeProjectChanged = projectChanged;						updateDesignationDisplay();						currentSelectedBugLeaf = null;						currentSelectedBugAspects = (BugAspects)lastPathComponent;						syncBugInformation();						setProjectChanged(beforeProjectChanged);					}				}//				Debug.println("Tree selection count:" + tree.getSelectionCount());				if (tree.getSelectionCount() !=1)				{					Debug.println("Tree selection count not equal to 1, disabling comments tab" + selectionEvent);					MainFrame.this.setUserCommentInputEnable(false);				}			}								});		tree.addMouseListener(new MouseListener(){			public void mouseClicked(MouseEvent e) {				TreePath path = tree.getPathForLocation(e.getX(), e.getY());				if(path == null)					return;				if ((e.getButton() == MouseEvent.BUTTON3) || 						(e.getButton() == MouseEvent.BUTTON1 && e.isControlDown())){					if (tree.getModel().isLeaf(path.getLastPathComponent())){						tree.setSelectionPath(path);						bugPopupMenu.show(tree, e.getX(), e.getY());					}					else{						tree.setSelectionPath(path);						if (!(path.getParentPath()==null))//If the path's parent path is null, the root was selected, dont allow them to filter out the root.							branchPopupMenu.show(tree, e.getX(), e.getY());					}				}					}						public void mousePressed(MouseEvent arg0) {}			public void mouseReleased(MouseEvent arg0) {}			public void mouseEntered(MouseEvent arg0) {}			public void mouseExited(MouseEvent arg0) {}					});	}	void syncBugInformation (){		boolean prevProjectChanged = projectChanged;		if (currentSelectedBugLeaf != null)  {			BugInstance bug  = currentSelectedBugLeaf.getBug();			displayer.displaySource(bug, bug.getPrimarySourceLineAnnotation());			comments.updateCommentsFromLeafInformation(currentSelectedBugLeaf);			updateDesignationDisplay();			comments.updateCommentsFromLeafInformation(currentSelectedBugLeaf);			updateSummaryTab(currentSelectedBugLeaf);		} else if (currentSelectedBugAspects != null) {			updateDesignationDisplay();			comments.updateCommentsFromNonLeafInformation(currentSelectedBugAspects);			displayer.displaySource(null, null);							clearSummaryTab();		} else {			displayer.displaySource(null, null);						clearSummaryTab();		}		setProjectChanged(prevProjectChanged);	}	/**	 * Clears the source code text pane.	 *	 */	 void clearSourcePane(){		SwingUtilities.invokeLater(new Runnable(){			public void run(){				setSourceTabTitle("Source");								sourceCodeTextPane.setDocument(SourceCodeDisplay.SOURCE_NOT_RELEVANT);			}		});		}	/**	 * @param b	 */	private void setUserCommentInputEnable(boolean b) {		comments.setUserCommentInputEnable(b);	}	/**	 * Creates the status bar of the GUI.	 * @return	 */	JPanel statusBar()	{		JPanel statusBar = new JPanel(); 		// statusBar.setBackground(Color.WHITE);		statusBar.setBorder(new BevelBorder(BevelBorder.LOWERED));		statusBar.setLayout(new BorderLayout());		statusBar.add(statusBarLabel,BorderLayout.WEST);		JLabel logoLabel = new JLabel();		ImageIcon logoIcon = new ImageIcon(MainFrame.class.getResource("logo_umd.png"));		logoLabel.setIcon(logoIcon);		statusBar.add(logoLabel, BorderLayout.EAST);		return statusBar;	}	void updateStatusBar()	{		int countFilteredBugs = BugSet.countFilteredBugs();		if (countFilteredBugs == 0)			statusBarLabel.setText("  http://findbugs.sourceforge.net/");		else if (countFilteredBugs == 1)			statusBarLabel.setText("  1 " + edu.umd.cs.findbugs.L10N.getLocalString("statusbar.bug_hidden", "bug hidden"));		else 			statusBarLabel.setText("  " + countFilteredBugs + " " + edu.umd.cs.findbugs.L10N.getLocalString("statusbar.bugs_hidden", "bugs hidden"));	}	private void updateSummaryTab(BugLeafNode node)	{		final BugInstance bug = node.getBug();		final ArrayList<BugAnnotation> primaryAnnotations = new ArrayList<BugAnnotation>();		boolean classIncluded = false;		//This ensures the order of the primary annotations of the bug		if(bug.getPrimarySourceLineAnnotation() != null)			primaryAnnotations.add(bug.getPrimarySourceLineAnnotation());		if(bug.getPrimaryMethod() != null)			primaryAnnotations.add(bug.getPrimaryMethod());		if(bug.getPrimaryField() != null)			primaryAnnotations.add(bug.getPrimaryField());		/*		 * This makes the primary class annotation appear only when		 * the visible field and method primary annotations don't have		 * the same class.		 */		if(bug.getPrimaryClass() != null){			FieldAnnotation primeField = bug.getPrimaryField();			MethodAnnotation primeMethod = bug.getPrimaryMethod();			ClassAnnotation primeClass = bug.getPrimaryClass();			String fieldClass = "";			String methodClass = "";			if(primeField != null)				fieldClass = primeField.getClassName();			if(primeMethod != null)				methodClass = primeMethod.getClassName();						if((primaryAnnotations.size() < 2) || (!(primeClass.getClassName().equals(fieldClass) || 					primeClass.getClassName().equals(methodClass)))){				primaryAnnotations.add(primeClass);				classIncluded = true;			}		}		final boolean classIncluded2 = classIncluded;		SwingUtilities.invokeLater(new Runnable(){			public void run(){				summaryTopPanel.removeAll();				summaryTopPanel.add(bugSummaryComponent(bug.getMessageWithoutPrefix(), bug));				for(BugAnnotation b : primaryAnnotations)					summaryTopPanel.add(bugSummaryComponent(b, bug));				if(!classIncluded2 && bug.getPrimaryClass() != null)					primaryAnnotations.add(bug.getPrimaryClass());				for(Iterator<BugAnnotation> i = bug.annotationIterator(); i.hasNext();){					BugAnnotation b = i.next();					boolean cont = true;					for(BugAnnotation p : primaryAnnotations)						if(p == b)							cont = false;					if(cont)						summaryTopPanel.add(bugSummaryComponent(b, bug));				}				summaryHtmlArea.setText(bug.getBugPattern().getDetailHTML());				summaryTopPanel.add(Box.createVerticalGlue());				summaryTopPanel.revalidate();				SwingUtilities.invokeLater(new Runnable(){					public void run(){						summaryHtmlScrollPane.getVerticalScrollBar().setValue(summaryHtmlScrollPane.getVerticalScrollBar().getMinimum());					}				});			}		});	}	private void clearSummaryTab()	{		summaryHtmlArea.setText("");		summaryTopPanel.removeAll();		summaryTopPanel.revalidate();		}	/**	 * Creates initial summary tab and sets everything up.	 * @return	 */	JSplitPane summaryTab()	{		int fontSize = (int) Driver.getFontSize();		summaryTopPanel = new JPanel();		summaryTopPanel.setLayout(new GridLayout(0,1));		summaryTopPanel.setBorder(BorderFactory.createEmptyBorder(2,4,2,4));		summaryTopPanel.setMinimumSize(new Dimension(fontSize * 50, fontSize*5));		JPanel summaryTopOuter = new JPanel(new BorderLayout());		summaryTopOuter.add(summaryTopPanel, BorderLayout.NORTH);		summaryHtmlArea.setToolTipText(edu.umd.cs.findbugs.L10N.getLocalString("tooltip.longer_description", "This gives a longer description of the detected bug pattern"));		summaryHtmlArea.setContentType("text/html");		summaryHtmlArea.setEditable(false);		summaryHtmlArea.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {				public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {

⌨️ 快捷键说明

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