📄 verifierappframe.java
字号:
aboutMenuItem_actionPerformed(e); } }); jSplitPane2.add(messagesPanel, JSplitPane.BOTTOM); messagesPanel.add(messagesScrollPane, null); messagesScrollPane.getViewport().add(messagesTextPane, null); jSplitPane2.add(jPanel3, JSplitPane.TOP); jPanel3.add(jScrollPane3, null); jScrollPane3.getViewport().add(pass1TextPane, null); jPanel3.add(jScrollPane4, null); jPanel3.add(jSplitPane3, null); jSplitPane3.add(jScrollPane2, JSplitPane.LEFT); jScrollPane2.getViewport().add(pass3aJList, null); jSplitPane3.add(jScrollPane5, JSplitPane.RIGHT); jScrollPane5.getViewport().add(pass3aTextPane, null); jPanel3.add(jSplitPane4, null); jSplitPane4.add(jScrollPane6, JSplitPane.LEFT); jScrollPane6.getViewport().add(pass3bJList, null); jSplitPane4.add(jScrollPane7, JSplitPane.RIGHT); jScrollPane7.getViewport().add(pass3bTextPane, null); jScrollPane4.getViewport().add(pass2TextPane, null); jSplitPane1.add(jPanel2, JSplitPane.TOP); jPanel2.add(jScrollPane1, null); jSplitPane1.add(jPanel1, JSplitPane.BOTTOM); jPanel1.add(jSplitPane2, null); jScrollPane1.getViewport().add(classNamesJList, null); jMenuBar1.add(jMenu1); jMenuBar1.add(jMenu2); contentPane.add(jSplitPane1, "jSplitPane1"); jMenu1.add(newFileMenuItem); jMenu2.add(whatisMenuItem); jMenu2.add(aboutMenuItem); jSplitPane2.setDividerLocation(300); jSplitPane3.setDividerLocation(150); jSplitPane4.setDividerLocation(150); } /** Overridden to stop the application on a closing window. */ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } synchronized void classNamesJList_valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; current_class = classNamesJList.getSelectedValue().toString(); verify(); classNamesJList.setSelectedValue(current_class, true); } private void verify(){ setTitle("PLEASE WAIT"); Verifier v = VerifierFactory.getVerifier(current_class); v.flush(); // Don't cache the verification result for this class. VerificationResult vr; vr = v.doPass1(); if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){ pass1TextPane.setText(vr.getMessage()); pass1TextPane.setBackground(Color.red); pass2TextPane.setText(""); pass2TextPane.setBackground(Color.yellow); pass3aTextPane.setText(""); pass3aJList.setListData(new Object[0]); pass3aTextPane.setBackground(Color.yellow); pass3bTextPane.setText(""); pass3bJList.setListData(new Object[0]); pass3bTextPane.setBackground(Color.yellow); } else{ // Must be VERIFIED_OK, Pass 1 does not know VERIFIED_NOTYET pass1TextPane.setBackground(Color.green); pass1TextPane.setText(vr.getMessage()); vr = v.doPass2(); if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){ pass2TextPane.setText(vr.getMessage()); pass2TextPane.setBackground(Color.red); pass3aTextPane.setText(""); pass3aTextPane.setBackground(Color.yellow); pass3aJList.setListData(new Object[0]); pass3bTextPane.setText(""); pass3bTextPane.setBackground(Color.yellow); pass3bJList.setListData(new Object[0]); } else{ // must be Verified_OK, because Pass1 was OK (cannot be Verified_NOTYET). pass2TextPane.setText(vr.getMessage()); pass2TextPane.setBackground(Color.green); JavaClass jc = Repository.lookupClass(current_class); boolean all3aok = true; boolean all3bok = true; String all3amsg = ""; String all3bmsg = ""; String[] methodnames = new String[jc.getMethods().length]; for (int i=0; i<jc.getMethods().length; i++){ methodnames[i] = jc.getMethods()[i].toString().replace('\n',' ').replace('\t',' '); } pass3aJList.setListData(methodnames); pass3aJList.setSelectionInterval(0,jc.getMethods().length-1); pass3bJList.setListData(methodnames); pass3bJList.setSelectionInterval(0,jc.getMethods().length-1); } } String[] msgs = v.getMessages(); messagesTextPane.setBackground(msgs.length == 0? Color.green : Color.yellow); String allmsgs = ""; for (int i=0; i<msgs.length; i++){ msgs[i] = msgs[i].replace('\n',' '); allmsgs += msgs[i] + "\n\n"; } messagesTextPane.setText(allmsgs); setTitle(current_class + " - " + JUSTICE_VERSION); } void newFileMenuItem_actionPerformed(ActionEvent e) { String classname = JOptionPane.showInputDialog("Please enter the fully qualified name of a class or interface to verify:"); if ((classname == null) || (classname.equals(""))) return; VerifierFactory.getVerifier(classname); // let observers do the rest. classNamesJList.setSelectedValue(classname, true); } synchronized void pass3aJList_valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; Verifier v = VerifierFactory.getVerifier(current_class); String all3amsg = ""; boolean all3aok = true; boolean rejected = false; for (int i=0; i<pass3aJList.getModel().getSize(); i++){ if (pass3aJList.isSelectedIndex(i)){ VerificationResult vr = v.doPass3a(i); if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){ all3aok = false; rejected = true; } all3amsg += "Method '"+Repository.lookupClass(v.getClassName()).getMethods()[i]+"': "+vr.getMessage().replace('\n',' ')+"\n\n"; } } pass3aTextPane.setText(all3amsg); pass3aTextPane.setBackground(all3aok? Color.green : (rejected? Color.red : Color.yellow)); } synchronized void pass3bJList_valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; Verifier v = VerifierFactory.getVerifier(current_class); String all3bmsg = ""; boolean all3bok = true; boolean rejected = false; for (int i=0; i<pass3bJList.getModel().getSize(); i++){ if (pass3bJList.isSelectedIndex(i)){ VerificationResult vr = v.doPass3b(i); if (vr.getStatus() == VerificationResult.VERIFIED_REJECTED){ all3bok = false; rejected = true; } all3bmsg += "Method '"+Repository.lookupClass(v.getClassName()).getMethods()[i]+"': "+vr.getMessage().replace('\n',' ')+"\n\n"; } } pass3bTextPane.setText(all3bmsg); pass3bTextPane.setBackground(all3bok? Color.green : (rejected? Color.red : Color.yellow)); } void aboutMenuItem_actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(this, "JustIce is a Java class file verifier.\nIt was implemented by Enver Haase in 2001.\nhttp://bcel.sourceforge.net", JUSTICE_VERSION, JOptionPane.INFORMATION_MESSAGE); } void whatisMenuItem_actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(this, "The upper four boxes to the right reflect verification passes according to The Java Virtual Machine Specification.\nThese are (in that order): Pass one, Pass two, Pass three (before data flow analysis), Pass three (data flow analysis).\nThe bottom box to the right shows (warning) messages; warnings do not cause a class to be rejected.", JUSTICE_VERSION, JOptionPane.INFORMATION_MESSAGE); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -