[Soot-list] Boolean Annotation Problem / Entity

Ondrej Lhotak olhotak at uwaterloo.ca
Wed Jun 15 12:55:41 EDT 2011


The places to look are the setEntryPoints method in the Scene class, and
the EntryPoints class.

On Tue, Jun 14, 2011 at 05:38:05PM +0200, Tillmann wrote:
> Hi,
> 
> i found out that's a problem by parsing annotations with boolean 
> elements (e.g. in JavaEE Entities - @Column(nullable=true/false)). The 
> jimple-generation results in an exception thrown by 
> ElementConstantValue. My quick-and-dirty solution is at the end of this 
> post.
> 
> Anyone has an answer of my Question asked a week before?
> 
> "I want to use soot and build several analysis in the JavaEE context. I 
> have a focus on inter-procedural analysis (CHA, Call-Graph, ...), so i 
> set the -w option. The problem is, that i have no main class / 
> main(String[] args)-method in JavaEE context, so i want to define other 
> entrypoints (and more than one) for my test candidate (war/ejb). I found 
> no option to define such behaviour.
> 
> Question 1: Is it possible to define dedicated methods as entry points 
> for further analysis?
> Question 2: Is it possible to define more than one method as entry point?"
> 
> My input is Java-(source)code.
> 
> Index: generated/jastadd/soot/JastAddJ/ElementConstantValue.java
> ===================================================================
> --- generated/jastadd/soot/JastAddJ/ElementConstantValue.java	(revision 3571)
> +++ generated/jastadd/soot/JastAddJ/ElementConstantValue.java	(working copy)
> @@ -1,6 +1,7 @@
> 
>   package soot.JastAddJ;
> -import java.util.HashSet;import java.util.LinkedHashSet;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;import java.io.FileNotFoundException;import java.util.Collection;import soot.*;import soot.util.*;import soot.jimple.*;import soot.coffi.ClassFile;import soot.coffi.method_info;import soot.coffi.CONSTANT_Utf8_info;import soot.tagkit.SourceFileTag;import soot.coffi.CoffiMethodSource;
> +import java.util.HashSet;import java.util.LinkedHashSet;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;import java.util.Collection;import soot.*;import soot.util.*;import soot.jimple.*;import soot.coffi.ClassFile;import soot.coffi.method_info;import soot.coffi.CONSTANT_Utf8_info;import soot.tagkit.AnnotationBooleanElem;
> +import soot.tagkit.SourceFileTag;import soot.coffi.CoffiMethodSource;
> 
> 
>   public class ElementConstantValue extends ElementValue implements Cloneable {
> @@ -71,8 +72,11 @@
>           list.add(new soot.tagkit.AnnotationFloatElem(getExpr().constant().floatValue(), kind, name));
>         else if(type.isString())
>           list.add(new soot.tagkit.AnnotationStringElem(getExpr().constant().stringValue(), kind, name));
> -      else if(type.isIntegralType() || type().isBoolean())
> +      else if(type.isIntegralType())
>           list.add(new soot.tagkit.AnnotationIntElem(getExpr().constant().intValue(), kind, name));
> +      else if(type().isBoolean()){
> +    	list.add(new soot.tagkit.AnnotationBooleanElem(getExpr().constant().booleanValue(), kind, name));
> +      }
>         else
>           throw new UnsupportedOperationException("Unsupported attribute constant type " + type.typeName());
>       }
> Index: src/soot/AbstractJasminClass.java
> ===================================================================
> --- src/soot/AbstractJasminClass.java	(revision 3571)
> +++ src/soot/AbstractJasminClass.java	(working copy)
> @@ -260,11 +260,19 @@
>           StringBuffer result = new StringBuffer(".elem ");
>           switch (elem.getKind()){
>               case 'Z': {
> -                        result.append(".bool_kind ");
> -                        result.append("\""+elem.getName()+"\" ");
> -                        result.append(((AnnotationIntElem)elem).getValue());
> -                        result.append("\n");
> -                        break;
> +		    			result.append(".bool_kind ");
> +		    			result.append("\"" + elem.getName() + "\" ");
> +		    			if (elem instanceof AnnotationIntElem) {
> +		    				result.append(((AnnotationIntElem) elem).getValue());
> +		    			} else {
> +		    				if (((AnnotationBooleanElem) elem).getValue()) {
> +		    					result.append(1);
> +		    				} else {
> +		    					result.append(0);
> +		    				}
> +		    			}
> +		    			result.append("\n");
> +		    			break;
>                         }
>               case 'S': {
>                           result.append(".short_kind ");
> Index: generated/jastadd/soot/tagkit/AnnotationBooleanElem.java
> ===================================================================
> --- generated/jastadd/soot/tagkit/AnnotationBooleanElem.java	(revision 0)
> +++ generated/jastadd/soot/tagkit/AnnotationBooleanElem.java	(revision 0)
> @@ -0,0 +1,18 @@
> +package soot.tagkit;
> +
> +public class AnnotationBooleanElem extends AnnotationElem{
> +    boolean value;
> +
> +    public AnnotationBooleanElem(boolean v, char kind, String name){
> +        super(kind, name);
> +        this.value = v;
> +    }
> +
> +    public String toString(){
> +        return super.toString()+" value: " +value;
> +    }
> +
> +    public boolean getValue(){
> +        return value;
> +    }
> +}
> 
> 
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> 


More information about the Soot-list mailing list