Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 2003 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.jimple.toolkits.annotation.nullcheck;
 
 import soot.*;
 import soot.tagkit.*;
 import java.util.*;
 import soot.jimple.*;
 
 public class NullPointerColorer extends BodyTransformer {
 
 	public NullPointerColorerSingletons.Global g ) {}
 
 	protected void internalTransform (Body bString phaseNameMap options) {
 		
 
 		Iterator it = b.getUnits().iterator();
 
 		while (it.hasNext()) {
 			Stmt s = (Stmt)it.next();
 			
 			Iterator usesIt = s.getUseBoxes().iterator();
 			FlowSet beforeSet = (FlowSet)analysis.getFlowBefore(s);
 				
 			while (usesIt.hasNext()) {
 				ValueBox vBox = (ValueBox)usesIt.next();
 				addColorTags(vBoxbeforeSetsanalysis);
 			}
 
 			Iterator defsIt = s.getDefBoxes().iterator();
 			FlowSet afterSet = (FlowSet)analysis.getFallFlowAfter(s);
 
 			while (defsIt.hasNext()){
 				ValueBox vBox = (ValueBox)defsIt.next();
 				addColorTags(vBoxafterSetsanalysis);
 			}
 		}
 
         Iterator keysIt = b.getMethod().getDeclaringClass().getTags().iterator();
         boolean keysAdded = false;
         while (keysIt.hasNext()){
             Object next = keysIt.next();
             if (next instanceof KeyTag){
                 if (((KeyTag)next).analysisType().equals("NullCheckTag")){
                     keysAdded = true;  
                 }
             }
         }
         if (!keysAdded){
             b.getMethod().getDeclaringClass().addTag(new KeyTag(."Nullness: Null""NullCheckTag"));
             b.getMethod().getDeclaringClass().addTag(new KeyTag(."Nullness: Not Null""NullCheckTag"));
             b.getMethod().getDeclaringClass().addTag(new KeyTag(."Nullness: Nullness Unknown""NullCheckTag"));
         }
 	}
 	
 	private void addColorTags(ValueBox vBoxFlowSet setStmt sBranchedRefVarsAnalysis analysis){
 		
 		Value val = vBox.getValue();
 		if (val.getType() instanceof RefLikeType) {
 			//G.v().out.println(val+": "+val.getClass().toString());
 		
 			int vInfo = analysis.anyRefInfo(valset);
 
 			switch (vInfo) {
 				case 1 : {
 					// analysis.kNull
 					s.addTag(new StringTag(val+": Null""NullCheckTag"));
 					vBox.addTag(new ColorTag(."NullCheckTag"));
 					break;
 						 }
 				case 2 : {
 					// analysis.kNonNull 
 					s.addTag(new StringTag(val+": NonNull""NullCheckTag"));
 					vBox.addTag(new ColorTag(."NullCheckTag"));
 					break;
 						 }
 				case 99 : {
					// analysis.KTop:
					s.addTag(new StringTag(val+": Nullness Unknown""NullCheckTag"));
					vBox.addTag(new ColorTag(."NullCheckTag"));
					break;
						  }
				case 0 : {
					// analysis.kBottom
					s.addTag(new StringTag(val+": Nullness Unknown""NullCheckTag"));
					vBox.addTag(new ColorTag(."NullCheckTag"));
					break;
						 }
			}
		}
		else {
		}
	}
New to GrepCode? Check out our FAQ X