[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