Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 2003, 2004 Ondrej 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;
 import soot.jimple.*;
 import soot.util.*;
 import java.util.*;

UnitPrinter implementation for representations that have labelled stmts, such as Jimple, Grimp, and Baf
 
 public abstract class LabeledUnitPrinter extends AbstractUnitPrinter {
    
branch targets
 
     protected Map labels;
    
for unit references in Phi nodes
 
     protected Map<UnitStringreferences;
 
     public LabeledUnitPrinterBody b ) {
         createLabelMaps(b);
     }
 
     public Map labels() { return ; }
     public Map<UnitStringreferences() { return ; }
 
     public abstract void literalString s );
     public abstract void methodRefSootMethodRef m );
     public abstract void fieldRefSootFieldRef f );
     public abstract void identityRefIdentityRef r );
     public abstract void typeType t );
 
     public void unitRefUnit uboolean branchTarget ) {
         String oldIndent = getIndent();
         
         // normal case, ie labels
         if(branchTarget){
             setIndent();
             handleIndent();
             setIndent(oldIndent);
             String label = (String.getu );
             iflabel == null || label.equals"<unnamed>" ) )
                 label = "[?= "+u+"]";
             .append(label);
         }
         // refs to control flow predecessors (for Shimple)
         else{
             String ref = .getu );
 
             if(){
                 String newIndent = "(" + ref + ")" +
                     .substring(ref.length() + 2);
                 setIndent(newIndent);
                 handleIndent();
                 setIndent(oldIndent);
             }
             else
                 .append(ref);
         }
     }
     
     private void createLabelMaps(Body body) {
         Chain units = body.getUnits();
 
          = new HashMap(units.size() * 2 + 1, 0.7f);
          = new HashMap<UnitString>(units.size() * 2 + 1, 0.7f);
         
         // Create statement name table
         {
             Iterator boxIt = body.getAllUnitBoxes().iterator();
 
             Set<UnitlabelStmts = new HashSet<Unit>();
             Set<UnitrefStmts = new HashSet<Unit>();
             
             // Build labelStmts and refStmts
             {
                 while (boxIt.hasNext()) {
                     UnitBox box = (UnitBoxboxIt.next();
                     Unit stmt = box.getUnit();
 
                     if(box.isBranchTarget())
                         labelStmts.add(stmt);
                     else
                         refStmts.add(stmt);
                }
            }
            // Traverse the stmts and assign a label if necessary
            {
                int labelCount = 0;
                int refCount = 0;
                
                Iterator stmtIt = units.iterator();
                while (stmtIt.hasNext()) {
                    Unit s = (UnitstmtIt.next();
                    if (labelStmts.contains(s)) 
                        .put(s"label" + (labelCount++));
                    if (refStmts.contains(s))
                        .put(s, Integer.toString(refCount++));
                }
            }
        }
    }
    protected String labelIndent = "     ";
New to GrepCode? Check out our FAQ X