Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 2004 Jennifer Lhotak
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
 
 package soot.toolkits.graph.interaction;
 
 import soot.*;
 import java.util.*;
 import soot.options.*;
 
 public class InteractionHandler {
    
     public InteractionHandler(Singletons.Global g){}
     public static InteractionHandler v() { return G.v().soot_toolkits_graph_interaction_InteractionHandler();}
 
     private ArrayList<ObjectstopUnitList;
     public ArrayList<ObjectgetStopUnitList(){
         return ;
     }
     public void addToStopUnitList(Object elem){
         if ( == null){
              = new ArrayList<Object>();
         }
         .add(elem);
     }
     
     public void removeFromStopUnitList(Object elem){
         if (.contains(elem)){
             .remove(elem);
         }
     }
 
     public void handleNewAnalysis(Transform tBody b){
         // here save current phase name and only send if actual data flow analysis exists
         if (PhaseOptions.getBoolean(PhaseOptions.v().getPhaseOptionst.getPhaseName()), "enabled")){
             String name = t.getPhaseName()+" for method: "+b.getMethod().getName();
             currentPhaseName(name);
             currentPhaseEnabled(true);
             doneCurrent(false);
         }
         else {
             currentPhaseEnabled(false);
             setInteractThisAnalysis(false);
         }
     }
 
     public void handleCfgEvent(DirectedGraph g){
         if (currentPhaseEnabled()){
             G.v()..println("Analyzing: "+currentPhaseName());
         }
         if (isInteractThisAnalysis()){
             doInteraction(new InteractionEvent(.g));
         }
     }
 
     public void handleStopAtNodeEvent(Object u){
         if (isInteractThisAnalysis()){
         }
     }
     
     public void handleBeforeAnalysisEvent(Object beforeFlow){
         if (isInteractThisAnalysis()){
             if (autoCon()){
                 doInteraction(new InteractionEvent(.beforeFlow));
             }
             else{
                 doInteraction(new InteractionEvent(.beforeFlow));
             }
         }
     }
 
     public void handleAfterAnalysisEvent(Object afterFlow){
         if (isInteractThisAnalysis()){
             if (autoCon()){
                 doInteraction(new InteractionEvent(.afterFlow));
             }
             else {
                 doInteraction(new InteractionEvent(.afterFlow));
             }
         }
    }
    public void handleTransformDone(Transform tBody b){
        doneCurrent(true);
        if (isInteractThisAnalysis()){
            doInteraction(new InteractionEvent(.null));
        }
    }
   
    public void handleCallGraphStart(Object infoCallGraphGrapher grapher){
        setGrapher(grapher);
        if (!isCgReset()){
            handleCallGraphNextMethod();
        }
        else {
            setCgReset(false);
            handleReset();
        }
    }
   
    public void handleCallGraphNextMethod(){
        if (!cgDone()){
            getGrapher().setNextMethod(getNextMethod());
            getGrapher().handleNextMethod();
        }
    }
    private boolean cgReset = false;
    public void setCgReset(boolean v){
         = v;
    }
    public boolean isCgReset(){
        return ;
    }
    
    public void handleReset(){
        if (!cgDone()){
            getGrapher().reset();
        }
    }
    public void handleCallGraphPart(Object info){
        if (!isCgReset()){
            handleCallGraphNextMethod();
        }
        else {
            setCgReset(false);
            handleReset();
        }
    }
        
    private CallGraphGrapher grapher;
    private void setGrapher(CallGraphGrapher g){
         = g;
    }
    private CallGraphGrapher getGrapher(){
        return ;
    }
    private SootMethod nextMethod;
    public void setNextMethod(SootMethod m){
         = m;
    }
    private SootMethod getNextMethod(){
        return ;
    }
    
    private synchronized void doInteraction(InteractionEvent event){
        getInteractionListener().setEvent(event);
    
    }
    public synchronized void waitForContinue(){
        try {
            this.wait();
        }
        catch (InterruptedException e){
        }
        
    }
    
    private boolean interactThisAnalysis;
    public void setInteractThisAnalysis(boolean b){
         = b;
    }
    public boolean isInteractThisAnalysis(){
        return ;
    }
    private boolean interactionCon;
    public synchronized void setInteractionCon(){
        this.notify();
    }
    public boolean isInteractionCon(){
        return ;
    }
    public void setInteractionListener(IInteractionListener listener){
         = listener;
    }
        return ;
    }
    
    private String currentPhaseName;
    public void currentPhaseName(String name){
         = name;
    }
    public String currentPhaseName(){
        return ;
    }
    private boolean currentPhaseEnabled;    
    public void currentPhaseEnabled(boolean b){
         = b;
    }
    public boolean currentPhaseEnabled(){
        return ;
    }
    private boolean cgDone = false;
    public void cgDone(boolean b){
         = b;
    }
    public boolean cgDone(){
        return ;
    }
    private boolean doneCurrent;
    public void doneCurrent(boolean b){
         = b;
    }
    public boolean doneCurrent(){
        return ;
    }
    private boolean autoCon;
    public void autoCon(boolean b){
         = b;
    }
    public boolean autoCon(){
        return ;
    }
    public void stopInteraction(boolean b){
        Options.v().set_interactive_mode(false);
    }
    
New to GrepCode? Check out our FAQ X