Main Page   Packages   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

Dependencies.java

00001 package edu.ksu.cis.bandera.pdgslicer.dependency;
00002 
00003 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00004  * Bandera, a Java(TM) analysis and transformation toolkit           *
00005  * Copyright (C) 1998, 1999   Hongjun Zheng (zheng@cis.ksu.edu)      *
00006  * All rights reserved.                                              *
00007  *                                                                   *
00008  * This work was done as a project in the SAnToS Laboratory,         *
00009  * Department of Computing and Information Sciences, Kansas State    *
00010  * University, USA (http://www.cis.ksu.edu/santos).                  *
00011  * It is understood that any modification not identified as such is  *
00012  * not covered by the preceding statement.                           *
00013  *                                                                   *
00014  * This work is free software; you can redistribute it and/or        *
00015  * modify it under the terms of the GNU Library General Public       *
00016  * License as published by the Free Software Foundation; either      *
00017  * version 2 of the License, or (at your option) any later version.  *
00018  *                                                                   *
00019  * This work is distributed in the hope that it will be useful,      *
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of    *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *
00022  * Library General Public License for more details.                  *
00023  *                                                                   *
00024  * You should have received a copy of the GNU Library General Public *
00025  * License along with this toolkit; if not, write to the             *
00026  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,      *
00027  * Boston, MA  02111-1307, USA.                                      *
00028  *                                                                   *
00029  * Java is a trademark of Sun Microsystems, Inc.                     *
00030  *                                                                   *
00031  * To submit a bug report, send a comment, or get the latest news on *
00032  * this project and other SAnToS projects, please visit the web-site *
00033  *                http://www.cis.ksu.edu/santos                      *
00034  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
00035 
00036 import ca.mcgill.sable.soot.*;
00037 import ca.mcgill.sable.util.Collection;
00038 import ca.mcgill.sable.util.Map;
00039 import ca.mcgill.sable.util.Set;
00040 import ca.mcgill.sable.util.ArraySet;
00041 import ca.mcgill.sable.util.Iterator;
00042 import ca.mcgill.sable.util.List;
00043 import ca.mcgill.sable.soot.jimple.*;
00044 import edu.ksu.cis.bandera.pdgslicer.*;
00045 import edu.ksu.cis.bandera.pdgslicer.datastructure.*;
00046 import edu.ksu.cis.bandera.jjjc.*;
00047 import edu.ksu.cis.bandera.bui.BUI;
00048 import edu.ksu.cis.bandera.annotation.*;
00049 import edu.ksu.cis.bandera.bofa.Analysis;
00050 //import java.util.*;
00051 import java.util.Hashtable;
00052 import java.util.LinkedList;
00053 import java.util.BitSet;
00054 import java.util.Vector;
00055 import java.util.Enumeration;
00056 import java.io.*;
00057 import javax.swing.*;
00058 import javax.swing.tree.*;
00059 import java.awt.*;
00060 public class Dependencies extends JFrame implements java.awt.event.ActionListener, java.awt.event.ItemListener, java.awt.event.WindowListener {
00061     private Analysis BOFA_Analysis;
00062     public boolean success = true;
00063     Slicer slicer = null;
00064     private QueryPanel queryPanel = null;
00065     private DependencyValueViewer dependencyValueViewer = null;
00066     CriterionViewer criterionViewer = null;
00067     private final int DATA = 0;
00068     private final int CONTROL = 1;
00069     private final int DIVERGENT = 2;
00070     private final int READY = 3;
00071     private final int INTERFERENCE = 4;
00072     private final int SYNCHRONIZATION = 5;
00073     private final int VALUE_PRED = 6;
00074     private final int VALUE_SUCC = 7;
00075     private final int VALUE_SET = 8;
00076     List dependencyKindsList;
00077     private String dependencyKinds[] = {"Data Dependence", "Control Dependence", "Divergent Dependence", "Ready Dependence", "Interference Dependence", "Synchronization Dependence"};
00078     List valueKindsList;
00079     private String valueKinds[] = {"Value Predecessors", "Value Successors", "Value Set"};
00080     private boolean isSetSelectedByProgram = false;
00081     Annotation currentMethodDecAnn = null;
00082     private boolean isChangeCheckBoxByProgram = false;
00083     private boolean isSetItemByProgram = false;
00084     private boolean doSuccDataDepend = false;
00085     private boolean doPredDataDepend = false;
00086     private boolean doSuccControlDepend = false;
00087     private boolean doPredControlDepend = false;
00088     private boolean doSuccReadyDepend = false;
00089     private boolean doPredReadyDepend = false;
00090     private boolean doSuccSynchDepend = false;
00091     private boolean doPredSynchDepend = false;
00092     private boolean doSuccInterferDepend = false;
00093     private boolean doPredInterferDepend = false;
00094     private boolean doSuccDivergentDepend = false;
00095     private boolean doPredDivergentDepend = false;
00096     private boolean doPredValue = false;
00097     private boolean doSuccValue = false;
00098     private boolean doSetValue = false;
00099     private Hashtable nodeToConfigTable = new Hashtable();
00100     Object currentNode = null;
00101     private LinkedList historyChain = new LinkedList();
00102     private int currentPositionOfHistoryChain = -1;
00103     public static Dependencies dependFrame;
00104     private JPanel ivjCheckBoxesPanel = null;
00105     private JPanel ivjDependencyFrameContentPane = null;
00106     private JToolBar ivjDependOperationToolBar = null;
00107     private JPanel ivjOperationPanel = null;
00108     private JPanel ivjToolBarPanel = null;
00109     private JLabel ivjCurrentStmtLabel = null;
00110     private JComboBox ivjHistoryComboBox = null;
00111     private JButton ivjBackwardSliceToolBarButton = null;
00112     private JButton ivjForwardSliceToolBarButton = null;
00113     private JButton ivjBackToolBarButton = null;
00114     private JButton ivjClearToolBarButton = null;
00115     private JButton ivjForwardToolBarButton = null;
00116     private JLabel ivjValueFlowLabel = null;
00117     private JCheckBox ivjValuePredCheckBox = null;
00118     private JCheckBox ivjValueSetCheckBox = null;
00119     private JCheckBox ivjValueSuccCheckBox = null;
00120     private JLabel ivjControlLabel = null;
00121     private JCheckBox ivjControlPredCheckBox = null;
00122     private JCheckBox ivjControlSuccCheckBox = null;
00123     private JLabel ivjDataLabel = null;
00124     private JCheckBox ivjDataPredCheckBox = null;
00125     private JCheckBox ivjDataSuccCheckBox = null;
00126     private JLabel ivjInterferLabel = null;
00127     private JCheckBox ivjInterferPredCheckBox = null;
00128     private JCheckBox ivjInterferSuccCheckBox = null;
00129     private JLabel ivjReadyLabel = null;
00130     private JCheckBox ivjReadyPredCheckBox = null;
00131     private JCheckBox ivjReadySuccCheckBox = null;
00132     private JLabel ivjSynchLabel = null;
00133     private JCheckBox ivjSynchPredCheckBox = null;
00134     private JCheckBox ivjSynchSuccCheckBox = null;
00135     private JLabel ivjDiverLabel = null;
00136     private JCheckBox ivjDiverPredCheckBox = null;
00137     private JCheckBox ivjDiverSuccCheckBox = null;
00138     private CodeBrowserPane ivjCodeBrowserPane = null;
00139     private JSplitPane ivjCodeCritSplitPane = null;
00140     private JButton ivjAllpredButton = null;
00141     private JButton ivjAllsuccButton = null;
00142     private JPanel ivjDependCheckBoxesPanel = null;
00143     private JLabel ivjDependLabel = null;
00144     private JLabel ivjDpredLabel = null;
00145     private JLabel ivjDsuccLabel = null;
00146     private JPanel ivjEmptyPanel = null;
00147     private JButton ivjNopredButton = null;
00148     private JButton ivjNosuccButton = null;
00149     private JPanel ivjToolBarInPanel = null;
00150     private JPanel ivjValueCheckBoxesPanel = null;
00151     private FlowLayout ivjValueCheckBoxesPanelFlowLayout = null;
00152     private JButton ivjAllDependButton = null;
00153     private JButton ivjClearDependButton = null;
00154     private JButton ivjClearValuesButton = null;
00155     private JButton ivjAllValuesButton = null;
00156     private ViewerTabbedPane ivjViewerTabbedPane = null;
00157     IvjEventHandler ivjEventHandler = new IvjEventHandler();
00158 
00159 class IvjEventHandler implements java.awt.event.ActionListener, java.awt.event.ItemListener, java.awt.event.WindowListener {
00160         public void actionPerformed(java.awt.event.ActionEvent e) {
00161             if (e.getSource() == Dependencies.this.getHistoryComboBox()) 
00162                 connEtoC9();
00163             if (e.getSource() == Dependencies.this.getBackToolBarButton()) 
00164                 connEtoC10(e);
00165             if (e.getSource() == Dependencies.this.getForwardToolBarButton()) 
00166                 connEtoC11(e);
00167             if (e.getSource() == Dependencies.this.getClearToolBarButton()) 
00168                 connEtoC15();
00169             if (e.getSource() == Dependencies.this.getAllpredButton()) 
00170                 connEtoC28(e);
00171             if (e.getSource() == Dependencies.this.getAllsuccButton()) 
00172                 connEtoC29(e);
00173             if (e.getSource() == Dependencies.this.getAllDependButton()) 
00174                 connEtoC30(e);
00175             if (e.getSource() == Dependencies.this.getNopredButton()) 
00176                 connEtoC31(e);
00177             if (e.getSource() == Dependencies.this.getNosuccButton()) 
00178                 connEtoC32(e);
00179             if (e.getSource() == Dependencies.this.getClearDependButton()) 
00180                 connEtoC33(e);
00181             if (e.getSource() == Dependencies.this.getAllValuesButton()) 
00182                 connEtoC34(e);
00183             if (e.getSource() == Dependencies.this.getClearValuesButton()) 
00184                 connEtoC35(e);
00185             if (e.getSource() == Dependencies.this.getBackwardSliceToolBarButton()) 
00186                 connEtoC2();
00187         };
00188         public void itemStateChanged(java.awt.event.ItemEvent e) {
00189             if (e.getSource() == Dependencies.this.getDataPredCheckBox()) 
00190                 connEtoC8(e);
00191             if (e.getSource() == Dependencies.this.getDataSuccCheckBox()) 
00192                 connEtoC12(e);
00193             if (e.getSource() == Dependencies.this.getControlPredCheckBox()) 
00194                 connEtoC13(e);
00195             if (e.getSource() == Dependencies.this.getControlSuccCheckBox()) 
00196                 connEtoC16(e);
00197             if (e.getSource() == Dependencies.this.getDiverPredCheckBox()) 
00198                 connEtoC17(e);
00199             if (e.getSource() == Dependencies.this.getDiverSuccCheckBox()) 
00200                 connEtoC18(e);
00201             if (e.getSource() == Dependencies.this.getReadyPredCheckBox()) 
00202                 connEtoC19(e);
00203             if (e.getSource() == Dependencies.this.getReadySuccCheckBox()) 
00204                 connEtoC20(e);
00205             if (e.getSource() == Dependencies.this.getInterferPredCheckBox()) 
00206                 connEtoC21(e);
00207             if (e.getSource() == Dependencies.this.getInterferSuccCheckBox()) 
00208                 connEtoC22(e);
00209             if (e.getSource() == Dependencies.this.getSynchPredCheckBox()) 
00210                 connEtoC23(e);
00211             if (e.getSource() == Dependencies.this.getSynchSuccCheckBox()) 
00212                 connEtoC24(e);
00213             if (e.getSource() == Dependencies.this.getValuePredCheckBox()) 
00214                 connEtoC25(e);
00215             if (e.getSource() == Dependencies.this.getValueSuccCheckBox()) 
00216                 connEtoC26(e);
00217             if (e.getSource() == Dependencies.this.getValueSetCheckBox()) 
00218                 connEtoC27(e);
00219         };
00220         public void windowActivated(java.awt.event.WindowEvent e) {};
00221         public void windowClosed(java.awt.event.WindowEvent e) {
00222             if (e.getSource() == Dependencies.this) 
00223                 connEtoC1(e);
00224         };
00225         public void windowClosing(java.awt.event.WindowEvent e) {};
00226         public void windowDeactivated(java.awt.event.WindowEvent e) {};
00227         public void windowDeiconified(java.awt.event.WindowEvent e) {};
00228         public void windowIconified(java.awt.event.WindowEvent e) {};
00229         public void windowOpened(java.awt.event.WindowEvent e) {};
00230     };
00231 /**
00232  * Dependencies constructor comment.
00233  */
00234 public Dependencies() {
00235     super();
00236     initialize();
00237 
00238 }
00239 /**
00240  * Dependencies constructor comment.
00241  * @param title java.lang.String
00242  */
00243 public Dependencies(String title) {
00244     super(title);
00245 }
00246 /**
00247  * Method to handle events for the ActionListener interface.
00248  * @param e java.awt.event.ActionEvent
00249  */
00250 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00251 public void actionPerformed(java.awt.event.ActionEvent e) {
00252     // user code begin {1}
00253     // user code end
00254     if (e.getSource() == getHistoryComboBox()) 
00255         connEtoC9();
00256     if (e.getSource() == getBackToolBarButton()) 
00257         connEtoC10(e);
00258     if (e.getSource() == getForwardToolBarButton()) 
00259         connEtoC11(e);
00260     if (e.getSource() == getClearToolBarButton()) 
00261         connEtoC15();
00262     if (e.getSource() == getAllpredButton()) 
00263         connEtoC28(e);
00264     if (e.getSource() == getAllsuccButton()) 
00265         connEtoC29(e);
00266     if (e.getSource() == getAllDependButton()) 
00267         connEtoC30(e);
00268     if (e.getSource() == getNopredButton()) 
00269         connEtoC31(e);
00270     if (e.getSource() == getNosuccButton()) 
00271         connEtoC32(e);
00272     if (e.getSource() == getClearDependButton()) 
00273         connEtoC33(e);
00274     if (e.getSource() == getAllValuesButton()) 
00275         connEtoC34(e);
00276     if (e.getSource() == getClearValuesButton()) 
00277         connEtoC35(e);
00278     if (e.getSource() == getBackwardSliceToolBarButton()) 
00279         connEtoC2();
00280     // user code begin {2}
00281     // user code end
00282 }
00283 public void addSelectedNodeToDependFrame(StmtTreeNode nodeTobeAdded) {
00284     //Object nodeTobeAdded = getTreeNode();
00285     if (nodeTobeAdded == null)
00286         return;
00287     if (!getClearToolBarButton().isEnabled())
00288         getClearToolBarButton().setEnabled(true);
00289     if (!getBackwardSliceToolBarButton().isEnabled())
00290         getBackwardSliceToolBarButton().setEnabled(true);
00291     if (!getForwardSliceToolBarButton().isEnabled())
00292         getForwardSliceToolBarButton().setEnabled(true);
00293     /*
00294     if (!getQueryToolBarButton().isEnabled())
00295     getQueryToolBarButton().setEnabled(true);
00296     */
00297     int itemIndex = historyComboBoxItemsContains(nodeTobeAdded);
00298     Configuration currentConfig = null;
00299     if (itemIndex >= 0) {
00300         int selectedIndex = getHistoryComboBox().getSelectedIndex();
00301         if (itemIndex == selectedIndex)
00302             return;
00303         currentConfig = getCurrentConfig();
00304         nodeToConfigTable.put(currentNode, currentConfig);
00305         //put the current node into history chain
00306         compactHistoryChain(currentNode);
00307         historyChain.addLast(currentNode);
00308         currentPositionOfHistoryChain++;
00309         if (!getBackToolBarButton().isEnabled())
00310             getBackToolBarButton().setEnabled(true);
00311         currentNode = getHistoryComboBox().getItemAt(itemIndex);
00312         Configuration oldConfig = (Configuration) nodeToConfigTable.get(currentNode);
00313         if (!doDependsInConfig(oldConfig) && !doValuesInConfig(oldConfig)) {
00314             initializeConfig();
00315             if (nodeTobeAdded instanceof StmtTreeNode)
00316                 currentMethodDecAnn = ((StmtTreeNode) nodeTobeAdded).currentMethodDeclarationAnnotation;
00317             dependencyValueViewer.currentDependTreeRoot = new DefaultMutableTreeNode(currentNode);
00318             dependencyValueViewer.getDependencyTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentDependTreeRoot));
00319             dependencyValueViewer.currentValueTreeRoot = new DefaultMutableTreeNode(currentNode);
00320             dependencyValueViewer.getValueTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentValueTreeRoot));
00321             if (currentConfig != null)
00322                 restoreConfigByAddingNewNode(currentConfig);
00323         } else
00324             restoreConfig(oldConfig);
00325         isSetItemByProgram = true;
00326         getHistoryComboBox().setSelectedIndex(itemIndex);
00327         isSetItemByProgram = false;
00328         return;
00329     }
00330     isSetItemByProgram = true;
00331     getHistoryComboBox().insertItemAt(nodeTobeAdded, 0);
00332     getHistoryComboBox().setSelectedIndex(0);
00333     isSetItemByProgram = false;
00334     if (currentNode != null) {
00335         //save the current configuration;
00336         currentConfig = getCurrentConfig();
00337         nodeToConfigTable.put(currentNode, currentConfig);
00338         //put the current node into history chain
00339         compactHistoryChain(currentNode);
00340         historyChain.addLast(currentNode);
00341         currentPositionOfHistoryChain++;
00342         if (!getBackToolBarButton().isEnabled())
00343             getBackToolBarButton().setEnabled(true);
00344     }
00345     //initialize the config;
00346     initializeConfig();
00347     currentNode = nodeTobeAdded;
00348     if (nodeTobeAdded instanceof StmtTreeNode)
00349         currentMethodDecAnn = ((StmtTreeNode) nodeTobeAdded).currentMethodDeclarationAnnotation;
00350     dependencyValueViewer.currentDependTreeRoot = new DefaultMutableTreeNode(currentNode);
00351     dependencyValueViewer.getDependencyTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentDependTreeRoot));
00352     dependencyValueViewer.currentValueTreeRoot = new DefaultMutableTreeNode(currentNode);
00353     dependencyValueViewer.getValueTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentValueTreeRoot));
00354     if (currentConfig != null)
00355         restoreConfigByAddingNewNode(currentConfig);
00356 }
00357 /**
00358  * Comment
00359  */
00360 public void allDependButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00361     if (currentNode == null) {
00362         selectStatementWarning(getAllDependButton());
00363         return;
00364     }
00365     dependencyValueViewer.setState(Frame.NORMAL);
00366     dependencyValueViewer.toFront();
00367     isChangeCheckBoxByProgram = true;
00368     if (!doPredDataDepend) {
00369         doPredDataDepend = true;
00370         getDataPredCheckBox().setSelected(true);
00371     }
00372     if (!doPredControlDepend) {
00373         doPredControlDepend = true;
00374         getControlPredCheckBox().setSelected(true);
00375     }
00376     if (!doPredReadyDepend) {
00377         doPredReadyDepend = true;
00378         getReadyPredCheckBox().setSelected(true);
00379     }
00380     if (!doPredSynchDepend) {
00381         doPredSynchDepend = true;
00382         getSynchPredCheckBox().setSelected(true);
00383     }
00384     if (!doPredInterferDepend) {
00385         doPredInterferDepend = true;
00386         getInterferPredCheckBox().setSelected(true);
00387     }
00388     if (!doPredDivergentDepend) {
00389         doPredDivergentDepend = true;
00390         getDiverPredCheckBox().setSelected(true);
00391     }
00392     if (!doSuccDataDepend) {
00393         doSuccDataDepend = true;
00394         getDataSuccCheckBox().setSelected(true);
00395     }
00396     if (!doSuccControlDepend) {
00397         doSuccControlDepend = true;
00398         getControlSuccCheckBox().setSelected(true);
00399     }
00400     if (!doSuccReadyDepend) {
00401         doSuccReadyDepend = true;
00402         getReadySuccCheckBox().setSelected(true);
00403     }
00404     if (!doSuccSynchDepend) {
00405         doSuccSynchDepend = true;
00406         getSynchSuccCheckBox().setSelected(true);
00407     }
00408     if (!doSuccInterferDepend) {
00409         doSuccInterferDepend = true;
00410         getInterferSuccCheckBox().setSelected(true);
00411     }
00412     if (!doSuccDivergentDepend) {
00413         doSuccDivergentDepend = true;
00414         getDiverSuccCheckBox().setSelected(true);
00415     }
00416     isChangeCheckBoxByProgram = false;
00417     DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
00418     Set dependencySet = new ca.mcgill.sable.util.ArraySet(this.dependencyKinds);
00419     for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
00420         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
00421         String dependKind = oneChild.toString();
00422         dependencySet.remove(dependKind);
00423         boolean foundSuccessor = false;
00424         boolean foundPredecessor = false;
00425         for (int j = 0; j < oneChild.getChildCount(); j++) {
00426             DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
00427             if (predSuccChild.toString().equals("Successors"))
00428                 foundSuccessor = true;
00429             else
00430                 if (predSuccChild.toString().equals("Predecessors"))
00431                     foundPredecessor = true;
00432         }
00433         if (!foundSuccessor) {
00434             DefaultMutableTreeNode currentDependencyRoot = oneChild;
00435             DefaultMutableTreeNode dependencySuccTreeNode = getDependencyTreeNode(dependKind, false);
00436             treeModel.insertNodeInto(dependencySuccTreeNode, currentDependencyRoot, currentDependencyRoot.getChildCount());
00437             // Make sure the user can see the lovely new node.
00438             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dependencySuccTreeNode.getPath()));
00439         }
00440         if (!foundPredecessor) {
00441             DefaultMutableTreeNode currentDependencyRoot = oneChild;
00442             DefaultMutableTreeNode dependencyPredTreeNode = getDependencyTreeNode(dependKind, true);
00443             treeModel.insertNodeInto(dependencyPredTreeNode, currentDependencyRoot, 0);
00444             // Make sure the user can see the lovely new node.
00445             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dependencyPredTreeNode.getPath()));
00446         }
00447     }
00448     boolean isDependency = true;
00449     for (Iterator dependIt = dependencySet.iterator(); dependIt.hasNext();) {
00450         String dependKind = (String) dependIt.next();
00451         DefaultMutableTreeNode currentDependencyRoot = new DefaultMutableTreeNode(dependKind);
00452         int insertIndex = dependencyValueViewer.getInsertIndexOf(dependKind, isDependency);
00453         treeModel.insertNodeInto(currentDependencyRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
00454         DefaultMutableTreeNode dependencyPredTreeNode = getDependencyTreeNode(dependKind, true);
00455         treeModel.insertNodeInto(dependencyPredTreeNode, currentDependencyRoot, 0);
00456         DefaultMutableTreeNode dependencySuccTreeNode = getDependencyTreeNode(dependKind, false);
00457         treeModel.insertNodeInto(dependencySuccTreeNode, currentDependencyRoot, 1);
00458         // Make sure the user can see the lovely new node.
00459         dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(currentDependencyRoot.getPath()));
00460     }
00461     dependencyValueViewer.expandDependTreeToOneLevel(isDependency);
00462     dependencyValueViewer.changeViewerState();
00463     return;
00464 }
00465 /**
00466  * Comment
00467  */
00468 public void allpredButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00469     if (currentNode == null) {
00470         selectStatementWarning(getAllpredButton());
00471         return;
00472     }
00473     dependencyValueViewer.setState(Frame.NORMAL);
00474     dependencyValueViewer.toFront();
00475     isChangeCheckBoxByProgram = true;
00476     if (!doPredDataDepend) {
00477         doPredDataDepend = true;
00478         getDataPredCheckBox().setSelected(true);
00479     }
00480     if (!doPredControlDepend) {
00481         doPredControlDepend = true;
00482         getControlPredCheckBox().setSelected(true);
00483     }
00484     if (!doPredReadyDepend) {
00485         doPredReadyDepend = true;
00486         getReadyPredCheckBox().setSelected(true);
00487     }
00488     if (!doPredSynchDepend) {
00489         doPredSynchDepend = true;
00490         getSynchPredCheckBox().setSelected(true);
00491     }
00492     if (!doPredInterferDepend) {
00493         doPredInterferDepend = true;
00494         getInterferPredCheckBox().setSelected(true);
00495     }
00496     if (!doPredDivergentDepend) {
00497         doPredDivergentDepend = true;
00498         getDiverPredCheckBox().setSelected(true);
00499     }
00500     isChangeCheckBoxByProgram = false;
00501 
00502     //Traverse the dependency tree for each kind of dependency
00503     //to see if there is predecessors node. If there is, then skip
00504     //if there is no this node, then create it and calculate the
00505     //predecessors of that dependency.
00506     DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
00507     Set dependencySet = new ca.mcgill.sable.util.ArraySet(this.dependencyKinds);
00508     for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
00509         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
00510         String dependKind = oneChild.toString();
00511         dependencySet.remove(dependKind);
00512         boolean foundPredecessor = false;
00513         for (int j = 0; j < oneChild.getChildCount(); j++) {
00514             DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
00515             if (predSuccChild.toString().equals("Predecessors"))
00516                 foundPredecessor = true;
00517         }
00518         if (foundPredecessor)
00519             continue;
00520         DefaultMutableTreeNode currentDependencyRoot = oneChild;
00521         DefaultMutableTreeNode dependencyPredTreeNode = getDependencyTreeNode(dependKind, true);
00522         treeModel.insertNodeInto(dependencyPredTreeNode, currentDependencyRoot, 0);
00523         // Make sure the user can see the lovely new node.
00524         dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dependencyPredTreeNode.getPath()));
00525     }
00526     boolean isDependency = true;
00527     for (Iterator dependIt = dependencySet.iterator(); dependIt.hasNext();) {
00528         String dependKind = (String) dependIt.next();
00529         DefaultMutableTreeNode currentDependencyRoot = new DefaultMutableTreeNode(dependKind);
00530         int insertIndex = dependencyValueViewer.getInsertIndexOf(dependKind, isDependency);
00531         treeModel.insertNodeInto(currentDependencyRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
00532         DefaultMutableTreeNode dependencyPredTreeNode = getDependencyTreeNode(dependKind, true);
00533         treeModel.insertNodeInto(dependencyPredTreeNode, currentDependencyRoot, 0);
00534         // Make sure the user can see the lovely new node.
00535         dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dependencyPredTreeNode.getPath()));
00536     }
00537     dependencyValueViewer.expandDependTreeToOneLevel(isDependency);
00538     dependencyValueViewer.changeViewerState();
00539     return;
00540 }
00541 /**
00542  * Comment
00543  */
00544 public void allsuccButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00545     if (currentNode == null) {
00546         selectStatementWarning(getAllsuccButton());
00547         return;
00548     }
00549     dependencyValueViewer.setState(Frame.NORMAL);
00550     dependencyValueViewer.toFront();
00551     isChangeCheckBoxByProgram = true;
00552     if (!doSuccDataDepend) {
00553         doSuccDataDepend = true;
00554         getDataSuccCheckBox().setSelected(true);
00555     }
00556     if (!doSuccControlDepend) {
00557         doSuccControlDepend = true;
00558         getControlSuccCheckBox().setSelected(true);
00559     }
00560     if (!doSuccReadyDepend) {
00561         doSuccReadyDepend = true;
00562         getReadySuccCheckBox().setSelected(true);
00563     }
00564     if (!doSuccSynchDepend) {
00565         doSuccSynchDepend = true;
00566         getSynchSuccCheckBox().setSelected(true);
00567     }
00568     if (!doSuccInterferDepend) {
00569         doSuccInterferDepend = true;
00570         getInterferSuccCheckBox().setSelected(true);
00571     }
00572     if (!doSuccDivergentDepend) {
00573         doSuccDivergentDepend = true;
00574         getDiverSuccCheckBox().setSelected(true);
00575     }
00576     isChangeCheckBoxByProgram = false;
00577     DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
00578     Set dependencySet = new ca.mcgill.sable.util.ArraySet(this.dependencyKinds);
00579     for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
00580         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
00581         String dependKind = oneChild.toString();
00582         dependencySet.remove(dependKind);
00583         boolean foundSuccessor = false;
00584         for (int j = 0; j < oneChild.getChildCount(); j++) {
00585             DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
00586             if (predSuccChild.toString().equals("Successors"))
00587                 foundSuccessor = true;
00588         }
00589         if (foundSuccessor)
00590             continue;
00591         DefaultMutableTreeNode currentDependencyRoot = oneChild;
00592         DefaultMutableTreeNode dependencySuccTreeNode = getDependencyTreeNode(dependKind, false);
00593         treeModel.insertNodeInto(dependencySuccTreeNode, currentDependencyRoot, currentDependencyRoot.getChildCount());
00594         // Make sure the user can see the lovely new node.
00595         dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dependencySuccTreeNode.getPath()));
00596     }
00597     boolean isDependency = true;
00598     for (Iterator dependIt = dependencySet.iterator(); dependIt.hasNext();) {
00599         String dependKind = (String) dependIt.next();
00600         DefaultMutableTreeNode currentDependencyRoot = new DefaultMutableTreeNode(dependKind);
00601         int insertIndex = dependencyValueViewer.getInsertIndexOf(dependKind, isDependency);
00602         treeModel.insertNodeInto(currentDependencyRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
00603         DefaultMutableTreeNode dependencySuccTreeNode = getDependencyTreeNode(dependKind, false);
00604         treeModel.insertNodeInto(dependencySuccTreeNode, currentDependencyRoot, 0);
00605         // Make sure the user can see the lovely new node.
00606         dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dependencySuccTreeNode.getPath()));
00607     }
00608     dependencyValueViewer.expandDependTreeToOneLevel(isDependency);
00609     dependencyValueViewer.changeViewerState();
00610     return;
00611 }
00612 /**
00613  * Comment
00614  */
00615 public void allValuesButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00616     if (currentNode == null) {
00617         selectStatementWarning(getAllValuesButton());
00618         return;
00619     }
00620     dependencyValueViewer.setState(Frame.NORMAL);
00621     dependencyValueViewer.toFront();
00622     isChangeCheckBoxByProgram = true;
00623     if (!doPredValue) {
00624         doPredValue = true;
00625         getValuePredCheckBox().setSelected(true);
00626     }
00627     if (!doSuccValue) {
00628         doSuccValue = true;
00629         getValueSuccCheckBox().setSelected(true);
00630     }
00631     if (!doSetValue) {
00632         doSetValue = true;
00633         getValueSetCheckBox().setSelected(true);
00634     }
00635     isChangeCheckBoxByProgram = false;
00636     DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
00637     Set valueKindSet = new ca.mcgill.sable.util.ArraySet(this.valueKinds);
00638     for (int i = 0; i < dependencyValueViewer.currentValueTreeRoot.getChildCount(); i++) {
00639         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentValueTreeRoot.getChildAt(i);
00640         String valueKind = oneChild.toString();
00641         valueKindSet.remove(valueKind);
00642     }
00643     boolean isDependency = false;
00644     for (Iterator kindIt = valueKindSet.iterator(); kindIt.hasNext();) {
00645         String valueKind = (String) kindIt.next();
00646         DefaultMutableTreeNode currentValueTreeRoot = dependencyValueViewer.currentValueTreeRoot;
00647         int insertIndex = dependencyValueViewer.getInsertIndexOf(valueKind, isDependency);
00648         DefaultMutableTreeNode valueTreeNode = getValueTreeNode(valueKind);
00649         treeModel.insertNodeInto(valueTreeNode, currentValueTreeRoot, insertIndex);
00650 
00651         // Make sure the user can see the lovely new node.
00652         dependencyValueViewer.getValueTree().scrollPathToVisible(new TreePath(currentValueTreeRoot.getPath()));
00653     }
00654     //and then
00655     dependencyValueViewer.expandAndCollapseFrom(dependencyValueViewer.currentValueTreeRoot, isDependency);
00656     dependencyValueViewer.changeViewerState();
00657     return;
00658 }
00659 /**
00660  * Comment
00661  */
00662 public void backToolBarButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00663     dependencyValueViewer.setState(Frame.NORMAL);
00664     dependencyValueViewer.toFront();
00665     //save current configuration
00666     if (currentPositionOfHistoryChain == historyChain.size() - 1) {
00667         compactHistoryChain(currentNode);
00668         historyChain.addLast(currentNode);
00669         currentPositionOfHistoryChain++;
00670     }
00671     Configuration config = getCurrentConfig();
00672     nodeToConfigTable.put(currentNode, config);
00673     //get the previous configuration
00674     --currentPositionOfHistoryChain;
00675     currentNode = historyChain.get(currentPositionOfHistoryChain);
00676     config = (Configuration) nodeToConfigTable.get(currentNode);
00677     restoreConfig(config);
00678     isSetItemByProgram = true;
00679     getHistoryComboBox().setSelectedItem(currentNode);
00680     isSetItemByProgram = false;
00681     if (currentPositionOfHistoryChain == 0)
00682         getBackToolBarButton().setEnabled(false);
00683     if (!getForwardToolBarButton().isEnabled())
00684         getForwardToolBarButton().setEnabled(true);
00685     return;
00686 }
00687 /**
00688  * Comment
00689  */
00690 public void backwardSliceToolBarButton_ActionEvents() {
00691     this.criterionViewer.runSlicerWithCurrentCriterion();
00692     return;
00693 }
00694 /**
00695  * Insert the method's description here.
00696  * Creation date: (00-12-20 15:12:55)
00697  */
00698 private void calculateValueSet(DefaultMutableTreeNode valueRoot) {
00699     Annotation mda = null;
00700     Annotation stmtAnnotation = null;
00701     if (currentNode instanceof StmtTreeNode) {
00702         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
00703         mda = startTreeNode.currentMethodDeclarationAnnotation;
00704         currentMethodDecAnn = mda;
00705         stmtAnnotation = startTreeNode.currentStmtAnnotation;
00706     } else
00707         if (currentNode instanceof Annotation) {
00708             mda = currentMethodDecAnn;
00709             stmtAnnotation = (Annotation) currentNode;
00710         } else
00711             return;
00712     SootMethod sootMethod = null;
00713     if (mda instanceof MethodDeclarationAnnotation)
00714         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
00715     else
00716         if (mda instanceof ConstructorDeclarationAnnotation)
00717             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
00718         //deterimine the set of Jimple statement in the stmtAnnotation
00719     Stmt[] stmtsInAnnotation;
00720     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
00721         stmtsInAnnotation = stmtAnnotation.getStatements();
00722         //stmtsInAnnotation = new Stmt[1];
00723         //stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
00724     } else
00725         if (stmtAnnotation instanceof ConditionalAnnotation) {
00726             stmtsInAnnotation = new Stmt[1];
00727             Stmt[] testStmts = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
00728             stmtsInAnnotation[0] = testStmts[0];
00729         } else
00730             if (stmtAnnotation instanceof ControlFlowAnnotation) {
00731                 stmtsInAnnotation = new Stmt[1];
00732                 Stmt[] testStmts = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
00733                 stmtsInAnnotation[0] = testStmts[0];
00734             } else
00735                 stmtsInAnnotation = stmtAnnotation.getStatements();
00736     //Calculate reference value set used in the stmtsInAnnotation
00737     Set refValueSet = getRefValueSetFrom(stmtsInAnnotation);
00738     for (Iterator valueIt = refValueSet.iterator(); valueIt.hasNext();) {
00739         Value value = (Value) valueIt.next();
00740         DefaultMutableTreeNode valueNode = new DefaultMutableTreeNode(value);
00741         valueRoot.add(valueNode);
00742         //Analysis bofaAnalysis = Analysis.init();
00743         Collection valueSet = BOFA_Analysis.referenceValueSet(value, sootMethod);
00744         for (Iterator valueIt2 = valueSet.iterator(); valueIt2.hasNext();) {
00745             edu.ksu.cis.bandera.bofa.Analysis.ExprStmtMethodTriple valueTriple = (edu.ksu.cis.bandera.bofa.Analysis.ExprStmtMethodTriple) valueIt2.next();
00746             edu.ksu.cis.bandera.bofa.Analysis.StmtMethodPair stmtMethodPair = valueTriple.getStmtMethodPair();
00747             Stmt valueStmt = stmtMethodPair.getStmt();
00748             SootMethod valueMethod = stmtMethodPair.getSootMethod();
00749             if (valueStmt instanceof IdentityStmt) {
00750                 ParameterNode paraNode = new ParameterNode(sootMethod.getDeclaringClass(), mda, (IdentityStmt) valueStmt);
00751                 valueNode.add(new DefaultMutableTreeNode(paraNode));
00752             } else {
00753                 Annotation valueStmtAnnotation = null;
00754                 Annotation methodAnnotation = null;
00755                 if (valueMethod.equals(sootMethod))
00756                     methodAnnotation = mda;
00757                 else
00758                     methodAnnotation = CompilationManager.getAnnotationManager().getAnnotation(valueMethod.getDeclaringClass(), valueMethod);
00759             try {
00760                 valueStmtAnnotation = methodAnnotation.getContainingAnnotation(valueStmt);
00761             } catch (AnnotationException ae) {
00762                 System.out.println("there is an AnnotationException! And ddStmtAnnotation may be null");
00763             }
00764             if (!valueStmtAnnotation.toString().equals(""))
00765                 valueNode.add(new DefaultMutableTreeNode(valueStmtAnnotation));
00766         }
00767     }
00768 }
00769 }
00770 /**
00771  * Comment
00772  */
00773 public void clearDependButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00774     if (currentNode == null) {
00775         selectStatementWarning(getClearDependButton());
00776         return;
00777     }
00778     dependencyValueViewer.setState(Frame.NORMAL);
00779     dependencyValueViewer.toFront();
00780     isChangeCheckBoxByProgram = true;
00781     if (doPredDataDepend) {
00782         doPredDataDepend = false;
00783         getDataPredCheckBox().setSelected(false);
00784     }
00785     if (doPredControlDepend) {
00786         doPredControlDepend = false;
00787         getControlPredCheckBox().setSelected(false);
00788     }
00789     if (doPredReadyDepend) {
00790         doPredReadyDepend = false;
00791         getReadyPredCheckBox().setSelected(false);
00792     }
00793     if (doPredSynchDepend) {
00794         doPredSynchDepend = false;
00795         getSynchPredCheckBox().setSelected(false);
00796     }
00797     if (doPredInterferDepend) {
00798         doPredInterferDepend = false;
00799         getInterferPredCheckBox().setSelected(false);
00800     }
00801     if (doPredDivergentDepend) {
00802         doPredDivergentDepend = false;
00803         getDiverPredCheckBox().setSelected(false);
00804     }
00805     if (doSuccDataDepend) {
00806         doSuccDataDepend = false;
00807         getDataSuccCheckBox().setSelected(false);
00808     }
00809     if (doSuccControlDepend) {
00810         doSuccControlDepend = false;
00811         getControlSuccCheckBox().setSelected(false);
00812     }
00813     if (doSuccReadyDepend) {
00814         doSuccReadyDepend = false;
00815         getReadySuccCheckBox().setSelected(false);
00816     }
00817     if (doSuccSynchDepend) {
00818         doSuccSynchDepend = false;
00819         getSynchSuccCheckBox().setSelected(false);
00820     }
00821     if (doSuccInterferDepend) {
00822         doSuccInterferDepend = false;
00823         getInterferSuccCheckBox().setSelected(false);
00824     }
00825     if (doSuccDivergentDepend) {
00826         doSuccDivergentDepend = false;
00827         getDiverSuccCheckBox().setSelected(false);
00828     }
00829     isChangeCheckBoxByProgram = false;
00830     //remove all predecessor and successsor dependency in current tree and
00831     dependencyValueViewer.currentDependTreeRoot = new DefaultMutableTreeNode(currentNode);
00832     dependencyValueViewer.getDependencyTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentDependTreeRoot));
00833     dependencyValueViewer.changeViewerState();
00834     return;
00835 }
00836 /**
00837  * Comment
00838  */
00839 public void clearToolBarButton_ActionEvents() {
00840     initializeConfig();
00841     currentMethodDecAnn = null;
00842     currentNode = null;
00843     currentPositionOfHistoryChain = -1;
00844     dependencyValueViewer.currentDependTreeRoot = null;
00845     dependencyValueViewer.currentValueTreeRoot = null;
00846     historyChain = new LinkedList();
00847     nodeToConfigTable = new Hashtable();
00848     getBackToolBarButton().setEnabled(false);
00849     getForwardToolBarButton().setEnabled(false);
00850     getClearToolBarButton().setEnabled(false);
00851     getBackwardSliceToolBarButton().setEnabled(false);
00852     getForwardSliceToolBarButton().setEnabled(false);
00853     isSetItemByProgram = true;
00854     try {
00855         getHistoryComboBox().removeAllItems();
00856     } catch (Exception e) {
00857     }
00858     isSetItemByProgram = false;
00859     dependencyValueViewer.getDependencyTree().setModel(new DefaultTreeModel(new DefaultMutableTreeNode("")));
00860     dependencyValueViewer.getValueTree().setModel(new DefaultTreeModel(new DefaultMutableTreeNode("")));
00861     return;
00862 }
00863 /**
00864  * Comment
00865  */
00866 public void clearValuesButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
00867     if (currentNode == null) {
00868         selectStatementWarning(getClearValuesButton());
00869         return;
00870     }
00871     dependencyValueViewer.setState(Frame.NORMAL);
00872     dependencyValueViewer.toFront();
00873     isChangeCheckBoxByProgram = true;
00874     if (doPredValue) {
00875         doPredValue = false;
00876         getValuePredCheckBox().setSelected(false);
00877     }
00878     if (doSuccValue) {
00879         doSuccValue = false;
00880         getValueSuccCheckBox().setSelected(false);
00881     }
00882     if (doSetValue) {
00883         doSetValue = false;
00884         getValueSetCheckBox().setSelected(false);
00885     }
00886     isChangeCheckBoxByProgram = false;
00887     //remove all values in the viewer
00888     dependencyValueViewer.currentValueTreeRoot = new DefaultMutableTreeNode(currentNode);
00889     dependencyValueViewer.getValueTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentValueTreeRoot));
00890 
00891     //and then
00892 
00893     dependencyValueViewer.changeViewerState();
00894     return;
00895 }
00896 /**
00897  * Insert the method's description here.
00898  * Creation date: (7/17/2001 4:07:26 PM)
00899  * @return ca.mcgill.sable.util.Set
00900  * @param stmtsInAnnotation ca.mcgill.sable.soot.jimple.Stmt[]
00901  */
00902 private Set collectVarsFromStmts(Stmt[] stmtsInAnnotation) {
00903     Set varSet = new ArraySet();
00904     for (int i = 0; i < stmtsInAnnotation.length; i++) {
00905         for (Iterator valueBoxIt = stmtsInAnnotation[i].getUseAndDefBoxes().iterator(); valueBoxIt.hasNext();) {
00906             ValueBox valueBox = (ValueBox) valueBoxIt.next();
00907             Value value = valueBox.getValue();
00908             if (value instanceof Local) {
00909                 if (!((Local) value).getName().startsWith("JJJCTEMP") && !((Local) value).getName().startsWith("$"))
00910                     varSet.add(value);
00911             } else
00912                 if ((value instanceof InvokeExpr) || (value instanceof Constant) || (value instanceof BinopExpr) ||(value instanceof NewExpr)) {
00913                 } else
00914                     varSet.add(value);
00915         }
00916     }
00917     return varSet;
00918 }
00919 /**
00920  * Insert the method's description here.
00921  * Creation date: (00-5-28 19:36:19)
00922  * @param node java.lang.Object
00923  */
00924 private void compactHistoryChain(Object node) {
00925     int index = historyChain.indexOf(node);
00926     while (index >= 0) {
00927         historyChain.remove(index);
00928         currentPositionOfHistoryChain--;
00929         index = historyChain.indexOf(node);
00930     }
00931 }
00932 /**
00933  * connEtoC1:  (Dependencies.window.windowClosed(java.awt.event.WindowEvent) --> Dependencies.dependencies_WindowClosed(Ljava.awt.event.WindowEvent;)V)
00934  * @param arg1 java.awt.event.WindowEvent
00935  */
00936 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00937 private void connEtoC1(java.awt.event.WindowEvent arg1) {
00938     try {
00939         // user code begin {1}
00940         // user code end
00941         this.dependencies_WindowClosed(arg1);
00942         // user code begin {2}
00943         // user code end
00944     } catch (java.lang.Throwable ivjExc) {
00945         // user code begin {3}
00946         // user code end
00947         handleException(ivjExc);
00948     }
00949 }
00950 /**
00951  * connEtoC10:  (BackToolBarButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.backToolBarButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
00952  * @param arg1 java.awt.event.ActionEvent
00953  */
00954 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00955 private void connEtoC10(java.awt.event.ActionEvent arg1) {
00956     try {
00957         // user code begin {1}
00958         // user code end
00959         this.backToolBarButton_ActionPerformed(arg1);
00960         // user code begin {2}
00961         // user code end
00962     } catch (java.lang.Throwable ivjExc) {
00963         // user code begin {3}
00964         // user code end
00965         handleException(ivjExc);
00966     }
00967 }
00968 /**
00969  * connEtoC11:  (ForwardToolBarButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.forwardToolBarButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
00970  * @param arg1 java.awt.event.ActionEvent
00971  */
00972 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00973 private void connEtoC11(java.awt.event.ActionEvent arg1) {
00974     try {
00975         // user code begin {1}
00976         // user code end
00977         this.forwardToolBarButton_ActionPerformed(arg1);
00978         // user code begin {2}
00979         // user code end
00980     } catch (java.lang.Throwable ivjExc) {
00981         // user code begin {3}
00982         // user code end
00983         handleException(ivjExc);
00984     }
00985 }
00986 /**
00987  * connEtoC12:  (DataSuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.dataSuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
00988  * @param arg1 java.awt.event.ItemEvent
00989  */
00990 /* WARNING: THIS METHOD WILL BE REGENERATED. */
00991 private void connEtoC12(java.awt.event.ItemEvent arg1) {
00992     try {
00993         // user code begin {1}
00994         if (!isChangeCheckBoxByProgram)
00995             
00996             // user code end
00997             this.dataSuccCheckBox_ItemStateChanged(arg1);
00998         // user code begin {2}
00999         // user code end
01000     } catch (java.lang.Throwable ivjExc) {
01001         // user code begin {3}
01002         // user code end
01003         handleException(ivjExc);
01004     }
01005 }
01006 /**
01007  * connEtoC13:  (ControlPredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.controlPredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01008  * @param arg1 java.awt.event.ItemEvent
01009  */
01010 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01011 private void connEtoC13(java.awt.event.ItemEvent arg1) {
01012     try {
01013         // user code begin {1}
01014         if (!isChangeCheckBoxByProgram)
01015         // user code end
01016         this.controlPredCheckBox_ItemStateChanged(arg1);
01017         // user code begin {2}
01018         // user code end
01019     } catch (java.lang.Throwable ivjExc) {
01020         // user code begin {3}
01021         // user code end
01022         handleException(ivjExc);
01023     }
01024 }
01025 /**
01026  * connEtoC14:  (ClearToolBarButton.action. --> Dependencies.clearToolBarButton_ActionEvents()V)
01027  */
01028 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01029 private void connEtoC14() {
01030     try {
01031         // user code begin {1}
01032         // user code end
01033         this.clearToolBarButton_ActionEvents();
01034         // user code begin {2}
01035         // user code end
01036     } catch (java.lang.Throwable ivjExc) {
01037         // user code begin {3}
01038         // user code end
01039         handleException(ivjExc);
01040     }
01041 }
01042 /**
01043  * connEtoC15:  (QueryToolBarButton.action. --> Dependencies.queryToolBarButton_ActionEvents()V)
01044  */
01045 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01046 private void connEtoC15() {
01047     try {
01048         // user code begin {1}
01049         // user code end
01050         this.clearToolBarButton_ActionEvents();
01051         // user code begin {2}
01052         // user code end
01053     } catch (java.lang.Throwable ivjExc) {
01054         // user code begin {3}
01055         // user code end
01056         handleException(ivjExc);
01057     }
01058 }
01059 /**
01060  * connEtoC16:  (ControlSuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.controlSuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01061  * @param arg1 java.awt.event.ItemEvent
01062  */
01063 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01064 private void connEtoC16(java.awt.event.ItemEvent arg1) {
01065     try {
01066         // user code begin {1}
01067         if (!isChangeCheckBoxByProgram)
01068         // user code end
01069         this.controlSuccCheckBox_ItemStateChanged(arg1);
01070         // user code begin {2}
01071         // user code end
01072     } catch (java.lang.Throwable ivjExc) {
01073         // user code begin {3}
01074         // user code end
01075         handleException(ivjExc);
01076     }
01077 }
01078 /**
01079  * connEtoC17:  (DiverPredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.diverPredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01080  * @param arg1 java.awt.event.ItemEvent
01081  */
01082 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01083 private void connEtoC17(java.awt.event.ItemEvent arg1) {
01084     try {
01085         // user code begin {1}
01086         if (!isChangeCheckBoxByProgram)
01087         // user code end
01088         this.diverPredCheckBox_ItemStateChanged(arg1);
01089         // user code begin {2}
01090         // user code end
01091     } catch (java.lang.Throwable ivjExc) {
01092         // user code begin {3}
01093         // user code end
01094         handleException(ivjExc);
01095     }
01096 }
01097 /**
01098  * connEtoC18:  (DiverSuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.diverSuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01099  * @param arg1 java.awt.event.ItemEvent
01100  */
01101 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01102 private void connEtoC18(java.awt.event.ItemEvent arg1) {
01103     try {
01104         // user code begin {1}
01105         if (!isChangeCheckBoxByProgram)
01106         // user code end
01107         this.diverSuccCheckBox_ItemStateChanged(arg1);
01108         // user code begin {2}
01109         // user code end
01110     } catch (java.lang.Throwable ivjExc) {
01111         // user code begin {3}
01112         // user code end
01113         handleException(ivjExc);
01114     }
01115 }
01116 /**
01117  * connEtoC19:  (ReadyPredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.readyPredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01118  * @param arg1 java.awt.event.ItemEvent
01119  */
01120 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01121 private void connEtoC19(java.awt.event.ItemEvent arg1) {
01122     try {
01123         // user code begin {1}
01124         if (!isChangeCheckBoxByProgram)
01125         // user code end
01126         this.readyPredCheckBox_ItemStateChanged(arg1);
01127         // user code begin {2}
01128         // user code end
01129     } catch (java.lang.Throwable ivjExc) {
01130         // user code begin {3}
01131         // user code end
01132         handleException(ivjExc);
01133     }
01134 }
01135 /**
01136  * connEtoC2:  (BackwardSliceToolBarButton.action. --> Dependencies.backwardSliceToolBarButton_ActionEvents()V)
01137  */
01138 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01139 private void connEtoC2() {
01140     try {
01141         // user code begin {1}
01142         // user code end
01143         this.backwardSliceToolBarButton_ActionEvents();
01144         // user code begin {2}
01145         // user code end
01146     } catch (java.lang.Throwable ivjExc) {
01147         // user code begin {3}
01148         // user code end
01149         handleException(ivjExc);
01150     }
01151 }
01152 /**
01153  * connEtoC20:  (ReadySuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.readySuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01154  * @param arg1 java.awt.event.ItemEvent
01155  */
01156 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01157 private void connEtoC20(java.awt.event.ItemEvent arg1) {
01158     try {
01159         // user code begin {1}
01160         if (!isChangeCheckBoxByProgram)
01161         // user code end
01162         this.readySuccCheckBox_ItemStateChanged(arg1);
01163         // user code begin {2}
01164         // user code end
01165     } catch (java.lang.Throwable ivjExc) {
01166         // user code begin {3}
01167         // user code end
01168         handleException(ivjExc);
01169     }
01170 }
01171 /**
01172  * connEtoC21:  (InterferPredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.interferPredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01173  * @param arg1 java.awt.event.ItemEvent
01174  */
01175 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01176 private void connEtoC21(java.awt.event.ItemEvent arg1) {
01177     try {
01178         // user code begin {1}
01179         if (!isChangeCheckBoxByProgram)
01180         // user code end
01181         this.interferPredCheckBox_ItemStateChanged(arg1);
01182         // user code begin {2}
01183         // user code end
01184     } catch (java.lang.Throwable ivjExc) {
01185         // user code begin {3}
01186         // user code end
01187         handleException(ivjExc);
01188     }
01189 }
01190 /**
01191  * connEtoC22:  (InterferSuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.interferSuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01192  * @param arg1 java.awt.event.ItemEvent
01193  */
01194 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01195 private void connEtoC22(java.awt.event.ItemEvent arg1) {
01196     try {
01197         // user code begin {1}
01198         if (!isChangeCheckBoxByProgram)
01199         // user code end
01200         this.interferSuccCheckBox_ItemStateChanged(arg1);
01201         // user code begin {2}
01202         // user code end
01203     } catch (java.lang.Throwable ivjExc) {
01204         // user code begin {3}
01205         // user code end
01206         handleException(ivjExc);
01207     }
01208 }
01209 /**
01210  * connEtoC23:  (SynchPredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.synchPredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01211  * @param arg1 java.awt.event.ItemEvent
01212  */
01213 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01214 private void connEtoC23(java.awt.event.ItemEvent arg1) {
01215     try {
01216         // user code begin {1}
01217         if (!isChangeCheckBoxByProgram)
01218         // user code end
01219         this.synchPredCheckBox_ItemStateChanged(arg1);
01220         // user code begin {2}
01221         // user code end
01222     } catch (java.lang.Throwable ivjExc) {
01223         // user code begin {3}
01224         // user code end
01225         handleException(ivjExc);
01226     }
01227 }
01228 /**
01229  * connEtoC24:  (SynchSuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.synchSuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01230  * @param arg1 java.awt.event.ItemEvent
01231  */
01232 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01233 private void connEtoC24(java.awt.event.ItemEvent arg1) {
01234     try {
01235         // user code begin {1}
01236         if (!isChangeCheckBoxByProgram)
01237         // user code end
01238         this.synchSuccCheckBox_ItemStateChanged(arg1);
01239         // user code begin {2}
01240         // user code end
01241     } catch (java.lang.Throwable ivjExc) {
01242         // user code begin {3}
01243         // user code end
01244         handleException(ivjExc);
01245     }
01246 }
01247 /**
01248  * connEtoC25:  (ValuePredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.valuePredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01249  * @param arg1 java.awt.event.ItemEvent
01250  */
01251 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01252 private void connEtoC25(java.awt.event.ItemEvent arg1) {
01253     try {
01254         // user code begin {1}
01255         if (!isChangeCheckBoxByProgram)
01256         // user code end
01257         this.valuePredCheckBox_ItemStateChanged(arg1);
01258         // user code begin {2}
01259         // user code end
01260     } catch (java.lang.Throwable ivjExc) {
01261         // user code begin {3}
01262         // user code end
01263         handleException(ivjExc);
01264     }
01265 }
01266 /**
01267  * connEtoC26:  (ValueSuccCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.valueSuccCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01268  * @param arg1 java.awt.event.ItemEvent
01269  */
01270 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01271 private void connEtoC26(java.awt.event.ItemEvent arg1) {
01272     try {
01273         // user code begin {1}
01274         if (!isChangeCheckBoxByProgram)
01275         // user code end
01276         this.valueSuccCheckBox_ItemStateChanged(arg1);
01277         // user code begin {2}
01278         // user code end
01279     } catch (java.lang.Throwable ivjExc) {
01280         // user code begin {3}
01281         // user code end
01282         handleException(ivjExc);
01283     }
01284 }
01285 /**
01286  * connEtoC27:  (ValueSetCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.valueSetCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01287  * @param arg1 java.awt.event.ItemEvent
01288  */
01289 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01290 private void connEtoC27(java.awt.event.ItemEvent arg1) {
01291     try {
01292         // user code begin {1}
01293         if (!isChangeCheckBoxByProgram)
01294         // user code end
01295         this.valueSetCheckBox_ItemStateChanged(arg1);
01296         // user code begin {2}
01297         // user code end
01298     } catch (java.lang.Throwable ivjExc) {
01299         // user code begin {3}
01300         // user code end
01301         handleException(ivjExc);
01302     }
01303 }
01304 /**
01305  * connEtoC28:  (AllpredButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.allpredButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01306  * @param arg1 java.awt.event.ActionEvent
01307  */
01308 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01309 private void connEtoC28(java.awt.event.ActionEvent arg1) {
01310     try {
01311         // user code begin {1}
01312         // user code end
01313         this.allpredButton_ActionPerformed(arg1);
01314         // user code begin {2}
01315         // user code end
01316     } catch (java.lang.Throwable ivjExc) {
01317         // user code begin {3}
01318         // user code end
01319         handleException(ivjExc);
01320     }
01321 }
01322 /**
01323  * connEtoC29:  (AllsuccButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.allsuccButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01324  * @param arg1 java.awt.event.ActionEvent
01325  */
01326 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01327 private void connEtoC29(java.awt.event.ActionEvent arg1) {
01328     try {
01329         // user code begin {1}
01330         // user code end
01331         this.allsuccButton_ActionPerformed(arg1);
01332         // user code begin {2}
01333         // user code end
01334     } catch (java.lang.Throwable ivjExc) {
01335         // user code begin {3}
01336         // user code end
01337         handleException(ivjExc);
01338     }
01339 }
01340 /**
01341  * connEtoC30:  (AllDependButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.allDependButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01342  * @param arg1 java.awt.event.ActionEvent
01343  */
01344 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01345 private void connEtoC30(java.awt.event.ActionEvent arg1) {
01346     try {
01347         // user code begin {1}
01348         // user code end
01349         this.allDependButton_ActionPerformed(arg1);
01350         // user code begin {2}
01351         // user code end
01352     } catch (java.lang.Throwable ivjExc) {
01353         // user code begin {3}
01354         // user code end
01355         handleException(ivjExc);
01356     }
01357 }
01358 /**
01359  * connEtoC31:  (NopredButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.nopredButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01360  * @param arg1 java.awt.event.ActionEvent
01361  */
01362 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01363 private void connEtoC31(java.awt.event.ActionEvent arg1) {
01364     try {
01365         // user code begin {1}
01366         // user code end
01367         this.nopredButton_ActionPerformed(arg1);
01368         // user code begin {2}
01369         // user code end
01370     } catch (java.lang.Throwable ivjExc) {
01371         // user code begin {3}
01372         // user code end
01373         handleException(ivjExc);
01374     }
01375 }
01376 /**
01377  * connEtoC32:  (NosuccButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.nosuccButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01378  * @param arg1 java.awt.event.ActionEvent
01379  */
01380 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01381 private void connEtoC32(java.awt.event.ActionEvent arg1) {
01382     try {
01383         // user code begin {1}
01384         // user code end
01385         this.nosuccButton_ActionPerformed(arg1);
01386         // user code begin {2}
01387         // user code end
01388     } catch (java.lang.Throwable ivjExc) {
01389         // user code begin {3}
01390         // user code end
01391         handleException(ivjExc);
01392     }
01393 }
01394 /**
01395  * connEtoC33:  (ClearDependButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.clearDependButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01396  * @param arg1 java.awt.event.ActionEvent
01397  */
01398 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01399 private void connEtoC33(java.awt.event.ActionEvent arg1) {
01400     try {
01401         // user code begin {1}
01402         // user code end
01403         this.clearDependButton_ActionPerformed(arg1);
01404         // user code begin {2}
01405         // user code end
01406     } catch (java.lang.Throwable ivjExc) {
01407         // user code begin {3}
01408         // user code end
01409         handleException(ivjExc);
01410     }
01411 }
01412 /**
01413  * connEtoC34:  (AllValuesButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.allValuesButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01414  * @param arg1 java.awt.event.ActionEvent
01415  */
01416 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01417 private void connEtoC34(java.awt.event.ActionEvent arg1) {
01418     try {
01419         // user code begin {1}
01420         // user code end
01421         this.allValuesButton_ActionPerformed(arg1);
01422         // user code begin {2}
01423         // user code end
01424     } catch (java.lang.Throwable ivjExc) {
01425         // user code begin {3}
01426         // user code end
01427         handleException(ivjExc);
01428     }
01429 }
01430 /**
01431  * connEtoC35:  (ClearValuesButton.action.actionPerformed(java.awt.event.ActionEvent) --> Dependencies.clearValuesButton_ActionPerformed(Ljava.awt.event.ActionEvent;)V)
01432  * @param arg1 java.awt.event.ActionEvent
01433  */
01434 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01435 private void connEtoC35(java.awt.event.ActionEvent arg1) {
01436     try {
01437         // user code begin {1}
01438         // user code end
01439         this.clearValuesButton_ActionPerformed(arg1);
01440         // user code begin {2}
01441         // user code end
01442     } catch (java.lang.Throwable ivjExc) {
01443         // user code begin {3}
01444         // user code end
01445         handleException(ivjExc);
01446     }
01447 }
01448 /**
01449  * connEtoC8:  (DataPredCheckBox.item.itemStateChanged(java.awt.event.ItemEvent) --> Dependencies.dataPredCheckBox_ItemStateChanged(Ljava.awt.event.ItemEvent;)V)
01450  * @param arg1 java.awt.event.ItemEvent
01451  */
01452 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01453 private void connEtoC8(java.awt.event.ItemEvent arg1) {
01454     try {
01455         // user code begin {1}
01456         if (!isChangeCheckBoxByProgram)
01457         // user code end
01458         this.dataPredCheckBox_ItemStateChanged(arg1);
01459         // user code begin {2}
01460         // user code end
01461     } catch (java.lang.Throwable ivjExc) {
01462         // user code begin {3}
01463         // user code end
01464         handleException(ivjExc);
01465     }
01466 }
01467 /**
01468  * connEtoC9:  (HistoryComboBox.action. --> Dependencies.historyComboBox_ActionEvents()V)
01469  */
01470 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01471 private void connEtoC9() {
01472     try {
01473         // user code begin {1}
01474         if (!isSetItemByProgram)
01475         // user code end
01476         this.historyComboBox_ActionEvents();
01477         // user code begin {2}
01478         // user code end
01479     } catch (java.lang.Throwable ivjExc) {
01480         // user code begin {3}
01481         // user code end
01482         handleException(ivjExc);
01483     }
01484 }
01485 /**
01486  * Comment
01487  */
01488 public void controlPredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
01489     if (currentNode == null) {
01490         selectStatementWarning(getControlPredCheckBox());
01491         return;
01492     }
01493     dependencyValueViewer.setState(Frame.NORMAL);
01494     dependencyValueViewer.toFront();
01495     doPredControlDepend = !doPredControlDepend;
01496     if (!doPredControlDepend) {
01497         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01498         //remove data subtree;
01499 
01500         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01501             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01502             if (oneChild.toString().equals("Control Dependence")) {
01503                 if (oneChild.getChildCount() == 1) {
01504                     treeModel.removeNodeFromParent(oneChild);
01505                     break;
01506                 } else {
01507                     for (int j = 0; j < oneChild.getChildCount(); j++) {
01508                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
01509                         if (predSuccChild.toString().equals("Predecessors")) {
01510                             treeModel.removeNodeFromParent(predSuccChild);
01511                             break;
01512                         }
01513                     }
01514                 }
01515                 break;
01516             }
01517         }
01518     } else {
01519         boolean isDependency = true;
01520         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01521         DefaultMutableTreeNode currentControlRoot = null;
01522         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01523             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01524             if (oneChild.toString().equals("Control Dependence")) {
01525                 currentControlRoot = oneChild;
01526                 break;
01527             }
01528         }
01529         if (currentControlRoot == null) {
01530             currentControlRoot = new DefaultMutableTreeNode("Control Dependence");
01531             int insertIndex = dependencyValueViewer.getInsertIndexOf("Control Dependence", isDependency);
01532             treeModel.insertNodeInto(currentControlRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
01533         }
01534         DefaultMutableTreeNode controlPredTreeNode = getControlDependAnns(true);
01535         if (controlPredTreeNode != null) {
01536             //currentTreeRoot.add(dataTreeNode);
01537             treeModel.insertNodeInto(controlPredTreeNode, currentControlRoot, 0);
01538             // Make sure the user can see the lovely new node.
01539             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(controlPredTreeNode.getPath()));
01540 
01541             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
01542             //expand and collapse node path
01543 
01544             dependencyValueViewer.expandAndCollapseFrom(controlPredTreeNode, isDependency);
01545         }
01546     }
01547     // and then
01548     dependencyValueViewer.changeViewerState();
01549     return;
01550 }
01551 /**
01552  * Comment
01553  */
01554 public void controlSuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
01555     if (currentNode == null) {
01556         selectStatementWarning(getControlSuccCheckBox());
01557         return;
01558     }
01559     dependencyValueViewer.setState(Frame.NORMAL);
01560     dependencyValueViewer.toFront();
01561     doSuccControlDepend = !doSuccControlDepend;
01562     if (!doSuccControlDepend) {
01563         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01564         //remove data subtree;
01565 
01566         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01567             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01568             if (oneChild.toString().equals("Control Dependence")) {
01569                 if (oneChild.getChildCount() == 1) {
01570                     treeModel.removeNodeFromParent(oneChild);
01571                     break;
01572                 } else {
01573                     for (int j = 0; j < oneChild.getChildCount(); j++) {
01574                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
01575                         if (predSuccChild.toString().equals("Successors")) {
01576                             treeModel.removeNodeFromParent(predSuccChild);
01577                             break;
01578                         }
01579                     }
01580                 }
01581                 break;
01582             }
01583         }
01584     } else {
01585         boolean isDependency = true;
01586         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01587         DefaultMutableTreeNode currentControlRoot = null;
01588         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01589             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01590             if (oneChild.toString().equals("Control Dependence")) {
01591                 currentControlRoot = oneChild;
01592                 break;
01593             }
01594         }
01595         if (currentControlRoot == null) {
01596             currentControlRoot = new DefaultMutableTreeNode("Control Dependence");
01597             int insertIndex = dependencyValueViewer.getInsertIndexOf("Control Dependence", isDependency);
01598             treeModel.insertNodeInto(currentControlRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
01599         }
01600         DefaultMutableTreeNode controlSuccTreeNode = getControlDependAnns(false);
01601         if (controlSuccTreeNode != null) {
01602             //currentTreeRoot.add(dataTreeNode);
01603             treeModel.insertNodeInto(controlSuccTreeNode, currentControlRoot, currentControlRoot.getChildCount());
01604             // Make sure the user can see the lovely new node.
01605             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(controlSuccTreeNode.getPath()));
01606 
01607             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
01608             //expand and collapse node path
01609 
01610             dependencyValueViewer.expandAndCollapseFrom(controlSuccTreeNode, isDependency);
01611         }
01612     }
01613 
01614     // and then
01615     dependencyValueViewer.changeViewerState();
01616     return;
01617 }
01618 /**
01619  * Comment
01620  */
01621 public void dataPredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
01622     if (currentNode == null) {
01623         selectStatementWarning(getDataPredCheckBox());
01624         return;
01625     }
01626     dependencyValueViewer.setState(Frame.NORMAL);
01627     dependencyValueViewer.toFront();
01628     doPredDataDepend = !doPredDataDepend;
01629     //calculate data predecessor and add it to current tree.
01630     if (!doPredDataDepend) {
01631         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01632         //remove data subtree;
01633 
01634         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01635             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01636             if (oneChild.toString().equals("Data Dependence")) {
01637                 if (oneChild.getChildCount() == 1) {
01638                     treeModel.removeNodeFromParent(oneChild);
01639                     break;
01640                 } else {
01641                     for (int j = 0; j < oneChild.getChildCount(); j++) {
01642                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
01643                         if (predSuccChild.toString().equals("Predecessors")) {
01644                             treeModel.removeNodeFromParent(predSuccChild);
01645                             break;
01646                         }
01647                     }
01648                 }
01649                 break;
01650             }
01651         }
01652     } else {
01653         boolean isDependency = true;
01654         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01655         DefaultMutableTreeNode currentDataRoot = null;
01656         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01657             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01658             if (oneChild.toString().equals("Data Dependence")) {
01659                 currentDataRoot = oneChild;
01660                 break;
01661             }
01662         }
01663         if (currentDataRoot == null) {
01664             currentDataRoot = new DefaultMutableTreeNode("Data Dependence");
01665             int insertIndex = dependencyValueViewer.getInsertIndexOf("Data Dependence",isDependency);
01666             treeModel.insertNodeInto(currentDataRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
01667         }
01668         DefaultMutableTreeNode dataPredTreeNode = getDataDependAnns(true);
01669         if (dataPredTreeNode != null) {
01670             //currentTreeRoot.add(dataTreeNode);
01671             treeModel.insertNodeInto(dataPredTreeNode, currentDataRoot, 0);
01672             // Make sure the user can see the lovely new node.
01673             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dataPredTreeNode.getPath()));
01674 
01675             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
01676             //expand and collapse node path
01677 
01678             dependencyValueViewer.expandAndCollapseFrom(dataPredTreeNode, isDependency);
01679         }
01680     }
01681     // and then
01682     dependencyValueViewer.changeViewerState();
01683     return;
01684 }
01685 /**
01686  * Comment
01687  */
01688 public void dataSuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
01689     if (currentNode == null) {
01690         selectStatementWarning(getDataSuccCheckBox());
01691         return;
01692     }
01693     dependencyValueViewer.setState(Frame.NORMAL);
01694     dependencyValueViewer.toFront();
01695     doSuccDataDepend = !doSuccDataDepend;
01696     if (!doSuccDataDepend) {
01697         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01698         //remove data subtree;
01699 
01700         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01701             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01702             if (oneChild.toString().equals("Data Dependence")) {
01703                 if (oneChild.getChildCount() == 1) {
01704                     treeModel.removeNodeFromParent(oneChild);
01705                     break;
01706                 } else {
01707                     for (int j = 0; j < oneChild.getChildCount(); j++) {
01708                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
01709                         if (predSuccChild.toString().equals("Successors")) {
01710                             treeModel.removeNodeFromParent(predSuccChild);
01711                             break;
01712                         }
01713                     }
01714                 }
01715                 break;
01716             }
01717         }
01718     } else {
01719         boolean isDependency = true;
01720         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01721         DefaultMutableTreeNode currentDataRoot = null;
01722         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01723             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01724             if (oneChild.toString().equals("Data Dependence")) {
01725                 currentDataRoot = oneChild;
01726                 break;
01727             }
01728         }
01729         if (currentDataRoot == null) {
01730             currentDataRoot = new DefaultMutableTreeNode("Data Dependence");
01731             int insertIndex = dependencyValueViewer.getInsertIndexOf("Data Dependence",isDependency);
01732             treeModel.insertNodeInto(currentDataRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
01733         }
01734         DefaultMutableTreeNode dataSuccTreeNode = getDataDependAnns(false);
01735         if (dataSuccTreeNode != null) {
01736             //currentTreeRoot.add(dataTreeNode);
01737             treeModel.insertNodeInto(dataSuccTreeNode, currentDataRoot, currentDataRoot.getChildCount());
01738             // Make sure the user can see the lovely new node.
01739             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(dataSuccTreeNode.getPath()));
01740 
01741             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
01742             //expand and collapse node path
01743 
01744             dependencyValueViewer.expandAndCollapseFrom(dataSuccTreeNode, isDependency);
01745         }
01746     }
01747     // and then
01748     dependencyValueViewer.changeViewerState();
01749     return;
01750 }
01751 /**
01752  * Comment
01753  */
01754 public void dependencies_WindowClosed(java.awt.event.WindowEvent windowEvent) {
01755     Dependencies.dependFrame = null;
01756     dependencyValueViewer.dispose();
01757     return;
01758 }
01759 /**
01760  * Comment
01761  */
01762 public void diverPredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
01763     if (currentNode == null) {
01764         selectStatementWarning(getDiverPredCheckBox());
01765         return;
01766     }
01767     dependencyValueViewer.setState(Frame.NORMAL);
01768     dependencyValueViewer.toFront();
01769     doPredDivergentDepend = !doPredDivergentDepend;
01770     if (!doPredDivergentDepend) {
01771         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01772         //remove data subtree;
01773 
01774         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01775             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01776             if (oneChild.toString().equals("Divergent Dependence")) {
01777                 if (oneChild.getChildCount() == 1) {
01778                     treeModel.removeNodeFromParent(oneChild);
01779                     break;
01780                 } else {
01781                     for (int j = 0; j < oneChild.getChildCount(); j++) {
01782                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
01783                         if (predSuccChild.toString().equals("Predecessors")) {
01784                             treeModel.removeNodeFromParent(predSuccChild);
01785                             break;
01786                         }
01787                     }
01788                 }
01789                 break;
01790             }
01791         }
01792     } else {
01793         boolean isDependency = true;
01794         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01795         DefaultMutableTreeNode currentDivergentRoot = null;
01796         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01797             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01798             if (oneChild.toString().equals("Divergent Dependence")) {
01799                 currentDivergentRoot = oneChild;
01800                 break;
01801             }
01802         }
01803         if (currentDivergentRoot == null) {
01804             currentDivergentRoot = new DefaultMutableTreeNode("Divergent Dependence");
01805             int insertIndex = dependencyValueViewer.getInsertIndexOf("Divergent Dependence", isDependency);
01806             treeModel.insertNodeInto(currentDivergentRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
01807         }
01808         DefaultMutableTreeNode divergentPredTreeNode = getDivergentDependAnns(true);
01809         if (divergentPredTreeNode != null) {
01810             //currentTreeRoot.add(dataTreeNode);
01811             treeModel.insertNodeInto(divergentPredTreeNode, currentDivergentRoot, 0);
01812             // Make sure the user can see the lovely new node.
01813             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(divergentPredTreeNode.getPath()));
01814 
01815             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
01816             //expand and collapse node path
01817 
01818             dependencyValueViewer.expandAndCollapseFrom(divergentPredTreeNode, isDependency);
01819         }
01820     }
01821     // and then
01822     dependencyValueViewer.changeViewerState();
01823     return;
01824 }
01825 /**
01826  * Comment
01827  */
01828 public void diverSuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
01829     if (currentNode == null) {
01830         selectStatementWarning(getDiverSuccCheckBox());
01831         return;
01832     }
01833     dependencyValueViewer.setState(Frame.NORMAL);
01834     dependencyValueViewer.toFront();
01835     doSuccDivergentDepend = !doSuccDivergentDepend;
01836     if (!doSuccDivergentDepend) {
01837         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01838         //remove data subtree;
01839 
01840         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01841             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01842             if (oneChild.toString().equals("Divergent Dependence")) {
01843                 if (oneChild.getChildCount() == 1) {
01844                     treeModel.removeNodeFromParent(oneChild);
01845                     break;
01846                 } else {
01847                     for (int j = 0; j < oneChild.getChildCount(); j++) {
01848                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
01849                         if (predSuccChild.toString().equals("Successors")) {
01850                             treeModel.removeNodeFromParent(predSuccChild);
01851                             break;
01852                         }
01853                     }
01854                 }
01855                 break;
01856             }
01857         }
01858     } else {
01859         boolean isDependency = true;
01860         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
01861         DefaultMutableTreeNode currentDivergentRoot = null;
01862         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
01863             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
01864             if (oneChild.toString().equals("Divergent Dependence")) {
01865                 currentDivergentRoot = oneChild;
01866                 break;
01867             }
01868         }
01869         if (currentDivergentRoot == null) {
01870             currentDivergentRoot = new DefaultMutableTreeNode("Divergent Dependence");
01871             int insertIndex = dependencyValueViewer.getInsertIndexOf("Divergent Dependence", isDependency);
01872             treeModel.insertNodeInto(currentDivergentRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
01873         }
01874         DefaultMutableTreeNode divergentSuccTreeNode = getDivergentDependAnns(false);
01875         if (divergentSuccTreeNode != null) {
01876             //currentTreeRoot.add(dataTreeNode);
01877             treeModel.insertNodeInto(divergentSuccTreeNode, currentDivergentRoot, currentDivergentRoot.getChildCount());
01878             // Make sure the user can see the lovely new node.
01879             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(divergentSuccTreeNode.getPath()));
01880 
01881             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
01882             //expand and collapse node path
01883 
01884             dependencyValueViewer.expandAndCollapseFrom(divergentSuccTreeNode, isDependency);
01885         }
01886     }
01887 
01888     // and then
01889     dependencyValueViewer.changeViewerState();
01890     return;
01891 }
01892 /**
01893  * Insert the method's description here.
01894  * Creation date: (00-11-5 15:14:27)
01895  * @return boolean
01896  */
01897 boolean doDepends() {
01898     if (doSuccDataDepend || doPredDataDepend || doSuccControlDepend || doPredControlDepend || doSuccReadyDepend || doPredReadyDepend || doSuccSynchDepend || doPredSynchDepend || doSuccInterferDepend || doPredInterferDepend || doSuccDivergentDepend || doPredDivergentDepend)
01899         return true;
01900     return false;
01901 }
01902 /**
01903  * Insert the method's description here.
01904  * Creation date: (00-11-5 15:14:27)
01905  * @return boolean
01906  */
01907 private boolean doDependsInConfig(Configuration config) {
01908     if (config.dataSucc|| config.dataPred || config.controlSucc || config.controlPred || config.readySucc || config.readyPred || config.synchSucc || config.synchPred || config.interferSucc || config.interferPred || config.divergentSucc || config.divergentPred)
01909         return true;
01910     return false;
01911 }
01912 /**
01913  * Insert the method's description here.
01914  * Creation date: (00-11-5 15:14:50)
01915  * @return boolean
01916  */
01917 boolean doValues() {
01918     if (doPredValue || doSuccValue || doSetValue)
01919         return true;
01920     return false;
01921 }
01922 /**
01923  * Insert the method's description here.
01924  * Creation date: (00-11-5 15:14:50)
01925  * @return boolean
01926  */
01927 private boolean doValuesInConfig(Configuration config) {
01928     if (config.valuePred || config.valueSucc || config.valueSet)
01929         return true;
01930     return false;
01931 }
01932 private Set enterSetEffectedBy(MethodInfo methodInfo, Set exitMonitors){
01933 
01934     Set enterSet = new ArraySet();
01935     BuildPDG methodPDG = methodInfo.methodPDG;
01936     Map readyDependMap = methodPDG.getReadyDependMap();
01937     if (readyDependMap == null)
01938         return enterSet;
01939 
01940     for (Iterator keyIt = readyDependMap.keySet().iterator(); keyIt.hasNext();) {
01941         Stmt keyStmt = (Stmt) keyIt.next();
01942         List readyOnList = (List) readyDependMap.get(keyStmt);
01943         if (readyOnListContains(readyOnList, exitMonitors))
01944             enterSet.add(keyStmt);
01945     }
01946     return enterSet;
01947 }
01948 /**
01949  * Comment
01950  */
01951 public void forwardToolBarButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
01952     dependencyValueViewer.setState(Frame.NORMAL);
01953     dependencyValueViewer.toFront();
01954     //save current configuration
01955     Configuration config = getCurrentConfig();
01956     nodeToConfigTable.put(currentNode, config);
01957     //get the previous configuration
01958     ++currentPositionOfHistoryChain;
01959     currentNode = historyChain.get(currentPositionOfHistoryChain);
01960     config = (Configuration) nodeToConfigTable.get(currentNode);
01961     restoreConfig(config);
01962     isSetItemByProgram = true;
01963     getHistoryComboBox().setSelectedItem(currentNode);
01964     isSetItemByProgram = false;
01965     if (currentPositionOfHistoryChain == (historyChain.size() - 1))
01966         getForwardToolBarButton().setEnabled(false);
01967     if (!getBackToolBarButton().isEnabled())
01968         getBackToolBarButton().setEnabled(true);
01969     return;
01970 }
01971 /**
01972  * Return the AllButton property value.
01973  * @return javax.swing.JButton
01974  */
01975 /* WARNING: THIS METHOD WILL BE REGENERATED. */
01976 private javax.swing.JButton getAllDependButton() {
01977     if (ivjAllDependButton == null) {
01978         try {
01979             ivjAllDependButton = new javax.swing.JButton();
01980             ivjAllDependButton.setName("AllDependButton");
01981             ivjAllDependButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/all.jpg")));
01982             ivjAllDependButton.setBorder(new javax.swing.border.CompoundBorder());
01983             ivjAllDependButton.setText("");
01984             ivjAllDependButton.setBackground(new java.awt.Color(204,204,255));
01985             // user code begin {1}
01986             // user code end
01987         } catch (java.lang.Throwable ivjExc) {
01988             // user code begin {2}
01989             // user code end
01990             handleException(ivjExc);
01991         }
01992     }
01993     return ivjAllDependButton;
01994 }
01995 /**
01996  * Return the JButton1 property value.
01997  * @return javax.swing.JButton
01998  */
01999 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02000 private javax.swing.JButton getAllpredButton() {
02001     if (ivjAllpredButton == null) {
02002         try {
02003             ivjAllpredButton = new javax.swing.JButton();
02004             ivjAllpredButton.setName("AllpredButton");
02005             ivjAllpredButton.setBorder(new javax.swing.border.CompoundBorder());
02006             ivjAllpredButton.setText("All pred");
02007             ivjAllpredButton.setBackground(new java.awt.Color(204,204,255));
02008             ivjAllpredButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
02009             ivjAllpredButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
02010             // user code begin {1}
02011             // user code end
02012         } catch (java.lang.Throwable ivjExc) {
02013             // user code begin {2}
02014             // user code end
02015             handleException(ivjExc);
02016         }
02017     }
02018     return ivjAllpredButton;
02019 }
02020 /**
02021  * Return the JButton2 property value.
02022  * @return javax.swing.JButton
02023  */
02024 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02025 private javax.swing.JButton getAllsuccButton() {
02026     if (ivjAllsuccButton == null) {
02027         try {
02028             ivjAllsuccButton = new javax.swing.JButton();
02029             ivjAllsuccButton.setName("AllsuccButton");
02030             ivjAllsuccButton.setBorder(new javax.swing.border.CompoundBorder());
02031             ivjAllsuccButton.setText("All succ");
02032             ivjAllsuccButton.setBackground(new java.awt.Color(204,204,255));
02033             ivjAllsuccButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
02034             ivjAllsuccButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
02035             // user code begin {1}
02036             // user code end
02037         } catch (java.lang.Throwable ivjExc) {
02038             // user code begin {2}
02039             // user code end
02040             handleException(ivjExc);
02041         }
02042     }
02043     return ivjAllsuccButton;
02044 }
02045 /**
02046  * Return the JButton1 property value.
02047  * @return javax.swing.JButton
02048  */
02049 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02050 private javax.swing.JButton getAllValuesButton() {
02051     if (ivjAllValuesButton == null) {
02052         try {
02053             ivjAllValuesButton = new javax.swing.JButton();
02054             ivjAllValuesButton.setName("AllValuesButton");
02055             ivjAllValuesButton.setBorder(new javax.swing.border.CompoundBorder());
02056             ivjAllValuesButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
02057             ivjAllValuesButton.setText("All values");
02058             ivjAllValuesButton.setBackground(new java.awt.Color(204,204,255));
02059             // user code begin {1}
02060             // user code end
02061         } catch (java.lang.Throwable ivjExc) {
02062             // user code begin {2}
02063             // user code end
02064             handleException(ivjExc);
02065         }
02066     }
02067     return ivjAllValuesButton;
02068 }
02069 /**
02070  * Return the BackToolBarButton property value.
02071  * @return javax.swing.JButton
02072  */
02073 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02074 private javax.swing.JButton getBackToolBarButton() {
02075     if (ivjBackToolBarButton == null) {
02076         try {
02077             ivjBackToolBarButton = new javax.swing.JButton();
02078             ivjBackToolBarButton.setName("BackToolBarButton");
02079             ivjBackToolBarButton.setBorder(new javax.swing.border.CompoundBorder());
02080             ivjBackToolBarButton.setText("back");
02081             ivjBackToolBarButton.setBackground(new java.awt.Color(204,204,255));
02082             ivjBackToolBarButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
02083             ivjBackToolBarButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
02084             ivjBackToolBarButton.setIcon(null);
02085             ivjBackToolBarButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
02086             ivjBackToolBarButton.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
02087             ivjBackToolBarButton.setEnabled(false);
02088             // user code begin {1}
02089             // user code end
02090         } catch (java.lang.Throwable ivjExc) {
02091             // user code begin {2}
02092             // user code end
02093             handleException(ivjExc);
02094         }
02095     }
02096     return ivjBackToolBarButton;
02097 }
02098 /**
02099  * Return the BackwardSliceToolBarButton1 property value.
02100  * @return javax.swing.JButton
02101  */
02102 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02103 public javax.swing.JButton getBackwardSliceToolBarButton() {
02104     if (ivjBackwardSliceToolBarButton == null) {
02105         try {
02106             ivjBackwardSliceToolBarButton = new javax.swing.JButton();
02107             ivjBackwardSliceToolBarButton.setName("BackwardSliceToolBarButton");
02108             ivjBackwardSliceToolBarButton.setBorder(new javax.swing.border.CompoundBorder());
02109             ivjBackwardSliceToolBarButton.setText("B-Slice");
02110             ivjBackwardSliceToolBarButton.setBackground(new java.awt.Color(204,204,255));
02111             ivjBackwardSliceToolBarButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
02112             ivjBackwardSliceToolBarButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
02113             ivjBackwardSliceToolBarButton.setIcon(null);
02114             ivjBackwardSliceToolBarButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
02115             ivjBackwardSliceToolBarButton.setEnabled(false);
02116             // user code begin {1}
02117             // user code end
02118         } catch (java.lang.Throwable ivjExc) {
02119             // user code begin {2}
02120             // user code end
02121             handleException(ivjExc);
02122         }
02123     }
02124     return ivjBackwardSliceToolBarButton;
02125 }
02126 /**
02127  * 
02128  */
02129 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02130 private static void getBuilderData() {
02131 /*V1.1
02132 **start of data**
02133     D0CB838494G88G88G52FB4CAAGGGGGGGGGGGG8CGGGE2F5E9ECE4E5F2A0E4E1F4E16D3D8FDCD4D57A87AC061BEDD454D24B966D5AE61B356CAE35EED931661635D8D4EE31E5ADEDD6EC51C64516ED36D15D91C8D4D4D4B4B3CCD2D4D4643F0A004ADF859D910512B6AAC6E604510121E1D4B45277B9675C6739F76E5C0199545E7D3D1F170F0FF74E771C67B94FF94E39677FBDC7CADFB1AA59B0A3DD128C49127C3745A0C919878D52740A3AB844F2E67999A4555F27C08B242685C970AC87
02134     BF67B7438DE9528D8BD3405D886E1E5A61068F6177A269422274F2E07590CFDC19C1CAEF3C7F3E016339289F6319495D4EAFD361B98F289930BE2009C0E9D24017CBE5BC845C73645F0C8CB3A429FFB68B735BBDCBD5F84AEC912E911EE6204CB9AC4C0DDFE6487E9381E3E12201626530A990E696576E5BFDA5F2387014B1127939B5A3663238D47211BA67885EG79A905BD6C4F8C11A8DDB43F0C252D71E847F60B79D86E515EE3396D565E5CC326EE3345E14A6DB1F7745A2C6D96C72E5952E3812C3B7DE4E9
02135     E98D7E36DAFA25842EF3541E94AE8FF4867748D406990D4CCE95703B8528A79575FEF5EF392CD75BABFF10B2AF4D7728F7E42A50B7BED551FBDA7ADBB3C64DE572A773FCE0FC79606E84923AACEDC5DDE26622AE0B0AD9580CF9FE06E2A063BC441F6238995C7DC0C173D04767F6200E364EBB2418E70AC74C7720E368BC21DB54BCC5472CCA7F999F71323278B44B6F347990AFD09D108DA8GA89468E3DEC6A7772F07E765A1E7353D2B4B5EDD5953D3E5B3BB765A4D969B7CAEAD859F99BBE0E937BB4C12A44A
02136     6113FBF2F474C11AB85F358CB292E9BBA8E139891E71DB296F119DA312F552D633E47108A9320C3879CA5AC252185DD29A185DD261B7632BE6E51E63059C1F2A42C5DE9D60E50139FB96C07A97211D0332D11754ABC6CBA19FE60E182923CB63097291E3968B9DA6ACD6F491B6FE6D8C33F19C60A9CB609D82AA81EA816ADB02B6DE76FD51E0B62E6FF6DA9C5DA6DB5331C3BDA607336A1855866F00EC6B473F9C4856FAA478E2FC6693F699D3244E2369C732F46D52E34B9F9134C458A3F409E297917772D6CFF1
02137     C7AEF1AF9B73A88FAF646F4454A5A28F93893F1C6371AADC646DC79CE7EE69C3284700C478431B999E712188DFC6F282B8DE37D441051C29DC8EF3C7005F68E5FE86113F1798D8FDB8AC8364820D850A840A83CAD96EE748D80EF9EC79BE4F4B7728D1153F02771353CB60E969F3BACC755D3DCED3F73B65F31343EABAE403AACE8E3376B4336BA1973E9C7EFE37C39C3BAC5DD0E3BA2D76EE10EE6A32C0E16A95E1B61DDE4042B8AC5C37595AE501883AFAA4143B6D74A2F85ACC3D4E4FFA4CA627C589A17CEBCF
02138     33B2F15C74B9C88481AC6CF2E62FF8DE6716436F1665E82BBBE7B0AC8C5C91E41789279742F38F94EE0B8DAAEFEBBBD34364B809E5F4DE03BFBC23A1FC4DA7FE06D8A0638ABFC38CD0F9A6BC0102BE75B3CC838ADE8958AA400082327C8C792B7D8CD1C0FDEBA09F56C21CC04EECBF4352F5FE06F0203675FE06248DFE06B1C0F5B9A09BA8E0231FA1A7977290481987E1737D8C9300B28B28FDE84132BF7D9F3F15A28EFF2ADB7699859608F2BC26C0DB76CBF81AA6839E8F14D6883A82B58275G85820581CD86
02139     0A87CAAB82FF20C6209E20C020B02049C071C0E945608F5488548394889486B499A89EA8ED937883B58275G85820581CD5E04FD0696E35A8CF77D194DD85A197D181B595A173A02914B8FE6E7BDBF16CF6C49720F6515B772D89E323C617D050D7ABC2C9C606FA8AF64664872D87E178F10C6D696FCCDBFAB172C2C71742E90CFD666D8B946B02CCCEA79D8F9F40BFF1DA807FA7130722E45D8791DA73FBBEA3CC695B7AB7B785B3842B51CA89B4F68160DD5C015126803B277FC9F6D42087501B7FA707BC8FE32
02140     3AE9391772D6CB22FEE63F37F88833D875FB0597B2374A4FCDC0F3878837E38869E7756A8679779C7919A75B9D432C5561AB524156C9227F22974F47BA58B67919284113D53F8BD43FE769644F82A9BB093739D00F24EE06FAF3B356696F1C4E14F8DBD7E56A35E06B364F818D13452C5470A26C74B32C6CD80EDB3A1D58F3F7764AED4B7BE7D83CF23BF758AEE11B144C75E17D20EAE818FA891F434B8B60A0C35D0A227FA26EEFF2BA9D56C3471C16A60B53E96D6ED078BF66653857250B55AB27F5FDB2CBEB8D
02141     24319548C6E99D4D73915BAF235DFE74D8CFB3EB1965F63018777707C178604DD85FDED24C46EC61647EA9F7AB7EAB0ADB06D01EBC910B477D3DAEB927F1E84B1108433659A90936F101DC5E597B37DCAEBFF9F299E36FA12BC7D81D425E6135F2F9E66F46C639DC57CA225C3377103D5B6C3DAC134BB1FB77D8DDF490688B203D947F95BC7EA8C8FF82D0569668BBGB901C200A68245812517C03D8FE4868AG9A8B948D1434954AB4D0B3D0BF50E820C820E9C09925509F8132818581058345G251641D82A8C
02142     7371056249867D3E011A5436D157FD4B3D308D5AF0B05B208D55716E555185EDF82E4A457F97C9646DD71BD85EEA4B3D16126570D8FFE29BB2C715679F4AF97E31A64F67CB22EC8C1667D8B6547116C96E3AE05978FF5BFE7F4BA46A741F9ABC37C9BFB76837C9238D7AED524D06015B1CDB8DFAED0E703B03CF885ACFF42B5A307186B6DEEA37F7F7DBF8C3CAAC1218B3FB351925435AEDF59E341ABBAC4EA66BA90BA479173136E8261135C52D703B278C47B3A7D661F8467C79CDD27E46853A73AD01FF5ABAA2
02143     22CC6ECF16A9639921535DB3D85BE831D93A40D05576E35DCE015F4747FBB25E1B48316B0EFE894F4C6CEA134D364BE16A69EC365BEDD5A6C755B127535E1DE362094A4D5C38F1FB26FAA6AF27DDB77CB715BCFCAD4B2A5E6CF51F2FABA816C4BCCD0702F9BCCDA73B5BBB9B2163D15DE9E9BFDAE56F4B31BAADDD396C3FA6A70CE72BBBCD5D9D96F3769153F1D32E6904B317E7FBEEBD78F3296B5CD569550A7C26DEA32DA05B68C9DE99A8D9D8A8F47CE479C12E637EE396474973E4071263BF66F13888B9E16D
02144     B65BCF640AC7354D5E6BEE00035C4F13894CAA47B78755E23489D749E1C94F17E43DFEF45048752A3376BA6D0E1355762EC3F616BB9E935E699A50AD45A5C26EAFBE3E1A4B2DB2359F55B529F8B4DA9C076D0EAE77F42B446A247B10D62A2C06A2CE1BFE15BC167E2D187EC5C72E63FA6E34BBCE189C66F32F6AE19D413EEADB10AF213EEB4FB479DCD63FF58B6B391CAED9F325A827A627695C3E2EE60DC43737F56017352010EC7006D1513169D8FB7B3955D1AD51C79D8B0BC8472A5AEBC47DEA6FF6BA6C36F3
02145     EB4AF6F7213EEA0A791D662A6739B5E73B3BD0DFF3FD132C67B07BCFC51EDB0FDB9C6738E0EAC57A2A63E6D947C39F28F4BC4785D3AB52D79D3748BA3E1AADF4BCE0B119CF1EDBBBBA34A2FD5531846D2856715C5A512195692B0EDBE59D7F13FFAD5711AF889DBE57C5522AA35557B7DCE9B3E2EC2E3A1EDB13DAF5247A2AEB81693ADAFE077EDF69AF8E56DD14F54CD92D52715C9A33D7AB52C79D0B0AE49DFF3FC668783949F64CF2EE6DF8DCAB52D79D316D3963F3150E67560E4735A2FD4DEBECF7CEAD3AD2
02146     252345F92ED5D4A47A2A61E6FAE7EEEF7C89573152E66B01ECB9071DD713DA222F3D56C2ECF36E7A1E746B05ACB9377AA992FD568F5B1B9FFF72D354CFC8BF379A2AE57A2CA336B70752AF67BAB6584FF196F75B071E43C5CA9BF3E0AE6AF70E33385BBE749CAED25A95EB065C4F35D9CC0EF31E4B6DDA29BEEB0AED4B4DB329AC72AA27775C16C535CCDFF5AC4636656D6DAADB1EF3AD5B35D2FD56935B172BD21B94BD3D1D57F18B6BF92CDC35211D66B858983F096D0273B21EC39EF95C62ABAA11573E3E7A00
02147     4D6FA530B944F2BFC3F6B92EFDD5A6B2FFDC7B1297782A6DB61B181A843FD165EC5E712206F455DCE2C539581798GCF61BFFB1F1EFFAC79DF2C6B1FC07E290DFA7EE95B507F92DD7FAC721F37DF4F3F047CAF5375B712FF5A81BD7FB6723FDC575FC97E8B1B747CC7127FCFF47DC348BF3DD94FBFCCC93FC94FFF22127EC3FA7ED314746B7A47A969EF57731736D37AF57D5349FF21D94FBF1B7CFF226BDFCE7E6996BD7FC6723FD2575FCC7ECB8E6B7977117FCFF57D8348FFE9071E7FA8727F192E7FD872DF56
02148     29679FC17E57687AC713FF06D54FBF1E7C2F5575CF5A017E1F9C5173DFCA7E3F50754FA17F4C23FA7E9564FF1D2EFF738E2CC7F213526059EB797698D4D29636F83E47F2927727A5AD547809AA1A7627A53135B41BEA5DDD6079497AEB921B1359DA7BD112DF1A7C0144762F8919E28DA54C44E476B82CDDA647C93611C05E9F3D27D53DBF3A9374E7FB2983D8BA0184EFF6B75FA7202AF29BAB986FB31BF15F74389DE2AF40E419BF35C25EE74D437DF28B068B8177D820288A91AE56A55C17A598AE3D92728248
02149     D8A96BD3298E37E2AB061B82F83CAADCDA15BA5CE3942E8D70BE2060AA91AE54A5DCC0A9060B86FC9AD0FA358857D82D8E372F0C528178D820A8B9DCDA0DBA5C42F28C578A3833C6899764926EFE8A9783F802AADCC62DBA5C29ED984E8638FF2D92EE34CB385C6D98AE9E70141DCA386C1D6AF04FD1B8A760812AF021AE612E5A016126831E36CB89173FCB9DEEF785066B87BCC895EE2CCB3877A8DCD29D2431CE89D7DE278EF7EBA5068BGFCB45044BA91CE2AD707BBD605610C001B6B15F07EAE6156D5E338
02150     4900472A42256CD607FB1A42B583EE5B2D048BF089F7F98D15BF4063D561527628435556D2B9G5C899434C7040BF289B7EBA7064BB07A990A0DCA38E623BA5C9FA9DC8860E3D56122DC42FD3B8B43E56E05B6FF2F922EE52FBA5C6ABA8CB78A70F12AF0D3DC42BDC961B29BC0DE03CADE03BA5CA57598EEB460612AF051AE61AAF7E3386CFDD0276ED342356DD307FB13420582BE91A8E61F88B7DD8E175F486BFAA3FEFF10C758A60E3DB6D312FE1D04FB3C7726293F5FE8754B57DD97666FC52310BF32D13B77
02151     7D0A19CC6E984047B5E2DDBFB6D93DDF2A3237575EEE65DB0F65FA3B7D83751A3140BABF188D4F43D6C72F339EEA55BE2C7B3BBFE03A323D49B2AC575F3F5E40763EE877DA571A2DCE3B833723D50BB549E6FB355DEC290366231A1654BF37DACEG3F78DEE3C2835AAB3291574C2FAED4FFA3521F3AE8449C8F36C95AAFEC1235DF314D54F9EF4D9032AB7721EC73FE7CBE649E42C2882BEEC4AC0A300904259EC02CF6BFE2B5045DCFD8BFE13B8EA0B61630884262882BEFC2AC2B89318788EBA5ECCFB3E2C104
02152     CDB4115D882BBD04D8D2B369C7D8B9E13B5A91F39296C1D8A8E175E67A16063087884B780C7433A056CCD8A4E181046DBDCC5F899176B0E189046D6BC02C78F344A693E6A3ECFFA7E22389FB1430E8421A2C08259FC4AC0AB0A3E11F9DC14C1F3047898BA76C60D1442691B605301C966C2B3C3D0C75E77877D5ECE45B175BFB425A5DD1DA3AFBA77BC6C0707D016FDFE4655E5C025FA50570EFA4C240BD96A892C8FCA31132A5D5FE87E3G4B78424FA0462B76AD2C2E71F153017CAE3F5B466A21216EB7906FAB
02153     D411727B98DA93A635BC35DA77FB29480FD60CE87EC23C277DDFA86FEB6A834B92B301C49A9F24B4C6C098693F54C74FD377F1CBGEF83727FAF5A2030046D83130765F25A5E5A4A76FA8D3231C17E7E443F84638D861913A95E142D6AF8D33E04B682487CA5467BF2C921922F8F73A3D817DE104FECF7367B9EC49A6A36E29A7AC03F30AFB18DAF146B25A176CBAC27738B587E45F33021C136E5826911GF19437229E73B76969E1EBC5DB36173A6761EA6BCAF88EBEFB035F917D2194639E86F247D15C160D6A
02154     386381DF7A9574753E4238B34A58BB6463643F2C6349746D6C9DBA2BFD9028FFDF996A5F883A0D7C8A753FADC7CF7F89247FB3E7217F3B0BD07F212F2C207EE56528FF9468167AB56A9F1A2B27FF4D57D8861FE8E27BE84FFA830404FA3CC6FA34C09C0124C7232E9DA3C80F4B362B74B89BF348FADC3F8D750806B8523FC1BD5E59202707719B54E35186363778AC37B048BA9C5C0EBA34017CE0526102F5FABACCA69DB26BC80733300450E14E8EEA3BC0FEC69B6AD0291B9F4DED28434A0F188EE73985C15661
02155     EE52211345CFBA9C5035439452413F03F4B8EBBB74D6208EF1A0BF4B04BAA46A5A215504BADC34330A3D5FE73DFFG4B655ACA5423876298C3FA8C573545D452A37B28DA0F332FAF7EC6FACC03B8F28ED11E1C545343FC886B3B2A2A2157F7D7EEE479F9165B86E47DFFDEC5EDAE6896C67AFF34DBCF7F58C3E8476F0F108EE7DD268ED4D3FB8B720B5BD107A3F9DA9DEC6097580EBAB467B19D4EF259DF5661039A54E1B4480FA69D3EBA2027C33A99F518F41CF4B8EBBB5CC9BAE4037CB6B34D3F6B6A90CCBA18
02156     4FECA79D063AEE0F65393B96F5888579B12443D7AE6FD506C5EE7FACD81E7FDAFBF67D48C72DEC4CFCB66B7AC27F421D54EE02EE019654BF402027FF0485ED785DFEB97EA12F6A0A78DF207823C1F67AE1FA1F966A45EFBC0C715F103DDD44FF962B351807D76F2276926487138E6F6C5553E1B26990718D7BAE64AC965E65789B6A282D8459999D987F736B7562EF6E4078A7B60978071C85F27CB36A291DE4F1D37C0F166A45BF0562EFDFDDA149FD753348852143ED24C39C484F6A2476690CD68776AE37F622
02157     8EF1DF486560ACD61A319C9C59CDEDA4489FC3BA7C3CC8CF072924C33CE2073350C26870499EEA9FC1FE0E95F5B0690E254CD62CCFC66CF19FCB655A58D9A35E2FD05319A105AEF3153FE970B8D759E7153F9D37EA67AA0F4F62F3150007DBF12E72258F5837BBB8D7F940526E04FA56E61168BB2119ACADC7ADA7E577B5B313311E1670BB317B9AFCB9E3E332954FCA787DECE63F98F0CBC7209C836583B59EC15DD6268CFAE6C8ED5FGE7066C5C670BDEBDC7701B46BF7B4467CFFCF50D3E7085935FA41F78C2
02158     09EF77FEDF78A6905F03BE71C5911F7100AFFC31447710CFFC89445750648BDF5AD164FB44A73EAC62EBEC76052F0478A619FC61B3925F6EC33E7035915F03BE71B9094F586E8B5FC862FB48A73E9062EBB07B429726641FCFFC93157C337842B705787E6293DF9C719DB86C8B1FE4C33E47FC62CBA73E668EDF7832096F2FBE7115935F671D3E70B5925F93BE7119092F456A8BDF9F71BD6993DFG717D7708AFFC23086FEFBE710DA53E56233E70C5905F53BE71C5935F1D7C7C29F8F0A7F5691C352241F23A70
02159     5C28B4BE7FDF5125BDFFEA99479B3B3467CF7DF2B31EBF5586FE933BB07EF9DB34FAE7F7EB4EE9513885DF069B5FA79AF72706CF74A7E62572F32A40AF84E8AC50E420E9C0E9F698135B31DF71ED0A5E5A29EB3F42534229F25E06DCF78CB10D4F387165EA5C4DF6D7BE51FF6C3031B4682CE7615A0A3C0FE7D601FA9F0F8DE485820D850A3053BADDDE0AACF72A9D736C47A5C3CBCF309B1FB64F16766825A7EE69BACCCF3B3DAB57FA28AB7758712EDC53A168101B2DCEC818CB77D842F39C3F2E5226AF9F64B7
02160     83F576E07AF6ECE569E3678F8C6B21B6E96B5052576A4627CDDF0CA6FDC207655BD2A4F18EC28269B023F4E8BA243971E94BCC5B37FABA6C5C04F6687B96F538EB08BACCF263535AA17ADB3DFC5E7E3927F2ABCF7548799A33DB1B2FEC0DF19A48CCF1E03E06ECCC117549F4E0FACE178DADBD81EEFC5A7434B874EC7ACA8E6A50C3BAD4168FCD07FDEEFCDA9D46686A70FCAE6AB001F4F8F308BAA4EE9BCC07693ABADCC8F6C86BC59DEEF213651D8E378F2AC3DD2F1E8E0524C39B697055762169F0540DCF2BC3
02161     302E8EF72EC39D42C80785BB0626438AB7BE2D8E313ABA74119DA4A76AF05F90F5F8ECD09DCA1CFABADCC4F6E8A49DCED68CCD078B5D7834BA0C545521146CB00AF458D8B9B49D4A5C7834BACC5155618E32C3BC69706C90F5F8EDD09D320F696645C9542162986AB03AEAE8BA5C6A46275521CFD707465D28C3A06950D2BDB49D8E3B71E9F5085068A05A14F75C7AC22CCD198AE1279D43B6653ABC5C8314FA9C75CC2D991A1E4B5C7834FA569C5733D55081542115F418B0C49D9E9ED407A0DD9DEAC907D05241
02162     D9BBB49D063B71397519B4BA48FBE11AD8FFDE272FC0FDC059DE7C9DE367CDA5102EA5BB07266BCEB7BE2D2EEDA7746CF52F81F568BB01BA448DD1077F8C2AC3342E8E0D7C5CF536BFF39A69B0EA5750F4782D9B1FD6071CBE5DB638816DD053C77395F5C35361109B1FDBFFC8D707E59BD0078924C3CA7D50F4D862462755A16B241E8E334A188EEC6FDD79C954A1FC08BABCB0288E23F4F538638C1607F124C34F6E2169F05A0DCF2BC33C2E8EFFAD423CC8B905BAE4391D176E1D8E05EEFC399A376D141E8E41
02163     1BF06C65FF8A579C6A67B2AC965C53CF61FC4043A9CCCFDC83E934DB3B59190A426F3BD96C5B993B435AE16DC6EC98475A6D8EFEE819B883B31A177F146F7C8CD95F215C3BE6FBBEE36D1E597AE72CC54C56BFE36D6159831F7B7978ECCFE730897D3E5A077A15G896C6F0499897B269131B642269266A44C349F311104BDC7D888E16D87908BA3AC06300904D91A901BC2588B0445A97A1990137AC9BF425289B39DC2AC1B306788ABA72C3D9D31C642E288B393E6B1A356C7588B04859056E1C1EC94E131040D
02164     A54CFA983188427EC9D8B4E1C7BB900BA7AC0E30246F916B6AC4ECA9E12F9216C3185D0AD885E17104B593766D9144BA89FB1D30FE42FA0FA296C858B442C69376973E47FA9C3823894B7E0AE1715F0BF7D7E0B59CCBBA6DE748B80D616E7D1AE19560EEBE0DF54912AD6C9B37B6F2E7F277C8F20F59BC1433DF19BCEF4209B87EB424B886BBCF93E9B98FBBE949FC7E5E7776DAFA7924A4BB18CB76FB5139D852B9A7314154E511705B7C5AAD3364B035CEFBF58155970BD2BD57CD4BD2756B264CD4D6CF765A0F
02165     B95AAD5A7AE7ED6AD272D3E6CB596E9C260E7C3DA267F71A9C9D96377AEB8B6797FE1E78ABD2BD55F1A22DA9A56A3432F3C0C5FF720DF59E3E81E8B4C10DAF4688D5655AB182ABCB21C093CE63982132G5B34A92771BB0170DCB677DDFE864AA6106D8C2D0164F91A337707B041E75C4B19C8431FCAE62B73AB9F47B0B58DEA7DC201BF8AE8BAD06AB0546F2A2A94C91C271AB58C755B4377540F8477A820F143D03F1A2D6A32BBF91850A7861E5307A93A257A095F1970AC7653FFB76AGEF856A81721743487B
02166     9F363A2425G5F1B155B54F1874BBC21701C200AA3CA7E9D8B4F848FF1278D07769628E43862AF625EDA6A9277A60CFB4FA6F55CC6192F8D1ECE150C11726F90F8068D570FFBA260D3006200248B5469FE3DD4DD8E593E8D11BF99FBF0AC1CFE8166CF708616BFC6F01B017AAF407C39EE23DE7989827FB1C06197F8AABFFFA8F3C9F7A1267B759CBDF913C1CE8C50F40F727A4ADD6495213C58DCBDF9297EFE06CC20E2FFCF72F23639485BCC73303A7A55011CD6209E0F72263A4A5B027236684A7387B941C021
02167     9E6585EDF711D702726EDE27A7EF824809820A75A82FEE070B3C2DA86FFBDD7D92C0CE5A88A853A3BC49CBF011478EA29372AE55552F846498015ABC4A8B2BF011C76F688EDD7D1CA0E7A4D008C7F966CA97F9D47E466B6A9786F2A682CD71A8EFE9150BBCAAFF171E54139787F2249FC1BF70C71E647D4DD5DEB14A7B4CED1C43A89B641483B5FA14F7D9350B3CCD782E9795623BEE7E913E6B3F61EDC588384782C57E885F75DF393495B1F2DC536119FAA13CCF97FA0A3B3A46A5EEFA17FE66325F26D8662F03
02168     E7ABD00FC7F9EF394A23F7E9370BBCFF19BF981E21C093BC4A7BF52D0BBCFA17FE36CEDD87C7497C3170CC5011252634112E7ED960AE51E07277F8BBDD622677AE4260D27F4B3CED70F40E9CB86E119A7F90F00769463DEA17BA6EA2FAC7BFDB486CB8D16619A2BF6360A9DD84E576A2CFF6FC42D59E3D23DB9A54E94916794B615928A3CBCDE60DFF9F3883AE52CB4B45F5AEF1537B3CE203BA6ED1B26FD8F8C68C92F73446BF9E5CC9BF560BFBC73DCB5C746E4FABD3473DD4664D01E7450F7563EE1671CE0DFF
02169     BF3883F563FE43B5EE2AA7461FD13F8B2301F79CD0A450D420E9BA718BF9B76EF611C77D11270A54E9C939D870E740B37F62016DD82371EF81376DE23D34FC39C75D9FE1FB5CC55C2BDC6CB8CC668D026798151CF07977E4F846F850E9BA602981D0D785A87E224F5EB0176D9569A377816EBEA9E15F5CD249420AFEFFED37D91EFC915F6C3F4167D41E07C4FCE7C04C4967ACCCC055B391FB13E39701407BA85CF1BEE7F1578CC96AA26CAD0E3138F7A4A2564767AC76G4D1F01585B9CE3FC0F916FA9BEE7719A
02170     44F11230F7B8464E383E09647573B98BF62E619B043D4B31B7003ECAA27D781C45ABC03FA16CAD0E31EF5F76A513FEFC4E629D269FE1EFF30CED42F91930D3FC4E62F6201F91768E476E859A7181694767ACBE845EEA425E6558B3C08F91F65A027A99484E6FF36CF93053828AB70C4FD9A4C3DA7FC8719A787C049530B3048D6758AB607E8B25B7114FCFF4GF689E17E9C7B8C644FA25EE4BEBF71E7F05FC8B67D9147EE826CA542E672790947G6BA2ECA4471AC07EE39447ACBEBF71AFF06F20B8FE4C31CD60
02171     FE1372F70E0DE360FE0D5E2558D6B666B6DB8E1B0E591C7C7B6CFDBD7235F3005B82F83A3E42FDB545813897FC8747F66F35F49F2BB2B9C4593F65841B23BD6CB0F541F034294752AE55DC42783F7C8A47FAE140BF91A886A8897C32AEC1F9CFFD4DE4B82DCE3ED7BB6092F6EFEAA65BCEAD6B795C69E5126A0C1E137CF3F7F690B51FBF6C366038F27F966D38171F5B8372E2AE41F16529F2DC93CA38847BB22F6FE5FD1962CB21FF89E43E947BB2BB8B54F5CABF6001170ABAE174251E6B33F1BAFE1100CD5560
02172     E29F1AB10F45BD6DD2318FED8161DFF1BC73B285977B536E617DAE66B6025F144BE8FE0C2F791983E15C9508582739B87F9498085F92341DE1365419BF1037A621ADEFEA505BF3B59564CC8BC4DB76B750BA6365E84B1B7877F7B560EE85F2DE0E363C26CABB3F94F0393047A8F80E850A385C5DEE510045EB7024AB7C8CCB2F5033655DFCFEA0678AE133B904BF44F1238A97365C4FF1FE9E9578CD3E826DF6186F35AA7E091F216EA7087D2314E1B6F07793361B2F0F0C8477A842CED4B0ECAC382790964931B8
02173     F02786A116D94930CCF067935649319AF03790F6E389662119304D3C8C0F85F794E1BF66D8AC3893882B590669C83B9231715BB9866E9A42D66DE0D8A338BB899B4553568F6ED1043D493131600EA22CDE448B6E6904DD4E31542B208D3D8A3152ED180E9C42E6EFC21D7B896B5A04BA87927662E69EAF38A792E65C423049600EA56CD33ECE1340627DA9E247B9D68C6EE6429E60D8A7387B88DBD84C30GF00FA26C02E254B914300B725DEDFFEBBE597E27D85EBFF5DB67C98B96E5B68B1EA5416EE5DD1455E9
02174     B93C2C860B32DAC478120D8C8FD761727722FC4E0539F3FE866F50552853B83E2F4C9C826FE088E24BF9FDB08C5C4104BDD8C4E9A4EC9671A690F6E4A37226DCCB651FF8B388FB1F47E13BD69DEF8E2F1B7A818B22F07794A06F98422E4FC1DEA55E489C641DCE619A7211B775670471F02DBFD747FBC248834C1F42ADA45EE0429EDF073CCA3C6F2FC35ED88A17CF3C89048571B80C3FD0477BC7218B43FE0158D744BB12309B56A12F926F436B10F78A051BC53CF104FD4E63A89F250E770C5085B073A8445E48
02175     C35EBE427E3A8EF915F85FDB073C91942E14620DA66C863E8FA767BAF53C8FF32C9C30666BA84FFB113713B05BEE64D5623DF2B7720E23F0C7B7A2EF64F5349722D07BBEE57CD23CC379702C7925277769D35E0E367CD25BA664F13C6F175AB661773958A68403DF42AFA9CF399D5B2E77B374DC0F5805FD8C7387F790E1F19C9B856EF104EDB8C069A1AC6CG4A0BA7EC9367CD9A8D63675108DD4D31CCF01790963D9F659989B3113C9E42E204FE608EA2ECDF92578F5C6388EBBCC37A91F657BA2C0763895B44
02176     77A4245FGFD379B903B0AE379602EA36CC9DEEEDA191B305CD40CE398E1BF6277CDCD86F78CE17FB4D03C041993B15E74DFA1F6DFA2461BC958515398EFB1E13FDA0D715691163B91638DA64C46771D0C8677D8422ECFC3DDA288DB4E434501BB0130539CCB3991F439115A1D4598EFB1E1DFB420BCFF429E5B07E99BC3D8F1A326EDACE17FAA4434C59036260F5ECF42DEEF4034650CC12CF28346DBC258DDB998EFABE1999BB15ECE427AA95EFE42D6D23C0104BDB897631DCAD8FE99469BC7584D6598EF5ACD
02177     084D590671E6907664D64C0FFC42AE59013A549036E5BE6A52C2583093284B98427EFA86F599CB58BEDE562600BB16304756D07E92D6329673B765E6AAAFCA5BC7D8C29146D1C15871CDA84FCC58931BD0DE8FE117ECC7DD7C895BC7E98BA64C4E31F0F0CFA62C166C9CCD585D5C4E522F61772F914B5A06EDF886E1B3F97FB29F5C4D0435F22C935CA3898B63D88838C3891B4E3189600EA24CC66D7AD4426E26FEDEFEA80E7916FD456AF35590C4BE898C06F56C46F4E7EFEECDFDD3633E265AEF76B5FCD3ED04
02178     9F625B61E7A575374312ED1747EF07EBC2C51B50A2BF2737677B0BF14BB3FC7C4AF88241AFA214E1F33FD6FF7F4CF47CBED96C4D917EBBDC7C59786B608C357F37AE7ECC57C9C9EA7F6BDD7C194EDF98043FC85706AF710C42664DF7CA59C54BC74C75102E345F0874944B4F51DF677B9BDFD916A8646415286DB37621C5A38C9E6458E47EBE79493E2D16775A723EB5EBF7C3FF03633A0B79B9D2B160CEGCA7FAD364BE7E80FFE4EEF051C8A79598C4F4E5FFAEA178FB7B0F97D3F956DEFB2615FF2BCD0050BF6
02179     F9BA9F237373C040AF65F7B4E662654D866EE104BD476B2C51609EC7D8AB6F4BC703FB9AE1DF73F0A9E1501E05D11B3E9E4BEF89E193B8E686F7FF98FDAF1917497484F7A8D084D08CD052AD70EE81958399EF41306DBCACBB9B388730C0A076FDFF98BCA783455FA24EBD106774F3076964159E31F854EE26C371AD834F33064AFA9AB561D8BAE8FCCDFA3F6C35AE5A3B36997FE0F70CA74BE5FF0186D76FA919A3619CD0F2BE1BF3E6E78DF4B86C473A4DB8BF351C77B552EE853B83795F4A6B6B5C9A193F7CD6
02180     7DB9ECD6364E483F9BA10C99E8312CD35F2D226CB1926F43333CCDE53AC45E0A6F43E53CBCA67D9E6285AA7EBD5A4C0F4E8FB07E5EB56EB6F0BB01C67EDEEF6EE2B9BF77A764775A6F9457F2BCD4050B7761F715781DE2B878E50E25FEAA5FB7618F6EE042E66C42FABF1C30DBF772B6925C3104757376B5815C99FFC06C8A51BE005BC858C33CEDE983F79FE1ABE8FC9FC0588E0E0501BB628F748DC7892B8723411DG14F19B3465C0365B68FBE26E1FA31FFD4D4E458D38CD1CEFAD7C8F1660BC9272F9D3BE75
02181     0869401E2887165B85D28F45B1CBD26EFA9F8AE1D946FB0591DBA4FD3F156D3BBCE4F7700DC3D937733164D61CF38B85FDA682CD87CA3DDD1C97AE2F1917323DE1CECB1FD34C13CEE145D616E9AA53FFC7CE727E018D64745D0EF2AE2DD8824FCE3B43FA4A5E6DB4591AC1E2233D57AAA6FF855FCD9558CE0EA63E67ABD87E9C37B81C56F6D7AE4173EE85369DD14433251269ECED47B0FB79BC972FEB46E118B3154C9EDDA6875F1BAA529646D41444BBBD3E845FE9BD4277B5D126F4104BE8310CE70FD35EE991
02182     5F5E72C5AE692F34D9BB3A599946F25ABB4AB16D452463F565ACDD16EEF6EC3DD98EB70E4219A11C48472EED180FFD63C4BE8642F374B8D126657319363B6663488F15FCAC5D211F0F87787B998EF2A2C8275B4B864F47C74BD047E94417DABEF0BE2EA947FC4C3A83F95A4ADD7371F8B966E3B30599D36E1E0F4716AA7938FF5BC07908F53327FCB45F2164235021E893262D678E347FD51B507E7EF7887B0740B36C8ED10F88BD5F5B6CEA7F3D9FA976EF5F22EF7F6FF83FA88264C4D1FACB0A8637FFD3916AA8
02183     5D09FC17948DEC7F9B0B507E794473EC112B7D5FAAC27B37D118F5456E76AFDB26587F6AE234FF4F1D6EF567ACD9CFECF7D95B486C7F310C7B838F1E45ABF478DBBE75256F2471925F9BB69A5C63883B5D08E33CE842B697E21B91FFA7566F7F4981F3CB95F7413894288FA890A88CA882A896C88A07768E28822895289FA884E8ACD09450B42034BFC21D89E484B283758385810581C5G457E91634B584862E377A230BB8FD2460BBB8D32470BBB8B6A460BBB84587DG1D6345797F6CEC7F116345DD856C9E82
02184     F676BDBB571E1D9DDFA21FB5BFE63CB843BEF23CB8631F1D5FAFFF3336A15060EA73FED9AF16D6EDFE30F4683DA731B29E2643437D6F9276885261D75BE520360B591B59137D1EA6BFB343DDF9AAB471333C8A899FFA1B6C927FA07A35EA622E70A2DEC9AEB3E47BF0F53BBFA7C71BB79BA4F16E7ECC9DD92BBC44D1A4BFBD759B587B4376BCEF5471DB8D3496E85DA069E07D6D95726FCF6567A2CD986D5EEC76EEFFFC8E7205D141A07E499A77E2AFE432F14007AA77C72AF4AC129E5968DADFAFE2C9117DBE5A
02185     25DFDF6F64EB91F1708ECE9F0FE303670A307E4B3A5B3D3C285B9EC6A590069136BF463B1576C76871B257C3447793BEFF5682E14CF7E3FCA60AAF50C3FC498344B77AEEED3FE5C99E5AC15EB717271F76AF79FCF598700713AECF9620AE31BA3AA4CA8327BD61EEED5B7BA61FC3CC19GED44840C43120FF1D4CC500FE32074B6CF5026776EC25774E6956927F79457258D78ED244BBA52A5D8C797359EFA3A04CE5026B71B4F830C83FCA245310B6208779047C069CD7A13B63DED1A745ED7281F5E97F8FA5300
02186     BF63CF280B13F4297B133BAEB387C9EF6B1F3469FD0B2F81F4826E24B8B2A90ED19E6298A83DE35D527BB3CDFA5F73105EB1BC3D9300BF12F419CD3ACC5751E556A069CD3DC71B5E35BCFF17821EF58F46311F62E83CC7BF0E0152EB3EC71B5EE753DD533BF331FEFA5F62EBEABD405FCF3AD47722AEE3F4F419A33926B79C42B0C2DDA63B25F7BCDFFB0B86BC1662983E9163C83FD7BF0E648162483ED795071843AE44790862FBE97D259867A3DA88F350DE955B3D58D7DA4B4F9B8E87F7B4D082505209A0E7A2
02187     7AEF627E6C4EA31BFCD7913B17075D39A37C6F48F559DBB951B5BD89BA69E3F195CF9C389F91FD2F3A4F7028CB9C33F45E873DBAF030B905E4D558C5D2942F738F4378C2645BBFF95D5E8CFA36CD44FE7F4F7BDC5B47CBD997C366CFBC29DF46BE66E5AC88E40C820A1C48302A83CB8750CB70BD49579A536F03FE78FD983FD1937F61CF1478EF69530FFF92DFC7EA8699ED77E17CEF6C9FBC7E9F73788300A71862FFC7937F7695CA7C07137463BF4D57C2A3C146940A3F634CC0710B71E54CBA8C13F43F98DFE6
02188     40B37FFEB19690F1862FF655673F190ABE8F9B7575391B2F5355011C667BD14E01B32EF9BF034FF78F837F007B711D2DCD45F7F6427D6EE5F72EB4F0BD98F53F360E3AF6067B983210F5B36574AF1A01691FAA27FFBABCD37FAC46C1A27CECF64D061C2ED779DAED9678678389ACC82C55023B734F180EBF2E46F4047CD9BF9D835535E1FF56764D1EDB2958BCFE2B6B5879CA3EE69B8EBC91FF46F90348B4CCD7CD04C8D7ABBCFBA244D8CE4879679A57FC3DF31592473E357A79FAA30FEBA448890A4034DE3218
02189     72ACC2BF2D6A3E28361E0D0AD052AAF49FCE7B75264A3ACF07E76AA4B1A6953ADE1125644983DF70BC817F7CC918A74B78FCC2AB38BBA7211E5B7AA8CFA6396BB9FF103295B6C91BA7C7D6AB6568488654B9FC1250B98A1E31134498DA042FDA2368DC4B7B575283102E87D0679BF87BD2826E1A87D0672D24F35F837ABA6B1523D5286783DA1D172DD5F47E228CF58EFEC0689C461E8F08713F887FC93622F3B11F830F867FD85279833E17B07DC128BF9FC46CB6BE3797826EB18FE2BA9A66E3BA229F54CF07C1
02190     A79DE87B7887356978F736120E77281ECBF8D024A3BD524F109DA95AD0395EB43856BD7DFC3D3C824298A3B12D8F2FD3525A41574907B13FC82CCFAFA89A3CBEDDDD0CE146C58ADDA643B3A6D23465A21EDB57AB71C8FCBFE0827827BCC476937B9A41DD719046FDF87EC0F10BB47EE83EFBDD77638D0A1D3AA93F1D8F895D8260B96AA131B6A1E4BCDE6EDAA770A3EDE5DD77727C9F4742BF0461BFA999FC4EF0EB894E2B4593DFEF4940F3061714601CE166434873679257FA6F69921CB3EC24B073373A5B2014
02191     CDCF48F30697503851D3DFE520B95B3607357D4ED81A3335BD0CE7D93CA8769702BB64E1BCF342124EB262F35391779B8181ECF458FB4094A7854A8FC6177BE4B1DF79F246A8765B40F24D38869F743B9B24160CF40F778406BFAC5E47E879195F186F4F1EA2AD7B73D819C9FD845EA7A0A31099288FA87091CCDBE8BA53111D4E896AD7BA1D2676CEFE03A29E5A49AEB5D4E03621DE48F666B3CD050C5753D7FB328FC858EDBAEE5AF76808255D59EC6A1068DBC31733BAC703BE639ED16A1648C75C6B99318E79
02192     BEDF7F1F7A08F63DFEB63F97E91A8A976B1317533DD3A913619D1DCC7B45781A41E4F047917674BADC2F177E0258418D38DE1FC5580DFBE9ED7EAF5847377135D9B3387B89BB41B176CDB9BB9BCBE06F6D556EBFE761713779AF034F9D8EC4A20E8F9B34F12867413473F13E12F8D74337382F9BDECEE70285C3BA4200E200267FC524DF707D0B3F63B653C97BB1A7724D213AB96DD1A82BC00DC066C755FC5D9B747BB4A378982E9F420EFC94439EABE47D169E076530456130181B2C2758779CA27C253C1D9E8B
02193     E1A7GC90FB16C676BB387C8EF5C23A2CF046CA75633F7314B5AED6DBA5645A58B392F71B1FB9D48EBFE8C75F87394EB9B6BDC6F691365583EE3F7D7D79FF33043E71A1CDDCE23691045A67C365B66717789EA121DB67B896EC35FD2A727239F1E72E96965E7AE887FEB3EE47A09EFD4842340EF7C04592F06DD6161A26FE09A4759559AAE7853CD0BC90EA6A276EE713B9A1EF43907E758E3A23FC6BF06F7B9ACAE52739FC77E4792757CA349BF76341E7FD4727F67CABD7FE90FE1DBBD0CCD01635CAC3F270DAE
02194     2628365B6C0E5C931DD627FCDF25150F7BF9BD9165E7D8A109F9EC5E4F63FF71BB5CB1EC23DA0A59EFD1F7E774E25D9D37ABD4B2DF12B7827BF35AF2D591A54AD5E014326FC9F907DF207D9B91609F8D94AF07CB7A2B1FE169DFBD550F09FC5FD24EDF357BB766F23CDC050B7A714A3D38FF4388FEE1FF45BAAE38816B477447917BF7835605590455B5E0DDD8CE189F47BA41BD6CF12C77D6D53176BF085C9B391B5D6DA15CFF289C4A39AF73E4195E550B8F8FB98EEF6ACCF90E244A3DFEFB194ED58EFBDC54EF
02195     91700CFEDC3EA712579F85FCEF4CB44024A7307E18341357B526BECDDD73AC5FB3138361CAA86CCFF630725DEE6F6A31F7C30D324FE1057FCDCA1F6CB73CDF5F89611D44F3D30967FA729E5EBF9B83E147D27898FEEE0589F7A834E058845E16CE05F0531E40BE6F66ED0377F9BF5F26DF17F6733EEA56949893CE4138FFFC022D4BD4E96F93A5D92F707BF3F66A5C75A97C8FE5AD1379756F08C1B9BD4E0F94B9FA4164F04E7D8B61D96DF6FFA7560DCBB66B5DE353BA856F3C8D5F0A6FDD8FE0E32660F7F1A5A7
02196     59A0CF7BDDDC2EE8E8CBCB2BD986C373D7A59ADED1F7A515E2BFF66A945C97D6486F8BDD7AA45890286EC93C037AD4A256CF896BEE13EC3715686E6F4CB83AF6C45B13623D72FFD2291FCAAA7DE708BAEF65E609ECE12BE0F5E33765C426EB7D1ADD18DF1C43E95326F5F2588995EC82C71D34A6763F325D363A36213976G49CE2F9CA4FC553E6666FDFBA93C196F7169BEE633F92E2F7F23527DF439EF7ABCD24E72693049564B5E95398E5D06F9B981ECB57DC97CAE7169ED18AF79CFE13E4C61F7D6F602FB98
02197     D070D358D63D31C551694AB26F6D79D219EF7AEF9BAC3D9AFBDED20E7694FABED8226839FB133BAD46EFC2DB04C15AE21FC2DBFC3099ED1179B734C5B13F6320855CBD8C7B9B5AE262D6A50EA5C55E5B62C811EF3698BFD8F80DAD669523ADC41A9EAC46BE43A852BD24D4517D75FC35FD643939BD6E6D4361BDD8D7CE791BE89F62611994AD76634A6BECFC5FCA86E05951B8AF33379047434D516EED6082C9998B33762F934274C70B71B043822335732D57FF497A24B51A7BFE65B13F957D5457998A3F5FFCB7
02198     CB76133B10323C4CBD6C7D2BF63F7BD676FF6323D445DF557F7DDD2B0ACF9D1D4C3765D3568E9DE077163A74D937ADDC0038CBEC14FFF672F7110A7E9FFF4B6A42FA798ED05734B4FE132E72F3374F4D1F297D5DED346DA35E4FE6F74E3A687C3B7485086B6ADCF20A7CF5F5DEDD49F42ED45F0FC8FE27664AFE4A45F9CABD406FA82B565EE9C77E359DACEF9AD4F77E49E53AC4600AC8D95EBC163E5A2E9E67C9F910A070B55F4D97BA3844A27CE2A54653446E8AF53149AF8EADC0DC57A6B53B48DFE39351765E
02199     1F239D973077A8A49A478D068DFA7EE164EFDC2767BF117C0F6A7ACFA17FCEDD7FB8767E71EF5A1FDB207D261D79CBCFC3DF7BE91431EE1E1E0C1C27311E3932CC29E7A6F8D5C70ABAEB9155D995CF6B0DF3300D6CAAD7FE9F5E2644354307382EA842387AC86F6D5B9539DBF6A8F2EFAF70DE6E6CC2149BC6F267D7A8F2D3AA953955795E4B3DAA9F6546125C29150A5CA72B9439B3FD107BDF121B79F714FBCB35A277669AC56EEA9F6476115C9612BB3CD611FB59CEC56E819F645EC0F283C9EE47AEC56E78BA
02200     C56EFBF95E4B5DCFF2A3C86ED575AAFDF7ABF2E3FD10DBC6F225E7C85FBD0A5CB623A2B74F87BB8CA739A5A437E42FA2773686C56E273D5E4BF576225C1EE786FA87AF5D277C3E30D1092BED2377F17DFEA346B50652704DFEA6CB74BD7A8AE93D8E7C2783E5CE75B394CF955F86093E47C1DEE79881EB190AFD0F0B685B967F297A7B2B701B9A76BB984204CED57A9E9326EA7B9E7FB84042FE2E3D33197C6F7F107CF55B417A2F5348DF396BD878A5EF145BA0752D25B2DFF9A93503AE3EE877A792953B1F6A4B
02201     565AFDA7F4D232D71A2DA61B3DA33747E632F62F4C494C4F49ACA8DCA778A7A7A97C19873C49B7B1CEFB47217E8EAF21F92F6EB82D7971549111327D63273A4EA30978674CD4624F9E027EFCEB024C7F177D5E68AF0F31E6A9FCCF8CA15EB7E6AB7C35E73C09D70CBFD2576378A36BD998EFBF0B630F6675B87E88FA96479F43F958C8F04730F04F627B91B7C7097BE12F6A8BF91DFF2E2ABEC875A54DC2476329782E26BF073A7C1DE729C8DB598C1A2B83FF7F67B0ED974C403405BF07E93B05071D866E54677D
02202     8CD94F233CA7662B6A11535E276D21858A5F4FD67B1E36D7D7E35A4AC9179B96AA755B0CE50AFC7F34AE15FC9C1B55F719BAAC756D766EECF61CB1BB48BDFBDDAE7CBCE091A7A4E72F4C33180F659D6DBD1657EE6D4DBBE46AB6DB9C263C9EF3C7AF1B46F16419696026BCAB13551BE73259F20F74F42CDC370EECBCAD8DED6C84BDC31FC79B17AFC09B47BC0FB6BE3200054D08017A9248980369FAC71516230B3D2F2B47AFC69B19C956E39FAB79FFF3836A96827ED1B1281B78561E69167A8F54ADF39FBF7F88
02203     5C2DC04EFF203C3F2876E33DD068FD7EDF192970FD64537BACF46C6E43348510AEDD1FAAE93BE28326EDA278A77C83537654867A7E6985CCDB8ABF1B4686EEFF201097D05EE155BE1BEFFDC8DBEB164237F888E96B1907E99BCB3A942FD65266D706E90B837F2C97B1ED1368FB285697B1EDEF7130C1608E851A78A275BB56286A242D5E272DED2D42573D437E433CD77C0AF0FC33049E1F2FD374D8BF5FF79B1F190FB60EA61B642ED7EC3CC6C29B2747423B980BB66E1650467E31E863909EB69C5CD1C0F131A8
02204     AFABC751717EB53E37D94BB7AA7CA62F46C9C2773D4528FB52CBFE067217D077AB0BD1F767CB287B3DBCECA838A782C53F043AAF49D5629E3E5D7B72111A2F70D57914AFC2772B28ECCF83DDF27E093A7F1D4A36791F28FBAADF238F8177D82048FF226E49850A8E89DB3C1F6FEBAC71ED3EEF74E061B573FD53CADC67BE1FD669793E4B5C275887913711B556F4163E588AA27B3D31110D672D5DD6A75852FA0A2F4CB4C1406E8E311F62B7057C5EF6300974B25491C0A5C04617F11F4609DCD639D59E525B23D1
02205     EB6E30E0A2B03E7F66F93E0B401447767D48F791B02EF65055E1E51F1376A27F9171BD079DBA43DDCCBE62BDF92CC3693477F0D0E04772D8E74FE16D68F40A20F84F8B5F9FEC339C6630FCEE937FF6111D135079B22E97BE359577DD849076C5992EAB063D0CEB0449FC1DA98A5C710425F10C1D8918960758CF4B3CDD67E3F270F7544B5E6D3D90F104F99D47D076DE48732A651E57676E6769AE06B4D744613E518F5663D84E8618BFD0A85004B8F1E622600B635FAFCC81ACA68E77BF0C5F1BB900AEE92F2877
02206     BF041A59BBACAFF929769D6C1F434A1BF6270028A36EA820BEB948EAFD85573A12B3D9A369F12D2B56595EE94115AEBC8341D0C87D78D730DE49AB647DF8F047GA53C02EBECC5C529F25874D761DDFA9563ADE84BD0474BAA195252DD8E2B394A54E164B373A22E6F68FBD97FD769DCC9AEB39C5CD1C0F12FD27DDB2C548DCDBE74BDDED5717573FDA8AEFCB5D6F853FB212E485E148F556E667C7CF5A26CDD6B59BAC23505CDB8635E035CBE755E03481A5A918BA47D3D87C92F497B45DE539DB32A5647FE116B
02207     0DCE721DA007BD5C8942E7F705CD53781C8A53577C9A3695C67A46B8043050C48C97C5588A3A03ABB59E31CFD7B10C5F11960F6FFF374BBD8AE3G8F0F9F785D96F5705B1B591C46E4889B871476AFBFC3B6D0B9D0B3D0A7D0BFD0A050982089C0D1C031C089C0292F7B99B2010ADF47BA7B5AE256697134EFD0AEF03C62F618447DD8226EFB1776DE543D0E756163C62CB7DB89EBEC40FAF398E18F6C43BD9A23892B277DEA63DEC79B4DEAE0EDDB8C3997F1F7BE5D27FC0D5BBEB5EF0849733E8E9DBB24B83C2D
02208     C3C5FD77A7F107589BFE0674B7308EDC41EDD481EE639BD887FE5310B9002C3EB754F5E0F0037E3E05B09ED7G048DFE8377AD1CBA4567E9C4FDD95FAD2F0D087AE9D1B556CF93A1FC429BD426F75218E79A56BB7BF672B18F387D01C226E13D73EB55FA6C0DBB3D2FF7AED02D31766C785473BBDE144FDE7282F84929FE78D23546B9220455612A785CB72064FE563027E15F418662AFD22DDD5CD33E5CF35C9071A69E2F7B9C69549D02FF5136D53A714BFD3FEFAA0D753B9A7642EF2C5B4A1538F3CBB2BD47DD
02209     D8D8A212AD72E4AFDF3FE6BA0C1D066F48BDEE7717EBE9691B2E6F03601BBCA81F76BEC0791DF53BA7FCB092FB3FFE457702943F294C398A7CF79C2FD06122DC1614E239B402DF581B38B77AD5FE1FD37A3F7D8C79C0F5C0EDC04300C27E0DF55E8B45ECC0811DD24809AEFB37DC736D351BADB66C2EB65BFB0C50B135292E5C136B9C373B2A3D33277B5D585E597339C179746DF9066F61887B37561EA3B99E7EEF2DBD97ECC7FBC600DF4EDBD8FEA6EE9ADAFA9F9D14CFBF3DF3B68FAD3DE378BE0D403734693D
02210     0563A1EFE953DB3A9953BB867CD227E3FAA7972B636F815CFF7A406D0510F7699E14978C61A7CF47FA7271BDD8CF263C0D75E4121117E9F037G753C0D756457FC5DD13C779B3C6A1F09B8CE53DA6348373D5D979A3FC34439192FEF8AB96F66E05FE5425B28FF4986442693F641BA44727F0358AF896BA46C97040DA2EC59C26CC7CD798F5A63B01F23CCFB877AB2C0956FE05836F9485F728E664FD2177C8984FC74BB83670FBC5EAAD2730D831EC82F78663B1C25BB95F826F945F7CD3E1AAFA5414F1011608D
02211     5FB7AEFC7940D363955F77AEFCAD40E3730A6FE6973EE1409364955F67AEFCE300A75CAB3E8A973E49409363955F05AEFC5301A775DDEF78CE762A79B2012758AB3EF1AE77305581CF6BA0FC229E98D50875C08F049F73AE0E670A8ADD6E369663B931F3DEEC33125F41D8FA17273E0B6F47F7FCBC3774BDE853006A5E437AA22FC212303E6848753E3E38137611373D676BBE7219FC2F01E8EB1F2DE4EDEDB048988BB485A89EA869FDA86B6FE3DB1B1E4C666BBC0DAFC462156105307D4275C3EBF3B2876553EF
02212     F33E9814CFCB22ED79B7DF1B4BFFDF5B663C4F71727735ED4E4875D8B66A40AF74FD2C533ECBD5471FA68DB7E4818DDEC6ABE78C4DCE7B866553375348C179746D34BA11253B845264EA27DC0E5728F0E1275BE7201D9A41EFAC10087F0D556A78179A069BF28C5E5869BFE9C333D34A02215929F2D0BEFDBB7D1D370395862D1DDE6438512035D34F8234D38B78059B50CE77AEF62973E68CB7944F7046CEE18DC3335378C179746D745620FC7AF68A626B06F5B334F63A16634DB334F6DA338F6D5486FE93E720
02213     1DFA7B5471E7A78EB714A7FAE327608DC333532F8665533753B30372695B291F2FC1B6A6EA6DB402632D09DABB4D4BC1BBF502DFE4A25A6958BC17BEC952F0C3CD12B7F63A30ECE8F63AF2D0BEFDBBBDBCA81F3E1D0E72B51F16A42D1D1C9CB7A7E96D74EE99357160971504F6721F2F0E3FA4F93841186C0D1DF224215929F4D0BEFDBB758E4A27EF27B483CBF7DB3256CE9FF15C162C3553AFA534D39F78C5A7231D1A0A0716DE5320FC7A693DFAD0BE7D74EE615F89D4FC20CDEF85470D9FE853BB29186AE370
02214     8B7FG539BB244776066A13E874F8F71BD98464BFB66CCEDFAAF62F84ECCEDFA9716E3FACB40AF84C874797ED068F9DDAF3CF070F53D7BF89F58E26E30B41F6C116FGFF20102DA5588F9F6E35507A61A305E904557762777DE21D692292DCE712D206736FFC1742B387085D6FAD4224145299A600333528D6F87648E1C642935A5832413F918BECE23F69BEB8173D65776D67FB776CE6CB35436AEC6A31D965EB58643B437E1D2B16BFD90EFBBABCD3E78D47FEBE5F07AB64BD3A0E653967394842A268664B7913
02215     CB7D4DAC10558AA446A2AF64B27BE946A2E28DCB9E0D48FB3D147DE840AB46A22345FEB4F047GA5100E592A7D41A1FB3DDF9F7F5BDE26D3035D616C2472FBF741505E1707866553FFDFBEF03BAF473B7765FABE56CB1F2DFDDFC2B91EB9DB7B3EEC2231E18E78854E467AE1EB112F718B3EDDC3649B66B31FFC6EBA2F5F263925F78D4725B95A747E0E56B6D3412F87C80C9B6756E642B38A5C71C0692970DE82D5G35G59007CD331AEA95CB45078D194DA6D78F1F13EDE7AC6250A36F8ACBCA30022D31536D9
02216     706D5735CB3C9CAEE96EF043523943F54A5DAD09FAFCB9F2588AF8B683F54E55461765F227EC3F6C9FA8BFC743F39CD0249B5F1AD5FAEBD2D3D56126416F14F96EFD0F8C8D16AF3BEBD438D80F9B416788DA6609BC95580FB956A3E3A2FF66EE71DC5727EF993C2EDF3EC5FF8F472AAD6EFBB83237686F61485D225E43A13022AD2CDE69F0D84DAD942E0430AF885B46E5B26C20554C6BA001D7F33D98DEE7E191A2DE4F75BA4131963C6BD605FDA1E3CD7C6C89C8F2275D013CADDB7899C1D61BCD38DBF998EBB7
02217     B4DFE48F9357515AE3D269FD18B02637FC66B8DF9F8C003C8886926D597BC6ECCBA64E93EDDEB4BC630158799EA24CC9BA7BAAE53EE873B261D9BCDF0491325F60320D0035G093547B69F76DF4CEAE779AE0A83350AF4E726FC36156A3B0F179B5C5A8B559A57262DE205CD70356FD278363973F9ECE77A9B54FB9164333ED55F0884D48E24C3E13150C19E0F558E2D5EFDE508FCEBF68E2D3E3E172F477A4F575657119C8F1C2F2D2FBF5B0975F5884B77B4EC1F8EECD657B766B4D1D77441B3A0CD29B7C6493F
02218     4742B3A2CDFF5C938DF8BCD0528245FFB94F03890B6672F741E66D36305E52AECBB725BF142F654AE7B028FEEFAF9D6AD9895E5B7E60F90DC33C5FEF15FB2EC35FABE77513DC079E3693CF52B60677189CE2BBAC613337317EA66D6FEB32B81D566E8E45FF61B696D76F31C3BD4A4AA6467551B6D64F58CFF4733DCCA27DA336AB763ED4757B436D675F7679BFC09C3F5D2C2469F6556F0A4D67BF6EAF4EEB9C224DFE31583D9D0FABD63763C217A037BBD83DCB43AF074877B71F79C45D554757CE17AE5056E9FE
02219     9C4FDA202D53E69B31CE4B873F2085D827DD6052671F8EF86AC2EF66EAE670F521CCCD58E2F05781358275AC546BA3EE63F3F87E9A3FE0F00782CDG0A52659B390E7145EA7C92401D36885AFD2012C5FAFCB7F2BE23462F8D5CCE2011C0A13AFC23B9DF1846EFA23827G4581C969FAFCAB96EA73B3DD8E178D4F72F4F75B0AFCFB0A4FE1B726EB7373F90E3726EB7353C6F35E1D6097190E79E961F314790BDD632981F78B108DE81846CF3C8BF9BA6FC7314B7BA1305F9639077BFD11FB38B5056E61B6943A07
02220     9377A03B063BBD5FBD5CF11DF05F69048B528977B31DF0FF5289F73FCE38AE1DF08E1DF087F542356A047B39CE386BF54285763A073B3257BD5CA39B5D43C5EDF42F57FE657358DE5E77B7C43ED7DC7802963B177BB19ACC147757441E5D455A77E0BA47A396EB5F83BF9ADBC701DF4992FC8F6EF659D79A82F85812016BB551767F3352F39F64DF15030F637ED329BF0E132A5C47F149D57A6338B9D56AF11CC8CF827FFEC65EDB3FC179FD697A735FBE5FF8DE63106F0CCBF5AF47BFCDF5AF479B921534972BFE
02221     7FF1467937436367B58E116659EB5C6DB0FF0D3B9DE296A8E9FFC5757B780273EF074B4EEB9C72F7A60B5D6D704CE2F7BBDC3DCFC97B752A5FB97B4E3F9DEA4FEB9C72DCD31F3B9DAE6BF33743709CA56D972BFE27671CFFBBECBC2FF108B4874CF3374365735C6D70ED391276D32A5F0965675F8E9967B58E1166EB663B5BE154FCF7BBACB1A8E9DF217ABDC6BA7FF678538F904736CDCA1AF62AFEBFD2FC7E630E7D816278112A6CDE267A3D7487A8478567B58E51EF3B051FCD453FA107FED982A33E5676B61D
02222     E1DE7CA12E352D6567AF5A406D8F9482A4E464535E77310045FD08B27A680C452C25A8C36C2BEF853793A8GC8FC077570E675F7D86C5BAACFF7E80FDEAA7A0F9172933F4392EB0957643AFC2726FCCFC5CB1DC2375CBC5C771B72916AD6144F5757415D8254739176E10BFD5E0FA7782A0648775D90777FAD6567810C7CC85BE77F1463C19FE97B6CB753FA6CA870CBDA06693D29D0A967372AFE17951E7FB25F7C8344312AD8C9D30E6A779F0A4EFF5C8F1F57B84438E5E92D6731530A5A4147CE59357AE3275C
02223     DA7731D3D12D7E58E9EB2D7B9A58F6D9AEDBA3EDB0F5115C1ADA762E0B739D771A3ACD9DFC3ED73429B9FCCC5E89E5338FC86EEF646337F97E04BD443F8B0882F79CE1E1FC1EC37AF838A173E344BA799CC9B138EB88FB288865B592666472C601FB9CE1917C7B4AC8F0C79336B189F9E389FB1B07AB4998EEE84CC06CB7275DF5A9635FE6365E60E7B0D3B8BFFE66CBBAE0FD043D301A52CBD851CA0CA30A30CBD6E29C3104552DC2F989045D348AF9D316A3161845308CF0D790F6B08B75EBA6ECDAAF6A52C958
02224     CD3B55710AFA58340655AD72377BFCA9D36099FDF3959C17B265752F2F7939E6E27D6BC123B75F3809FAECAD1D47BD8EF40ADF0E6D0FFDAF36BF591FE09DFFAD8F5B866EBE2040CF308D3B2E816B42B100CD7D84E53CC46744ACDD01B2BE647BB79B415D89B4EC856EB9B928BA0BED3BD7FBCEC41DB0E927D287BD2A7A7D654E73DF9FB94FEB9C723B443F83AC7E091FA1F8851619D7799A3974EBBFC3B8E1AF515DF29104DD414365C33866DF633739F7F12C935CA3890B61D888382309B71B77E1A6G96CF5877
02225     D4F7A490B60E479B9B64E7B0E6E29BF85A286443052A5FE946731FA76B4EEB9CA24DD76B4C8B7FC2E7DE78A3BE075986F66949C4FB3D456F00B1C3BE799356329973AE10304ABC3475E8420EF27BCF83F76A2708B5EF40B8B2899B4DF531DD6BE7A8A6AC1957537D00D590664841B81A89DB4A77050C86F7B8E1625BAF9647E4426AF99C46DF7899E2887BAD47DA810BA76C904511349231295CAE4D4CCD58F80AE398E143393C72D1FE06A042DE947182B60A30FA0AE3ACE1AF71B812D68DB7E42CC26CAE0AA31F
02226     30B1C2671F7B99EA881B4BEDE5832C1130DD9407193057F99CE3419DC958E67ECD9C3B83FCAAE1A7967177905A0224AC442E1E0F7216E661FBB3D5B58776126A376387188F3B7887188F6B1F07766FA4BBBC104E301C6B7C8C7D046571B932F240C692B6056C95C2583D7C0C34B8F0A72DC6AC09675D52556A7770D30E6583D6319AED7DE611E25F77D43FAF7C817A31234EEB9C72798DBAFB3E7E663267CBDEA7AF995A7E4C7B8665535F1F795E20FCDA926330EB787839F935F6FCB61A63ED2B3563330DDB31CF
02227     E2833F49146F1BFD7E26DD70558C116F7BA1FEC33F0CFF17D03CC61B5ED59C2FD823CDEF28728DBD78052D417D19257C2C777435D06781B58359000681852F45FD19436B588B60E9DF66813B1D0F7D597968A6EB37FA0B261C4622BC164650357AEBD393B4F89438C5DAEE64F38631EBC5DA143B35EE65F8028A97E95C4AF166CE4B9EEEF0E6E31EFE22DACBDA2B7A9D76832CABCDBA2FF16019522E776C0D64FDAAF1AE6E983A27F9CA363B7D310C60397CE660E134D836E3DC36D20EC4DCB17C5E2B43F6074575
02228     5E2B845E4F188E6113568D47BB768A59F7254AFDFE15F8D38B5E9BC35F3FE6914F19A25734346DD55292C3F746B72E53CF4B2C8152E2DE27CD4B459E52F2BDCFCB8F046FA73D1EC9F4552B24C1512BA6096E827520D7220A42A08CA354EB221BDEE9C97AFAE5737170E4889F8DA430CEBE4ECDGF74AFA9CAB256DD3F4FB176E0EADDF2F2FDB320EEE9F4BF863FAC5B791DF6BCA5421F5BD6AF09B47186D7BC907D82E0370FFF495720CD90F76DC16B578DD0F1B32D0EE8445B50CE35340ADED98AE1F7DBC4709E9
02229     AC5E201F4619832431EE0312C6F92DE76F505A3C32C179745BBC6720FC7AED4082BE2EEE5E20ED8316F13CED03368D38FEAF35F960B7F983560FB77A7CED26BC27B7C43ED70778AD6845FCEE20B8C71BDE710DE8C50EB63D4B69DBD0A3780565605E69EBB7633E68740D43795D25B9702CG8A380D4E431F23145F05FCCC56827E660DD88E6752FD21019B314CDF44BF0D90E5B2A8FF203BC1E7CA835F8DBAEA23763DFB164E5E8C5D086FD07EC657BBCCF772714684700FA41D0266A969706363483ADCE867F371
02230     5DE949C3BD07658E5EBEE86F528D4A5556DD4373756B2E2B7958F494048F4DC59BFE4F6B59C8F0CF49C5FDED7395FDF345BE2CBC30FB9E6AFBD18E6A9B18672EEF62A07A0E4E536A1B172B2F6FAE5E978E037061F928EF849F9FC603BBB68F752DC9D374FD1A37E766FC984F67233EA7C95F10FCF7FD3565406D1E68FC2D3EEFED5457F7BE57B79C42C764233EAFF2FDE341BDAD9F754DD820683B045B57D9G7D3D8254370D748DADF057F756A07ACEA8506AABF9302F18C7080470D38AD05F982E6FF4F0A79522
02231     3E53D47A16F3FD7D41AF3090757D1A748DAFF457D7FB872FD65F4905DAFDE7F95077D32EEFB4040FAD44FA641B0574FDC551F0C3E611083F991EE3466377952378585E86D8DF916AFC8B5DDFBD3A48DD67859A1D47C118482261F4D74154A2ED5DF0839FB74781BE3D886D9639D0315B57FC3C5CD78C7197238E2F118EE1456EBA4C5168203DE7FDE23156EECFAD50375B6BFC8CBE9942C797E33D75F191ABC7F4EF9F49A861FD3F4E8ED30F60ED60794D6634930A312D3A0E1F93A7FE5F2C7ADD34757C77650DBF
02232     C09C19E5CA1A5629FE5F7A83FC7F70608F707DC3759E4F6BE73B778C3EFE5634C7FF7D6C0BBD6E6BE7DF6F51DFBFB36FD12F1F09390F5DFCBEB5F553F0C376A61CAB3A1266D84B89FB18E31D609E36894B64EFF85B96846EB04246F1AC925C71046D485733AF63B99B3B86497CA20E965DB8124FC2BEA3BC63D22C5BBCC9775024EF467AE6B49B6A49EBCD5732232365F7FACC214EBD3707EC26762342FFBABF7BEC00B3300D35BB1B65F89753DDD1C60A7758E2A55E6EA5CA3C4F96F80AD748BA1604327CC11667
02233     B310F6FE287C5E31D411FF43E9CF72C558CD2ABB971CC3381FA2F78D6A97CEE91D7B31A2F3444A016D7A504A4C016DFA20FED7DD33887B4E2A01E599333C11A5F45C253A4F6145DE5F53DD6E44F4CF23F42FE043A67C9629C1791D297AFD53104EEE752DFE3C67870863F2557ECE753E4FD5BF40DE4F72739A0798135D37995713F336C03FFE8B2E854F5D02631B10AD3896DC3605050D82F79CD0D289160725AB14B2F6218F6773E7E94E4F0FD74919DE2CBEBFDF782F7AD4711F3229DB7AC16E2AB01B1CA63A84
02234     C66E332B6E91596C43BDE49765613B14C1361B46E5095F2F2CD264DE21F79F392ABEDB3CDA896BDF786D8FE30BF6F16526F2A70E50E51E6A6E110E9C9F4E424BC1FBB413BDDED82358631935AABB678CEC0F196A7BC38AFF20FBCC9C6C2AD057FBCC24750A9E87FD30454DE40BG324514750AAD7E32C1113BF690DB3C1D2304BDD46878E1ECE1152FB6553CAB2F2B6EBC596E03BDAEA7FBCCA4FBBC102B58635EBCC56ECB9B8636C7236AFE4A11BF543BE2E6D732F6B8356FCA3D6A1C59F29F6CF19959A3016C31
02235     26D231478A555D134FFA34072873AFDC0873F045DB219F3D9577B1F52C247B965A6DDD3956C3DD39470EF7651A8EB9F3ADE62B333434812AEABAB3D3348993392C51A0A39CA8EAAB35892AF3F3AE1B6FFDBA1F23FBFC62366A758387BACFB73EDA314752DAA57E1B53FF20BC6FE5D74EBA6C5ABC4FD01D3770108F3648CC237518D2EAAFF62A5A0BDD0A5C1213837799ADC5AC3FB7D3F8933F7F858A29151DBCE4EF6767C448F38427F8BB15878C2D25F886C5E8DE266439AFE1AB9D2EBA03629FF9EC3E422E1C70
02236     AE4BFDB78F7B9443CAF16E61C4A93F9744EE36D4B96CA7FAAD7C4E90BCC7FFB73F3351EAB9E1F1B41B8E9D32181927B83B691F796A331B4602BCF63F0BD4B65C108EA4421CAED40749A993E17A6099D006E3403F3B1CD7B39A70F1E55EFC0B3C4C65DC33C860196A955F29A4B55FB460C9A977062FE80D1AAF83F8723D622BF42A79EA002745AB3E8787BD8BDCFF4D6549C1797457DC96EE995A9A446FF81F54D62EDD039847713EF26D9AC465962C7B7C41AF369C4B4125F96A780D5B069B5A36F9E3273BF354FC
02237     CE609969955F6FDC78C200A74CAB3E2BDC78A6824F942F7802DC786200C75A6E8D5FA5EE5F168FC6026F9A1F79C43E15AC6267FAED5766E7A547B337EB737381EA4BF240AFF0BB66670BAE67C1CE83BCE507B769DD6DF2DEED8670648F42A76A2A4B735833E0D3016C1E1427BE73C6E06979F8978636C14A179A391F579EE82E2F2EB4FE5354E82CEF16F09DF8E9AB6BB070B699DA23DCE80DF221B54A15DB23DCEA0DF215562834D4DB1D4A6D494A0294D95F1A9DB826FB105F3D548F6EA020509D5897B8D23F43
02238     77F835D5359C6FED05986FC40A370DFFC31DG6E740A61061C8A1C4FFBD367DB757F68FC2BDE20F3F640E61D3383AECFF28FF7D512FB385DBA5F406EDB639E2E45699E6EAB277BBE2DBFEC116877F8556FDDDB4E7F3CC15BF90DC3247906BCF7BB5C1C67EE2F47F3F476356538073BDFA75C03BA61FE23936ED61DF03F56899716631ECF5B972972C675FB7242731FCFAF1D57B8C41A5F5379F6B3B14D5DDE65E96E61AA535C6D35F640F39EEBAABC1DB532031F3F58D2212D576BB8EE2E50566BFFA940FA3D877C
02239     22AA30DE3FEB4033A1CAAABD459F456B9BE325B67E27B95ED2290D7FB01D71E0863F08CA2C1F3697609AC4CE956AD42B7AEE2CC1757B090273DF06624FEB9CA24D0F96E21ADBA84DCF297660BE2F7AED7B8176630EB82FF10C29E2E74FFED610A93B7D2B5C4BD4300C0930AF95E258F81D30C9558293ED617785B826DBDA0DE320BF943027535EA35F5377FD2A7A7B50F1811BBC5E5357A84B6E2FF67DBED444352088639ACBF1559731FE09D82F236F78DD5E69B888AB558C5C6791FBD5BF2AE769CE073079C04D
02240     C0B620E1C041C021C093EB68AC51BAB60165E94FAAF5035C762AAEF1B997F4AA481BB608EE7279BB85D81FADC822F3F08A30BE5B1208EB0FD9751E57BFB7548F3E7ED9DC2F3F7ED9DA6F3E7E3923DEFF7D3336DE3D7EA92F3DF2398ECB878C1F555F8FB656FB7EFEF0A31D1374C7CAF3A11D13F490527CA11791B46BAD484050D72464DE0734D6EF2AA73759E16A6E35191CAC2D629ADAC97C99E6C8497F15969D36DAEC6686B01B83C3DA6A25859C457993F6FE34D17A50852BBA56ED36D9D8FA1C52C2A36B8967
02241     59CC5D9DF9A20AB223146692FC0F65643752E949E014A3C4DC8467DEFDBDDC2D1E9E2774E98DF5C5B3211B1A496F574DE4773CE44A1DE12714F44854FE94D2BD1FE6CA6A799120D30F9715A6BEFFFD628CA929DE7AC0E4E73D14447224DECA66D9D6AFA5C2F64A71297E20249E36BBCE189C66DE26D1323BFFB23F6F5A132F7817546330186151FB2C3D5DA9A502CECEA92552E64BE4388B6B8C19A4B9G63709400A957E09FD086739FD004A70F59AC72634C463DEEC91C21FA9FE7C09CD59B1B58E8C15F84109D
02242     73DCA72E8CB7FCF8C15AE5C547E6C89F6C14BEB8EC3275F41AA09BF8E4C6E9C6BBC47831A8BD4012574ED872B8E3D30F295DD27625B46B302363908F6E14E6FC3973CB9042DDAC7E15C6E9363313EF0F07D75BA9FD28C8EAE4950F6CD1A6F27AFD786B01BFD2BDC9CD9C4D6461A2A3DD436156F7769AA78F92AE5107F052A0613C556F7F8F773F9C4EA14DF5D9233F6F3ACDAFC47E7D735EC46903FA69234300B4D99C7C26F00B39862A694FAD8E763570CEE9D60F9D4AB03BF4942A2FDE7EC86EF51E3441FB13FE
02243     780065DB7636DA4C15F8C6A93CC90BC579BF66345A726ACC3D1D3C4E072AB8299B2AE9250EB5D4D6703217AA3F320B38FE0CAB1738965DB5FF75273BE346A5CAB3F6CA33EDF613F927299D1A79FAE9163353E1696D345B4CFDBDBB042014932CE5E2B34509A06EE3CAAECBDCAE5BFECECA9E6D3BB6E0EE6C5C1DD02B74B924BC9E123D22399442DC5DE9F2C0D496C73D131DF9ECF7E4111F5FA74EB58F6D7A30F586EBC75409F202D62C71025A3B8BB44854E800DEA4A877A713722F3C69BF7F650294D62734C229
02244     C1BAAC762E3C4A43072D5D9692GB58908DFCE62D918DCCD1805FD17AF5E7D57778FC17E56C809DD79797C7F827EFFA17B3F00A3859CA9A884A346CB837EE97D7BF8C12BF70AC2C1ADA0EBFDF32109B4B91FFAE552AF7FD69E9F87295BA9D735E06CB4A5D443312EC396470FC22FDCBEA7E86A45ACAFFAD811C039D0CDF7D9EDA761C78D5FCD524770AF7ABC14789A37924550DD6EC50341FB3867DE7EFF234F89E7DC87B8EFB30B107DB8682AE55B7F89ADBBBCE979BF2E373D4F273A70FFCA77931EF4F7C82BF4
02245     7B4D2CEBEB2615457F5E5BB62EF352621550E72E176670AEEC936F40E2C73746525B6E307630B5B239236B5A07EE405A8AFB4002FD2755E669D63C66293CBEBBE0F4CA73C40554EDF16601DB74E48CCE29AAB73735CACC6036DA4C47DA0F769EEBED3776364A133A2DB4295B2ACC6A360A254DD6130DEF7BF0CAA5BE2F0A4A2CCC59FECFA5767FE46978517F6112FD29EF3A1F14F8892AB90B9244C788228C157A3E73881919B2D77C8F5A73E7835973FFCA53D17FC75B11B11E7476E6946510963A1F2DD3F96913
02246     CF04FED313BEC31A81037ECE0B9865A71FE0A77830BA139D3DEA184625053A385CF5GFF498C4698675253533B6D7E7EFF5ED8FBDDC8FBA4743320CDD0ED12603574CC12D6C87616E5CBB103541D12645DA843B59C137EB245251FB2504510B8303FB4D5C7F31750CEE9FE75B10783121B59646CF2E616E6BA25C52AB91ADD8ED3CFA7C76753C40E55524B91756C8817AC7E185019BB871ADBF03A7D9B345A63F23DE816868A176AA15C7F548B7524FB15A5116E7FD31ACED5B4F5A944BED588F293D6FD96CD986E
02247     85F6CADB073C0F1829720F21F403A4D5B912533273EC1AE3E5AF2FD3AABF1B2D40CC21174FD10A4E2603C13BF1075241A0E6264C3F4ED1EAF61DC5EA547BE91D5236335A0F4BD4FA6BFF204C2976448E254C295819C26F1EED0A3C65BC87A9D76D8C9DCA4AD56C2010A179ACD2AE2FB1065716C8E2FEBEBCE50C14B1F16D887CB6D73B1EB66E9B315E96790D3246A8567FF6733333D25A069B325AF01D6F6A85EC43376EBADF65A1E7D3978C861DA65B514AEE73EE68A5D51DF4DA147B1176ADE472FBB10C6CA97C
02248     BEDF4874BE226279FFGD0CB878810D8F3DE38D9GGC8D781GD0CB818294G94G88G88G52FB4CAA10D8F3DE38D9GGC8D781G8CGGGGGGGGGGGGGGGGGE2F5E9ECE4E5F2A0E4E1F4E1D0CB8586GGGG81G81GBAGGG72D9GGGG
02249 **end of data**/
02250 }
02251 /**
02252  * Return the CheckBoxesPanel property value.
02253  * @return javax.swing.JPanel
02254  */
02255 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02256 private javax.swing.JPanel getCheckBoxesPanel() {
02257     if (ivjCheckBoxesPanel == null) {
02258         try {
02259             ivjCheckBoxesPanel = new javax.swing.JPanel();
02260             ivjCheckBoxesPanel.setName("CheckBoxesPanel");
02261             ivjCheckBoxesPanel.setBorder(new javax.swing.border.EtchedBorder());
02262             ivjCheckBoxesPanel.setLayout(new java.awt.GridBagLayout());
02263             ivjCheckBoxesPanel.setBackground(new java.awt.Color(204,204,255));
02264             ivjCheckBoxesPanel.setPreferredSize(new java.awt.Dimension(500, 600));
02265             ivjCheckBoxesPanel.setMinimumSize(new java.awt.Dimension(500, 600));
02266 
02267             java.awt.GridBagConstraints constraintsHistoryComboBox = new java.awt.GridBagConstraints();
02268             constraintsHistoryComboBox.gridx = 1; constraintsHistoryComboBox.gridy = 0;
02269             constraintsHistoryComboBox.gridwidth = 63;
02270             constraintsHistoryComboBox.fill = java.awt.GridBagConstraints.HORIZONTAL;
02271             constraintsHistoryComboBox.weightx = 1.0;
02272             constraintsHistoryComboBox.insets = new java.awt.Insets(4, 4, 4, 4);
02273             getCheckBoxesPanel().add(getHistoryComboBox(), constraintsHistoryComboBox);
02274 
02275             java.awt.GridBagConstraints constraintsCurrentStmtLabel = new java.awt.GridBagConstraints();
02276             constraintsCurrentStmtLabel.gridx = 0; constraintsCurrentStmtLabel.gridy = 0;
02277             constraintsCurrentStmtLabel.fill = java.awt.GridBagConstraints.HORIZONTAL;
02278             constraintsCurrentStmtLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02279             getCheckBoxesPanel().add(getCurrentStmtLabel(), constraintsCurrentStmtLabel);
02280 
02281             java.awt.GridBagConstraints constraintsValueFlowLabel = new java.awt.GridBagConstraints();
02282             constraintsValueFlowLabel.gridx = 0; constraintsValueFlowLabel.gridy = 4;
02283             constraintsValueFlowLabel.fill = java.awt.GridBagConstraints.HORIZONTAL;
02284             constraintsValueFlowLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02285             getCheckBoxesPanel().add(getValueFlowLabel(), constraintsValueFlowLabel);
02286 
02287             java.awt.GridBagConstraints constraintsValueCheckBoxesPanel = new java.awt.GridBagConstraints();
02288             constraintsValueCheckBoxesPanel.gridx = 1; constraintsValueCheckBoxesPanel.gridy = 4;
02289             constraintsValueCheckBoxesPanel.gridwidth = 8;
02290             constraintsValueCheckBoxesPanel.fill = java.awt.GridBagConstraints.BOTH;
02291             constraintsValueCheckBoxesPanel.weightx = 1.0;
02292             constraintsValueCheckBoxesPanel.insets = new java.awt.Insets(4, 0, 4, 4);
02293             getCheckBoxesPanel().add(getValueCheckBoxesPanel(), constraintsValueCheckBoxesPanel);
02294 
02295             java.awt.GridBagConstraints constraintsDependLabel = new java.awt.GridBagConstraints();
02296             constraintsDependLabel.gridx = 0; constraintsDependLabel.gridy = 1;
02297             constraintsDependLabel.fill = java.awt.GridBagConstraints.HORIZONTAL;
02298             constraintsDependLabel.insets = new java.awt.Insets(12, 4, 4, 4);
02299             getCheckBoxesPanel().add(getDependLabel(), constraintsDependLabel);
02300 
02301             java.awt.GridBagConstraints constraintsDpredLabel = new java.awt.GridBagConstraints();
02302             constraintsDpredLabel.gridx = 0; constraintsDpredLabel.gridy = 2;
02303             constraintsDpredLabel.fill = java.awt.GridBagConstraints.HORIZONTAL;
02304             constraintsDpredLabel.anchor = java.awt.GridBagConstraints.EAST;
02305             constraintsDpredLabel.insets = new java.awt.Insets(12, 4, 4, 0);
02306             getCheckBoxesPanel().add(getDpredLabel(), constraintsDpredLabel);
02307 
02308             java.awt.GridBagConstraints constraintsDsuccLabel = new java.awt.GridBagConstraints();
02309             constraintsDsuccLabel.gridx = 0; constraintsDsuccLabel.gridy = 3;
02310             constraintsDsuccLabel.fill = java.awt.GridBagConstraints.HORIZONTAL;
02311             constraintsDsuccLabel.anchor = java.awt.GridBagConstraints.EAST;
02312             constraintsDsuccLabel.insets = new java.awt.Insets(4, 4, 5, 0);
02313             getCheckBoxesPanel().add(getDsuccLabel(), constraintsDsuccLabel);
02314 
02315             java.awt.GridBagConstraints constraintsDependCheckBoxesPanel = new java.awt.GridBagConstraints();
02316             constraintsDependCheckBoxesPanel.gridx = 8; constraintsDependCheckBoxesPanel.gridy = 1;
02317 constraintsDependCheckBoxesPanel.gridheight = 3;
02318             constraintsDependCheckBoxesPanel.fill = java.awt.GridBagConstraints.BOTH;
02319             constraintsDependCheckBoxesPanel.weightx = 1.0;
02320             constraintsDependCheckBoxesPanel.weighty = 1.0;
02321             constraintsDependCheckBoxesPanel.insets = new java.awt.Insets(4, 0, 4, 4);
02322             getCheckBoxesPanel().add(getDependCheckBoxesPanel(), constraintsDependCheckBoxesPanel);
02323             // user code begin {1}
02324             // user code end
02325         } catch (java.lang.Throwable ivjExc) {
02326             // user code begin {2}
02327             // user code end
02328             handleException(ivjExc);
02329         }
02330     }
02331     return ivjCheckBoxesPanel;
02332 }
02333 /**
02334  * Return the JButton5 property value.
02335  * @return javax.swing.JButton
02336  */
02337 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02338 private javax.swing.JButton getClearDependButton() {
02339     if (ivjClearDependButton == null) {
02340         try {
02341             ivjClearDependButton = new javax.swing.JButton();
02342             ivjClearDependButton.setName("ClearDependButton");
02343             ivjClearDependButton.setBorder(new javax.swing.border.CompoundBorder());
02344             ivjClearDependButton.setText("");
02345             ivjClearDependButton.setBackground(new java.awt.Color(204,204,255));
02346             ivjClearDependButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/clear.jpg")));
02347             ivjClearDependButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
02348             ivjClearDependButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
02349             // user code begin {1}
02350             // user code end
02351         } catch (java.lang.Throwable ivjExc) {
02352             // user code begin {2}
02353             // user code end
02354             handleException(ivjExc);
02355         }
02356     }
02357     return ivjClearDependButton;
02358 }
02359 /**
02360  * Return the ClearToolBarButton property value.
02361  * @return javax.swing.JButton
02362  */
02363 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02364 private javax.swing.JButton getClearToolBarButton() {
02365     if (ivjClearToolBarButton == null) {
02366         try {
02367             ivjClearToolBarButton = new javax.swing.JButton();
02368             ivjClearToolBarButton.setName("ClearToolBarButton");
02369             ivjClearToolBarButton.setBorder(new javax.swing.border.CompoundBorder());
02370             ivjClearToolBarButton.setText("clear");
02371             ivjClearToolBarButton.setBackground(new java.awt.Color(204,204,255));
02372             ivjClearToolBarButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
02373             ivjClearToolBarButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
02374             ivjClearToolBarButton.setIcon(null);
02375             ivjClearToolBarButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
02376             ivjClearToolBarButton.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
02377             ivjClearToolBarButton.setEnabled(false);
02378             // user code begin {1}
02379             // user code end
02380         } catch (java.lang.Throwable ivjExc) {
02381             // user code begin {2}
02382             // user code end
02383             handleException(ivjExc);
02384         }
02385     }
02386     return ivjClearToolBarButton;
02387 }
02388 /**
02389  * Return the ClearValuesButton property value.
02390  * @return javax.swing.JButton
02391  */
02392 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02393 private javax.swing.JButton getClearValuesButton() {
02394     if (ivjClearValuesButton == null) {
02395         try {
02396             ivjClearValuesButton = new javax.swing.JButton();
02397             ivjClearValuesButton.setName("ClearValuesButton");
02398             ivjClearValuesButton.setBorder(new javax.swing.border.CompoundBorder());
02399             ivjClearValuesButton.setText("clear");
02400             ivjClearValuesButton.setBackground(new java.awt.Color(204,204,255));
02401             ivjClearValuesButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
02402             ivjClearValuesButton.setMargin(new java.awt.Insets(2, 14, 2, 14));
02403             // user code begin {1}
02404             // user code end
02405         } catch (java.lang.Throwable ivjExc) {
02406             // user code begin {2}
02407             // user code end
02408             handleException(ivjExc);
02409         }
02410     }
02411     return ivjClearValuesButton;
02412 }
02413 /**
02414  * Return the CodeBrowserPane1 property value.
02415  * @return edu.ksu.cis.bandera.pdgslicer.dependency.CodeBrowserPane
02416  */
02417 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02418 public CodeBrowserPane getCodeBrowserPane() {
02419     if (ivjCodeBrowserPane == null) {
02420         try {
02421             ivjCodeBrowserPane = new edu.ksu.cis.bandera.pdgslicer.dependency.CodeBrowserPane();
02422             ivjCodeBrowserPane.setName("CodeBrowserPane");
02423             // user code begin {1}
02424             ivjCodeBrowserPane.setDependFrame(this);
02425             // user code end
02426         } catch (java.lang.Throwable ivjExc) {
02427             // user code begin {2}
02428             // user code end
02429             handleException(ivjExc);
02430         }
02431     }
02432     return ivjCodeBrowserPane;
02433 }
02434 /**
02435  * Return the JSplitPane1 property value.
02436  * @return javax.swing.JSplitPane
02437  */
02438 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02439 public javax.swing.JSplitPane getCodeCritSplitPane() {
02440     if (ivjCodeCritSplitPane == null) {
02441         try {
02442             ivjCodeCritSplitPane = new javax.swing.JSplitPane(javax.swing.JSplitPane.VERTICAL_SPLIT);
02443             ivjCodeCritSplitPane.setName("CodeCritSplitPane");
02444             ivjCodeCritSplitPane.setDividerLocation(151);
02445             getCodeCritSplitPane().add(getCodeBrowserPane(), "top");
02446             getCodeCritSplitPane().add(getViewerTabbedPane(), "bottom");
02447             // user code begin {1}
02448             getCodeCritSplitPane().setDividerLocation(200);
02449             
02450             // user code end
02451         } catch (java.lang.Throwable ivjExc) {
02452             // user code begin {2}
02453             // user code end
02454             handleException(ivjExc);
02455         }
02456     }
02457     return ivjCodeCritSplitPane;
02458 }
02459 private Set getControlDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation, boolean isPred) {
02460     Set dependAnnotations = new ArraySet();
02461     if (stmtAnnotation instanceof MethodDeclarationAnnotation)
02462         return dependAnnotations;
02463     if (stmtAnnotation instanceof ConstructorDeclarationAnnotation)
02464         return dependAnnotations;
02465     SootMethod sootMethod = null;
02466     if (mda instanceof MethodDeclarationAnnotation)
02467         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
02468     else
02469         if (mda instanceof ConstructorDeclarationAnnotation)
02470             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
02471     Map sootMap = Slicer.sootMethodInfoMap;
02472     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
02473     StmtList stmtList = methodInfo.originalStmtList;
02474     BuildPDG methodPDG = methodInfo.methodPDG;
02475     Stmt[] stmtsInAnnotation;
02476     /*
02477     if (stmtAnnotation instanceof ControlFlowAnnotation) {
02478     ControlFlowAnnotation whileAnn = (ControlFlowAnnotation) stmtAnnotation;
02479     stmtsInAnnotation = new Stmt[1];
02480     stmtsInAnnotation[0] = whileAnn.getBackpointStmt();
02481     } else
02482     stmtsInAnnotation = stmtAnnotation.getStatements();
02483     */
02484     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
02485         stmtsInAnnotation = new Stmt[1];
02486         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
02487     } else
02488         if (stmtAnnotation instanceof ConditionalAnnotation) {
02489             stmtsInAnnotation = new Stmt[1];
02490             Stmt[] testStmts = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
02491             stmtsInAnnotation[0] = testStmts[0];
02492         } else
02493             if (stmtAnnotation instanceof ControlFlowAnnotation) {
02494                 stmtsInAnnotation = new Stmt[1];
02495                 Stmt[] testStmts = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
02496                 stmtsInAnnotation[0] = testStmts[0];
02497             } else
02498                 stmtsInAnnotation = stmtAnnotation.getStatements();
02499     if (isPred)
02500         for (int i = 0; i < stmtsInAnnotation.length; i++) {
02501             BitSet cdSet = methodPDG.controlNodesOf(stmtsInAnnotation[i]);
02502             if (cdSet == null)
02503                 continue; //should show the entry of one method
02504             for (int j = 0; j < stmtList.size(); j++) {
02505                 if (cdSet.get(j)) {
02506                     Stmt cdStmt = (Stmt) stmtList.get(j);
02507                     Annotation cdStmtAnnotation = null;
02508                     try {
02509                         cdStmtAnnotation = mda.getContainingAnnotation(cdStmt);
02510                     } catch (AnnotationException ae) {
02511                         System.out.println("there is an AnnotationException! And cdStmtAnnotation may be null");
02512                     }
02513                     if (!cdStmtAnnotation.equals(stmtAnnotation)) {
02514                         if (!cdStmtAnnotation.toString().equals(""))
02515                             dependAnnotations.add(cdStmtAnnotation);
02516                     }
02517                 }
02518             }
02519         } else
02520             for (int i = 0; i < stmtsInAnnotation.length; i++) {
02521                 Set cdSet = methodPDG.controlSuccNodesOf(stmtsInAnnotation[i]);
02522                 if (cdSet == null)
02523                     continue; //should show the entry of one method
02524                 for (Iterator j = cdSet.iterator(); j.hasNext();) {
02525                     Stmt cdStmt = (Stmt) j.next();
02526                     Annotation cdStmtAnnotation = null;
02527                     try {
02528                         cdStmtAnnotation = mda.getContainingAnnotation(cdStmt);
02529                     } catch (AnnotationException ae) {
02530                         System.out.println("there is an AnnotationException! And cdStmtAnnotation may be null");
02531                     }
02532                     if (!cdStmtAnnotation.equals(stmtAnnotation)) {
02533                         if (!cdStmtAnnotation.toString().equals(""))
02534                             dependAnnotations.add(cdStmtAnnotation);
02535                     }
02536                 }
02537             }
02538     if (dependAnnotations.size() == 0)
02539         dependAnnotations.add(mda);
02540     return dependAnnotations;
02541 }
02542 private DefaultMutableTreeNode getControlDependAnns(boolean isPred) {
02543     DefaultMutableTreeNode controlRoot = null;
02544     if (isPred)
02545         controlRoot = new DefaultMutableTreeNode("Predecessors");
02546     else
02547         controlRoot = new DefaultMutableTreeNode("Successors");
02548     Set controlAnnotationsForOneNode;
02549     Annotation mda;
02550     if (currentNode instanceof StmtTreeNode) {
02551         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
02552         mda = startTreeNode.currentMethodDeclarationAnnotation;
02553         currentMethodDecAnn = mda;
02554         controlAnnotationsForOneNode = getControlDependAnnotationsFor(mda, startTreeNode.currentStmtAnnotation, isPred);
02555     } else
02556         if (currentNode instanceof Annotation) {
02557             mda = currentMethodDecAnn;
02558             controlAnnotationsForOneNode = getControlDependAnnotationsFor(mda, (Annotation) currentNode, isPred);
02559         } else
02560             return controlRoot;
02561     if (controlAnnotationsForOneNode.isEmpty())
02562         return controlRoot;
02563     Hashtable controlAnnotationsForCurrentLevel = new Hashtable();
02564     controlAnnotationsForCurrentLevel.put(controlRoot, controlAnnotationsForOneNode);
02565     Hashtable controlAnnotationsForNextLevel;
02566     do {
02567         controlAnnotationsForNextLevel = new Hashtable();
02568         for (java.util.Iterator controlIt = controlAnnotationsForCurrentLevel.keySet().iterator(); controlIt.hasNext();) {
02569             DefaultMutableTreeNode currentRootNode = (DefaultMutableTreeNode) controlIt.next();
02570             Set cdAnnotations = (Set) controlAnnotationsForCurrentLevel.get(currentRootNode);
02571             //add ddAnnotations to currentRootNode as children of it
02572             for (Iterator cdIt = cdAnnotations.iterator(); cdIt.hasNext();) {
02573                 Annotation cdAnn = (Annotation) cdIt.next();
02574                 DefaultMutableTreeNode cdNode = new DefaultMutableTreeNode(cdAnn);
02575                 currentRootNode.add(cdNode);
02576                 controlAnnotationsForOneNode = getControlDependAnnotationsFor(mda, cdAnn, isPred);
02577                 if (!controlAnnotationsForOneNode.isEmpty())
02578                     controlAnnotationsForNextLevel.put(cdNode, controlAnnotationsForOneNode);
02579             }
02580         }
02581         controlAnnotationsForCurrentLevel = controlAnnotationsForNextLevel;
02582     } while (!controlAnnotationsForNextLevel.isEmpty());
02583     return controlRoot;
02584 }
02585 /**
02586  * Return the ControlLabel property value.
02587  * @return javax.swing.JLabel
02588  */
02589 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02590 private javax.swing.JLabel getControlLabel() {
02591     if (ivjControlLabel == null) {
02592         try {
02593             ivjControlLabel = new javax.swing.JLabel();
02594             ivjControlLabel.setName("ControlLabel");
02595             ivjControlLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/control.jpg")));
02596             ivjControlLabel.setText("");
02597             ivjControlLabel.setBackground(new java.awt.Color(204,204,255));
02598             ivjControlLabel.setForeground(java.awt.Color.black);
02599             // user code begin {1}
02600             // user code end
02601         } catch (java.lang.Throwable ivjExc) {
02602             // user code begin {2}
02603             // user code end
02604             handleException(ivjExc);
02605         }
02606     }
02607     return ivjControlLabel;
02608 }
02609 /**
02610  * Return the ControlPredCheckBox property value.
02611  * @return javax.swing.JCheckBox
02612  */
02613 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02614 private javax.swing.JCheckBox getControlPredCheckBox() {
02615     if (ivjControlPredCheckBox == null) {
02616         try {
02617             ivjControlPredCheckBox = new javax.swing.JCheckBox();
02618             ivjControlPredCheckBox.setName("ControlPredCheckBox");
02619             ivjControlPredCheckBox.setText("");
02620             ivjControlPredCheckBox.setBackground(new java.awt.Color(204,204,255));
02621             // user code begin {1}
02622             // user code end
02623         } catch (java.lang.Throwable ivjExc) {
02624             // user code begin {2}
02625             // user code end
02626             handleException(ivjExc);
02627         }
02628     }
02629     return ivjControlPredCheckBox;
02630 }
02631 /**
02632  * Return the ControlSuccCheckBox property value.
02633  * @return javax.swing.JCheckBox
02634  */
02635 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02636 private javax.swing.JCheckBox getControlSuccCheckBox() {
02637     if (ivjControlSuccCheckBox == null) {
02638         try {
02639             ivjControlSuccCheckBox = new javax.swing.JCheckBox();
02640             ivjControlSuccCheckBox.setName("ControlSuccCheckBox");
02641             ivjControlSuccCheckBox.setText("");
02642             ivjControlSuccCheckBox.setBackground(new java.awt.Color(204,204,255));
02643             // user code begin {1}
02644             // user code end
02645         } catch (java.lang.Throwable ivjExc) {
02646             // user code begin {2}
02647             // user code end
02648             handleException(ivjExc);
02649         }
02650     }
02651     return ivjControlSuccCheckBox;
02652 }
02653 private Configuration getCurrentConfig() {
02654     Configuration currentConfig = new Configuration();
02655     currentConfig.viewerState = getViewerTabbedPane().getSelectedIndex();
02656     currentConfig.queryIndex = queryPanel.getQueryKindComboBox().getSelectedIndex();
02657     currentConfig.dependValueViewerState = dependencyValueViewer.getViewersCurrentState();
02658     currentConfig.currentValueTreeRoot = dependencyValueViewer.currentValueTreeRoot;
02659     currentConfig.currentDependTreeRoot = dependencyValueViewer.currentDependTreeRoot;
02660     currentConfig.dataPred = doPredDataDepend;
02661     currentConfig.dataSucc = doSuccDataDepend;
02662     currentConfig.controlPred = doPredControlDepend;
02663     currentConfig.controlSucc = doSuccControlDepend;
02664     currentConfig.divergentPred = doPredDivergentDepend;
02665     currentConfig.divergentSucc = doSuccDivergentDepend;
02666     currentConfig.readyPred = doPredReadyDepend;
02667     currentConfig.readySucc = doSuccReadyDepend;
02668     currentConfig.synchPred = doPredSynchDepend;
02669     currentConfig.synchSucc = doSuccSynchDepend;
02670     currentConfig.interferPred = doPredInterferDepend;
02671     currentConfig.interferSucc = doSuccInterferDepend;
02672     currentConfig.valuePred = doPredValue;
02673     currentConfig.valueSucc = doSuccValue;
02674     currentConfig.valueSet = doSetValue;
02675     return currentConfig;
02676 }
02677 /**
02678  * Return the CurrentStmtLabel property value.
02679  * @return javax.swing.JLabel
02680  */
02681 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02682 private javax.swing.JLabel getCurrentStmtLabel() {
02683     if (ivjCurrentStmtLabel == null) {
02684         try {
02685             ivjCurrentStmtLabel = new javax.swing.JLabel();
02686             ivjCurrentStmtLabel.setName("CurrentStmtLabel");
02687             ivjCurrentStmtLabel.setText("Current Stmt : ");
02688             ivjCurrentStmtLabel.setForeground(java.awt.Color.black);
02689             ivjCurrentStmtLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
02690             // user code begin {1}
02691             // user code end
02692         } catch (java.lang.Throwable ivjExc) {
02693             // user code begin {2}
02694             // user code end
02695             handleException(ivjExc);
02696         }
02697     }
02698     return ivjCurrentStmtLabel;
02699 }
02700 private Set getDataDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation, boolean isPred) {
02701     Set dependAnnotations = new ArraySet();
02702     SootMethod sootMethod = null;
02703     if (mda instanceof MethodDeclarationAnnotation)
02704         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
02705     else
02706         if (mda instanceof ConstructorDeclarationAnnotation)
02707             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
02708     Map sootMap = Slicer.sootMethodInfoMap;
02709     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
02710     BuildPDG methodPDG = methodInfo.methodPDG;
02711     Stmt stmtsInAnnotation[];
02712     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
02713         stmtsInAnnotation = new Stmt[1];
02714         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
02715     } else
02716         if (stmtAnnotation instanceof ConditionalAnnotation) {
02717             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
02718         } else
02719             if (stmtAnnotation instanceof ControlFlowAnnotation) {
02720                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
02721             } else
02722                 stmtsInAnnotation = stmtAnnotation.getStatements();
02723     for (int i = 0; i < stmtsInAnnotation.length; i++) {
02724         Set ddSet = null;
02725         if (isPred)
02726             ddSet = methodPDG.dataNodesOf(stmtsInAnnotation[i]);
02727         else
02728             ddSet = methodPDG.dataSuccNodesOf(stmtsInAnnotation[i]);
02729         if (ddSet == null)
02730             continue;
02731         for (Iterator setIt = ddSet.iterator(); setIt.hasNext();) {
02732             Stmt ddStmt = null;
02733             if (isPred)
02734                 ddStmt = ((DataBox) setIt.next()).getStmt();
02735             else
02736                 ddStmt = (Stmt) setIt.next();
02737             if (ddStmt instanceof IdentityStmt) {
02738                 ParameterNode paraNode = new ParameterNode(methodInfo.sootClass, mda, (IdentityStmt) ddStmt);
02739                 dependAnnotations.add(paraNode);
02740             } else {
02741                 Annotation ddStmtAnnotation = null;
02742                 try {
02743                     ddStmtAnnotation = mda.getContainingAnnotation(ddStmt);
02744                 } catch (AnnotationException ae) {
02745                     System.out.println("there is an AnnotationException! And ddStmtAnnotation may be null");
02746                 }
02747                 if (!ddStmtAnnotation.toString().equals(""))
02748                     if (!ddStmtAnnotation.equals(stmtAnnotation))
02749                         dependAnnotations.add(ddStmtAnnotation);
02750             }
02751         }
02752     }
02753     return dependAnnotations;
02754 }
02755 private DefaultMutableTreeNode getDataDependAnns(boolean isPred) {
02756     DefaultMutableTreeNode dataRoot = null;
02757     if (isPred)
02758         dataRoot = new DefaultMutableTreeNode("Predecessors");
02759     else
02760         dataRoot = new DefaultMutableTreeNode("Successors");
02761     Set dataAnnotationsForOneNode;
02762     Annotation mda;
02763     if (currentNode instanceof StmtTreeNode) {
02764         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
02765         mda = startTreeNode.currentMethodDeclarationAnnotation;
02766         currentMethodDecAnn = mda;
02767         dataAnnotationsForOneNode = getDataDependAnnotationsFor(mda, startTreeNode.currentStmtAnnotation, isPred);
02768     } else
02769         if (currentNode instanceof Annotation) {
02770             mda = currentMethodDecAnn;
02771             dataAnnotationsForOneNode = getDataDependAnnotationsFor(mda, (Annotation) currentNode, isPred);
02772         } else
02773             return dataRoot;
02774     if (dataAnnotationsForOneNode.isEmpty())
02775         return dataRoot;
02776     Hashtable dataAnnotationsForCurrentLevel = new Hashtable();
02777     dataAnnotationsForCurrentLevel.put(dataRoot, dataAnnotationsForOneNode);
02778     Hashtable dataAnnotationsForNextLevel;
02779     do {
02780         dataAnnotationsForNextLevel = new Hashtable();
02781         for (java.util.Iterator dataIt = dataAnnotationsForCurrentLevel.keySet().iterator(); dataIt.hasNext();) {
02782             DefaultMutableTreeNode currentRootNode = (DefaultMutableTreeNode) dataIt.next();
02783             Set ddAnnotations = (Set) dataAnnotationsForCurrentLevel.get(currentRootNode);
02784             //add ddAnnotations to currentRootNode as children of it
02785             for (Iterator ddIt = ddAnnotations.iterator(); ddIt.hasNext();) {
02786                 Object ddObject = ddIt.next();
02787                 if (ddObject instanceof ParameterNode) {
02788                     DefaultMutableTreeNode paraNode = new DefaultMutableTreeNode(ddObject);
02789                     if (ddObject.toString().equals("JJJCTEMP$0"))
02790                         paraNode = new DefaultMutableTreeNode("this");
02791                     currentRootNode.add(paraNode);
02792                 } else {
02793                     Annotation ddAnn = (Annotation) ddObject;
02794                     DefaultMutableTreeNode ddNode = new DefaultMutableTreeNode(ddAnn);
02795                     currentRootNode.add(ddNode);
02796                     if (treePathContains(currentRootNode, ddAnn))
02797                         dataAnnotationsForOneNode = new ArraySet();
02798                     else
02799                         dataAnnotationsForOneNode = getDataDependAnnotationsFor(mda, ddAnn, isPred);
02800                 if (!dataAnnotationsForOneNode.isEmpty())
02801                     dataAnnotationsForNextLevel.put(ddNode, dataAnnotationsForOneNode);
02802             }
02803         }
02804     }
02805     dataAnnotationsForCurrentLevel = dataAnnotationsForNextLevel;
02806 }
02807 while (!dataAnnotationsForNextLevel.isEmpty());
02808 return dataRoot;
02809 }
02810 /**
02811  * Return the DataLabel property value.
02812  * @return javax.swing.JLabel
02813  */
02814 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02815 private javax.swing.JLabel getDataLabel() {
02816     if (ivjDataLabel == null) {
02817         try {
02818             ivjDataLabel = new javax.swing.JLabel();
02819             ivjDataLabel.setName("DataLabel");
02820             ivjDataLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/data.jpg")));
02821             ivjDataLabel.setText("");
02822             ivjDataLabel.setBackground(new java.awt.Color(204,204,255));
02823             ivjDataLabel.setForeground(java.awt.Color.black);
02824             // user code begin {1}
02825             // user code end
02826         } catch (java.lang.Throwable ivjExc) {
02827             // user code begin {2}
02828             // user code end
02829             handleException(ivjExc);
02830         }
02831     }
02832     return ivjDataLabel;
02833 }
02834 /**
02835  * Return the DataPredCheckBox property value.
02836  * @return javax.swing.JCheckBox
02837  */
02838 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02839 private javax.swing.JCheckBox getDataPredCheckBox() {
02840     if (ivjDataPredCheckBox == null) {
02841         try {
02842             ivjDataPredCheckBox = new javax.swing.JCheckBox();
02843             ivjDataPredCheckBox.setName("DataPredCheckBox");
02844             ivjDataPredCheckBox.setText("");
02845             ivjDataPredCheckBox.setBackground(new java.awt.Color(204,204,255));
02846             // user code begin {1}
02847             // user code end
02848         } catch (java.lang.Throwable ivjExc) {
02849             // user code begin {2}
02850             // user code end
02851             handleException(ivjExc);
02852         }
02853     }
02854     return ivjDataPredCheckBox;
02855 }
02856 /**
02857  * Return the DataSuccCheckBox property value.
02858  * @return javax.swing.JCheckBox
02859  */
02860 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02861 private javax.swing.JCheckBox getDataSuccCheckBox() {
02862     if (ivjDataSuccCheckBox == null) {
02863         try {
02864             ivjDataSuccCheckBox = new javax.swing.JCheckBox();
02865             ivjDataSuccCheckBox.setName("DataSuccCheckBox");
02866             ivjDataSuccCheckBox.setText("");
02867             ivjDataSuccCheckBox.setBackground(new java.awt.Color(204,204,255));
02868             // user code begin {1}
02869             // user code end
02870         } catch (java.lang.Throwable ivjExc) {
02871             // user code begin {2}
02872             // user code end
02873             handleException(ivjExc);
02874         }
02875     }
02876     return ivjDataSuccCheckBox;
02877 }
02878 /**
02879  * Return the JPanel3 property value.
02880  * @return javax.swing.JPanel
02881  */
02882 /* WARNING: THIS METHOD WILL BE REGENERATED. */
02883 private javax.swing.JPanel getDependCheckBoxesPanel() {
02884     if (ivjDependCheckBoxesPanel == null) {
02885         try {
02886             ivjDependCheckBoxesPanel = new javax.swing.JPanel();
02887             ivjDependCheckBoxesPanel.setName("DependCheckBoxesPanel");
02888             ivjDependCheckBoxesPanel.setLayout(new java.awt.GridBagLayout());
02889             ivjDependCheckBoxesPanel.setBackground(new java.awt.Color(204,204,255));
02890 
02891             java.awt.GridBagConstraints constraintsDataPredCheckBox = new java.awt.GridBagConstraints();
02892             constraintsDataPredCheckBox.gridx = 0; constraintsDataPredCheckBox.gridy = 1;
02893             constraintsDataPredCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02894             getDependCheckBoxesPanel().add(getDataPredCheckBox(), constraintsDataPredCheckBox);
02895 
02896             java.awt.GridBagConstraints constraintsDataSuccCheckBox = new java.awt.GridBagConstraints();
02897             constraintsDataSuccCheckBox.gridx = 0; constraintsDataSuccCheckBox.gridy = 2;
02898             constraintsDataSuccCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02899             getDependCheckBoxesPanel().add(getDataSuccCheckBox(), constraintsDataSuccCheckBox);
02900 
02901             java.awt.GridBagConstraints constraintsDataLabel = new java.awt.GridBagConstraints();
02902             constraintsDataLabel.gridx = 0; constraintsDataLabel.gridy = 0;
02903             constraintsDataLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02904             getDependCheckBoxesPanel().add(getDataLabel(), constraintsDataLabel);
02905 
02906             java.awt.GridBagConstraints constraintsControlPredCheckBox = new java.awt.GridBagConstraints();
02907             constraintsControlPredCheckBox.gridx = 1; constraintsControlPredCheckBox.gridy = 1;
02908             constraintsControlPredCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02909             getDependCheckBoxesPanel().add(getControlPredCheckBox(), constraintsControlPredCheckBox);
02910 
02911             java.awt.GridBagConstraints constraintsControlLabel = new java.awt.GridBagConstraints();
02912             constraintsControlLabel.gridx = 1; constraintsControlLabel.gridy = 0;
02913             constraintsControlLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02914             getDependCheckBoxesPanel().add(getControlLabel(), constraintsControlLabel);
02915 
02916             java.awt.GridBagConstraints constraintsControlSuccCheckBox = new java.awt.GridBagConstraints();
02917             constraintsControlSuccCheckBox.gridx = 1; constraintsControlSuccCheckBox.gridy = 2;
02918             constraintsControlSuccCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02919             getDependCheckBoxesPanel().add(getControlSuccCheckBox(), constraintsControlSuccCheckBox);
02920 
02921             java.awt.GridBagConstraints constraintsReadyLabel = new java.awt.GridBagConstraints();
02922             constraintsReadyLabel.gridx = 3; constraintsReadyLabel.gridy = 0;
02923             constraintsReadyLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02924             getDependCheckBoxesPanel().add(getReadyLabel(), constraintsReadyLabel);
02925 
02926             java.awt.GridBagConstraints constraintsReadyPredCheckBox = new java.awt.GridBagConstraints();
02927             constraintsReadyPredCheckBox.gridx = 3; constraintsReadyPredCheckBox.gridy = 1;
02928             constraintsReadyPredCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02929             getDependCheckBoxesPanel().add(getReadyPredCheckBox(), constraintsReadyPredCheckBox);
02930 
02931             java.awt.GridBagConstraints constraintsReadySuccCheckBox = new java.awt.GridBagConstraints();
02932             constraintsReadySuccCheckBox.gridx = 3; constraintsReadySuccCheckBox.gridy = 2;
02933             constraintsReadySuccCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02934             getDependCheckBoxesPanel().add(getReadySuccCheckBox(), constraintsReadySuccCheckBox);
02935 
02936             java.awt.GridBagConstraints constraintsInterferLabel = new java.awt.GridBagConstraints();
02937             constraintsInterferLabel.gridx = 4; constraintsInterferLabel.gridy = 0;
02938             constraintsInterferLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02939             getDependCheckBoxesPanel().add(getInterferLabel(), constraintsInterferLabel);
02940 
02941             java.awt.GridBagConstraints constraintsInterferPredCheckBox = new java.awt.GridBagConstraints();
02942             constraintsInterferPredCheckBox.gridx = 4; constraintsInterferPredCheckBox.gridy = 1;
02943             constraintsInterferPredCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02944             getDependCheckBoxesPanel().add(getInterferPredCheckBox(), constraintsInterferPredCheckBox);
02945 
02946             java.awt.GridBagConstraints constraintsInterferSuccCheckBox = new java.awt.GridBagConstraints();
02947             constraintsInterferSuccCheckBox.gridx = 4; constraintsInterferSuccCheckBox.gridy = 2;
02948             constraintsInterferSuccCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02949             getDependCheckBoxesPanel().add(getInterferSuccCheckBox(), constraintsInterferSuccCheckBox);
02950 
02951             java.awt.GridBagConstraints constraintsDiverLabel = new java.awt.GridBagConstraints();
02952             constraintsDiverLabel.gridx = 2; constraintsDiverLabel.gridy = 0;
02953             constraintsDiverLabel.insets = new java.awt.Insets(4, 4, 4, 4);
02954             getDependCheckBoxesPanel().add(getDiverLabel(), constraintsDiverLabel);
02955 
02956             java.awt.GridBagConstraints constraintsDiverPredCheckBox = new java.awt.GridBagConstraints();
02957             constraintsDiverPredCheckBox.gridx = 2; constraintsDiverPredCheckBox.gridy = 1;
02958             constraintsDiverPredCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02959             getDependCheckBoxesPanel().add(getDiverPredCheckBox(), constraintsDiverPredCheckBox);
02960 
02961             java.awt.GridBagConstraints constraintsDiverSuccCheckBox = new java.awt.GridBagConstraints();
02962             constraintsDiverSuccCheckBox.gridx = 2; constraintsDiverSuccCheckBox.gridy = 2;
02963             constraintsDiverSuccCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
02964             getDependCheckBoxesPanel().add(getDiverSuccCheckBox(), constraintsDiverSuccCheckBox);
02965 
02966             java.awt.GridBagConstraints constraintsAllpredButton = new java.awt.GridBagConstraints();
02967             constraintsAllpredButton.gridx = 6; constraintsAllpredButton.gridy = 1;
02968             constraintsAllpredButton.insets = new java.awt.Insets(4, 4, 4, 4);
02969             getDependCheckBoxesPanel().add(getAllpredButton(), constraintsAllpredButton);
02970 
02971             java.awt.GridBagConstraints constraintsAllsuccButton = new java.awt.GridBagConstraints();
02972             constraintsAllsuccButton.gridx = 6; constraintsAllsuccButton.gridy = 2;
02973             constraintsAllsuccButton.insets = new java.awt.Insets(4, 4, 4, 4);
02974             getDependCheckBoxesPanel().add(getAllsuccButton(), constraintsAllsuccButton);
02975 
02976             java.awt.GridBagConstraints constraintsClearDependButton = new java.awt.GridBagConstraints();
02977             constraintsClearDependButton.gridx = 7; constraintsClearDependButton.gridy = 0;
02978             constraintsClearDependButton.insets = new java.awt.Insets(4, 4, 4, 4);
02979             getDependCheckBoxesPanel().add(getClearDependButton(), constraintsClearDependButton);
02980 
02981             java.awt.GridBagConstraints constraintsNopredButton = new java.awt.GridBagConstraints();
02982             constraintsNopredButton.gridx = 7; constraintsNopredButton.gridy = 1;
02983             constraintsNopredButton.insets = new java.awt.Insets(4, 4, 4, 4);
02984             getDependCheckBoxesPanel().add(getNopredButton(), constraintsNopredButton);
02985 
02986             java.awt.GridBagConstraints constraintsNosuccButton = new java.awt.GridBagConstraints();
02987             constraintsNosuccButton.gridx = 7; constraintsNosuccButton.gridy = 2;
02988             constraintsNosuccButton.anchor = java.awt.GridBagConstraints.WEST;
02989             constraintsNosuccButton.insets = new java.awt.Insets(4, 4, 4, 4);
02990             getDependCheckBoxesPanel().add(getNosuccButton(), constraintsNosuccButton);
02991 
02992             java.awt.GridBagConstraints constraintsEmptyPanel = new java.awt.GridBagConstraints();
02993             constraintsEmptyPanel.gridx = 8; constraintsEmptyPanel.gridy = 0;
02994             constraintsEmptyPanel.fill = java.awt.GridBagConstraints.BOTH;
02995             constraintsEmptyPanel.weightx = 1.0;
02996             constraintsEmptyPanel.weighty = 1.0;
02997             constraintsEmptyPanel.insets = new java.awt.Insets(4, 4, 4, 4);
02998             getDependCheckBoxesPanel().add(getEmptyPanel(), constraintsEmptyPanel);
02999 
03000             java.awt.GridBagConstraints constraintsAllDependButton = new java.awt.GridBagConstraints();
03001             constraintsAllDependButton.gridx = 6; constraintsAllDependButton.gridy = 0;
03002             constraintsAllDependButton.insets = new java.awt.Insets(4, 4, 4, 4);
03003             getDependCheckBoxesPanel().add(getAllDependButton(), constraintsAllDependButton);
03004 
03005             java.awt.GridBagConstraints constraintsSynchLabel = new java.awt.GridBagConstraints();
03006             constraintsSynchLabel.gridx = 5; constraintsSynchLabel.gridy = 0;
03007             constraintsSynchLabel.insets = new java.awt.Insets(4, 4, 4, 4);
03008             getDependCheckBoxesPanel().add(getSynchLabel(), constraintsSynchLabel);
03009 
03010             java.awt.GridBagConstraints constraintsSynchPredCheckBox = new java.awt.GridBagConstraints();
03011             constraintsSynchPredCheckBox.gridx = 5; constraintsSynchPredCheckBox.gridy = 1;
03012             constraintsSynchPredCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
03013             getDependCheckBoxesPanel().add(getSynchPredCheckBox(), constraintsSynchPredCheckBox);
03014 
03015             java.awt.GridBagConstraints constraintsSynchSuccCheckBox = new java.awt.GridBagConstraints();
03016             constraintsSynchSuccCheckBox.gridx = 5; constraintsSynchSuccCheckBox.gridy = 2;
03017             constraintsSynchSuccCheckBox.insets = new java.awt.Insets(4, 4, 4, 4);
03018             getDependCheckBoxesPanel().add(getSynchSuccCheckBox(), constraintsSynchSuccCheckBox);
03019             // user code begin {1}
03020             // user code end
03021         } catch (java.lang.Throwable ivjExc) {
03022             // user code begin {2}
03023             // user code end
03024             handleException(ivjExc);
03025         }
03026     }
03027     return ivjDependCheckBoxesPanel;
03028 }
03029 /**
03030  * Return the DependencyFrameContentPane property value.
03031  * @return javax.swing.JPanel
03032  */
03033 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03034 private javax.swing.JPanel getDependencyFrameContentPane() {
03035     if (ivjDependencyFrameContentPane == null) {
03036         try {
03037             ivjDependencyFrameContentPane = new javax.swing.JPanel();
03038             ivjDependencyFrameContentPane.setName("DependencyFrameContentPane");
03039             ivjDependencyFrameContentPane.setBorder(new javax.swing.border.EtchedBorder());
03040             ivjDependencyFrameContentPane.setLayout(new java.awt.BorderLayout());
03041             getDependencyFrameContentPane().add(getOperationPanel(), "North");
03042             getDependencyFrameContentPane().add(getCodeCritSplitPane(), "Center");
03043             // user code begin {1}
03044 
03045             // user code end
03046         } catch (java.lang.Throwable ivjExc) {
03047             // user code begin {2}
03048             // user code end
03049             handleException(ivjExc);
03050         }
03051     }
03052     return ivjDependencyFrameContentPane;
03053 }
03054 /**
03055  * Insert the method's description here.
03056  * Creation date: (00-11-7 10:11:56)
03057  * @return javax.swing.tree.DefaultMutableTreeNode
03058  * @param dependKind java.lang.String
03059  * @param isPred boolean
03060  */
03061 private DefaultMutableTreeNode getDependencyTreeNode(String dependKind, boolean isPred) {
03062     int kind = dependencyKindsList.indexOf(dependKind);
03063     DefaultMutableTreeNode returnNode = null;
03064     switch (kind) {
03065         case DATA :
03066             returnNode = getDataDependAnns(isPred);
03067             break;
03068         case CONTROL :
03069             returnNode = getControlDependAnns(isPred);
03070             break;
03071         case DIVERGENT :
03072             returnNode = getDivergentDependAnns(isPred);
03073             break;
03074         case READY :
03075             returnNode = getReadyDependAnns(isPred);
03076             break;
03077         case INTERFERENCE :
03078             returnNode = getInterferDependAnns(isPred);
03079             break;
03080         case SYNCHRONIZATION :
03081             returnNode = getSynchDependAnns(isPred);
03082             break;
03083     }
03084     return returnNode;
03085 }
03086 /**
03087  * Insert the method's description here.
03088  * Creation date: (00-12-8 15:05:12)
03089  * @return edu.ksu.cis.bandera.pdgslicer.dependency.DependencyValueViewer
03090  */
03091 DependencyValueViewer getDependencyValueViewer() {
03092     return dependencyValueViewer;
03093 }
03094 /**
03095  * Return the JLabel3 property value.
03096  * @return javax.swing.JLabel
03097  */
03098 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03099 private javax.swing.JLabel getDependLabel() {
03100     if (ivjDependLabel == null) {
03101         try {
03102             ivjDependLabel = new javax.swing.JLabel();
03103             ivjDependLabel.setName("DependLabel");
03104             ivjDependLabel.setText("Dependencies : ");
03105             ivjDependLabel.setForeground(java.awt.Color.black);
03106             ivjDependLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
03107             // user code begin {1}
03108             // user code end
03109         } catch (java.lang.Throwable ivjExc) {
03110             // user code begin {2}
03111             // user code end
03112             handleException(ivjExc);
03113         }
03114     }
03115     return ivjDependLabel;
03116 }
03117 /**
03118  * Return the DependOperationToolBar property value.
03119  * @return javax.swing.JToolBar
03120  */
03121 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03122 private javax.swing.JToolBar getDependOperationToolBar() {
03123     if (ivjDependOperationToolBar == null) {
03124         try {
03125             ivjDependOperationToolBar = new javax.swing.JToolBar();
03126             ivjDependOperationToolBar.setName("DependOperationToolBar");
03127             ivjDependOperationToolBar.setPreferredSize(new java.awt.Dimension(259, 50));
03128             ivjDependOperationToolBar.setBackground(new java.awt.Color(204,204,255));
03129             ivjDependOperationToolBar.setMinimumSize(new java.awt.Dimension(224, 50));
03130             getDependOperationToolBar().add(getToolBarInPanel(), getToolBarInPanel().getName());
03131             // user code begin {1}
03132             // user code end
03133         } catch (java.lang.Throwable ivjExc) {
03134             // user code begin {2}
03135             // user code end
03136             handleException(ivjExc);
03137         }
03138     }
03139     return ivjDependOperationToolBar;
03140 }
03141 private Set getDivergentDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation, boolean isPred) {
03142     Set dependAnnotations = new ArraySet();
03143     if (stmtAnnotation instanceof MethodDeclarationAnnotation)
03144         return dependAnnotations;
03145     if (stmtAnnotation instanceof ConstructorDeclarationAnnotation)
03146         return dependAnnotations;
03147     SootMethod sootMethod = null;
03148     if (mda instanceof MethodDeclarationAnnotation)
03149         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
03150     else
03151         if (mda instanceof ConstructorDeclarationAnnotation)
03152             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03153     Map sootMap = Slicer.sootMethodInfoMap;
03154     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
03155     StmtList stmtList = methodInfo.originalStmtList;
03156     BuildPDG methodPDG = methodInfo.methodPDG;
03157     Stmt[] stmtsInAnnotation;
03158     /*
03159     if (stmtAnnotation instanceof ControlFlowAnnotation) {
03160     ControlFlowAnnotation whileAnn = (ControlFlowAnnotation) stmtAnnotation;
03161     stmtsInAnnotation = new Stmt[1];
03162     stmtsInAnnotation[0] = whileAnn.getBackpointStmt();
03163     } else
03164     stmtsInAnnotation = stmtAnnotation.getStatements();
03165     */
03166     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
03167         stmtsInAnnotation = new Stmt[1];
03168         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
03169     } else
03170         if (stmtAnnotation instanceof ConditionalAnnotation) {
03171             stmtsInAnnotation = new Stmt[1];
03172             Stmt[] testStmts = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
03173             stmtsInAnnotation[0] = testStmts[0];
03174         } else
03175             if (stmtAnnotation instanceof ControlFlowAnnotation) {
03176                 stmtsInAnnotation = new Stmt[1];
03177                 Stmt[] testStmts = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
03178                 stmtsInAnnotation[0] = testStmts[0];
03179             } else
03180                 stmtsInAnnotation = stmtAnnotation.getStatements();
03181     if (isPred)
03182         for (int i = 0; i < stmtsInAnnotation.length; i++) {
03183             BitSet diverSet = methodPDG.preDivergencePointsOf(stmtsInAnnotation[i]);
03184             if (diverSet == null)
03185                 continue; //should show the entry of one method
03186             for (int j = 0; j < stmtList.size(); j++) {
03187                 if (diverSet.get(j)) {
03188                     Stmt diverStmt = (Stmt) stmtList.get(j);
03189                     Annotation diverStmtAnnotation = null;
03190                     try {
03191                         diverStmtAnnotation = mda.getContainingAnnotation(diverStmt);
03192                     } catch (AnnotationException ae) {
03193                         System.out.println("there is an AnnotationException! And cdStmtAnnotation may be null");
03194                     }
03195                     if (!diverStmtAnnotation.equals(stmtAnnotation)) {
03196                         if (!diverStmtAnnotation.toString().equals(""))
03197                             dependAnnotations.add(diverStmtAnnotation);
03198                     }
03199                 }
03200             }
03201         } else
03202             for (int i = 0; i < stmtsInAnnotation.length; i++) {
03203                 BitSet diverSet = methodPDG.succDivergencePointsOf(stmtsInAnnotation[i]);
03204                 if (diverSet == null)
03205                     continue; //should show the entry of one method
03206                 for (int j = 0; j < stmtList.size(); j++) {
03207                     if (diverSet.get(j)) {
03208                         Stmt diverStmt = (Stmt) stmtList.get(j);
03209                         Annotation diverStmtAnnotation = null;
03210                         try {
03211                             diverStmtAnnotation = mda.getContainingAnnotation(diverStmt);
03212                         } catch (AnnotationException ae) {
03213                             System.out.println("there is an AnnotationException! And cdStmtAnnotation may be null");
03214                         }
03215                         if (!diverStmtAnnotation.equals(stmtAnnotation)) {
03216                             if (!diverStmtAnnotation.toString().equals(""))
03217                                 dependAnnotations.add(diverStmtAnnotation);
03218                         }
03219                     }
03220                 }
03221             }
03222     if (dependAnnotations.size() == 0)
03223         dependAnnotations.add(mda);
03224     return dependAnnotations;
03225 }
03226 private DefaultMutableTreeNode getDivergentDependAnns(boolean isPred) {
03227     DefaultMutableTreeNode divergenceRoot = null;
03228     if (isPred)
03229         divergenceRoot = new DefaultMutableTreeNode("Predecessors");
03230     else
03231         divergenceRoot = new DefaultMutableTreeNode("Successors");
03232     Set divergenceAnnotationsForOneNode;
03233     Annotation mda;
03234     if (currentNode instanceof StmtTreeNode) {
03235         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
03236         mda = startTreeNode.currentMethodDeclarationAnnotation;
03237         currentMethodDecAnn = mda;
03238         divergenceAnnotationsForOneNode = getDivergentDependAnnotationsFor(mda, startTreeNode.currentStmtAnnotation, isPred);
03239     } else
03240         if (currentNode instanceof Annotation) {
03241             mda = currentMethodDecAnn;
03242             divergenceAnnotationsForOneNode = getDivergentDependAnnotationsFor(mda, (Annotation) currentNode, isPred);
03243         } else
03244             return divergenceRoot;
03245     if (divergenceAnnotationsForOneNode.isEmpty())
03246         return divergenceRoot;
03247     Hashtable divergenceAnnotationsForCurrentLevel = new Hashtable();
03248     divergenceAnnotationsForCurrentLevel.put(divergenceRoot, divergenceAnnotationsForOneNode);
03249     Hashtable divergenceAnnotationsForNextLevel;
03250     do {
03251         divergenceAnnotationsForNextLevel = new Hashtable();
03252         for (java.util.Iterator divergenceIt = divergenceAnnotationsForCurrentLevel.keySet().iterator(); divergenceIt.hasNext();) {
03253             DefaultMutableTreeNode currentRootNode = (DefaultMutableTreeNode) divergenceIt.next();
03254             Set divergenceAnnotations = (Set) divergenceAnnotationsForCurrentLevel.get(currentRootNode);
03255             //add ddAnnotations to currentRootNode as children of it
03256             for (Iterator diverIt = divergenceAnnotations.iterator(); diverIt.hasNext();) {
03257                 Annotation diverAnn = (Annotation) diverIt.next();
03258                 DefaultMutableTreeNode diverNode = new DefaultMutableTreeNode(diverAnn);
03259                 currentRootNode.add(diverNode);
03260                 divergenceAnnotationsForOneNode = getDivergentDependAnnotationsFor(mda, diverAnn, isPred);
03261                 if (!divergenceAnnotationsForOneNode.isEmpty())
03262                     divergenceAnnotationsForNextLevel.put(diverNode, divergenceAnnotationsForOneNode);
03263             }
03264         }
03265         divergenceAnnotationsForCurrentLevel = divergenceAnnotationsForNextLevel;
03266     } while (!divergenceAnnotationsForNextLevel.isEmpty());
03267     return divergenceRoot;
03268 }
03269 /**
03270  * Return the DiverLabel property value.
03271  * @return javax.swing.JLabel
03272  */
03273 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03274 private javax.swing.JLabel getDiverLabel() {
03275     if (ivjDiverLabel == null) {
03276         try {
03277             ivjDiverLabel = new javax.swing.JLabel();
03278             ivjDiverLabel.setName("DiverLabel");
03279             ivjDiverLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/divergt.jpg")));
03280             ivjDiverLabel.setText("");
03281             ivjDiverLabel.setBackground(new java.awt.Color(204,204,255));
03282             ivjDiverLabel.setForeground(java.awt.Color.black);
03283             // user code begin {1}
03284             // user code end
03285         } catch (java.lang.Throwable ivjExc) {
03286             // user code begin {2}
03287             // user code end
03288             handleException(ivjExc);
03289         }
03290     }
03291     return ivjDiverLabel;
03292 }
03293 /**
03294  * Return the DiverPredCheckBox property value.
03295  * @return javax.swing.JCheckBox
03296  */
03297 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03298 private javax.swing.JCheckBox getDiverPredCheckBox() {
03299     if (ivjDiverPredCheckBox == null) {
03300         try {
03301             ivjDiverPredCheckBox = new javax.swing.JCheckBox();
03302             ivjDiverPredCheckBox.setName("DiverPredCheckBox");
03303             ivjDiverPredCheckBox.setText("");
03304             ivjDiverPredCheckBox.setBackground(new java.awt.Color(204,204,255));
03305             // user code begin {1}
03306             // user code end
03307         } catch (java.lang.Throwable ivjExc) {
03308             // user code begin {2}
03309             // user code end
03310             handleException(ivjExc);
03311         }
03312     }
03313     return ivjDiverPredCheckBox;
03314 }
03315 /**
03316  * Return the DiverSuccCheckBox property value.
03317  * @return javax.swing.JCheckBox
03318  */
03319 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03320 private javax.swing.JCheckBox getDiverSuccCheckBox() {
03321     if (ivjDiverSuccCheckBox == null) {
03322         try {
03323             ivjDiverSuccCheckBox = new javax.swing.JCheckBox();
03324             ivjDiverSuccCheckBox.setName("DiverSuccCheckBox");
03325             ivjDiverSuccCheckBox.setText("");
03326             ivjDiverSuccCheckBox.setBackground(new java.awt.Color(204,204,255));
03327             // user code begin {1}
03328             // user code end
03329         } catch (java.lang.Throwable ivjExc) {
03330             // user code begin {2}
03331             // user code end
03332             handleException(ivjExc);
03333         }
03334     }
03335     return ivjDiverSuccCheckBox;
03336 }
03337 /**
03338  * Return the JLabel1 property value.
03339  * @return javax.swing.JLabel
03340  */
03341 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03342 private javax.swing.JLabel getDpredLabel() {
03343     if (ivjDpredLabel == null) {
03344         try {
03345             ivjDpredLabel = new javax.swing.JLabel();
03346             ivjDpredLabel.setName("DpredLabel");
03347             ivjDpredLabel.setFont(new java.awt.Font("dialog.plain", 0, 12));
03348             ivjDpredLabel.setText("pred");
03349             ivjDpredLabel.setForeground(java.awt.Color.black);
03350             ivjDpredLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
03351             // user code begin {1}
03352             // user code end
03353         } catch (java.lang.Throwable ivjExc) {
03354             // user code begin {2}
03355             // user code end
03356             handleException(ivjExc);
03357         }
03358     }
03359     return ivjDpredLabel;
03360 }
03361 /**
03362  * Return the JLabel2 property value.
03363  * @return javax.swing.JLabel
03364  */
03365 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03366 private javax.swing.JLabel getDsuccLabel() {
03367     if (ivjDsuccLabel == null) {
03368         try {
03369             ivjDsuccLabel = new javax.swing.JLabel();
03370             ivjDsuccLabel.setName("DsuccLabel");
03371             ivjDsuccLabel.setText("succ");
03372             ivjDsuccLabel.setForeground(java.awt.Color.black);
03373             ivjDsuccLabel.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
03374             ivjDsuccLabel.setFont(new java.awt.Font("dialog.plain", 0, 12));
03375             ivjDsuccLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
03376             // user code begin {1}
03377             // user code end
03378         } catch (java.lang.Throwable ivjExc) {
03379             // user code begin {2}
03380             // user code end
03381             handleException(ivjExc);
03382         }
03383     }
03384     return ivjDsuccLabel;
03385 }
03386 /**
03387  * Return the JPanel5 property value.
03388  * @return javax.swing.JPanel
03389  */
03390 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03391 private javax.swing.JPanel getEmptyPanel() {
03392     if (ivjEmptyPanel == null) {
03393         try {
03394             ivjEmptyPanel = new javax.swing.JPanel();
03395             ivjEmptyPanel.setName("EmptyPanel");
03396             ivjEmptyPanel.setLayout(null);
03397             ivjEmptyPanel.setBackground(new java.awt.Color(204,204,255));
03398             // user code begin {1}
03399             // user code end
03400         } catch (java.lang.Throwable ivjExc) {
03401             // user code begin {2}
03402             // user code end
03403             handleException(ivjExc);
03404         }
03405     }
03406     return ivjEmptyPanel;
03407 }
03408 /**
03409  * 
03410  * @return java.util.HashSet
03411  * @param mda edu.ksu.cis.bandera.annotation.MethodDeclarationAnnotation
03412  * @param monitorPairList ca.mcgill.sable.util.List
03413  */
03414 private Hashtable getExitMonitorAnnotations(Annotation mda, List monitorPairList) {
03415     Hashtable anns = new Hashtable();
03416     for (Iterator monitorIt = monitorPairList.iterator(); monitorIt.hasNext();) {
03417         MonitorPair mp = (MonitorPair) monitorIt.next();
03418         Annotation bodyAnnotation = mp.getSynchroBodyAnn();
03419         Vector bodyAnns = bodyAnnotation.getAllAnnotations(true);
03420         int indexOfLast = bodyAnns.lastIndexOf(bodyAnns.lastElement());
03421         Annotation exitMonitorAnn = (Annotation) bodyAnns.get(indexOfLast - 1);
03422         //Stmt endSynchroStmt = mp.getEndSynchroStmt(); this will get a throw statement
03423         if (exitMonitorAnn != null)
03424             anns.put(exitMonitorAnn, mp);
03425     }
03426     return anns;
03427 }
03428 /**
03429  * Return the ForwardSliceToolBarButton2 property value.
03430  * @return javax.swing.JButton
03431  */
03432 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03433 private javax.swing.JButton getForwardSliceToolBarButton() {
03434     if (ivjForwardSliceToolBarButton == null) {
03435         try {
03436             ivjForwardSliceToolBarButton = new javax.swing.JButton();
03437             ivjForwardSliceToolBarButton.setName("ForwardSliceToolBarButton");
03438             ivjForwardSliceToolBarButton.setBorder(new javax.swing.border.CompoundBorder());
03439             ivjForwardSliceToolBarButton.setText("F-Slice");
03440             ivjForwardSliceToolBarButton.setBackground(new java.awt.Color(204,204,255));
03441             ivjForwardSliceToolBarButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
03442             ivjForwardSliceToolBarButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
03443             ivjForwardSliceToolBarButton.setIcon(null);
03444             ivjForwardSliceToolBarButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
03445             ivjForwardSliceToolBarButton.setEnabled(false);
03446             // user code begin {1}
03447             // user code end
03448         } catch (java.lang.Throwable ivjExc) {
03449             // user code begin {2}
03450             // user code end
03451             handleException(ivjExc);
03452         }
03453     }
03454     return ivjForwardSliceToolBarButton;
03455 }
03456 /**
03457  * Return the ForwardToolBarButton property value.
03458  * @return javax.swing.JButton
03459  */
03460 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03461 private javax.swing.JButton getForwardToolBarButton() {
03462     if (ivjForwardToolBarButton == null) {
03463         try {
03464             ivjForwardToolBarButton = new javax.swing.JButton();
03465             ivjForwardToolBarButton.setName("ForwardToolBarButton");
03466             ivjForwardToolBarButton.setBorder(new javax.swing.border.CompoundBorder());
03467             ivjForwardToolBarButton.setText("forward");
03468             ivjForwardToolBarButton.setBackground(new java.awt.Color(204,204,255));
03469             ivjForwardToolBarButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
03470             ivjForwardToolBarButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
03471             ivjForwardToolBarButton.setIcon(null);
03472             ivjForwardToolBarButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
03473             ivjForwardToolBarButton.setEnabled(false);
03474             // user code begin {1}
03475             // user code end
03476         } catch (java.lang.Throwable ivjExc) {
03477             // user code begin {2}
03478             // user code end
03479             handleException(ivjExc);
03480         }
03481     }
03482     return ivjForwardToolBarButton;
03483 }
03484 /**
03485  * Return the JComboBox1 property value.
03486  * @return javax.swing.JComboBox
03487  */
03488 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03489 public javax.swing.JComboBox getHistoryComboBox() {
03490     if (ivjHistoryComboBox == null) {
03491         try {
03492             ivjHistoryComboBox = new javax.swing.JComboBox();
03493             ivjHistoryComboBox.setName("HistoryComboBox");
03494             ivjHistoryComboBox.setBackground(java.awt.Color.white);
03495             // user code begin {1}
03496             // user code end
03497         } catch (java.lang.Throwable ivjExc) {
03498             // user code begin {2}
03499             // user code end
03500             handleException(ivjExc);
03501         }
03502     }
03503     return ivjHistoryComboBox;
03504 }
03505 private Set getInterClassEnterMonitors(SootMethod currentMd, Set exitMonitors) {
03506     Set enterStmtTreeNodeSet = new ArraySet();
03507     for (Iterator sootIt = Slicer.sootMethodInfoMap.keySet().iterator(); sootIt.hasNext();) {
03508         SootMethod sootMethod = (SootMethod) sootIt.next();
03509         if (sootMethod.equals(currentMd))
03510             continue;
03511         MethodInfo methodInfo = (MethodInfo) Slicer.sootMethodInfoMap.get(sootMethod);
03512         Set enterStmtSet = enterSetEffectedBy(methodInfo, exitMonitors);
03513         Annotation mda = null;
03514         if (!enterStmtSet.isEmpty()) {
03515             try {
03516                 mda = (Annotation) CompilationManager.getAnnotationManager().getAnnotation(methodInfo.sootClass, methodInfo.sootMethod);
03517             } catch (Exception ex) {
03518                 System.out.println("There is an exception in geting Annotation");
03519             }
03520         }
03521         for (Iterator enterIt = enterStmtSet.iterator(); enterIt.hasNext();) {
03522             Stmt enterStmt = (Stmt) enterIt.next();
03523             Annotation enterAnn = null;
03524             try {
03525                 enterAnn = mda.getContainingAnnotation(enterStmt);
03526             } catch (AnnotationException ae) {
03527                 System.out.println("there is an AnnotationException! And enterMonitorStmtAnnotation may be null");
03528             }
03529             if (enterAnn != null)
03530                 enterStmtTreeNodeSet.add(new StmtTreeNode(methodInfo.sootClass, mda, enterAnn));
03531         }
03532     }
03533     return enterStmtTreeNodeSet;
03534 }
03535 /**
03536  * Insert the method's description here.
03537  * Creation date: (00-6-14 21:15:04)
03538  * @return java.util.HashSet
03539  * @param currentMd ca.mcgill.sable.soot.SootMethod
03540  * @param notifySynStmt edu.ksu.cis.bandera.pdgslicer.SynchroStmt
03541  */
03542 private Set getInterClassWaits(SootMethod currentMd, SynchroStmt notifySynStmt) {
03543     Set waitStmtTreeNodeSet = new ArraySet();
03544     for (Iterator sootIt = Slicer.sootMethodInfoMap.keySet().iterator(); sootIt.hasNext();) {
03545         SootMethod sootMethod = (SootMethod) sootIt.next();
03546         if (sootMethod.equals(currentMd))
03547             continue;
03548         MethodInfo methodInfo = (MethodInfo) Slicer.sootMethodInfoMap.get(sootMethod);
03549         Set waitStmtSet = waitSetEffectedBy(methodInfo, notifySynStmt);
03550         Annotation mda = null;
03551         if (!waitStmtSet.isEmpty()) {
03552             try {
03553                 mda = (Annotation) CompilationManager.getAnnotationManager().getAnnotation(methodInfo.sootClass, methodInfo.sootMethod);
03554             } catch (Exception ex) {
03555                 System.out.println("There is an exception in geting Annotation");
03556             }
03557         }
03558         for (Iterator waitIt = waitStmtSet.iterator(); waitIt.hasNext();) {
03559             Stmt waitStmt = (Stmt) waitIt.next();
03560             Annotation waitAnn = null;
03561             try {
03562                 waitAnn = mda.getContainingAnnotation(waitStmt);
03563             } catch (AnnotationException ae) {
03564                 System.out.println("there is an AnnotationException! And enterMonitorStmtAnnotation may be null");
03565             }
03566             if (waitAnn != null)
03567                 waitStmtTreeNodeSet.add(new StmtTreeNode(methodInfo.sootClass, mda, waitAnn));
03568         }
03569     }
03570     return waitStmtTreeNodeSet;
03571 }
03572 private DefaultMutableTreeNode getInterferDependAnns(boolean isPred) {
03573     DefaultMutableTreeNode interferRoot = null;
03574     if (isPred)
03575         interferRoot = new DefaultMutableTreeNode("Predecessors");
03576     else
03577         interferRoot = new DefaultMutableTreeNode("Successors");
03578     Set interferNodesForOneNode = new ArraySet();
03579     Annotation mda;
03580     if (currentNode instanceof StmtTreeNode) {
03581         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
03582         mda = startTreeNode.currentMethodDeclarationAnnotation;
03583         currentMethodDecAnn = mda;
03584         if (isPred)
03585             interferNodesForOneNode = getInterferPredNodesFor(mda, startTreeNode.currentStmtAnnotation);
03586         else
03587              {
03588                 SootMethod sm = null;
03589                 if (mda instanceof MethodDeclarationAnnotation)
03590                     sm = ((MethodDeclarationAnnotation) mda).getSootMethod();
03591                 else
03592                     if (mda instanceof ConstructorDeclarationAnnotation)
03593                         sm = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03594                 interferNodesForOneNode = getInterferSuccNodesFor(sm, startTreeNode.currentStmtAnnotation);
03595             }
03596     } else
03597         if (currentNode instanceof Annotation) {
03598             mda = currentMethodDecAnn;
03599             if (isPred)
03600                 interferNodesForOneNode = getInterferPredNodesFor(mda, (Annotation) currentNode);
03601             else
03602             {
03603                     SootMethod sm = null;
03604                     if (mda instanceof MethodDeclarationAnnotation)
03605                         sm = ((MethodDeclarationAnnotation) mda).getSootMethod();
03606                     else
03607                         if (mda instanceof ConstructorDeclarationAnnotation)
03608                             sm = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03609                     interferNodesForOneNode = getInterferSuccNodesFor(sm, (Annotation) currentNode);
03610                 }
03611         } else
03612             return interferRoot;
03613     if (interferNodesForOneNode.isEmpty())
03614         return interferRoot;
03615     Hashtable interferNodesForCurrentLevel = new Hashtable();
03616     interferNodesForCurrentLevel.put(interferRoot, interferNodesForOneNode);
03617     Hashtable interferNodesForNextLevel;
03618     do {
03619         interferNodesForNextLevel = new Hashtable();
03620         for (java.util.Iterator interferIt = interferNodesForCurrentLevel.keySet().iterator(); interferIt.hasNext();) {
03621             DefaultMutableTreeNode currentRootNode = (DefaultMutableTreeNode) interferIt.next();
03622             Set interferNodes = (Set) interferNodesForCurrentLevel.get(currentRootNode);
03623             //add ddAnnotations to currentRootNode as children of it
03624             for (Iterator ifrIt = interferNodes.iterator(); ifrIt.hasNext();) {
03625                 StmtTreeNode interferNode = (StmtTreeNode) ifrIt.next();
03626                 if (!treePathContains(currentRootNode, interferNode)) {
03627                     DefaultMutableTreeNode interferTreeNode = new DefaultMutableTreeNode(interferNode);
03628                     currentRootNode.add(interferTreeNode);
03629                     if (isPred)
03630                         interferNodesForOneNode = getInterferPredNodesFor(mda, interferNode.currentStmtAnnotation);
03631                     else
03632                          {
03633                             SootMethod sm = null;
03634                             if (mda instanceof MethodDeclarationAnnotation)
03635                                 sm = ((MethodDeclarationAnnotation) mda).getSootMethod();
03636                             else
03637                                 if (mda instanceof ConstructorDeclarationAnnotation)
03638                                     sm = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03639                             interferNodesForOneNode = getInterferSuccNodesFor(sm, interferNode.currentStmtAnnotation);
03640                         }
03641                     if (!interferNodesForOneNode.isEmpty())
03642                         interferNodesForNextLevel.put(interferTreeNode, interferNodesForOneNode);
03643                 }
03644             }
03645         }
03646         interferNodesForCurrentLevel = interferNodesForNextLevel;
03647     } while (!interferNodesForNextLevel.isEmpty());
03648     return interferRoot;
03649 }
03650 /**
03651  * Return the InterferLabel property value.
03652  * @return javax.swing.JLabel
03653  */
03654 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03655 private javax.swing.JLabel getInterferLabel() {
03656     if (ivjInterferLabel == null) {
03657         try {
03658             ivjInterferLabel = new javax.swing.JLabel();
03659             ivjInterferLabel.setName("InterferLabel");
03660             ivjInterferLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/interfer.jpg")));
03661             ivjInterferLabel.setText("");
03662             ivjInterferLabel.setBackground(new java.awt.Color(204,204,255));
03663             ivjInterferLabel.setForeground(java.awt.Color.black);
03664             // user code begin {1}
03665             // user code end
03666         } catch (java.lang.Throwable ivjExc) {
03667             // user code begin {2}
03668             // user code end
03669             handleException(ivjExc);
03670         }
03671     }
03672     return ivjInterferLabel;
03673 }
03674 /**
03675  * Return the InterferPredCheckBox property value.
03676  * @return javax.swing.JCheckBox
03677  */
03678 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03679 private javax.swing.JCheckBox getInterferPredCheckBox() {
03680     if (ivjInterferPredCheckBox == null) {
03681         try {
03682             ivjInterferPredCheckBox = new javax.swing.JCheckBox();
03683             ivjInterferPredCheckBox.setName("InterferPredCheckBox");
03684             ivjInterferPredCheckBox.setText("");
03685             ivjInterferPredCheckBox.setBackground(new java.awt.Color(204,204,255));
03686             // user code begin {1}
03687             // user code end
03688         } catch (java.lang.Throwable ivjExc) {
03689             // user code begin {2}
03690             // user code end
03691             handleException(ivjExc);
03692         }
03693     }
03694     return ivjInterferPredCheckBox;
03695 }
03696 private Set getInterferPredNodesFor(Annotation mda, Annotation stmtAnnotation) {
03697     Set dependAnnotations = new ArraySet();
03698     SootMethod sootMethod = null;
03699     if (mda instanceof MethodDeclarationAnnotation)
03700         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
03701     else
03702         if (mda instanceof ConstructorDeclarationAnnotation)
03703             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03704     Map sootMap = Slicer.sootMethodInfoMap;
03705     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
03706     BuildPDG methodPDG = methodInfo.methodPDG;
03707     Map interferDependMap = methodPDG.getInterferenceMap();
03708     if (interferDependMap == null)
03709         return dependAnnotations;
03710     Stmt stmtsInAnnotation[];
03711     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
03712         stmtsInAnnotation = new Stmt[1];
03713         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
03714     } else
03715         if (stmtAnnotation instanceof ConditionalAnnotation) {
03716             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
03717         } else
03718             if (stmtAnnotation instanceof ControlFlowAnnotation) {
03719                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
03720             } else
03721                 stmtsInAnnotation = stmtAnnotation.getStatements();
03722     for (int i = 0; i < stmtsInAnnotation.length; i++) {
03723         if (!interferDependMap.containsKey(stmtsInAnnotation[i]))
03724             continue;
03725         List interferDependStmt = (List) interferDependMap.get(stmtsInAnnotation[i]);
03726         for (Iterator interferIt = interferDependStmt.iterator(); interferIt.hasNext();) {
03727             InterferStmt interferStmt = (InterferStmt) interferIt.next();
03728             MethodInfo interferStmtMdInfo = interferStmt.methodInfo;
03729             Stmt interStmt = interferStmt.interferStmt;
03730             Annotation interStmtAnnotation = null;
03731             /*
03732             MethodDeclarationAnnotation interferMdDec = null;
03733             try {
03734             interferMdDec = (MethodDeclarationAnnotation) Slicer.annManagerForSlicer.getAnnotation(interferStmtMdInfo.sootClass, interferStmtMdInfo.sootMethod);
03735             } catch (Exception ex) {
03736             // in this case sootMethod must be init method in Jimple, and there is no constructor in the source program
03737             // and this interfer def stmt must be an assignment in the field declaration
03738             Value definedValue = null;
03739             Set interferVars = interferStmt.interferVars;
03740             for (Iterator valueIt = interferVars.iterator(); valueIt.hasNext();) {
03741             //suppose there is only on defined value;
03742             definedValue = (Value) valueIt.next();
03743             }
03744             if (definedValue instanceof InstanceFieldRef) {
03745             InstanceFieldRef insFdRef = (InstanceFieldRef) definedValue;
03746             SootField sootField = insFdRef.getField();
03747             interStmtAnnotation = Slicer.annManagerForSlicer.getAnnotation(interferStmtMdInfo.sootClass, sootField);
03748             }
03749             }
03750             if (interStmtAnnotation == null) {
03751             */
03752             try {
03753                 interStmtAnnotation = Slicer.annManagerForSlicer.getContainingAnnotation(interferStmtMdInfo.sootClass, interferStmtMdInfo.sootMethod, interStmt);
03754             } catch (AnnotationException ae) {
03755                 System.out.println("there is an AnnotationException! And interReadyStmtAnnotation may be null");
03756             }
03757             //}
03758             if (!interStmtAnnotation.equals(stmtAnnotation)) {
03759                 if (!interStmtAnnotation.toString().equals("")) {
03760                     Annotation interferMdDec = Slicer.annManagerForSlicer.getAnnotation(interferStmtMdInfo.sootClass, interferStmtMdInfo.sootMethod);
03761                     dependAnnotations.add(new StmtTreeNode(interferStmtMdInfo.sootClass, interferMdDec, interStmtAnnotation));
03762                 }
03763             }
03764         }
03765     }
03766     return dependAnnotations;
03767 }
03768 /**
03769  * Return the InterferSuccCheckBox property value.
03770  * @return javax.swing.JCheckBox
03771  */
03772 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03773 private javax.swing.JCheckBox getInterferSuccCheckBox() {
03774     if (ivjInterferSuccCheckBox == null) {
03775         try {
03776             ivjInterferSuccCheckBox = new javax.swing.JCheckBox();
03777             ivjInterferSuccCheckBox.setName("InterferSuccCheckBox");
03778             ivjInterferSuccCheckBox.setText("");
03779             ivjInterferSuccCheckBox.setBackground(new java.awt.Color(204,204,255));
03780             // user code begin {1}
03781             // user code end
03782         } catch (java.lang.Throwable ivjExc) {
03783             // user code begin {2}
03784             // user code end
03785             handleException(ivjExc);
03786         }
03787     }
03788     return ivjInterferSuccCheckBox;
03789 }
03790 private Set getInterferSuccNodesFor(SootMethod currentMd, Annotation stmtAnnotation) {
03791     Set dependAnnotations = new ArraySet();
03792     if ((stmtAnnotation instanceof SynchronizedStmtAnnotation) || (stmtAnnotation instanceof ConditionalAnnotation) || (stmtAnnotation instanceof ControlFlowAnnotation))
03793         return dependAnnotations;
03794     Map sootMap = Slicer.sootMethodInfoMap;
03795     Stmt stmtsInAnnotation[] = stmtAnnotation.getStatements();
03796     Set stmtSetInAnnotation = new ArraySet();
03797     for (int i = 0; i < stmtsInAnnotation.length; i++)
03798         stmtSetInAnnotation.add(stmtsInAnnotation[i]);
03799     for (Iterator sootIt = sootMap.keySet().iterator(); sootIt.hasNext();) {
03800         SootMethod sootMethod = (SootMethod) sootIt.next();
03801         if (sootMethod.equals(currentMd))
03802             continue;
03803         MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
03804         BuildPDG methodPDG = methodInfo.methodPDG;
03805         Map interferDependMap = methodPDG.getInterferenceMap();
03806         if (interferDependMap == null)
03807             continue;
03808         Set stmtSet = stmtSetEffectedBy(interferDependMap, stmtSetInAnnotation);
03809         Annotation mda = null;
03810         if (!stmtSet.isEmpty()) {
03811             try {
03812                 mda = (Annotation) CompilationManager.getAnnotationManager().getAnnotation(methodInfo.sootClass, methodInfo.sootMethod);
03813             } catch (Exception ex) {
03814             }
03815         }
03816         for (Iterator stmtIt = stmtSet.iterator(); stmtIt.hasNext();) {
03817             Stmt stmt = (Stmt) stmtIt.next();
03818             Annotation interStmtAnnotation = null;
03819             try {
03820                 interStmtAnnotation = mda.getContainingAnnotation(stmt);
03821             } catch (AnnotationException ae) {
03822                 System.out.println("there is an AnnotationException! And interReadyStmtAnnotation may be null");
03823             }
03824             if (!interStmtAnnotation.equals(stmtAnnotation))
03825                 if (!interStmtAnnotation.toString().equals("")) {
03826                     dependAnnotations.add(new StmtTreeNode(methodInfo.sootClass, mda, interStmtAnnotation));
03827                 }
03828         }
03829     }
03830     return dependAnnotations;
03831 }
03832 private Set getInterReadyNodesFor(Annotation mda, Annotation stmtAnnotation) {
03833     Set dependAnnotations = new ArraySet();
03834     SootMethod sootMethod = null;
03835     if (mda instanceof MethodDeclarationAnnotation)
03836         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
03837     else
03838         if (mda instanceof ConstructorDeclarationAnnotation)
03839             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03840     Map sootMap = Slicer.sootMethodInfoMap;
03841     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
03842     BuildPDG methodPDG = methodInfo.methodPDG;
03843     Map readyDependMap = methodPDG.getReadyDependMap();
03844     if (readyDependMap == null)
03845         return dependAnnotations;
03846     Stmt[] stmtsInAnnotation;
03847     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
03848         stmtsInAnnotation = new Stmt[1];
03849         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
03850     } else
03851         if (stmtAnnotation instanceof ConditionalAnnotation) {
03852             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
03853         } else
03854             if (stmtAnnotation instanceof ControlFlowAnnotation) {
03855                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
03856             } else
03857                 stmtsInAnnotation = stmtAnnotation.getStatements();
03858     for (int i = 0; i < stmtsInAnnotation.length; i++) {
03859         if (!readyDependMap.containsKey(stmtsInAnnotation[i]))
03860             continue;
03861         List readyDependStmt = (List) readyDependMap.get(stmtsInAnnotation[i]);
03862         for (Iterator readyIt = readyDependStmt.iterator(); readyIt.hasNext();) {
03863             ReadyDependStmt readyStmt = (ReadyDependStmt) readyIt.next();
03864             MethodInfo readyStmtMdInfo = readyStmt.methodInfo;
03865             Stmt interReadyStmt = readyStmt.readyOnStmt;
03866             Annotation readyStmtAnnotation = null;
03867             //MethodDeclarationAnnotation readyMdDec = (MethodDeclarationAnnotation) Slicer.annManagerForSlicer.getAnnotation(readyStmtMdInfo.sootClass, readyStmtMdInfo.sootMethod);
03868             if (interReadyStmt instanceof ExitMonitorStmt) {
03869                 //reassign readyStmtAnnotation
03870 
03871                 LockAnalysis lockAnalysisForReadyStmt = readyStmtMdInfo.methodPDG.getLockAnalysis();
03872                 MonitorPair mp = lockAnalysisForReadyStmt.getMonitorPair(interReadyStmt);
03873                 Annotation bodyAnnotation = mp.getSynchroBodyAnn();
03874                 Vector bodyAnns = bodyAnnotation.getAllAnnotations(true);
03875                 int indexOfLast = bodyAnns.lastIndexOf(bodyAnns.lastElement());
03876                 readyStmtAnnotation = (Annotation) bodyAnns.get(indexOfLast - 1);
03877             } else {
03878                 try {
03879                     readyStmtAnnotation = Slicer.annManagerForSlicer.getContainingAnnotation(readyStmtMdInfo.sootClass, readyStmtMdInfo.sootMethod,interReadyStmt);
03880                 } catch (AnnotationException ae) {
03881                     System.out.println("there is an AnnotationException! And interReadyStmtAnnotation may be null");
03882                 }
03883             }
03884             if (!readyStmtAnnotation.toString().equals("")) {
03885                 Annotation readyMdDec = Slicer.annManagerForSlicer.getAnnotation(readyStmtMdInfo.sootClass, readyStmtMdInfo.sootMethod);
03886                 dependAnnotations.add(new StmtTreeNode(readyStmtMdInfo.sootClass, readyMdDec, readyStmtAnnotation));
03887             }
03888         }
03889     }
03890     return dependAnnotations;
03891 }
03892 /**
03893  * Return the JButton3 property value.
03894  * @return javax.swing.JButton
03895  */
03896 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03897 private javax.swing.JButton getNopredButton() {
03898     if (ivjNopredButton == null) {
03899         try {
03900             ivjNopredButton = new javax.swing.JButton();
03901             ivjNopredButton.setName("NopredButton");
03902             ivjNopredButton.setBorder(new javax.swing.border.CompoundBorder());
03903             ivjNopredButton.setText("No pred");
03904             ivjNopredButton.setBackground(new java.awt.Color(204,204,255));
03905             ivjNopredButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
03906             ivjNopredButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
03907             // user code begin {1}
03908             // user code end
03909         } catch (java.lang.Throwable ivjExc) {
03910             // user code begin {2}
03911             // user code end
03912             handleException(ivjExc);
03913         }
03914     }
03915     return ivjNopredButton;
03916 }
03917 /**
03918  * Return the JButton4 property value.
03919  * @return javax.swing.JButton
03920  */
03921 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03922 private javax.swing.JButton getNosuccButton() {
03923     if (ivjNosuccButton == null) {
03924         try {
03925             ivjNosuccButton = new javax.swing.JButton();
03926             ivjNosuccButton.setName("NosuccButton");
03927             ivjNosuccButton.setBorder(new javax.swing.border.CompoundBorder());
03928             ivjNosuccButton.setText("No succ");
03929             ivjNosuccButton.setBackground(new java.awt.Color(204,204,255));
03930             ivjNosuccButton.setFont(new java.awt.Font("dialog.plain", 0, 12));
03931             ivjNosuccButton.setMargin(new java.awt.Insets(0, 2, 0, 2));
03932             // user code begin {1}
03933             // user code end
03934         } catch (java.lang.Throwable ivjExc) {
03935             // user code begin {2}
03936             // user code end
03937             handleException(ivjExc);
03938         }
03939     }
03940     return ivjNosuccButton;
03941 }
03942 /**
03943  * 
03944  * @return ca.mcgill.sable.util.Set
03945  * @param notifyStmtList ca.mcgill.sable.util.List
03946  */
03947  private Hashtable getNotifyWaitStmtAnnotations(Annotation mda, List nwStmtList) {
03948     Hashtable anns = new Hashtable();
03949     for (Iterator nwStmtIt = nwStmtList.iterator(); nwStmtIt.hasNext();) {
03950         SynchroStmt nwSynStmt = (SynchroStmt) nwStmtIt.next();
03951         Stmt nwJimpleStmt = nwSynStmt.getWaitNotify();
03952         Annotation nwAnn = null;
03953         try {
03954             nwAnn = mda.getContainingAnnotation(nwJimpleStmt);
03955         } catch (AnnotationException ae) {
03956             System.out.println("there is an AnnotationException! And notifyStmtAnnotation may be null");
03957         }
03958         if (nwAnn != null)
03959             anns.put(nwAnn, nwSynStmt);
03960     }
03961     return anns;
03962 }
03963 /**
03964  * Return the OperationPanel property value.
03965  * @return javax.swing.JPanel
03966  */
03967 /* WARNING: THIS METHOD WILL BE REGENERATED. */
03968 private javax.swing.JPanel getOperationPanel() {
03969     if (ivjOperationPanel == null) {
03970         try {
03971             ivjOperationPanel = new javax.swing.JPanel();
03972             ivjOperationPanel.setName("OperationPanel");
03973             ivjOperationPanel.setPreferredSize(new java.awt.Dimension(0, 235));
03974             ivjOperationPanel.setLayout(new java.awt.BorderLayout());
03975             ivjOperationPanel.setBackground(new java.awt.Color(204,204,255));
03976             getOperationPanel().add(getToolBarPanel(), "North");
03977             getOperationPanel().add(getCheckBoxesPanel(), "Center");
03978             // user code begin {1}
03979             // user code end
03980         } catch (java.lang.Throwable ivjExc) {
03981             // user code begin {2}
03982             // user code end
03983             handleException(ivjExc);
03984         }
03985     }
03986     return ivjOperationPanel;
03987 }
03988 private Set getReadyDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation) {
03989     Set dependAnnotations = new ArraySet();
03990     SootMethod sootMethod = null;
03991     if (mda instanceof MethodDeclarationAnnotation)
03992         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
03993     else
03994         if (mda instanceof ConstructorDeclarationAnnotation)
03995             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
03996     Map sootMap = Slicer.sootMethodInfoMap;
03997     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
03998     StmtList stmtList = methodInfo.originalStmtList;
03999     BuildPDG methodPDG = methodInfo.methodPDG;
04000     LockAnalysis lockAnalysis = methodPDG.getLockAnalysis();
04001     if (lockAnalysis == null)
04002         return dependAnnotations;
04003     Stmt stmtsInAnnotation[];
04004     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
04005         stmtsInAnnotation = new Stmt[1];
04006         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
04007     } else
04008         if (stmtAnnotation instanceof ConditionalAnnotation) {
04009             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
04010         } else
04011             if (stmtAnnotation instanceof ControlFlowAnnotation) {
04012                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
04013             } else
04014                 stmtsInAnnotation = stmtAnnotation.getStatements();
04015     //List waitStmtList = lockAnalysis.getWaitStmtList();
04016     //List notifyStmtList = lockAnalysis.getNotifyStmtList();
04017     for (int i = 0; i < stmtsInAnnotation.length; i++) {
04018         BitSet waitSet = lockAnalysis.readyDependOnWaits(stmtsInAnnotation[i]);
04019         Set waitStmtSet = SetUtil.bitSetToStmtSet(waitSet, stmtList);
04020         //Hashtable waitNotifyPairs = SlicingMethod.waitNotifyPairsWithinMd(waitSet, waitStmtList, notifyStmtList, stmtList);
04021         for (Iterator waitIt = waitStmtSet.iterator(); waitIt.hasNext();) {
04022             Stmt waitStmt = (Stmt) waitIt.next();
04023             Annotation waitAnn = null;
04024             try {
04025                 waitAnn = mda.getContainingAnnotation(waitStmt);
04026             } catch (AnnotationException ae) {
04027                 System.out.println("there is an AnnotationException! And enterMonitorStmtAnnotation may be null");
04028             }
04029             if (waitAnn != null)
04030                 dependAnnotations.add(waitAnn);
04031         }
04032     }
04033     return dependAnnotations;
04034 }
04035 private DefaultMutableTreeNode getReadyDependAnns(boolean isPred) {
04036     if (!isPred)
04037         return getReadySuccDependAnns();
04038     DefaultMutableTreeNode readyRoot = new DefaultMutableTreeNode("Predecessors");
04039     Set readyAnnotationsForOneNode;
04040     Annotation mda;
04041     Annotation currentAnn;
04042     if (currentNode instanceof StmtTreeNode) {
04043         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
04044         mda = startTreeNode.currentMethodDeclarationAnnotation;
04045         currentMethodDecAnn = mda;
04046         currentAnn = startTreeNode.currentStmtAnnotation;
04047         readyAnnotationsForOneNode = getReadyDependAnnotationsFor(mda, currentAnn);
04048     } else
04049         if (currentNode instanceof Annotation) {
04050             mda = currentMethodDecAnn;
04051             currentAnn = (Annotation) currentNode;
04052             readyAnnotationsForOneNode = getReadyDependAnnotationsFor(mda, currentAnn);
04053         } else
04054             return readyRoot;
04055     Hashtable waitAnnNode = new Hashtable();
04056     for (Iterator readyIt = readyAnnotationsForOneNode.iterator(); readyIt.hasNext();) {
04057         Annotation waitAnn = (Annotation) readyIt.next();
04058         DefaultMutableTreeNode waitNode = new DefaultMutableTreeNode(waitAnn);
04059         readyRoot.add(waitNode);
04060         waitAnnNode.put(waitAnn, waitNode);
04061         //add all notify annotations under the wait annotation
04062         /*
04063         Set notifyAnns = (Set) readyAnnotationsForOneNode.get(waitAnn);
04064         for (Iterator notifyIt = notifyAnns.iterator(); notifyIt.hasNext();) {
04065             Annotation notifyAnn = (Annotation) notifyIt.next();
04066             DefaultMutableTreeNode notifyNode = new DefaultMutableTreeNode(notifyAnn);
04067             waitNode.add(notifyNode);
04068         }
04069         */
04070     }
04071 
04072 
04073     //ready interclass
04074 
04075     Hashtable readyNodesForCurrentLevel = new Hashtable();
04076     if (waitAnnNode.isEmpty()) {
04077         //currentAnn may be wait stmt or entermonitor
04078         Set interReadyNodesForOneNode = getInterReadyNodesFor(mda, currentAnn);
04079         if (interReadyNodesForOneNode.isEmpty()) {
04080             //then currentAnn is not a wait stmt, neither entermonitor
04081             //if (readyAnnotationsForOneNode.isEmpty())
04082             return readyRoot;
04083         } else {
04084             // then currentAnn is a waitStmt or entermonitor
04085 
04086             readyNodesForCurrentLevel.put(readyRoot, interReadyNodesForOneNode);
04087         }
04088     } else {
04089         for (java.util.Iterator waitIt = waitAnnNode.keySet().iterator(); waitIt.hasNext();) {
04090             Annotation waitAnn = (Annotation) waitIt.next();
04091             Set interReadyNodesForOneNode = getInterReadyNodesFor(mda, waitAnn);
04092             readyNodesForCurrentLevel.put(waitAnnNode.get(waitAnn), interReadyNodesForOneNode);
04093         }
04094     }
04095     if (currentAnn instanceof SynchronizedStmtAnnotation) {
04096         Set interReadyNodesForRoot = getInterReadyNodesFor(mda, currentAnn);
04097         if (!interReadyNodesForRoot.isEmpty())
04098             readyNodesForCurrentLevel.put(readyRoot, interReadyNodesForRoot);
04099     }
04100     //end of ready interClass for wait
04101 
04102     Hashtable readyNodesForNextLevel;
04103     do {
04104         readyNodesForNextLevel = new Hashtable();
04105         for (java.util.Iterator readyIt = readyNodesForCurrentLevel.keySet().iterator(); readyIt.hasNext();) {
04106             DefaultMutableTreeNode currentRootNode = (DefaultMutableTreeNode) readyIt.next();
04107             Set readyNodes = (Set) readyNodesForCurrentLevel.get(currentRootNode);
04108             //add ddAnnotations to currentRootNode as children of it
04109             for (Iterator rdIt = readyNodes.iterator(); rdIt.hasNext();) {
04110                 StmtTreeNode rdNode = (StmtTreeNode) rdIt.next();
04111                 if (!treePathContains(currentRootNode, rdNode)) {
04112                     DefaultMutableTreeNode rdTreeNode = new DefaultMutableTreeNode(rdNode);
04113                     currentRootNode.add(rdTreeNode);
04114                     Set interReadyNodesForOneNode = getInterReadyNodesFor(rdNode.currentMethodDeclarationAnnotation, rdNode.currentStmtAnnotation);
04115                     if (!interReadyNodesForOneNode.isEmpty())
04116                         readyNodesForNextLevel.put(rdTreeNode, interReadyNodesForOneNode);
04117                 }
04118             }
04119         }
04120         readyNodesForCurrentLevel = readyNodesForNextLevel;
04121     } while (!readyNodesForNextLevel.isEmpty());
04122     return readyRoot;
04123 }
04124 /**
04125  * Return the ReadyLabel property value.
04126  * @return javax.swing.JLabel
04127  */
04128 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04129 private javax.swing.JLabel getReadyLabel() {
04130     if (ivjReadyLabel == null) {
04131         try {
04132             ivjReadyLabel = new javax.swing.JLabel();
04133             ivjReadyLabel.setName("ReadyLabel");
04134             ivjReadyLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/ready.jpg")));
04135             ivjReadyLabel.setText("");
04136             ivjReadyLabel.setBackground(new java.awt.Color(204,204,255));
04137             ivjReadyLabel.setForeground(java.awt.Color.black);
04138             // user code begin {1}
04139             // user code end
04140         } catch (java.lang.Throwable ivjExc) {
04141             // user code begin {2}
04142             // user code end
04143             handleException(ivjExc);
04144         }
04145     }
04146     return ivjReadyLabel;
04147 }
04148 /**
04149  * Return the ReadyPredCheckBox property value.
04150  * @return javax.swing.JCheckBox
04151  */
04152 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04153 private javax.swing.JCheckBox getReadyPredCheckBox() {
04154     if (ivjReadyPredCheckBox == null) {
04155         try {
04156             ivjReadyPredCheckBox = new javax.swing.JCheckBox();
04157             ivjReadyPredCheckBox.setName("ReadyPredCheckBox");
04158             ivjReadyPredCheckBox.setText("");
04159             ivjReadyPredCheckBox.setBackground(new java.awt.Color(204,204,255));
04160             // user code begin {1}
04161             // user code end
04162         } catch (java.lang.Throwable ivjExc) {
04163             // user code begin {2}
04164             // user code end
04165             handleException(ivjExc);
04166         }
04167     }
04168     return ivjReadyPredCheckBox;
04169 }
04170 /**
04171  * Return the ReadySuccCheckBox property value.
04172  * @return javax.swing.JCheckBox
04173  */
04174 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04175 private javax.swing.JCheckBox getReadySuccCheckBox() {
04176     if (ivjReadySuccCheckBox == null) {
04177         try {
04178             ivjReadySuccCheckBox = new javax.swing.JCheckBox();
04179             ivjReadySuccCheckBox.setName("ReadySuccCheckBox");
04180             ivjReadySuccCheckBox.setText("");
04181             ivjReadySuccCheckBox.setBackground(new java.awt.Color(204,204,255));
04182             // user code begin {1}
04183             // user code end
04184         } catch (java.lang.Throwable ivjExc) {
04185             // user code begin {2}
04186             // user code end
04187             handleException(ivjExc);
04188         }
04189     }
04190     return ivjReadySuccCheckBox;
04191 }
04192 private Set getReadySuccDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation) {
04193     Set dependAnnotations = new ArraySet();
04194     SootMethod sootMethod = null;
04195     if (mda instanceof MethodDeclarationAnnotation)
04196         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
04197     else
04198         if (mda instanceof ConstructorDeclarationAnnotation)
04199             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
04200     Map sootMap = Slicer.sootMethodInfoMap;
04201     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
04202     StmtList stmtList = methodInfo.originalStmtList;
04203     BuildPDG methodPDG = methodInfo.methodPDG;
04204     LockAnalysis lockAnalysis = methodPDG.getLockAnalysis();
04205     if (lockAnalysis == null)
04206         return dependAnnotations;
04207 
04208     //
04209     //Stmt stmtsInAnnotation[] = stmtAnnotation.getStatements();
04210 
04211     // if stmtAnnotation is notify statement
04212 
04213     List notifyStmtList = lockAnalysis.getNotifyStmtList();
04214     List waitStmtList = lockAnalysis.getWaitStmtList();
04215     /*
04216     Hashtable notifyStmtAnnotations = getNotifyWaitStmtAnnotations(mda, notifyStmtList);
04217     if (notifyStmtAnnotations.containsKey(stmtAnnotation)) {
04218         //search for corresponding wait() within the method
04219         SynchroStmt notifySynStmt = (SynchroStmt) notifyStmtAnnotations.get(stmtAnnotation);
04220         Set waitSet = getCorrespondWait(mda, waitStmtList, notifySynStmt);
04221         dependAnnotations.addAll(waitSet);
04222         //serch for wait() intermethod
04223         Set interWaitSet = getInterClassWaits(sootMethod, notifySynStmt);
04224         dependAnnotations.addAll(interWaitSet);
04225         return dependAnnotations;
04226     }
04227     */
04228     // if stmtAnnotation is wait statement
04229     Hashtable waitStmtAnnotations = getNotifyWaitStmtAnnotations(mda, waitStmtList);
04230     if (waitStmtAnnotations.containsKey(stmtAnnotation)) {
04231         //add all reachable stmts from the wait to dependAnnotations
04232         SynchroStmt waitStmt = (SynchroStmt) waitStmtAnnotations.get(stmtAnnotation);
04233         Stmt waitJimpleStmt = waitStmt.getWaitNotify();
04234         BitSet reachableStmts = lockAnalysis.reachableStmtFrom(waitJimpleStmt);
04235         for (int j = 0; j < stmtList.size(); j++) {
04236             if (reachableStmts.get(j)) {
04237                 Stmt stmt = (Stmt) stmtList.get(j);
04238                 Annotation reachableStmtAnnotation = null;
04239                 try {
04240                     reachableStmtAnnotation = mda.getContainingAnnotation(stmt);
04241                 } catch (AnnotationException ae) {
04242                     System.out.println("there is an AnnotationException! And reachable StmtAnnotation may be null");
04243                 }
04244                 if (!reachableStmtAnnotation.equals(stmtAnnotation)) {
04245                     if (!reachableStmtAnnotation.toString().equals(""))
04246                         dependAnnotations.add(reachableStmtAnnotation);
04247                 }
04248             }
04249         }
04250         return dependAnnotations;
04251     }
04252     // if stmtAnnotation is exitmonitor
04253     List monitorPairList = lockAnalysis.getLockPairList();
04254     Hashtable exitMonitorAnnotations = getExitMonitorAnnotations(mda, monitorPairList);
04255     if (exitMonitorAnnotations.containsKey(stmtAnnotation)) {
04256         //search for the entermonitor inside the method
04257         MonitorPair mp = (MonitorPair) exitMonitorAnnotations.get(stmtAnnotation);
04258         Set exitMonitors = lockAnalysis.exitMonitorsIn(mp);
04259         Stmt enterMonitor = (Stmt) mp.getEnterMonitor();
04260         Annotation enterMonitorAnnotation = null;
04261         try {
04262             enterMonitorAnnotation = mda.getContainingAnnotation(enterMonitor);
04263         } catch (AnnotationException ae) {
04264             System.out.println("there is an AnnotationException! And enterMonitorAnnotation may be null");
04265         }
04266         if (enterMonitorAnnotation != null)
04267             dependAnnotations.add(enterMonitorAnnotation);
04268 
04269         //search for the extermonitors intermethod
04270         Set enterSet = getInterClassEnterMonitors(sootMethod, exitMonitors);
04271         dependAnnotations.addAll(enterSet);
04272         return dependAnnotations;
04273     }
04274     return dependAnnotations;
04275 }
04276 private DefaultMutableTreeNode getReadySuccDependAnns() {
04277     DefaultMutableTreeNode readyRoot = new DefaultMutableTreeNode("Successors");
04278     Set readyAnnotationsForOneNode;
04279     Annotation mda;
04280     Annotation currentAnn;
04281     if (currentNode instanceof StmtTreeNode) {
04282         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
04283         mda = startTreeNode.currentMethodDeclarationAnnotation;
04284         currentMethodDecAnn = mda;
04285         currentAnn = startTreeNode.currentStmtAnnotation;
04286         readyAnnotationsForOneNode = getReadySuccDependAnnotationsFor(mda, currentAnn);
04287     } else
04288         if (currentNode instanceof Annotation) {
04289             mda = currentMethodDecAnn;
04290             currentAnn = (Annotation) currentNode;
04291             readyAnnotationsForOneNode = getReadySuccDependAnnotationsFor(mda, currentAnn);
04292         } else
04293             return readyRoot;
04294 
04295 
04296     //ready interclass
04297 
04298     Hashtable readyNodesForCurrentLevel = new Hashtable();
04299     if (!readyAnnotationsForOneNode.isEmpty())
04300         readyNodesForCurrentLevel.put(readyRoot, readyAnnotationsForOneNode);
04301     else
04302         return readyRoot;
04303     Hashtable readyNodesForNextLevel;
04304     do {
04305         readyNodesForNextLevel = new Hashtable();
04306         for (java.util.Iterator readyIt = readyNodesForCurrentLevel.keySet().iterator(); readyIt.hasNext();) {
04307             DefaultMutableTreeNode currentRootNode = (DefaultMutableTreeNode) readyIt.next();
04308             Set readyNodes = (Set) readyNodesForCurrentLevel.get(currentRootNode);
04309             //add ddAnnotations to currentRootNode as children of it
04310             for (Iterator rdIt = readyNodes.iterator(); rdIt.hasNext();) {
04311                 Object rdNode = rdIt.next();
04312                 if (!treePathContains(currentRootNode, rdNode)) {
04313                     DefaultMutableTreeNode rdTreeNode = new DefaultMutableTreeNode(rdNode);
04314                     currentRootNode.add(rdTreeNode);
04315                     Set interReadyNodesForOneNode = null;
04316                     if (rdNode instanceof StmtTreeNode) {
04317                         StmtTreeNode stmtRdNode = (StmtTreeNode) rdNode;
04318                         interReadyNodesForOneNode = getReadySuccDependAnnotationsFor(stmtRdNode.currentMethodDeclarationAnnotation, stmtRdNode.currentStmtAnnotation);
04319                     } else
04320                         if (rdNode instanceof Annotation) {
04321                             //MethodDeclarationAnnotation parentMda = getMda(currentRootNode, readyRoot);
04322                             Annotation parentMda = (Annotation) CompilationManager.getAnnotationManager().getMethodAnnotationContainingAnnotation((Annotation) rdNode);
04323                             interReadyNodesForOneNode = getReadySuccDependAnnotationsFor(parentMda, (Annotation) rdNode);
04324                         } else {
04325                             System.out.println("rdNode should be StmtTreeNode or Annotation");
04326                         }
04327                     if (!interReadyNodesForOneNode.isEmpty())
04328                         readyNodesForNextLevel.put(rdTreeNode, interReadyNodesForOneNode);
04329                 }
04330             }
04331         }
04332         readyNodesForCurrentLevel = readyNodesForNextLevel;
04333     } while (!readyNodesForNextLevel.isEmpty());
04334     return readyRoot;
04335 }
04336 /**
04337  * Insert the method's description here.
04338  * Creation date: (00-12-20 16:18:32)
04339  * @return ca.mcgill.sable.util.Set
04340  * @param stmts ca.mcgill.sable.soot.jimple.Stmt[]
04341  */
04342 private Set getRefValueSetFrom(Stmt[] stmts) {
04343     Set refValueSet = new ArraySet();
04344     for (int i = 0; i < stmts.length; i++) {
04345         Stmt stmt = stmts[i];
04346         for (Iterator boxIt = stmt.getUseBoxes().iterator(); boxIt.hasNext();) {
04347             ValueBox valueBox = (ValueBox) boxIt.next();
04348             Value value = valueBox.getValue();
04349             if ((value instanceof InvokeExpr) || (value instanceof Constant) || (value instanceof BinopExpr) ||(value instanceof NewExpr)) continue;
04350             if ((value.getType() instanceof RefType) || (value.getType() instanceof ArrayType))
04351                 refValueSet.add(value);
04352         }
04353     }
04354     return refValueSet;
04355 }
04356 private DefaultMutableTreeNode getSynchDependAnns(boolean isPred) {
04357     if (!isPred)
04358         return getSynchSuccDependAnns();
04359     DefaultMutableTreeNode synchRoot = new DefaultMutableTreeNode("Predecessors");
04360     Set synchAnnotationsForOneNode;
04361     Annotation mda;
04362     Annotation currentAnn;
04363     if (currentNode instanceof StmtTreeNode) {
04364         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
04365         mda = startTreeNode.currentMethodDeclarationAnnotation;
04366         currentMethodDecAnn = mda;
04367         currentAnn = startTreeNode.currentStmtAnnotation;
04368         synchAnnotationsForOneNode = getSynchPredDependAnnotationsFor(mda, currentAnn);
04369     } else
04370         if (currentNode instanceof Annotation) {
04371             mda = currentMethodDecAnn;
04372             currentAnn = (Annotation) currentNode;
04373             synchAnnotationsForOneNode = getSynchPredDependAnnotationsFor(mda, currentAnn);
04374         } else
04375             return synchRoot;
04376     if (synchAnnotationsForOneNode.isEmpty())
04377         return synchRoot;
04378     for (Iterator synIt = synchAnnotationsForOneNode.iterator(); synIt.hasNext();) {
04379         Annotation enterMonitorAnn = (Annotation) synIt.next();
04380         DefaultMutableTreeNode enterMonitorNode = new DefaultMutableTreeNode(enterMonitorAnn);
04381         /*
04382         if (currentAnn instanceof SynchronizedStmtAnnotation)
04383             enterMonitorNode = synchRoot;
04384         else
04385         */
04386             synchRoot.add(enterMonitorNode);
04387         //add all exitmonitor annotations under the entermonitor
04388         /*
04389         Set exitMonitorAnns = (Set) synchAnnotationsForOneNode.get(enterMonitorAnn);
04390         for (Iterator exitIt = exitMonitorAnns.iterator(); exitIt.hasNext();) {
04391             Object exitAnn = exitIt.next();
04392             DefaultMutableTreeNode exitNode = new DefaultMutableTreeNode(exitAnn);
04393             enterMonitorNode.add(exitNode);
04394         }
04395         */
04396         
04397     }
04398     return synchRoot;
04399 }
04400 /**
04401  * Return the SynchLabel property value.
04402  * @return javax.swing.JLabel
04403  */
04404 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04405 private javax.swing.JLabel getSynchLabel() {
04406     if (ivjSynchLabel == null) {
04407         try {
04408             ivjSynchLabel = new javax.swing.JLabel();
04409             ivjSynchLabel.setName("SynchLabel");
04410             ivjSynchLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/edu/ksu/cis/bandera/pdgslicer/dependency/images/synchro.jpg")));
04411             ivjSynchLabel.setText("");
04412             ivjSynchLabel.setBackground(new java.awt.Color(204,204,255));
04413             ivjSynchLabel.setForeground(java.awt.Color.black);
04414             // user code begin {1}
04415             // user code end
04416         } catch (java.lang.Throwable ivjExc) {
04417             // user code begin {2}
04418             // user code end
04419             handleException(ivjExc);
04420         }
04421     }
04422     return ivjSynchLabel;
04423 }
04424 /**
04425  * Return the SynchPredCheckBox property value.
04426  * @return javax.swing.JCheckBox
04427  */
04428 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04429 private javax.swing.JCheckBox getSynchPredCheckBox() {
04430     if (ivjSynchPredCheckBox == null) {
04431         try {
04432             ivjSynchPredCheckBox = new javax.swing.JCheckBox();
04433             ivjSynchPredCheckBox.setName("SynchPredCheckBox");
04434             ivjSynchPredCheckBox.setText("");
04435             ivjSynchPredCheckBox.setBackground(new java.awt.Color(204,204,255));
04436             // user code begin {1}
04437             // user code end
04438         } catch (java.lang.Throwable ivjExc) {
04439             // user code begin {2}
04440             // user code end
04441             handleException(ivjExc);
04442         }
04443     }
04444     return ivjSynchPredCheckBox;
04445 }
04446 private Set getSynchPredDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation) {
04447     Set dependAnnotations = new ArraySet();
04448     SootMethod sootMethod = null;
04449     if (mda instanceof MethodDeclarationAnnotation)
04450         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
04451     else
04452         if (mda instanceof ConstructorDeclarationAnnotation)
04453             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
04454     Map sootMap = Slicer.sootMethodInfoMap;
04455     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
04456     BuildPDG methodPDG = methodInfo.methodPDG;
04457     LockAnalysis lockAnalysis = methodPDG.getLockAnalysis();
04458     if (lockAnalysis == null)
04459         return dependAnnotations;
04460     Stmt stmtsInAnnotation[];
04461     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
04462         stmtsInAnnotation = new Stmt[1];
04463         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
04464     } else
04465         if (stmtAnnotation instanceof ConditionalAnnotation) {
04466             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
04467         } else
04468             if (stmtAnnotation instanceof ControlFlowAnnotation) {
04469                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
04470             } else
04471                 stmtsInAnnotation = stmtAnnotation.getStatements();
04472     for (int i = 0; i < stmtsInAnnotation.length; i++) {
04473         Hashtable monitorPairs = lockAnalysis.dependOnMonitorPairs(stmtsInAnnotation[i]);
04474         for (java.util.Iterator pairsIt = monitorPairs.keySet().iterator(); pairsIt.hasNext();) {
04475             Stmt enterMonitorStmt = (Stmt) pairsIt.next();
04476             Annotation enterAnn = null;
04477             try {
04478                 enterAnn = mda.getContainingAnnotation(enterMonitorStmt);
04479             } catch (AnnotationException ae) {
04480                 System.out.println("there is an AnnotationException! And enterMonitorStmtAnnotation may be null");
04481             }
04482             if (enterAnn != null)
04483                 dependAnnotations.add(enterAnn);
04484         }
04485     }
04486     return dependAnnotations;
04487 }
04488 /**
04489  * Return the SynchSuccCheckBox property value.
04490  * @return javax.swing.JCheckBox
04491  */
04492 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04493 private javax.swing.JCheckBox getSynchSuccCheckBox() {
04494     if (ivjSynchSuccCheckBox == null) {
04495         try {
04496             ivjSynchSuccCheckBox = new javax.swing.JCheckBox();
04497             ivjSynchSuccCheckBox.setName("SynchSuccCheckBox");
04498             ivjSynchSuccCheckBox.setText("");
04499             ivjSynchSuccCheckBox.setBackground(new java.awt.Color(204,204,255));
04500             // user code begin {1}
04501             // user code end
04502         } catch (java.lang.Throwable ivjExc) {
04503             // user code begin {2}
04504             // user code end
04505             handleException(ivjExc);
04506         }
04507     }
04508     return ivjSynchSuccCheckBox;
04509 }
04510 private Set getSynchSuccDependAnnotationsFor(Annotation mda, Annotation stmtAnnotation) {
04511     Set dependAnnotations = new ArraySet();
04512     SootMethod sootMethod = null;
04513     if (mda instanceof MethodDeclarationAnnotation)
04514         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
04515     else
04516         if (mda instanceof ConstructorDeclarationAnnotation)
04517             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
04518     Map sootMap = Slicer.sootMethodInfoMap;
04519     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
04520     StmtList stmtList = methodInfo.originalStmtList;
04521     BuildPDG methodPDG = methodInfo.methodPDG;
04522     LockAnalysis lockAnalysis = methodPDG.getLockAnalysis();
04523     if (lockAnalysis == null)
04524         return dependAnnotations;
04525     // to see if stmtAnnotation is exitmonitor
04526     List monitorPairList = lockAnalysis.getLockPairList();
04527     Hashtable exitMonitorAnnotations = getExitMonitorAnnotations(mda, monitorPairList);
04528     if (exitMonitorAnnotations.containsKey(stmtAnnotation)) {
04529         //search for the entermonitor inside the method
04530         MonitorPair mp = (MonitorPair) exitMonitorAnnotations.get(stmtAnnotation);
04531         Set exitMonitors = lockAnalysis.exitMonitorsIn(mp);
04532         Stmt enterMonitor = (Stmt) mp.getEnterMonitor();
04533         Annotation enterMonitorAnnotation = null;
04534         try {
04535             enterMonitorAnnotation = mda.getContainingAnnotation(enterMonitor);
04536         } catch (AnnotationException ae) {
04537             System.out.println("there is an AnnotationException! And enterMonitorAnnotation may be null");
04538         }
04539         if (enterMonitorAnnotation != null)
04540             dependAnnotations.add(enterMonitorAnnotation);
04541 
04542         //search for the extermonitors intermethod
04543         Set enterSet = getInterClassEnterMonitors(sootMethod, exitMonitors);
04544         dependAnnotations.addAll(enterSet);
04545     }
04546     return dependAnnotations;
04547 }
04548 private DefaultMutableTreeNode getSynchSuccDependAnns() {
04549     DefaultMutableTreeNode synchRoot = new DefaultMutableTreeNode("Successors");
04550     Set synchAnnotationsForOneNode;
04551     Annotation mda;
04552     Annotation currentAnn;
04553     if (currentNode instanceof StmtTreeNode) {
04554         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
04555         mda = startTreeNode.currentMethodDeclarationAnnotation;
04556         currentMethodDecAnn = mda;
04557         currentAnn = startTreeNode.currentStmtAnnotation;
04558         synchAnnotationsForOneNode = getSynchSuccDependAnnotationsFor(mda, currentAnn);
04559     } else
04560         if (currentNode instanceof Annotation) {
04561             mda = currentMethodDecAnn;
04562             currentAnn = (Annotation) currentNode;
04563             synchAnnotationsForOneNode = getSynchSuccDependAnnotationsFor(mda, currentAnn);
04564         } else
04565             return synchRoot;
04566     if (synchAnnotationsForOneNode.isEmpty())
04567         return synchRoot;
04568     for (Iterator synIt = synchAnnotationsForOneNode.iterator(); synIt.hasNext();) {
04569         Object enterMonitorAnn = synIt.next();
04570         DefaultMutableTreeNode enterMonitorNode = new DefaultMutableTreeNode(enterMonitorAnn);
04571         synchRoot.add(enterMonitorNode);
04572     }
04573     return synchRoot;
04574 }
04575 /**
04576  * Return the JPanel1 property value.
04577  * @return javax.swing.JPanel
04578  */
04579 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04580 private javax.swing.JPanel getToolBarInPanel() {
04581     if (ivjToolBarInPanel == null) {
04582         try {
04583             ivjToolBarInPanel = new javax.swing.JPanel();
04584             ivjToolBarInPanel.setName("ToolBarInPanel");
04585             ivjToolBarInPanel.setLayout(new java.awt.GridBagLayout());
04586             ivjToolBarInPanel.setBackground(new java.awt.Color(204,204,255));
04587             ivjToolBarInPanel.setMaximumSize(new java.awt.Dimension(3000, 100));
04588             ivjToolBarInPanel.setComponentOrientation(java.awt.ComponentOrientation.UNKNOWN);
04589             ivjToolBarInPanel.setPreferredSize(new java.awt.Dimension(0, 50));
04590             ivjToolBarInPanel.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
04591             ivjToolBarInPanel.setMinimumSize(new java.awt.Dimension(228, 100));
04592 
04593             java.awt.GridBagConstraints constraintsBackToolBarButton = new java.awt.GridBagConstraints();
04594             constraintsBackToolBarButton.gridx = 0; constraintsBackToolBarButton.gridy = 0;
04595             constraintsBackToolBarButton.insets = new java.awt.Insets(5, 5, 12, 10);
04596             getToolBarInPanel().add(getBackToolBarButton(), constraintsBackToolBarButton);
04597 
04598             java.awt.GridBagConstraints constraintsForwardToolBarButton = new java.awt.GridBagConstraints();
04599             constraintsForwardToolBarButton.gridx = 1; constraintsForwardToolBarButton.gridy = 0;
04600             constraintsForwardToolBarButton.insets = new java.awt.Insets(5, 3, 12, 10);
04601             getToolBarInPanel().add(getForwardToolBarButton(), constraintsForwardToolBarButton);
04602 
04603             java.awt.GridBagConstraints constraintsBackwardSliceToolBarButton = new java.awt.GridBagConstraints();
04604             constraintsBackwardSliceToolBarButton.gridx = 2; constraintsBackwardSliceToolBarButton.gridy = 0;
04605             constraintsBackwardSliceToolBarButton.insets = new java.awt.Insets(5, 3, 12, 10);
04606             getToolBarInPanel().add(getBackwardSliceToolBarButton(), constraintsBackwardSliceToolBarButton);
04607 
04608             java.awt.GridBagConstraints constraintsForwardSliceToolBarButton = new java.awt.GridBagConstraints();
04609             constraintsForwardSliceToolBarButton.gridx = 3; constraintsForwardSliceToolBarButton.gridy = 0;
04610             constraintsForwardSliceToolBarButton.insets = new java.awt.Insets(5, 3, 12, 10);
04611             getToolBarInPanel().add(getForwardSliceToolBarButton(), constraintsForwardSliceToolBarButton);
04612 
04613             java.awt.GridBagConstraints constraintsClearToolBarButton = new java.awt.GridBagConstraints();
04614             constraintsClearToolBarButton.gridx = 4; constraintsClearToolBarButton.gridy = 0;
04615             constraintsClearToolBarButton.gridwidth = 5;
04616             constraintsClearToolBarButton.anchor = java.awt.GridBagConstraints.EAST;
04617             constraintsClearToolBarButton.weightx = 1.0;
04618             constraintsClearToolBarButton.ipadx = 7;
04619             constraintsClearToolBarButton.insets = new java.awt.Insets(5, 3, 12, 0);
04620             getToolBarInPanel().add(getClearToolBarButton(), constraintsClearToolBarButton);
04621             // user code begin {1}
04622             // user code end
04623         } catch (java.lang.Throwable ivjExc) {
04624             // user code begin {2}
04625             // user code end
04626             handleException(ivjExc);
04627         }
04628     }
04629     return ivjToolBarInPanel;
04630 }
04631 /**
04632  * Return the ToolBarPanel property value.
04633  * @return javax.swing.JPanel
04634  */
04635 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04636 private javax.swing.JPanel getToolBarPanel() {
04637     if (ivjToolBarPanel == null) {
04638         try {
04639             ivjToolBarPanel = new javax.swing.JPanel();
04640             ivjToolBarPanel.setName("ToolBarPanel");
04641             ivjToolBarPanel.setPreferredSize(new java.awt.Dimension(0, 50));
04642             ivjToolBarPanel.setBorder(new javax.swing.border.EtchedBorder());
04643             ivjToolBarPanel.setLayout(new java.awt.BorderLayout());
04644             ivjToolBarPanel.setBackground(new java.awt.Color(204,204,255));
04645             getToolBarPanel().add(getDependOperationToolBar(), "Center");
04646             // user code begin {1}
04647             // user code end
04648         } catch (java.lang.Throwable ivjExc) {
04649             // user code begin {2}
04650             // user code end
04651             handleException(ivjExc);
04652         }
04653     }
04654     return ivjToolBarPanel;
04655 }
04656 /**
04657  * Return the JPanel2 property value.
04658  * @return javax.swing.JPanel
04659  */
04660 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04661 private javax.swing.JPanel getValueCheckBoxesPanel() {
04662     if (ivjValueCheckBoxesPanel == null) {
04663         try {
04664             ivjValueCheckBoxesPanel = new javax.swing.JPanel();
04665             ivjValueCheckBoxesPanel.setName("ValueCheckBoxesPanel");
04666             ivjValueCheckBoxesPanel.setLayout(getValueCheckBoxesPanelFlowLayout());
04667             ivjValueCheckBoxesPanel.setBackground(new java.awt.Color(204,204,255));
04668             getValueCheckBoxesPanel().add(getValuePredCheckBox(), getValuePredCheckBox().getName());
04669             getValueCheckBoxesPanel().add(getValueSuccCheckBox(), getValueSuccCheckBox().getName());
04670             getValueCheckBoxesPanel().add(getValueSetCheckBox(), getValueSetCheckBox().getName());
04671             getValueCheckBoxesPanel().add(getAllValuesButton(), getAllValuesButton().getName());
04672             getValueCheckBoxesPanel().add(getClearValuesButton(), getClearValuesButton().getName());
04673             // user code begin {1}
04674             // user code end
04675         } catch (java.lang.Throwable ivjExc) {
04676             // user code begin {2}
04677             // user code end
04678             handleException(ivjExc);
04679         }
04680     }
04681     return ivjValueCheckBoxesPanel;
04682 }
04683 /**
04684  * Return the ValueCheckBoxesPanelFlowLayout property value.
04685  * @return java.awt.FlowLayout
04686  */
04687 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04688 private java.awt.FlowLayout getValueCheckBoxesPanelFlowLayout() {
04689     java.awt.FlowLayout ivjValueCheckBoxesPanelFlowLayout = null;
04690     try {
04691         /* Create part */
04692         ivjValueCheckBoxesPanelFlowLayout = new java.awt.FlowLayout();
04693         ivjValueCheckBoxesPanelFlowLayout.setAlignment(java.awt.FlowLayout.LEFT);
04694         ivjValueCheckBoxesPanelFlowLayout.setHgap(6);
04695     } catch (java.lang.Throwable ivjExc) {
04696         handleException(ivjExc);
04697     };
04698     return ivjValueCheckBoxesPanelFlowLayout;
04699 }
04700 /**
04701  * Return the ValueFlowLabel property value.
04702  * @return javax.swing.JLabel
04703  */
04704 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04705 private javax.swing.JLabel getValueFlowLabel() {
04706     if (ivjValueFlowLabel == null) {
04707         try {
04708             ivjValueFlowLabel = new javax.swing.JLabel();
04709             ivjValueFlowLabel.setName("ValueFlowLabel");
04710             ivjValueFlowLabel.setText("Value Flow Graph : ");
04711             ivjValueFlowLabel.setForeground(java.awt.Color.black);
04712             // user code begin {1}
04713             // user code end
04714         } catch (java.lang.Throwable ivjExc) {
04715             // user code begin {2}
04716             // user code end
04717             handleException(ivjExc);
04718         }
04719     }
04720     return ivjValueFlowLabel;
04721 }
04722 private Hashtable getValuePredAnnotationsFor(Annotation mda, Annotation stmtAnnotation) {
04723     Hashtable valuePredAnnotations = new Hashtable();
04724     SootMethod sootMethod = null;
04725     if (mda instanceof MethodDeclarationAnnotation)
04726         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
04727     else
04728         if (mda instanceof ConstructorDeclarationAnnotation)
04729             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
04730     Map sootMap = Slicer.sootMethodInfoMap;
04731     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
04732     BuildPDG methodPDG = methodInfo.methodPDG;
04733     Stmt stmtsInAnnotation[];
04734     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
04735         stmtsInAnnotation = new Stmt[1];
04736         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
04737     } else
04738         if (stmtAnnotation instanceof ConditionalAnnotation) {
04739             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
04740         } else
04741             if (stmtAnnotation instanceof ControlFlowAnnotation) {
04742                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
04743             } else
04744                 stmtsInAnnotation = stmtAnnotation.getStatements();
04745 
04746     //collect all vars in statements in the annotation
04747     Set varSet = collectVarsFromStmts(stmtsInAnnotation);
04748     for (Iterator valueIt = varSet.iterator(); valueIt.hasNext();) {
04749         Value value = (Value) valueIt.next();
04750         DefaultMutableTreeNode localNode = new DefaultMutableTreeNode(value);
04751         Collection valuePreds = this.BOFA_Analysis.getDefs(value, sootMethod);
04752         //transform collection of jimple statement into a set of annotations
04753         Set predAnnotations = new ArraySet();
04754         for (Iterator stmtIt = valuePreds.iterator(); stmtIt.hasNext();) {
04755             edu.ksu.cis.bandera.bofa.Analysis.StmtMethodPair predStmtMethod = (edu.ksu.cis.bandera.bofa.Analysis.StmtMethodPair) stmtIt.next();
04756             Stmt predStmt = predStmtMethod.getStmt();
04757             if (predStmt instanceof IdentityStmt) {
04758                 ParameterNode paraNode = new ParameterNode(methodInfo.sootClass, mda, (IdentityStmt) predStmt);
04759                 predAnnotations.add(paraNode);
04760             } else {
04761                 Annotation predStmtAnnotation = null;
04762                 SootMethod methodEnclosingStmt = predStmtMethod.getSootMethod();
04763                 Annotation methodAnnotation = null;
04764                 if (methodEnclosingStmt.equals(sootMethod))
04765                     methodAnnotation = mda;
04766                 else
04767                     methodAnnotation = CompilationManager.getAnnotationManager().getAnnotation(methodEnclosingStmt.getDeclaringClass(), methodEnclosingStmt);
04768             try {
04769                 predStmtAnnotation = methodAnnotation.getContainingAnnotation(predStmt);
04770             } catch (AnnotationException ae) {
04771                 System.out.println("there is an AnnotationException! And ddStmtAnnotation may be null");
04772             }
04773             if (predStmtAnnotation == null) {
04774                 //this means predStmt is outside of current method or class.
04775                 //************* this should be solved by reversing Annotation Manager ********
04776                 // need to construct StmtTreeNode
04777             } else {
04778                 if (!predStmtAnnotation.toString().equals(""))
04779 
04780 
04781                     
04782                     //if (!predStmtAnnotation.equals(stmtAnnotation))
04783                     predAnnotations.add(predStmtAnnotation);
04784             }
04785         }
04786     }
04787     valuePredAnnotations.put(localNode, predAnnotations);
04788 }
04789 return valuePredAnnotations;
04790 }
04791 private DefaultMutableTreeNode getValuePredAnns() {
04792     DefaultMutableTreeNode currentValuePredRoot = new DefaultMutableTreeNode("Value Predecessors");
04793     Hashtable valuePredAnnotationsForOneNode;
04794     Annotation mda;
04795     if (currentNode instanceof StmtTreeNode) {
04796         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
04797         mda = startTreeNode.currentMethodDeclarationAnnotation;
04798         currentMethodDecAnn = mda;
04799         valuePredAnnotationsForOneNode = getValuePredAnnotationsFor(mda, startTreeNode.currentStmtAnnotation);
04800     } else
04801         if (currentNode instanceof Annotation) {
04802             mda = currentMethodDecAnn;
04803             valuePredAnnotationsForOneNode = getValuePredAnnotationsFor(mda, (Annotation) currentNode);
04804         } else
04805             return currentValuePredRoot;
04806     if (valuePredAnnotationsForOneNode.isEmpty())
04807         return currentValuePredRoot;
04808     for (java.util.Iterator varIt = valuePredAnnotationsForOneNode.keySet().iterator(); varIt.hasNext();) {
04809         DefaultMutableTreeNode currentVarNode = (DefaultMutableTreeNode) varIt.next();
04810         currentValuePredRoot.add(currentVarNode);
04811         Set valuePredAnnotations = (Set) valuePredAnnotationsForOneNode.get(currentVarNode);
04812         //add ddAnnotations to currentRootNode as children of it
04813         for (Iterator predIt = valuePredAnnotations.iterator(); predIt.hasNext();) {
04814             Object predObject = predIt.next();
04815             if (predObject instanceof ParameterNode) {
04816                 DefaultMutableTreeNode paraNode = new DefaultMutableTreeNode(predObject);
04817                 if (predObject.toString().equals("JJJCTEMP$0"))
04818                     paraNode = new DefaultMutableTreeNode("this");
04819                 currentVarNode.add(paraNode);
04820             } else {
04821                 Annotation predAnn = (Annotation) predObject;
04822                 DefaultMutableTreeNode predNode = new DefaultMutableTreeNode(predAnn);
04823                 currentVarNode.add(predNode);
04824             }
04825         }
04826     }
04827     return currentValuePredRoot;
04828 }
04829 /**
04830  * Return the JCheckBox property value.
04831  * @return javax.swing.JCheckBox
04832  */
04833 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04834 private javax.swing.JCheckBox getValuePredCheckBox() {
04835     if (ivjValuePredCheckBox == null) {
04836         try {
04837             ivjValuePredCheckBox = new javax.swing.JCheckBox();
04838             ivjValuePredCheckBox.setName("ValuePredCheckBox");
04839             ivjValuePredCheckBox.setFont(new java.awt.Font("dialog.plain", 0, 12));
04840             ivjValuePredCheckBox.setText("pred");
04841             ivjValuePredCheckBox.setBackground(new java.awt.Color(204,204,255));
04842             // user code begin {1}
04843             // user code end
04844         } catch (java.lang.Throwable ivjExc) {
04845             // user code begin {2}
04846             // user code end
04847             handleException(ivjExc);
04848         }
04849     }
04850     return ivjValuePredCheckBox;
04851 }
04852 /**
04853  * Return the JCheckBox2 property value.
04854  * @return javax.swing.JCheckBox
04855  */
04856 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04857 private javax.swing.JCheckBox getValueSetCheckBox() {
04858     if (ivjValueSetCheckBox == null) {
04859         try {
04860             ivjValueSetCheckBox = new javax.swing.JCheckBox();
04861             ivjValueSetCheckBox.setName("ValueSetCheckBox");
04862             ivjValueSetCheckBox.setFont(new java.awt.Font("dialog.plain", 0, 12));
04863             ivjValueSetCheckBox.setText("set");
04864             ivjValueSetCheckBox.setBackground(new java.awt.Color(204,204,255));
04865             // user code begin {1}
04866             // user code end
04867         } catch (java.lang.Throwable ivjExc) {
04868             // user code begin {2}
04869             // user code end
04870             handleException(ivjExc);
04871         }
04872     }
04873     return ivjValueSetCheckBox;
04874 }
04875 private Hashtable getValueSuccAnnotationsFor(Annotation mda, Annotation stmtAnnotation) {
04876     Hashtable valueSuccAnnotations = new Hashtable();
04877     SootMethod sootMethod = null;
04878     if (mda instanceof MethodDeclarationAnnotation)
04879         sootMethod = ((MethodDeclarationAnnotation) mda).getSootMethod();
04880     else
04881         if (mda instanceof ConstructorDeclarationAnnotation)
04882             sootMethod = ((ConstructorDeclarationAnnotation) mda).getSootMethod();
04883     Map sootMap = Slicer.sootMethodInfoMap;
04884     MethodInfo methodInfo = (MethodInfo) sootMap.get(sootMethod);
04885     BuildPDG methodPDG = methodInfo.methodPDG;
04886     Stmt stmtsInAnnotation[];
04887     if (stmtAnnotation instanceof SynchronizedStmtAnnotation) {
04888         stmtsInAnnotation = new Stmt[1];
04889         stmtsInAnnotation[0] = ((SynchronizedStmtAnnotation) stmtAnnotation).getEnterMonitor();
04890     } else
04891         if (stmtAnnotation instanceof ConditionalAnnotation) {
04892             stmtsInAnnotation = ((ConditionalAnnotation) stmtAnnotation).getTestStatements();
04893         } else
04894             if (stmtAnnotation instanceof ControlFlowAnnotation) {
04895                 stmtsInAnnotation = ((ControlFlowAnnotation) stmtAnnotation).getTestStatements();
04896             } else
04897                 stmtsInAnnotation = stmtAnnotation.getStatements();
04898 
04899     //collect all vars in statements in the annotation
04900     Set varSet = collectVarsFromStmts(stmtsInAnnotation);
04901 
04902     for (Iterator valueIt = varSet.iterator(); valueIt.hasNext();) {
04903         Value value = (Value) valueIt.next();
04904         DefaultMutableTreeNode valueNode = new DefaultMutableTreeNode(value);
04905         Collection valueSuccs = this.BOFA_Analysis.getUses(value, sootMethod);
04906         //transform collection of jimple statement into a set of annotations
04907         Set succAnnotations = new ArraySet();
04908         for (Iterator stmtIt = valueSuccs.iterator(); stmtIt.hasNext();) {
04909             edu.ksu.cis.bandera.bofa.Analysis.StmtMethodPair succStmtMethod = (edu.ksu.cis.bandera.bofa.Analysis.StmtMethodPair) stmtIt.next();
04910             Stmt succStmt = succStmtMethod.getStmt();
04911             if (succStmt instanceof IdentityStmt) {
04912                 ParameterNode paraNode = new ParameterNode(methodInfo.sootClass, mda, (IdentityStmt) succStmt);
04913                 succAnnotations.add(paraNode);
04914             } else {
04915                 Annotation succStmtAnnotation = null;
04916                 SootMethod methodEnclosingStmt = succStmtMethod.getSootMethod();
04917                 Annotation methodAnnotation = null;
04918                 if (methodEnclosingStmt.equals(sootMethod))
04919                     methodAnnotation = mda;
04920                 else
04921                     methodAnnotation = CompilationManager.getAnnotationManager().getAnnotation(methodEnclosingStmt.getDeclaringClass(), methodEnclosingStmt);
04922             
04923                 try {
04924                     succStmtAnnotation = methodAnnotation.getContainingAnnotation(succStmt);
04925                 } catch (AnnotationException ae) {
04926                     System.out.println("there is an AnnotationException! And ddStmtAnnotation may be null");
04927                 }
04928                 if (!succStmtAnnotation.toString().equals(""))
04929                     
04930                     //if (!succStmtAnnotation.equals(stmtAnnotation))
04931                     succAnnotations.add(succStmtAnnotation);
04932             }
04933         }
04934         valueSuccAnnotations.put(valueNode, succAnnotations);
04935     }
04936     return valueSuccAnnotations;
04937 }
04938 private DefaultMutableTreeNode getValueSuccAnns() {
04939     DefaultMutableTreeNode currentValueSuccRoot = new DefaultMutableTreeNode("Value Successors");
04940     Hashtable valueSuccAnnotationsForOneNode;
04941     Annotation mda;
04942     if (currentNode instanceof StmtTreeNode) {
04943         StmtTreeNode startTreeNode = (StmtTreeNode) currentNode;
04944         mda = startTreeNode.currentMethodDeclarationAnnotation;
04945         currentMethodDecAnn = mda;
04946         valueSuccAnnotationsForOneNode = getValueSuccAnnotationsFor(mda, startTreeNode.currentStmtAnnotation);
04947     } else
04948         if (currentNode instanceof Annotation) {
04949             mda = currentMethodDecAnn;
04950             valueSuccAnnotationsForOneNode = getValueSuccAnnotationsFor(mda, (Annotation) currentNode);
04951         } else
04952             return currentValueSuccRoot;
04953     if (valueSuccAnnotationsForOneNode.isEmpty())
04954         return currentValueSuccRoot;
04955     for (java.util.Iterator varIt = valueSuccAnnotationsForOneNode.keySet().iterator(); varIt.hasNext();) {
04956         DefaultMutableTreeNode currentVarNode = (DefaultMutableTreeNode) varIt.next();
04957         currentValueSuccRoot.add(currentVarNode);
04958         Set valueSuccAnnotations = (Set) valueSuccAnnotationsForOneNode.get(currentVarNode);
04959         //add ddAnnotations to currentRootNode as children of it
04960         for (Iterator succIt = valueSuccAnnotations.iterator(); succIt.hasNext();) {
04961             Object succObject = succIt.next();
04962             if (succObject instanceof ParameterNode) {
04963                 DefaultMutableTreeNode paraNode = new DefaultMutableTreeNode(succObject);
04964                 if (succObject.toString().equals("JJJCTEMP$0"))
04965                     paraNode = new DefaultMutableTreeNode("this");
04966                 currentVarNode.add(paraNode);
04967             } else {
04968                 Annotation succAnn = (Annotation) succObject;
04969                 DefaultMutableTreeNode succNode = new DefaultMutableTreeNode(succAnn);
04970                 currentVarNode.add(succNode);
04971             }
04972         }
04973     }
04974     return currentValueSuccRoot;
04975 }
04976 /**
04977  * Return the JCheckBox1 property value.
04978  * @return javax.swing.JCheckBox
04979  */
04980 /* WARNING: THIS METHOD WILL BE REGENERATED. */
04981 private javax.swing.JCheckBox getValueSuccCheckBox() {
04982     if (ivjValueSuccCheckBox == null) {
04983         try {
04984             ivjValueSuccCheckBox = new javax.swing.JCheckBox();
04985             ivjValueSuccCheckBox.setName("ValueSuccCheckBox");
04986             ivjValueSuccCheckBox.setFont(new java.awt.Font("dialog.plain", 0, 12));
04987             ivjValueSuccCheckBox.setText("succ");
04988             ivjValueSuccCheckBox.setBackground(new java.awt.Color(204,204,255));
04989             // user code begin {1}
04990             // user code end
04991         } catch (java.lang.Throwable ivjExc) {
04992             // user code begin {2}
04993             // user code end
04994             handleException(ivjExc);
04995         }
04996     }
04997     return ivjValueSuccCheckBox;
04998 }
04999 /**
05000  * Insert the method's description here.
05001  * Creation date: (00-11-7 10:11:56)
05002  * @return javax.swing.tree.DefaultMutableTreeNode
05003  * @param dependKind java.lang.String
05004  * @param isPred boolean
05005  */
05006 private DefaultMutableTreeNode getValueTreeNode(String valueKind) {
05007     int kind = valueKindsList.indexOf(valueKind);
05008     DefaultMutableTreeNode returnNode = null;
05009     switch (kind+6) {
05010         case VALUE_PRED :
05011             returnNode = getValuePredAnns();
05012             break;
05013         case VALUE_SUCC :
05014             returnNode = getValueSuccAnns();
05015             break;
05016         case VALUE_SET :
05017             returnNode = new DefaultMutableTreeNode("Value Set");
05018             calculateValueSet(returnNode);
05019             break;
05020         
05021     }
05022     return returnNode;
05023 }
05024 /**
05025  * Return the ViewerTabbedPane property value.
05026  * @return edu.ksu.cis.bandera.pdgslicer.dependency.ViewerTabbedPane
05027  */
05028 /* WARNING: THIS METHOD WILL BE REGENERATED. */
05029 private ViewerTabbedPane getViewerTabbedPane() {
05030     if (ivjViewerTabbedPane == null) {
05031         try {
05032             ivjViewerTabbedPane = new edu.ksu.cis.bandera.pdgslicer.dependency.ViewerTabbedPane();
05033             ivjViewerTabbedPane.setName("ViewerTabbedPane");
05034             // user code begin {1}
05035             criterionViewer = ivjViewerTabbedPane.getCriterionViewer();
05036             criterionViewer.setDependFrame(this);
05037             queryPanel = ivjViewerTabbedPane.getQueryPanel();
05038             queryPanel.setDependFrame(this);
05039             
05040             // user code end
05041         } catch (java.lang.Throwable ivjExc) {
05042             // user code begin {2}
05043             // user code end
05044             handleException(ivjExc);
05045         }
05046     }
05047     return ivjViewerTabbedPane;
05048 }
05049 /**
05050  * Called whenever the part throws an exception.
05051  * @param exception java.lang.Throwable
05052  */
05053 private void handleException(java.lang.Throwable exception) {
05054 
05055     /* Uncomment the following lines to print uncaught exceptions to stdout */
05056     // System.out.println("--------- UNCAUGHT EXCEPTION ---------");
05057     // exception.printStackTrace(System.out);
05058 }
05059 /**
05060  * Comment
05061  */
05062 public void historyComboBox_ActionEvents() {
05063     Object selectedNode = getHistoryComboBox().getSelectedItem();
05064     if (selectedNode.equals(currentNode))
05065         return;
05066     Configuration config = getCurrentConfig();
05067     nodeToConfigTable.put(currentNode, config);
05068     compactHistoryChain(currentNode);
05069     historyChain.addLast(currentNode);
05070     currentPositionOfHistoryChain++;
05071     if (!getBackToolBarButton().isEnabled())
05072         getBackToolBarButton().setEnabled(true);
05073     currentNode = selectedNode;
05074     config = (Configuration) nodeToConfigTable.get(selectedNode);
05075     restoreConfig(config);
05076     return;
05077 }
05078 /**
05079  * 
05080  * @return int
05081  * @param obj java.lang.Object
05082  */
05083 int historyComboBoxItemsContains(Object obj) {
05084     for (int i = 0; i < getHistoryComboBox().getItemCount(); i++) {
05085         Object item = getHistoryComboBox().getItemAt(i);
05086         if (item.equals(obj))
05087             return i;
05088     }
05089     return -1;
05090 }
05091 /**
05092  * Initializes connections
05093  * @exception java.lang.Exception The exception description.
05094  */
05095 /* WARNING: THIS METHOD WILL BE REGENERATED. */
05096 private void initConnections() throws java.lang.Exception {
05097     // user code begin {1}
05098     // user code end
05099     this.addWindowListener(ivjEventHandler);
05100     getHistoryComboBox().addActionListener(ivjEventHandler);
05101     getBackToolBarButton().addActionListener(ivjEventHandler);
05102     getForwardToolBarButton().addActionListener(ivjEventHandler);
05103     getClearToolBarButton().addActionListener(ivjEventHandler);
05104     getDataPredCheckBox().addItemListener(ivjEventHandler);
05105     getDataSuccCheckBox().addItemListener(ivjEventHandler);
05106     getControlPredCheckBox().addItemListener(ivjEventHandler);
05107     getControlSuccCheckBox().addItemListener(ivjEventHandler);
05108     getDiverPredCheckBox().addItemListener(ivjEventHandler);
05109     getDiverSuccCheckBox().addItemListener(ivjEventHandler);
05110     getReadyPredCheckBox().addItemListener(ivjEventHandler);
05111     getReadySuccCheckBox().addItemListener(ivjEventHandler);
05112     getInterferPredCheckBox().addItemListener(ivjEventHandler);
05113     getInterferSuccCheckBox().addItemListener(ivjEventHandler);
05114     getSynchPredCheckBox().addItemListener(ivjEventHandler);
05115     getSynchSuccCheckBox().addItemListener(ivjEventHandler);
05116     getValuePredCheckBox().addItemListener(ivjEventHandler);
05117     getValueSuccCheckBox().addItemListener(ivjEventHandler);
05118     getValueSetCheckBox().addItemListener(ivjEventHandler);
05119     getAllpredButton().addActionListener(ivjEventHandler);
05120     getAllsuccButton().addActionListener(ivjEventHandler);
05121     getAllDependButton().addActionListener(ivjEventHandler);
05122     getNopredButton().addActionListener(ivjEventHandler);
05123     getNosuccButton().addActionListener(ivjEventHandler);
05124     getClearDependButton().addActionListener(ivjEventHandler);
05125     getAllValuesButton().addActionListener(ivjEventHandler);
05126     getClearValuesButton().addActionListener(ivjEventHandler);
05127     getBackwardSliceToolBarButton().addActionListener(ivjEventHandler);
05128 }
05129 /**
05130  * Initialize the class.
05131  */
05132 /* WARNING: THIS METHOD WILL BE REGENERATED. */
05133 private void initialize() {
05134     try {
05135         // user code begin {1}
05136         /*
05137         if (dependFrame != null) {
05138         dependFrame = null;
05139         if (dependencyValueViewer != null) {
05140         dependencyValueViewer.dispose();
05141         dependencyValueViewer = null;
05142         }
05143         }
05144         */
05145         dependFrame = this;
05146 
05147         // user code end
05148         setName("Dependencies");
05149         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
05150         setSize(612, 702);
05151         setTitle("Dependency and Value Flow Browser");
05152         setContentPane(getDependencyFrameContentPane());
05153         initConnections();
05154     } catch (java.lang.Throwable ivjExc) {
05155         handleException(ivjExc);
05156     }
05157     // user code begin {2}
05158 
05159     dependencyKindsList = new ca.mcgill.sable.util.ArrayList();
05160     for (int i = 0; i < dependencyKinds.length; i++) {
05161         dependencyKindsList.add(i, dependencyKinds[i]);
05162     }
05163     valueKindsList = new ca.mcgill.sable.util.ArrayList();
05164     for (int i = 0; i < valueKinds.length; i++) {
05165         valueKindsList.add(i, valueKinds[i]);
05166     }
05167     dependencyValueViewer = new DependencyValueViewer();
05168     dependencyValueViewer.setDependFrame(this);
05169     dependencyValueViewer.setToEmptyState();
05170     if (!reRunJJJC())
05171         return;
05172     Vector criterion = criterionViewer.getSliceInterests();
05173     if (criterion == null)
05174         return;
05175     //System.out.println("criterion: " + criterion);
05176     criterionViewer.showCriterionInViewer(criterion);
05177     if (!runBuildingPDG())
05178         return;
05179         getCodeBrowserPane().unreachableSootClasses = edu.ksu.cis.bandera.pdgslicer.Slicer.unreachableClasses;
05180         getCodeBrowserPane().reachableSootMethods = edu.ksu.cis.bandera.pdgslicer.Slicer.reachableMethods;
05181     getCodeBrowserPane().updateHierTree(null);
05182     //moved to Slicer class
05183     //edu.ksu.cis.bandera.bofa.BOFA.analyze();
05184     //BOFA_Analysis = edu.ksu.cis.bandera.bofa.Analysis.init();
05185     BOFA_Analysis = Slicer.BOFA_Analysis;
05186 
05187     // user code end
05188 }
05189 /**
05190  * Insert the method's description here.
05191  * Creation date: (00-5-15 22:46:25)
05192  */
05193 private void initializeConfig() {
05194     isChangeCheckBoxByProgram = true;
05195     if (doPredDataDepend) {
05196         doPredDataDepend = false;
05197         getDataPredCheckBox().setSelected(false);
05198     }
05199     if (doPredControlDepend) {
05200         doPredControlDepend = false;
05201         getControlPredCheckBox().setSelected(false);
05202     }
05203     if (doPredReadyDepend) {
05204         doPredReadyDepend = false;
05205         getReadyPredCheckBox().setSelected(false);
05206     }
05207     if (doPredSynchDepend) {
05208         doPredSynchDepend = false;
05209         getSynchPredCheckBox().setSelected(false);
05210     }
05211     if (doPredInterferDepend) {
05212         doPredInterferDepend = false;
05213         getInterferPredCheckBox().setSelected(false);
05214     }
05215     if (doPredDivergentDepend) {
05216         doPredDivergentDepend = false;
05217         getDiverPredCheckBox().setSelected(false);
05218     }
05219     if (doSuccDataDepend) {
05220         doSuccDataDepend = false;
05221         getDataSuccCheckBox().setSelected(false);
05222     }
05223     if (doSuccControlDepend) {
05224         doSuccControlDepend = false;
05225         getControlSuccCheckBox().setSelected(false);
05226     }
05227     if (doSuccReadyDepend) {
05228         doSuccReadyDepend = false;
05229         getReadySuccCheckBox().setSelected(false);
05230     }
05231     if (doSuccSynchDepend) {
05232         doSuccSynchDepend = false;
05233         getSynchSuccCheckBox().setSelected(false);
05234     }
05235     if (doSuccInterferDepend) {
05236         doSuccInterferDepend = false;
05237         getInterferSuccCheckBox().setSelected(false);
05238     }
05239     if (doSuccDivergentDepend) {
05240         doSuccDivergentDepend = false;
05241         getDiverSuccCheckBox().setSelected(false);
05242     }
05243     if (doPredValue) {
05244         doPredValue = false;
05245         getValuePredCheckBox().setSelected(false);
05246     }
05247     if (doSuccValue) {
05248         doSuccValue = false;
05249         getValueSuccCheckBox().setSelected(false);
05250     }
05251     if (doSetValue) {
05252         doSetValue = false;
05253         getValueSetCheckBox().setSelected(false);
05254     }
05255     isChangeCheckBoxByProgram = false;
05256     //remove all predecessor and successsor dependency in current tree and
05257     dependencyValueViewer.currentDependTreeRoot = new DefaultMutableTreeNode(currentNode);
05258     dependencyValueViewer.getDependencyTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentDependTreeRoot));
05259     dependencyValueViewer.currentValueTreeRoot = new DefaultMutableTreeNode(currentNode);
05260     dependencyValueViewer.getValueTree().setModel(new DefaultTreeModel(dependencyValueViewer.currentValueTreeRoot));
05261     dependencyValueViewer.changeViewerState();
05262 }
05263 private boolean interferOnListContains(List interferOnList, Set stmts) {
05264     for (Iterator interferIt = interferOnList.iterator(); interferIt.hasNext();) {
05265         InterferStmt interferStmt = (InterferStmt) interferIt.next();
05266         if (stmts.contains(interferStmt.interferStmt))
05267             return true;
05268     }
05269     return false;
05270 }
05271 /**
05272  * Comment
05273  */
05274 public void interferPredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
05275     if (currentNode == null) {
05276         selectStatementWarning(getInterferPredCheckBox());
05277         return;
05278     }
05279     dependencyValueViewer.setState(Frame.NORMAL);
05280     dependencyValueViewer.toFront();
05281     doPredInterferDepend = !doPredInterferDepend;
05282     if (!doPredInterferDepend) {
05283         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05284         //remove data subtree;
05285 
05286         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05287             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05288             if (oneChild.toString().equals("Interference Dependence")) {
05289                 if (oneChild.getChildCount() == 1) {
05290                     treeModel.removeNodeFromParent(oneChild);
05291                     break;
05292                 } else {
05293                     for (int j = 0; j < oneChild.getChildCount(); j++) {
05294                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
05295                         if (predSuccChild.toString().equals("Predecessors")) {
05296                             treeModel.removeNodeFromParent(predSuccChild);
05297                             break;
05298                         }
05299                     }
05300                 }
05301                 break;
05302             }
05303         }
05304     } else {
05305         boolean isDependency = true;
05306         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05307         DefaultMutableTreeNode currentInterferRoot = null;
05308         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05309             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05310             if (oneChild.toString().equals("Interference Dependence")) {
05311                 currentInterferRoot = oneChild;
05312                 break;
05313             }
05314         }
05315         if (currentInterferRoot == null) {
05316             currentInterferRoot = new DefaultMutableTreeNode("Interference Dependence");
05317             int insertIndex = dependencyValueViewer.getInsertIndexOf("Interference Dependence", isDependency);
05318             treeModel.insertNodeInto(currentInterferRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
05319         }
05320         DefaultMutableTreeNode interferPredTreeNode = getInterferDependAnns(true);
05321         if (interferPredTreeNode != null) {
05322             //currentTreeRoot.add(dataTreeNode);
05323             treeModel.insertNodeInto(interferPredTreeNode, currentInterferRoot, 0);
05324             // Make sure the user can see the lovely new node.
05325             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(interferPredTreeNode.getPath()));
05326 
05327             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
05328             //expand and collapse node path
05329 
05330             dependencyValueViewer.expandAndCollapseFrom(interferPredTreeNode, isDependency);
05331         }
05332     }
05333     // and then
05334     dependencyValueViewer.changeViewerState();
05335     return;
05336 }
05337 /**
05338  * Comment
05339  */
05340 public void interferSuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
05341     if (currentNode == null) {
05342         selectStatementWarning(getInterferSuccCheckBox());
05343         return;
05344     }
05345     dependencyValueViewer.setState(Frame.NORMAL);
05346     dependencyValueViewer.toFront();
05347     doSuccInterferDepend = !doSuccInterferDepend;
05348     if (!doSuccInterferDepend) {
05349         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05350         //remove data subtree;
05351 
05352         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05353             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05354             if (oneChild.toString().equals("Interference Dependence")) {
05355                 if (oneChild.getChildCount() == 1) {
05356                     treeModel.removeNodeFromParent(oneChild);
05357                     break;
05358                 } else {
05359                     for (int j = 0; j < oneChild.getChildCount(); j++) {
05360                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
05361                         if (predSuccChild.toString().equals("Successors")) {
05362                             treeModel.removeNodeFromParent(predSuccChild);
05363                             break;
05364                         }
05365                     }
05366                 }
05367                 break;
05368             }
05369         }
05370     } else {
05371         boolean isDependency = true;
05372         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05373         DefaultMutableTreeNode currentInterferRoot = null;
05374         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05375             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05376             if (oneChild.toString().equals("Interference Dependence")) {
05377                 currentInterferRoot = oneChild;
05378                 break;
05379             }
05380         }
05381         if (currentInterferRoot == null) {
05382             currentInterferRoot = new DefaultMutableTreeNode("Interference Dependence");
05383             int insertIndex = dependencyValueViewer.getInsertIndexOf("Interference Dependence", isDependency);
05384             treeModel.insertNodeInto(currentInterferRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
05385         }
05386         DefaultMutableTreeNode interferSuccTreeNode = getInterferDependAnns(false);
05387         if (interferSuccTreeNode != null) {
05388             //currentTreeRoot.add(dataTreeNode);
05389             treeModel.insertNodeInto(interferSuccTreeNode, currentInterferRoot, currentInterferRoot.getChildCount());
05390             // Make sure the user can see the lovely new node.
05391             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(interferSuccTreeNode.getPath()));
05392 
05393             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
05394             //expand and collapse node path
05395 
05396             dependencyValueViewer.expandAndCollapseFrom(interferSuccTreeNode, isDependency);
05397         }
05398     }
05399 
05400     // and then
05401     dependencyValueViewer.changeViewerState();
05402     return;
05403 }
05404 /**
05405  * Method to handle events for the ItemListener interface.
05406  * @param e java.awt.event.ItemEvent
05407  */
05408 /* WARNING: THIS METHOD WILL BE REGENERATED. */
05409 public void itemStateChanged(java.awt.event.ItemEvent e) {
05410     // user code begin {1}
05411     // user code end
05412     if (e.getSource() == getDataPredCheckBox()) 
05413         connEtoC8(e);
05414     if (e.getSource() == getDataSuccCheckBox()) 
05415         connEtoC12(e);
05416     if (e.getSource() == getControlPredCheckBox()) 
05417         connEtoC13(e);
05418     if (e.getSource() == getControlSuccCheckBox()) 
05419         connEtoC16(e);
05420     if (e.getSource() == getDiverPredCheckBox()) 
05421         connEtoC17(e);
05422     if (e.getSource() == getDiverSuccCheckBox()) 
05423         connEtoC18(e);
05424     if (e.getSource() == getReadyPredCheckBox()) 
05425         connEtoC19(e);
05426     if (e.getSource() == getReadySuccCheckBox()) 
05427         connEtoC20(e);
05428     if (e.getSource() == getInterferPredCheckBox()) 
05429         connEtoC21(e);
05430     if (e.getSource() == getInterferSuccCheckBox()) 
05431         connEtoC22(e);
05432     if (e.getSource() == getSynchPredCheckBox()) 
05433         connEtoC23(e);
05434     if (e.getSource() == getSynchSuccCheckBox()) 
05435         connEtoC24(e);
05436     if (e.getSource() == getValuePredCheckBox()) 
05437         connEtoC25(e);
05438     if (e.getSource() == getValueSuccCheckBox()) 
05439         connEtoC26(e);
05440     if (e.getSource() == getValueSetCheckBox()) 
05441         connEtoC27(e);
05442     // user code begin {2}
05443     // user code end
05444 }
05445 /**
05446  * Comment
05447  */
05448 public void jimpleCodeForAnnotation(Annotation ann) {
05449     Stmt[] stmts = ann.getStatements();
05450     getViewerTabbedPane().getJimpleViewer().getJimpleTitleLabel().setText("Jimple code for " + ann.toString());
05451     StringBuffer str = new StringBuffer(1024);
05452     for (int i = 0; i < stmts.length; i++) {
05453         str.append(stmts[i].toString() + "\n");
05454     }
05455     getViewerTabbedPane().getJimpleViewer().getJimpleTextArea().setText(str.toString());
05456     getViewerTabbedPane().getJimpleViewer().getJimpleTextScrollPane().validate();
05457     getViewerTabbedPane().getJimpleViewer().getJimpleTextScrollPane().repaint();
05458     //getJimpleCodeDialog().show();
05459     return;
05460 }
05461 /**
05462  * Comment
05463  */
05464 public void jimpleCodeForSootClass(SootClass sc) {
05465     Writer str = new StringWriter(1024);
05466     PrintWriter printWriter = new PrintWriter(str, true);
05467     sc.printTo(new StoredBody(Jimple.v()), printWriter);
05468     getViewerTabbedPane().getJimpleViewer().getJimpleTitleLabel().setText("Jimple code for " + sc);
05469     getViewerTabbedPane().getJimpleViewer().getJimpleTextArea().setText(str.toString());
05470     getViewerTabbedPane().getJimpleViewer().getJimpleTextScrollPane().validate();
05471     getViewerTabbedPane().getJimpleViewer().getJimpleTextScrollPane().repaint();
05472     return;
05473 }
05474 /**
05475  * Comment
05476  */
05477 public void jimpleCodeForSootMethod(SootMethod sm) {
05478     Writer str = new StringWriter(1024);
05479     PrintWriter printWriter = new PrintWriter(str, true);
05480     JimpleBody jimpleBody = (JimpleBody) sm.getBody(Jimple.v());
05481     jimpleBody.printTo(printWriter, 0);
05482     getViewerTabbedPane().getJimpleViewer().getJimpleTitleLabel().setText("Jimple code for " + sm);
05483     getViewerTabbedPane().getJimpleViewer().getJimpleTextArea().setText(str.toString());
05484     getViewerTabbedPane().getJimpleViewer().getJimpleTextScrollPane().validate();
05485     getViewerTabbedPane().getJimpleViewer().getJimpleTextScrollPane().repaint();
05486     return;
05487 }
05488 /**
05489  * main entrypoint - starts the part when it is run as an application
05490  * @param args java.lang.String[]
05491  */
05492 public static void main(java.lang.String[] args) {
05493     try {
05494         Dependencies aDependencies;
05495         aDependencies = new Dependencies();
05496         aDependencies.addWindowListener(new java.awt.event.WindowAdapter() {
05497             public void windowClosing(java.awt.event.WindowEvent e) {
05498                 System.exit(0);
05499             };
05500         });
05501         aDependencies.setVisible(true);
05502 
05503     } catch (Throwable exception) {
05504         System.err.println("Exception occurred in main() of javax.swing.JFrame");
05505         exception.printStackTrace(System.out);
05506     }
05507 
05508 
05509 }
05510 /**
05511  * Comment
05512  */
05513 public void nopredButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
05514     if (currentNode == null) {
05515         selectStatementWarning(getNopredButton());
05516         return;
05517     }
05518     dependencyValueViewer.setState(Frame.NORMAL);
05519     dependencyValueViewer.toFront();
05520     isChangeCheckBoxByProgram = true;
05521     if (doPredDataDepend) {
05522         doPredDataDepend = false;
05523         getDataPredCheckBox().setSelected(false);
05524     }
05525     if (doPredControlDepend) {
05526         doPredControlDepend = false;
05527         getControlPredCheckBox().setSelected(false);
05528     }
05529     if (doPredReadyDepend) {
05530         doPredReadyDepend = false;
05531         getReadyPredCheckBox().setSelected(false);
05532     }
05533     if (doPredSynchDepend) {
05534         doPredSynchDepend = false;
05535         getSynchPredCheckBox().setSelected(false);
05536     }
05537     if (doPredInterferDepend) {
05538         doPredInterferDepend = false;
05539         getInterferPredCheckBox().setSelected(false);
05540     }
05541     if (doPredDivergentDepend) {
05542         doPredDivergentDepend = false;
05543         getDiverPredCheckBox().setSelected(false);
05544     }
05545     isChangeCheckBoxByProgram = false;
05546     //remove all predecessor dependency in current tree and
05547     DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05548     Set removableChild = new ca.mcgill.sable.util.ArraySet();
05549     for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05550         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05551         DefaultMutableTreeNode predecessor = null;
05552         boolean foundSuccessor = false;
05553         for (int j = 0; j < oneChild.getChildCount(); j++) {
05554             DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
05555             if (predSuccChild.toString().equals("Successors"))
05556                 foundSuccessor = true;
05557             if (predSuccChild.toString().equals("Predecessors"))
05558                 predecessor = predSuccChild;
05559         }
05560         if (predecessor == null)
05561             continue;
05562         treeModel.removeNodeFromParent(predecessor);
05563         if (!foundSuccessor)
05564             removableChild.add(oneChild);
05565     }
05566     for (Iterator childIt = removableChild.iterator(); childIt.hasNext();) {
05567         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) childIt.next();
05568         treeModel.removeNodeFromParent(oneChild);
05569     }
05570     dependencyValueViewer.changeViewerState();
05571     return;
05572 }
05573 /**
05574  * Comment
05575  */
05576 public void nosuccButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
05577     if (currentNode == null) {
05578         selectStatementWarning(getNosuccButton());
05579         return;
05580     }
05581     dependencyValueViewer.setState(Frame.NORMAL);
05582     dependencyValueViewer.toFront();
05583     isChangeCheckBoxByProgram = true;
05584     if (doSuccDataDepend) {
05585         doSuccDataDepend = false;
05586         getDataSuccCheckBox().setSelected(false);
05587     }
05588     if (doSuccControlDepend) {
05589         doSuccControlDepend = false;
05590         getControlSuccCheckBox().setSelected(false);
05591     }
05592     if (doSuccReadyDepend) {
05593         doSuccReadyDepend = false;
05594         getReadySuccCheckBox().setSelected(false);
05595     }
05596     if (doSuccSynchDepend) {
05597         doSuccSynchDepend = false;
05598         getSynchSuccCheckBox().setSelected(false);
05599     }
05600     if (doSuccInterferDepend) {
05601         doSuccInterferDepend = false;
05602         getInterferSuccCheckBox().setSelected(false);
05603     }
05604     if (doSuccDivergentDepend) {
05605         doSuccDivergentDepend = false;
05606         getDiverSuccCheckBox().setSelected(false);
05607     }
05608     isChangeCheckBoxByProgram = false;
05609     //remove all predecessor dependency in current tree and
05610     DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05611     Set removableChild = new ca.mcgill.sable.util.ArraySet();
05612     for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05613         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05614         DefaultMutableTreeNode successor = null;
05615         boolean foundPredecessor = false;
05616         for (int j = 0; j < oneChild.getChildCount(); j++) {
05617             DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
05618             if (predSuccChild.toString().equals("Successors"))
05619                 successor = predSuccChild;
05620             if (predSuccChild.toString().equals("Predecessors"))
05621                 foundPredecessor = true;
05622             ;
05623         }
05624         if (successor == null)
05625             continue;
05626         treeModel.removeNodeFromParent(successor);
05627         if (!foundPredecessor)
05628             removableChild.add(oneChild);
05629     }
05630     for (Iterator childIt = removableChild.iterator(); childIt.hasNext();) {
05631         DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) childIt.next();
05632         treeModel.removeNodeFromParent(oneChild);
05633     }
05634     dependencyValueViewer.changeViewerState();
05635     return;
05636 }
05637 /**
05638  * Insert the method's description here.
05639  * Creation date: (00-6-15 0:22:39)
05640  * @return boolean
05641  * @param readyOnList ca.mcgill.sable.util.List
05642  * @param stmt ca.mcgill.sable.soot.jimple.Stmt
05643  */
05644 private boolean readyOnListContains(List readyOnList, Stmt stmt) {
05645     for (Iterator readyIt = readyOnList.iterator(); readyIt.hasNext();) {
05646         ReadyDependStmt readyDependStmt = (ReadyDependStmt) readyIt.next();
05647         if (readyDependStmt.readyOnStmt == stmt)
05648             return true;
05649     }
05650     return false;
05651 }
05652 private  boolean readyOnListContains(List readyOnList, Set exitMonitors) {
05653     for (Iterator readyIt = readyOnList.iterator(); readyIt.hasNext();) {
05654         ReadyDependStmt readyDependStmt = (ReadyDependStmt) readyIt.next();
05655         if (exitMonitors.contains(readyDependStmt.readyOnStmt))
05656             return true;
05657     }
05658     return false;
05659 }
05660 /**
05661  * Comment
05662  */
05663 public void readyPredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
05664     if (currentNode == null) {
05665         selectStatementWarning(getReadyPredCheckBox());
05666         return;
05667     }
05668     dependencyValueViewer.setState(Frame.NORMAL);
05669     dependencyValueViewer.toFront();
05670     doPredReadyDepend = !doPredReadyDepend;
05671     if (!doPredReadyDepend) {
05672         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05673         //remove data subtree;
05674 
05675         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05676             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05677             if (oneChild.toString().equals("Ready Dependence")) {
05678                 if (oneChild.getChildCount() == 1) {
05679                     treeModel.removeNodeFromParent(oneChild);
05680                     break;
05681                 } else {
05682                     for (int j = 0; j < oneChild.getChildCount(); j++) {
05683                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
05684                         if (predSuccChild.toString().equals("Predecessors")) {
05685                             treeModel.removeNodeFromParent(predSuccChild);
05686                             break;
05687                         }
05688                     }
05689                 }
05690                 break;
05691             }
05692         }
05693     } else {
05694         boolean isDependency = true;
05695         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05696         DefaultMutableTreeNode currentReadyRoot = null;
05697         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05698             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05699             if (oneChild.toString().equals("Ready Dependence")) {
05700                 currentReadyRoot = oneChild;
05701                 break;
05702             }
05703         }
05704         if (currentReadyRoot == null) {
05705             currentReadyRoot = new DefaultMutableTreeNode("Ready Dependence");
05706             int insertIndex = dependencyValueViewer.getInsertIndexOf("Ready Dependence", isDependency);
05707             treeModel.insertNodeInto(currentReadyRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
05708         }
05709         DefaultMutableTreeNode readyPredTreeNode = getReadyDependAnns(true);
05710         if (readyPredTreeNode != null) {
05711             //currentTreeRoot.add(dataTreeNode);
05712             treeModel.insertNodeInto(readyPredTreeNode, currentReadyRoot, 0);
05713             // Make sure the user can see the lovely new node.
05714             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(readyPredTreeNode.getPath()));
05715 
05716             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
05717             //expand and collapse node path
05718 
05719             dependencyValueViewer.expandAndCollapseFrom(readyPredTreeNode, isDependency);
05720         }
05721     }
05722     // and then
05723     dependencyValueViewer.changeViewerState();
05724     return;
05725 }
05726 /**
05727  * Comment
05728  */
05729 public void readySuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
05730     if (currentNode == null) {
05731         selectStatementWarning(getReadySuccCheckBox());
05732         return;
05733     }
05734     dependencyValueViewer.setState(Frame.NORMAL);
05735     dependencyValueViewer.toFront();
05736     doSuccReadyDepend = !doSuccReadyDepend;
05737     if (!doSuccReadyDepend) {
05738         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05739         //remove data subtree;
05740 
05741         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05742             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05743             if (oneChild.toString().equals("Ready Dependence")) {
05744                 if (oneChild.getChildCount() == 1) {
05745                     treeModel.removeNodeFromParent(oneChild);
05746                     break;
05747                 } else {
05748                     for (int j = 0; j < oneChild.getChildCount(); j++) {
05749                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
05750                         if (predSuccChild.toString().equals("Successors")) {
05751                             treeModel.removeNodeFromParent(predSuccChild);
05752                             break;
05753                         }
05754                     }
05755                 }
05756                 break;
05757             }
05758         }
05759     } else {
05760         boolean isDependency = true;
05761         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
05762         DefaultMutableTreeNode currentReadyRoot = null;
05763         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
05764             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
05765             if (oneChild.toString().equals("Ready Dependence")) {
05766                 currentReadyRoot = oneChild;
05767                 break;
05768             }
05769         }
05770         if (currentReadyRoot == null) {
05771             currentReadyRoot = new DefaultMutableTreeNode("Ready Dependence");
05772             int insertIndex = dependencyValueViewer.getInsertIndexOf("Ready Dependence", isDependency);
05773             treeModel.insertNodeInto(currentReadyRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
05774         }
05775         DefaultMutableTreeNode readySuccTreeNode = getReadyDependAnns(false);
05776         if (readySuccTreeNode != null) {
05777             //currentTreeRoot.add(dataTreeNode);
05778             treeModel.insertNodeInto(readySuccTreeNode, currentReadyRoot, currentReadyRoot.getChildCount());
05779             // Make sure the user can see the lovely new node.
05780             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(readySuccTreeNode.getPath()));
05781 
05782             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
05783             //expand and collapse node path
05784 
05785             dependencyValueViewer.expandAndCollapseFrom(readySuccTreeNode, isDependency);
05786         }
05787     }
05788 
05789     // and then
05790     dependencyValueViewer.changeViewerState();
05791     return;
05792 }
05793 /**
05794  * 
05795  */
05796 boolean reRunJJJC() {
05797     try {
05798         CompilationManager.compile();
05799         if (CompilationManager.getExceptions().size() > 0) {
05800             System.out.println("exceptions in compilation manager: ");
05801             for (Enumeration eenu = CompilationManager.getExceptions().elements(); eenu.hasMoreElements();)
05802                 System.out.println(eenu.nextElement());
05803             throw new Exception("Errors occured when compiling the program");
05804         }
05805     } catch (Exception e) {
05806         e.printStackTrace();
05807         JOptionPane.showMessageDialog(this, e.getMessage(), "JJJC Phase for Dependencies --- Error", JOptionPane.ERROR_MESSAGE);
05808         this.success = false;
05809         return false;
05810     }
05811     this.success = true;
05812     return true;
05813 }
05814 public void restoreConfig(Configuration config) {
05815     initializeConfig();
05816     //dependencyValueViewer.setToEmptyState();
05817     isChangeCheckBoxByProgram = true;
05818     if (config.dataPred) {
05819         doPredDataDepend = true;
05820         getDataPredCheckBox().setSelected(true);
05821     }
05822     if (config.controlPred) {
05823         doPredControlDepend = true;
05824         getControlPredCheckBox().setSelected(true);
05825     }
05826     if (config.readyPred) {
05827         doPredReadyDepend = true;
05828         getReadyPredCheckBox().setSelected(true);
05829     }
05830     if (config.synchPred) {
05831         doPredSynchDepend = true;
05832         getSynchPredCheckBox().setSelected(true);
05833     }
05834     if (config.interferPred) {
05835         doPredInterferDepend = true;
05836         getInterferPredCheckBox().setSelected(true);
05837     }
05838     if (config.divergentPred) {
05839         doPredDivergentDepend = true;
05840         getDiverPredCheckBox().setSelected(true);
05841     }
05842     if (config.dataSucc) {
05843         doSuccDataDepend = true;
05844         getDataSuccCheckBox().setSelected(true);
05845     }
05846     if (config.controlSucc) {
05847         doSuccControlDepend = true;
05848         getControlSuccCheckBox().setSelected(true);
05849     }
05850     if (config.readySucc) {
05851         doSuccReadyDepend = true;
05852         getReadySuccCheckBox().setSelected(true);
05853     }
05854     if (config.synchSucc) {
05855         doSuccSynchDepend = true;
05856         getSynchSuccCheckBox().setSelected(true);
05857     }
05858     if (config.interferSucc) {
05859         doSuccInterferDepend = true;
05860         getInterferSuccCheckBox().setSelected(true);
05861     }
05862     if (config.divergentSucc) {
05863         doSuccDivergentDepend = true;
05864         getDiverSuccCheckBox().setSelected(true);
05865     }
05866     if (config.valuePred) {
05867         doPredValue = true;
05868         getValuePredCheckBox().setSelected(true);
05869     }
05870     if (config.valueSucc) {
05871         doSuccValue = true;
05872         getValueSuccCheckBox().setSelected(true);
05873     }
05874     if (config.valueSet) {
05875         doSetValue = true;
05876         getValueSetCheckBox().setSelected(true);
05877     }
05878     isChangeCheckBoxByProgram = false;
05879     //criterionViewer.currentCriterion = config.currentCriterion;
05880     //need to restore the currentCriterion to the criterion dialog
05881     //criterionViewer.showInCriterionDialog(currentCriterion);
05882 
05883     dependencyValueViewer.currentDependTreeRoot = config.currentDependTreeRoot;
05884     dependencyValueViewer.currentValueTreeRoot = config.currentValueTreeRoot;
05885     if (config.currentDependTreeRoot != null) {
05886         dependencyValueViewer.getDependencyTree().setModel(new DefaultTreeModel(config.currentDependTreeRoot));
05887         boolean isDependency = true;
05888         dependencyValueViewer.expandDependTreeToOneLevel(isDependency);
05889     }
05890     if (config.currentValueTreeRoot != null) {
05891         dependencyValueViewer.getValueTree().setModel(new DefaultTreeModel(config.currentValueTreeRoot));
05892         boolean isDependency = false;
05893         dependencyValueViewer.expandDependTreeToOneLevel(isDependency);
05894     }
05895     dependencyValueViewer.changeStateFromEmptyTo(config.dependValueViewerState);
05896     getViewerTabbedPane().setSelectedIndex(config.viewerState);
05897     queryPanel.getQueryKindComboBox().setSelectedIndex(QueryPanel.NO_QUERY);
05898     queryPanel.getQueryKindComboBox().setSelectedIndex(config.queryIndex);
05899     getCodeBrowserPane().setCurrentNodeSelected(currentNode);
05900 }
05901 /**
05902  * Insert the method's description here.
05903  * Creation date: (00-5-28 15:04:15)
05904  * @param config edu.ksu.cis.bandera.pdgslicer.dependency.Configuration
05905  */
05906 private void restoreConfigByAddingNewNode(Configuration config) {
05907     if (config.dataPred) {
05908         getDataPredCheckBox().setSelected(true);
05909     }
05910     if (config.controlPred) {
05911         getControlPredCheckBox().setSelected(true);
05912     }
05913     if (config.readyPred) {
05914         getReadyPredCheckBox().setSelected(true);
05915     }
05916     if (config.synchPred) {
05917         getSynchPredCheckBox().setSelected(true);
05918     }
05919     if (config.interferPred) {
05920         getInterferPredCheckBox().setSelected(true);
05921     }
05922     if (config.divergentPred) {
05923         getDiverPredCheckBox().setSelected(true);
05924     }
05925     if (config.dataSucc) {
05926         getDataSuccCheckBox().setSelected(true);
05927     }
05928     if (config.controlSucc) {
05929         getControlSuccCheckBox().setSelected(true);
05930     }
05931     if (config.readySucc) {
05932         getReadySuccCheckBox().setSelected(true);
05933     }
05934     if (config.synchSucc) {
05935         getSynchSuccCheckBox().setSelected(true);
05936     }
05937     if (config.interferSucc) {
05938         getInterferSuccCheckBox().setSelected(true);
05939     }
05940     if (config.divergentSucc) {
05941         getDiverSuccCheckBox().setSelected(true);
05942     }
05943     if (config.valuePred) {
05944         getValuePredCheckBox().setSelected(true);
05945     }
05946     if (config.valueSucc) {
05947         getValueSuccCheckBox().setSelected(true);
05948     }
05949     if (config.valueSet) {
05950         getValueSetCheckBox().setSelected(true);
05951     }
05952     queryPanel.getQueryKindComboBox().setSelectedIndex(QueryPanel.NO_QUERY);
05953     queryPanel.getQueryKindComboBox().setSelectedIndex(config.queryIndex);
05954 }
05955 /**
05956  * Insert the method's description here.
05957  * Creation date: (00-7-4 17:21:42)
05958  */
05959  boolean runBuildingPDG() {
05960     try {
05961         Hashtable compiledClasses = CompilationManager.getAnnotationManager().getAnnotationTable();
05962         SootClass[] sootClasses = new SootClass[compiledClasses.size()];
05963         int i = 0;
05964         for (Enumeration e = compiledClasses.keys(); e.hasMoreElements(); i++)
05965             sootClasses[i] = (SootClass) e.nextElement();
05966         slicer = new Slicer(sootClasses, CompilationManager.getAnnotationManager());
05967         slicer.buildPDG();
05968     } catch (Exception e) {
05969         System.out.println("exception: " + e);
05970         e.printStackTrace();
05971         JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
05972         //BUI.isExecuting = false;
05973         CompilationManager.setModifiedMethodTable(new Hashtable());
05974         this.success = false;
05975         return false;
05976     }
05977     this.success = true;
05978     return true;
05979 }
05980 /**
05981  * Insert the method's description here.
05982  * Creation date: (00-11-13 14:49:43)
05983  * @param checkBox javax.swing.JCheckBox
05984  */
05985 private void selectStatementWarning(AbstractButton checkBox) {
05986     JOptionPane.showMessageDialog(this, "Please choose statement first", "No statement selected", JOptionPane.WARNING_MESSAGE);
05987     isChangeCheckBoxByProgram = true;
05988     checkBox.setSelected(false);
05989     isChangeCheckBoxByProgram = false;
05990 }
05991 private Set stmtSetEffectedBy(Map interferMap, Set stmtSet) {
05992     Set effectedStmtSet = new ArraySet();
05993     for (Iterator keyIt = interferMap.keySet().iterator(); keyIt.hasNext();) {
05994         Stmt keyStmt = (Stmt) keyIt.next();
05995         List interferOnList = (List) interferMap.get(keyStmt);
05996         if (interferOnListContains(interferOnList, stmtSet))
05997             effectedStmtSet.add(keyStmt);
05998     }
05999     return effectedStmtSet;
06000 }
06001 /**
06002  * Comment
06003  */
06004 public void synchPredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
06005     if (currentNode == null) {
06006         selectStatementWarning(getSynchPredCheckBox());
06007         return;
06008     }
06009     dependencyValueViewer.setState(Frame.NORMAL);
06010     dependencyValueViewer.toFront();
06011     doPredSynchDepend = !doPredSynchDepend;
06012     if (!doPredSynchDepend) {
06013         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
06014         //remove data subtree;
06015 
06016         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
06017             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
06018             if (oneChild.toString().equals("Synchronization Dependence")) {
06019                 if (oneChild.getChildCount() == 1) {
06020                     treeModel.removeNodeFromParent(oneChild);
06021                     break;
06022                 } else {
06023                     for (int j = 0; j < oneChild.getChildCount(); j++) {
06024                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
06025                         if (predSuccChild.toString().equals("Predecessors")) {
06026                             treeModel.removeNodeFromParent(predSuccChild);
06027                             break;
06028                         }
06029                     }
06030                 }
06031                 break;
06032             }
06033         }
06034     } else {
06035         boolean isDependency = true;
06036         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
06037         DefaultMutableTreeNode currentSynchRoot = null;
06038         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
06039             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
06040             if (oneChild.toString().equals("Synchronization Dependence")) {
06041                 currentSynchRoot = oneChild;
06042                 break;
06043             }
06044         }
06045         if (currentSynchRoot == null) {
06046             currentSynchRoot = new DefaultMutableTreeNode("Synchronization Dependence");
06047             int insertIndex = dependencyValueViewer.getInsertIndexOf("Synchronization Dependence", isDependency);
06048             treeModel.insertNodeInto(currentSynchRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
06049         }
06050         DefaultMutableTreeNode synchPredTreeNode = getSynchDependAnns(true);
06051         if (synchPredTreeNode != null) {
06052             //currentTreeRoot.add(dataTreeNode);
06053             treeModel.insertNodeInto(synchPredTreeNode, currentSynchRoot, 0);
06054             // Make sure the user can see the lovely new node.
06055             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(synchPredTreeNode.getPath()));
06056 
06057             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
06058             //expand and collapse node path
06059 
06060             dependencyValueViewer.expandAndCollapseFrom(synchPredTreeNode, isDependency);
06061         }
06062     }
06063     // and then
06064     dependencyValueViewer.changeViewerState();
06065     return;
06066 }
06067 /**
06068  * Comment
06069  */
06070 public void synchSuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
06071     if (currentNode == null) {
06072         selectStatementWarning(getSynchSuccCheckBox());
06073         return;
06074     }
06075     dependencyValueViewer.setState(Frame.NORMAL);
06076     dependencyValueViewer.toFront();
06077     doSuccSynchDepend = !doSuccSynchDepend;
06078     if (!doSuccSynchDepend) {
06079         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
06080         //remove data subtree;
06081 
06082         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
06083             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
06084             if (oneChild.toString().equals("Synchronization Dependence")) {
06085                 if (oneChild.getChildCount() == 1) {
06086                     treeModel.removeNodeFromParent(oneChild);
06087                     break;
06088                 } else {
06089                     for (int j = 0; j < oneChild.getChildCount(); j++) {
06090                         DefaultMutableTreeNode predSuccChild = (DefaultMutableTreeNode) oneChild.getChildAt(j);
06091                         if (predSuccChild.toString().equals("Successors")) {
06092                             treeModel.removeNodeFromParent(predSuccChild);
06093                             break;
06094                         }
06095                     }
06096                 }
06097                 break;
06098             }
06099         }
06100     } else {
06101         boolean isDependency = true;
06102         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getDependencyTree().getModel();
06103         DefaultMutableTreeNode currentSynchRoot = null;
06104         for (int i = 0; i < dependencyValueViewer.currentDependTreeRoot.getChildCount(); i++) {
06105             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentDependTreeRoot.getChildAt(i);
06106             if (oneChild.toString().equals("Synchronization Dependence")) {
06107                 currentSynchRoot = oneChild;
06108                 break;
06109             }
06110         }
06111         if (currentSynchRoot == null) {
06112             currentSynchRoot = new DefaultMutableTreeNode("Synchornization Dependence");
06113             int insertIndex = dependencyValueViewer.getInsertIndexOf("Synchronization Dependence", isDependency);
06114             treeModel.insertNodeInto(currentSynchRoot, dependencyValueViewer.currentDependTreeRoot, insertIndex);
06115         }
06116         DefaultMutableTreeNode synchSuccTreeNode = getSynchDependAnns(false);
06117         if (synchSuccTreeNode != null) {
06118             //currentTreeRoot.add(dataTreeNode);
06119             treeModel.insertNodeInto(synchSuccTreeNode, currentSynchRoot, currentSynchRoot.getChildCount());
06120             // Make sure the user can see the lovely new node.
06121             dependencyValueViewer.getDependencyTree().scrollPathToVisible(new TreePath(synchSuccTreeNode.getPath()));
06122 
06123             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
06124             //expand and collapse node path
06125 
06126             dependencyValueViewer.expandAndCollapseFrom(synchSuccTreeNode, isDependency);
06127         }
06128     }
06129 
06130     // and then
06131     dependencyValueViewer.changeViewerState();
06132     return;
06133 }
06134 /**
06135  * Insert the method's description here.
06136  * Creation date: (00-7-2 19:52:50)
06137  * @return java.util.Vector
06138  * @param v java.util.Vector
06139  */
06140 Vector transformCriterion(Vector v) {
06141     SootClassManager scm = CompilationManager.getSootClassManager();
06142     for (Enumeration e = v.elements(); e.hasMoreElements();) {
06143         SliceInterest si = (SliceInterest) e.nextElement();
06144         SootClass scInV = si.getSootClass();
06145         SootClass newSc = scm.getClass(scInV.getName());
06146         si.setSootClass(newSc);
06147         if (si instanceof SliceLocal) {
06148             SliceLocal sloc = (SliceLocal) si;
06149             SootMethod sm = sloc.getSootMethod();
06150             SootMethod newSm = newSc.getMethod(sm.getName());
06151             sloc.setSootMethod(newSm);
06152             Local loc = sloc.getLocal();
06153             JimpleBody jimpleBody = (JimpleBody) newSm.getBody(Jimple.v());
06154             Local newLoc = jimpleBody.getLocal(loc.getName());
06155             sloc.setLocal(newLoc);
06156         } else
06157             if (si instanceof SlicePoint) {
06158                 SlicePoint spt = (SlicePoint) si;
06159                 SootMethod sm = spt.getSootMethod();
06160                 SootMethod newSm = newSc.getMethod(sm.getName());
06161                 spt.setSootMethod(newSm);
06162                 int index = spt.getIndex();
06163                 JimpleBody jimpleBody = (JimpleBody) newSm.getBody(Jimple.v());
06164                 StmtList stmtList = jimpleBody.getStmtList();
06165                 Stmt newStmt = (Stmt) stmtList.get(index);
06166                 spt.setStmt(newStmt);
06167             } else
06168                 if (si instanceof SliceField) {
06169                     SliceField sfd = (SliceField) si;
06170                     SootField stfd = sfd.getSootField();
06171                     SootField newSf = newSc.getField(stfd.getName());
06172                     sfd.setSootField(newSf);
06173                 }
06174     }
06175     return v;
06176 }
06177 private boolean treePathContains(DefaultMutableTreeNode currentLeaf, Object aNode) {
06178     if (aNode instanceof StmtTreeNode) {
06179         StmtTreeNode node = (StmtTreeNode) aNode;
06180         TreeNode[] nodesInPath = currentLeaf.getPath();
06181         for (int i = 0; i < nodesInPath.length; i++) {
06182             DefaultMutableTreeNode nodeInPath = (DefaultMutableTreeNode) nodesInPath[i];
06183             Object objectInNode = nodeInPath.getUserObject();
06184             if (node.equals(objectInNode))
06185                 return true;
06186         }
06187     } else
06188         if (aNode instanceof Annotation) {
06189             Annotation nodeAnnotation = (Annotation) aNode;
06190             TreeNode[] nodesInPath = currentLeaf.getPath();
06191             for (int i = 0; i < nodesInPath.length; i++) {
06192                 DefaultMutableTreeNode nodeInPath = (DefaultMutableTreeNode) nodesInPath[i];
06193                 Object objectInNode = nodeInPath.getUserObject();
06194                 Object annotationInNode = null;
06195                 if (objectInNode instanceof StmtTreeNode)
06196                     annotationInNode = (Object) ((StmtTreeNode) objectInNode).currentStmtAnnotation;
06197                 else
06198                     annotationInNode = objectInNode;
06199                 if (nodeAnnotation.equals(annotationInNode))
06200                     return true;
06201             }
06202         }
06203     return false;
06204 }
06205 /**
06206  * Comment
06207  */
06208 public void valuePredCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
06209     if (currentNode == null) {
06210         selectStatementWarning(getValuePredCheckBox());
06211         return;
06212     }
06213     dependencyValueViewer.setState(Frame.NORMAL);
06214     dependencyValueViewer.toFront();
06215     doPredValue = !doPredValue;
06216     if (!doPredValue) {
06217         //remove value predecessor from value tree
06218         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
06219         //remove value subtree;
06220 
06221         for (int i = 0; i < dependencyValueViewer.currentValueTreeRoot.getChildCount(); i++) {
06222             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentValueTreeRoot.getChildAt(i);
06223             if (oneChild.toString().equals("Value Predecessors")) {
06224                 treeModel.removeNodeFromParent(oneChild);
06225                 break;
06226             }
06227         }
06228     } else {
06229         //calculate value predecessor and add it to current tree.
06230         boolean isDependency = false;
06231         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
06232         //DefaultMutableTreeNode currentValuePredRoot =new DefaultMutableTreeNode("Value Predecessors");
06233         int insertIndex = dependencyValueViewer.getInsertIndexOf("Value Predecessors", isDependency);
06234         DefaultMutableTreeNode currentValuePredRoot = getValuePredAnns();
06235         if (currentValuePredRoot != null) {
06236             //currentTreeRoot.add(dataTreeNode);
06237             treeModel.insertNodeInto(currentValuePredRoot, dependencyValueViewer.currentValueTreeRoot, insertIndex);
06238             // Make sure the user can see the lovely new node.
06239             dependencyValueViewer.getValueTree().scrollPathToVisible(new TreePath(currentValuePredRoot.getPath()));
06240 
06241             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
06242             //expand and collapse node path
06243 
06244             dependencyValueViewer.expandAndCollapseFrom(currentValuePredRoot, isDependency);
06245         }
06246     }
06247     // and then
06248     dependencyValueViewer.changeViewerState();
06249     return;
06250 }
06251 /**
06252  * Comment
06253  */
06254 public void valueSetCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
06255     if (currentNode == null) {
06256         selectStatementWarning(getValueSetCheckBox());
06257         return;
06258     }
06259     dependencyValueViewer.setState(Frame.NORMAL);
06260     dependencyValueViewer.toFront();
06261     doSetValue = !doSetValue;
06262     if (doSetValue) {
06263         //calculate value set and add it to current tree.
06264         boolean isDependency = false;
06265         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
06266         DefaultMutableTreeNode currentValueSetRoot = new DefaultMutableTreeNode("Value Set");
06267         int insertIndex = dependencyValueViewer.getInsertIndexOf("Value Set", isDependency);
06268         treeModel.insertNodeInto(currentValueSetRoot, dependencyValueViewer.currentValueTreeRoot, insertIndex);
06269         calculateValueSet(currentValueSetRoot);
06270         dependencyValueViewer.getValueTree().scrollPathToVisible(new TreePath(currentValueSetRoot.getPath()));
06271         dependencyValueViewer.expandAndCollapseFrom(currentValueSetRoot, isDependency);
06272     } else {
06273         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
06274         for (int i = 0; i < dependencyValueViewer.currentValueTreeRoot.getChildCount(); i++) {
06275             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentValueTreeRoot.getChildAt(i);
06276             if (oneChild.toString().equals("Value Set")) {
06277                 treeModel.removeNodeFromParent(oneChild);
06278                 break;
06279             }
06280         }
06281     }
06282     // and then
06283     dependencyValueViewer.changeViewerState();
06284     return;
06285 }
06286 /**
06287  * Comment
06288  */
06289 public void valueSuccCheckBox_ItemStateChanged(java.awt.event.ItemEvent itemEvent) {
06290     if (currentNode == null) {
06291         selectStatementWarning(getValueSuccCheckBox());
06292         return;
06293     }
06294     dependencyValueViewer.setState(Frame.NORMAL);
06295     dependencyValueViewer.toFront();
06296     doSuccValue = !doSuccValue;
06297     if (!doSuccValue) {
06298         //remove value successors from data tree
06299         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
06300         //remove value subtree;
06301 
06302         for (int i = 0; i < dependencyValueViewer.currentValueTreeRoot.getChildCount(); i++) {
06303             DefaultMutableTreeNode oneChild = (DefaultMutableTreeNode) dependencyValueViewer.currentValueTreeRoot.getChildAt(i);
06304             if (oneChild.toString().equals("Value Successors")) {
06305                 treeModel.removeNodeFromParent(oneChild);
06306                 break;
06307             }
06308         }
06309     } else {
06310         //calculate value successors and add it to current tree.
06311         boolean isDependency = false;
06312         DefaultTreeModel treeModel = (DefaultTreeModel) dependencyValueViewer.getValueTree().getModel();
06313         //DefaultMutableTreeNode currentValuePredRoot =new DefaultMutableTreeNode("Value Predecessors");
06314         int insertIndex = dependencyValueViewer.getInsertIndexOf("Value Successors", isDependency);
06315         DefaultMutableTreeNode currentValueSuccRoot = getValueSuccAnns();
06316         if (currentValueSuccRoot != null) {
06317             //currentTreeRoot.add(dataTreeNode);
06318             treeModel.insertNodeInto(currentValueSuccRoot, dependencyValueViewer.currentValueTreeRoot, insertIndex);
06319             // Make sure the user can see the lovely new node.
06320             dependencyValueViewer.getValueTree().scrollPathToVisible(new TreePath(currentValueSuccRoot.getPath()));
06321 
06322             //getDependencyTree().setModel(new DefaultTreeModel(currentTreeRoot));
06323             //expand and collapse node path
06324 
06325             dependencyValueViewer.expandAndCollapseFrom(currentValueSuccRoot, isDependency);
06326         }
06327     }
06328     // and then
06329     dependencyValueViewer.changeViewerState();
06330     return;
06331 }
06332 /**
06333  * Insert the method's description here.
06334  * Creation date: (00-6-15 0:11:32)
06335  * @return java.util.HashSet
06336  * @param mdInfo edu.ksu.cis.bandera.pdgslicer.MethodInfo
06337  * @param notifyStmt edu.ksu.cis.bandera.pdgslicer.SynchroStmt
06338  */
06339 private  Set waitSetEffectedBy(MethodInfo methodInfo, SynchroStmt notifyStmt) {
06340     Set waitSet = new ArraySet();
06341     BuildPDG methodPDG = methodInfo.methodPDG;
06342     Map readyDependMap = methodPDG.getReadyDependMap();
06343     if (readyDependMap == null)
06344         return waitSet;
06345     Stmt notifyJimpleStmt = notifyStmt.getWaitNotify();
06346     for (Iterator keyIt = readyDependMap.keySet().iterator(); keyIt.hasNext();) {
06347         Stmt keyStmt = (Stmt) keyIt.next();
06348         List readyOnList = (List) readyDependMap.get(keyStmt);
06349         if (readyOnListContains(readyOnList, notifyJimpleStmt))
06350             waitSet.add(keyStmt);
06351     }
06352     return waitSet;
06353 }
06354 /**
06355  * Method to handle events for the WindowListener interface.
06356  * @param e java.awt.event.WindowEvent
06357  */
06358 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06359 public void windowActivated(java.awt.event.WindowEvent e) {
06360     // user code begin {1}
06361     // user code end
06362     // user code begin {2}
06363     // user code end
06364 }
06365 /**
06366  * Method to handle events for the WindowListener interface.
06367  * @param e java.awt.event.WindowEvent
06368  */
06369 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06370 public void windowClosed(java.awt.event.WindowEvent e) {
06371     // user code begin {1}
06372     // user code end
06373     if (e.getSource() == this) 
06374         connEtoC1(e);
06375     // user code begin {2}
06376     // user code end
06377 }
06378 /**
06379  * Method to handle events for the WindowListener interface.
06380  * @param e java.awt.event.WindowEvent
06381  */
06382 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06383 public void windowClosing(java.awt.event.WindowEvent e) {
06384     // user code begin {1}
06385     // user code end
06386     // user code begin {2}
06387     // user code end
06388 }
06389 /**
06390  * Method to handle events for the WindowListener interface.
06391  * @param e java.awt.event.WindowEvent
06392  */
06393 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06394 public void windowDeactivated(java.awt.event.WindowEvent e) {
06395     // user code begin {1}
06396     // user code end
06397     // user code begin {2}
06398     // user code end
06399 }
06400 /**
06401  * Method to handle events for the WindowListener interface.
06402  * @param e java.awt.event.WindowEvent
06403  */
06404 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06405 public void windowDeiconified(java.awt.event.WindowEvent e) {
06406     // user code begin {1}
06407     // user code end
06408     // user code begin {2}
06409     // user code end
06410 }
06411 /**
06412  * Method to handle events for the WindowListener interface.
06413  * @param e java.awt.event.WindowEvent
06414  */
06415 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06416 public void windowIconified(java.awt.event.WindowEvent e) {
06417     // user code begin {1}
06418     // user code end
06419     // user code begin {2}
06420     // user code end
06421 }
06422 /**
06423  * Method to handle events for the WindowListener interface.
06424  * @param e java.awt.event.WindowEvent
06425  */
06426 /* WARNING: THIS METHOD WILL BE REGENERATED. */
06427 public void windowOpened(java.awt.event.WindowEvent e) {
06428     // user code begin {1}
06429     // user code end
06430     // user code begin {2}
06431     // user code end
06432 }
06433 }

Generated at Thu Feb 7 06:43:48 2002 for Bandera by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001