Java 类soot.jimple.ClassConstant 实例源码

项目:JAADAS    文件:BafASMBackend.java   
@Override
protected int getMinJavaVersion(SootMethod method) {
    final BafBody body = getBafBody(method);        
    int minVersion = Options.java_version_1_1;

    for (Unit u : body.getUnits()) {
        if (u instanceof DynamicInvokeInst) {
            return Options.java_version_1_7;
        }
        if (u instanceof PushInst) {
            if (((PushInst) u).getConstant() instanceof ClassConstant) {
                minVersion = Options.java_version_1_5;
            }
        }
    }

    return minVersion;
}
项目:JAADAS    文件:ConstClassInstruction.java   
public void jimplify (DexBody body) {
      if(!(instruction instanceof Instruction21c))
          throw new IllegalArgumentException("Expected Instruction21c but got: "+instruction.getClass());

      ReferenceInstruction constClass = (ReferenceInstruction) this.instruction;

      TypeReference tidi = (TypeReference)(constClass.getReference());
      String type = tidi.getType();
      if (type.startsWith("L") && type.endsWith(";"))
        type = type.replaceAll("^L", "").replaceAll(";$", "");

      int dest = ((OneRegisterInstruction) instruction).getRegisterA();
      Constant cst = ClassConstant.v(type);
      assign = Jimple.v().newAssignStmt(body.getRegisterLocal(dest), cst);
      setUnit(assign);
      addTags(assign);
      body.add(assign);

if (IDalvikTyper.ENABLE_DVKTYPER) {
    Debug.printDbg(IDalvikTyper.DEBUG, "constraint: "+ assign);
        int op = (int)instruction.getOpcode().value;
        //DalvikTyper.v().captureAssign((JAssignStmt)assign, op); //TODO: classtype could be null!
        DalvikTyper.v().setType(assign.getLeftOpBox(), cst.getType(), false);
      }
  }
项目:JAADAS    文件:AsmMethodSource.java   
private Value toSootValue(Object val) throws AssertionError {
    Value v;
    if (val instanceof Integer)
        v = IntConstant.v((Integer) val);
    else if (val instanceof Float)
        v = FloatConstant.v((Float) val);
    else if (val instanceof Long)
        v = LongConstant.v((Long) val);
    else if (val instanceof Double)
        v = DoubleConstant.v((Double) val);
    else if (val instanceof String)
        v = StringConstant.v(val.toString());
    else if (val instanceof org.objectweb.asm.Type)
        v = ClassConstant.v(((org.objectweb.asm.Type) val).getInternalName());
    else if (val instanceof Handle)
        v = MethodHandle.v(toSootMethodRef((Handle) val), ((Handle)val).getTag());
    else
        throw new AssertionError("Unknown constant type: " + val.getClass());
    return v;
}
项目:jgs    文件:JimpleInjector.java   
/**
 * Add a class object. Needed for static fields.
 * @param sc SootClass.
 */
public static void addClassObjectToObjectMap(SootClass sc) {

    logger.log(Level.INFO, "Add object {0} to ObjectMap in method {1}",
            new Object[] {sc.getName(), b.getMethod().getName()} );

    ArrayList<Type> parameterTypes = new ArrayList<Type>();
    parameterTypes.add(RefType.v("java.lang.Object"));

    System.out.println("Adding class Object:" + sc.getName().replace(".", "/"));    
    ClassConstant cc = ClassConstant.v(sc.getName().replace(".", "/"));
    System.out.println("Value: " + cc.value); 

    Expr addObj = Jimple.v().newVirtualInvokeExpr(
            hs, Scene.v().makeMethodRef(
            Scene.v().getSootClass(HANDLE_CLASS), "addObjectToObjectMap", 
            parameterTypes, VoidType.v(), false), 
            ClassConstant.v(sc.getName().replace(".", "/"))); 
    Unit assignExpr = Jimple.v().newInvokeStmt(addObj);

    unitStore_After.insertElement(unitStore_After.new Element(assignExpr, lastPos));
    lastPos = assignExpr;
}
项目:JAADAS    文件:AllocAndContextSet.java   
public Set<ClassConstant> possibleClassConstants() {
 Set<ClassConstant> res = new HashSet<ClassConstant>();
 for (AllocAndContext allocAndContext : this) {
        AllocNode n = allocAndContext.alloc;
        if( n instanceof ClassConstantNode ) {
    res.add( ((ClassConstantNode)n).getClassConstant() );
        } else {
          return null;
        }
    }
 return res;
}
项目:JAADAS    文件:PAG.java   
public AllocNode makeClassConstantNode( ClassConstant cc ) {
       if( opts.types_for_sites() || opts.vta() )
           return makeAllocNode( RefType.v( "java.lang.Class" ),
                   RefType.v( "java.lang.Class" ), null );
       ClassConstantNode ret = (ClassConstantNode) valToAllocNode.get(cc);
if( ret == null ) {
    valToAllocNode.put(cc, ret = new ClassConstantNode(this, cc));
           newAllocNodes.add( ret );
           addNodeTag( ret, null );
}
return ret;
   }
项目:JAADAS    文件:PointsToSetInternal.java   
public Set<ClassConstant> possibleClassConstants() { 
    final HashSet<ClassConstant> ret = new HashSet<ClassConstant>();
    return this.forall( new P2SetVisitor() {
    public final void visit( Node n ) {
        if( n instanceof ClassConstantNode ) {
            ret.add( ((ClassConstantNode)n).getClassConstant() );
        } else {
            returnValue = true;
        }
    }} ) ? null : ret;
}
项目:JAADAS    文件:NullnessAnalysis.java   
private void handleRefTypeAssignment(DefinitionStmt assignStmt, AnalysisInfo out) {
    Value left = assignStmt.getLeftOp();
    Value right = assignStmt.getRightOp();

    //unbox casted value
    if(right instanceof JCastExpr) {
        JCastExpr castExpr = (JCastExpr) right;
        right = castExpr.getOp();
    }

    //if we have a definition (assignment) statement to a ref-like type, handle it,
    if ( isAlwaysNonNull(right)
    || right instanceof NewExpr || right instanceof NewArrayExpr
    || right instanceof NewMultiArrayExpr || right instanceof ThisRef
    || right instanceof StringConstant || right instanceof ClassConstant
    || right instanceof CaughtExceptionRef) {
        //if we assign new... or @this, the result is non-null
        out.put(left,NON_NULL);
    } else if(right==NullConstant.v()) {
        //if we assign null, well, it's null
        out.put(left, NULL);
    } else if(left instanceof Local && right instanceof Local) {
        out.put(left, out.get(right));
    } else {
        out.put(left, TOP);
    }
}
项目:JAADAS    文件:ConstantVisitor.java   
public void caseClassConstant(ClassConstant c) {
    // "array class" types are unmodified
    boolean classIsArray = c.value.startsWith("[");
    String className = classIsArray ? c.value : SootToDexUtils.getDexClassName(c.value);
    BuilderReference referencedClass = dexFile.internTypeReference(className);
       stmtV.addInsn(new Insn21c(Opcode.CONST_CLASS, destinationReg, referencedClass), origStmt);
}
项目:JAADAS    文件:DavaUnitPrinter.java   
@Override
public void constant( Constant c ) {
  if (c instanceof ClassConstant) {
    handleIndent();
    String fullClassName =
      ((ClassConstant)c).value.replaceAll("/", ".");
    output.append(fullClassName + ".class");
  } else {
    super.constant(c);
  }
}
项目:bixie    文件:GlobalsCache.java   
public Expression lookupClassConstant(ClassConstant cc) {
    if (!cConstantTypeMap.containsKey(cc.getValue())) {
        String name = TranslationHelpers.replaceIllegalChars("CC$" + cc.value);
        IdentifierExpression ide = this.pf.mkIdentifierExpression(this.getBoogieType(cc.getType()), name, true,
                true, true);
        cConstantTypeMap.put(cc.getValue(), ide);
    }
    return cConstantTypeMap.get(cc.getValue());
}
项目:DroidRA    文件:ClassValueAnalysis.java   
/**
 * Returns the set of possible values of a variable of type class.
 * 
 * @param value The variable whose value we are looking for.
 * @param start The statement where the analysis should start.
 * @return The set of possible values for the variable.
 */
@Override
public Set<Object> computeVariableValues(Value value, Stmt start) {
  if (value instanceof ClassConstant) {
    return Collections.singleton((Object) ((ClassConstant) value).getValue());
  } else if (value instanceof Local) {
    return processClassAssignments(
        findAssignmentsForLocal(start, (Local) value, true, new HashSet<Pair<Unit, Local>>()),
        new HashSet<Stmt>());
  } else {
    return Collections.singleton((Object) TOP_VALUE);
  }
}
项目:jar2bpl    文件:GlobalsCache.java   
public Expression lookupClassConstant(ClassConstant cc) {
    if (!cConstantTypeMap.containsKey(cc.getValue())) {
        String name = TranslationHelpers.replaceIllegalChars("CC$"+cc.value);           
        IdentifierExpression ide = this.pf.mkIdentifierExpression(this.getBoogieType(cc.getType()), name, true, true, true);            
        cConstantTypeMap.put(cc.getValue(), ide);
    }
    return cConstantTypeMap.get(cc.getValue());
}
项目:coal    文件:ClassValueAnalysis.java   
/**
 * Returns the set of possible values of a variable of type class.
 * 
 * @param value The variable whose value we are looking for.
 * @param start The statement where the analysis should start.
 * @return The set of possible values for the variable.
 */
@Override
public Set<Object> computeVariableValues(Value value, Stmt start) {
  if (value instanceof ClassConstant) {
    return Collections.singleton((Object) ((ClassConstant) value).getValue());
  } else if (value instanceof Local) {
    return processClassAssignments(
        findAssignmentsForLocal(start, (Local) value, true, new HashSet<Pair<Unit, Local>>()),
        new HashSet<Stmt>());
  } else {
    return Collections.singleton((Object) TOP_VALUE);
  }
}
项目:jgs    文件:AnnotationValueSwitch.java   
/**
 * It is not neccessary to treat a constant.
 * @param v a constant
 */
@Override
public void caseClassConstant(ClassConstant v) {
    logger.finest("ClassConstant identified " + callingStmt.toString());
    rightElement = RightElement.NOT;
    if (actualContext == StmtContext.ASSIGNRIGHT) {
        throw new InternalAnalyzerException();
    }
}
项目:jgs    文件:JimpleInjector.java   
/**
 * Add a static field. This field is added to its corresponding class object.
 * @param field SootField
 */
public static void addStaticFieldToObjectMap(SootField field) {
    logger.info( "Adding static Field " + field.toString() + " to Object Map");

    String signature = getSignatureForField(field);

    ArrayList<Type> parameterTypes = new ArrayList<Type>();
    parameterTypes.add(RefType.v("java.lang.Object"));
    parameterTypes.add(RefType.v("java.lang.String"));

    SootClass sc = field.getDeclaringClass();

    Unit assignDeclaringClass   = Jimple.v().newAssignStmt(
            local_for_Objects, ClassConstant.v(sc.getName().replace(".", "/")));

    Unit assignSignature = Jimple.v().newAssignStmt(
            local_for_Strings, StringConstant.v(signature));

    Expr addObj = Jimple.v().newVirtualInvokeExpr(
            hs, Scene.v().makeMethodRef(Scene.v().getSootClass(HANDLE_CLASS),
            "addFieldToObjectMap", parameterTypes, 
            Scene.v().getObjectType(), false),
            local_for_Objects, local_for_Strings);
    Unit assignExpr = Jimple.v().newInvokeStmt(addObj);

    unitStore_After.insertElement(
            unitStore_After.new Element(assignDeclaringClass, lastPos));
    unitStore_After.insertElement(
            unitStore_After.new Element(assignSignature, assignDeclaringClass));
    unitStore_After.insertElement(
            unitStore_After.new Element(assignExpr, assignSignature));
    lastPos = assignExpr;

}
项目:jgs    文件:JimpleInjector.java   
/**
 * @param f
 * @param pos
 */
public static void addLevelInAssignStmt(StaticFieldRef f, Unit pos) {
    logger.info( "Adding Level of static Field " + f.toString() + " in assign stmt");

    SootField field = f.getField();

    String signature = getSignatureForField(field);

    ArrayList<Type> parameterTypes = new ArrayList<Type>();
    parameterTypes.add(RefType.v("java.lang.Object"));
    parameterTypes.add(RefType.v("java.lang.String"));

    SootClass sc = field.getDeclaringClass();

    Unit assignDeclaringClass   = Jimple.v().newAssignStmt(
            local_for_Objects, ClassConstant.v(sc.getName().replace(".", "/")));

    Unit assignSignature = Jimple.v().newAssignStmt(
            local_for_Strings, StringConstant.v(signature));

    Expr addObj = Jimple.v().newVirtualInvokeExpr(
            hs, Scene.v().makeMethodRef(Scene.v().getSootClass(HANDLE_CLASS),
            "joinLevelOfFieldAndAssignmentLevel", parameterTypes, 
            Scene.v().getObjectType(), false),
            local_for_Objects, local_for_Strings);
    Unit assignExpr = Jimple.v().newInvokeStmt(addObj);

    unitStore_Before.insertElement(
            unitStore_Before.new Element(assignDeclaringClass, pos));
    unitStore_Before.insertElement(unitStore_Before.new Element(assignSignature, pos));
    unitStore_Before.insertElement(unitStore_Before.new Element(assignExpr, pos));
    lastPos = pos;
}
项目:vasco    文件:PointsToGraph.java   
/**
 * Creates a new node for a constant.
 */
private NewExpr constantNewExpr(Constant constant) {
    if (constant instanceof StringConstant) {
        return STRING_SITE;
    } else if (constant instanceof ClassConstant) {
        return CLASS_SITE;
    } else if (constant instanceof NullConstant) {
        return null;
    } else {
        throw new RuntimeException(constant.toString());
    }
}
项目:JAADAS    文件:ValueTemplatePrinter.java   
public void caseClassConstant(ClassConstant v) {
    printConstant(v, "\""+v.value+"\"");
}
项目:JAADAS    文件:Walker.java   
public void outAClzzConstant(AClzzConstant node)
{
 String s = (String)mProductions.removeLast();
 mProductions.addLast(ClassConstant.v(s));
}
项目:JAADAS    文件:LazyContextSensitivePointsToSet.java   
public Set<ClassConstant> possibleClassConstants() {
    return delegate.possibleClassConstants();
}
项目:JAADAS    文件:WrappedPointsToSet.java   
public Set<ClassConstant> possibleClassConstants() {
  return wrapped.possibleClassConstants();
}
项目:JAADAS    文件:ClassConstantNode.java   
public ClassConstant getClassConstant() {
    return (ClassConstant) newExpr;
}
项目:JAADAS    文件:ClassConstantNode.java   
ClassConstantNode( PAG pag, ClassConstant cc ) {
    super( pag, cc, RefType.v( "java.lang.Class" ), null );
}
项目:JAADAS    文件:ConstraintCollector.java   
public void caseIfStmt(IfStmt stmt) {
    if (uses) {
        ConditionExpr cond = (ConditionExpr) stmt.getCondition();

        BinopExpr expr = cond;
        Value lv = expr.getOp1();
        Value rv = expr.getOp2();

        TypeVariable lop;
        TypeVariable rop;

        // ******** LEFT ********
        if (lv instanceof Local) {
            lop = resolver.typeVariable((Local) lv);
        } else if (lv instanceof DoubleConstant) {
            lop = resolver.typeVariable(DoubleType.v());
        } else if (lv instanceof FloatConstant) {
            lop = resolver.typeVariable(FloatType.v());
        } else if (lv instanceof IntConstant) {
            lop = resolver.typeVariable(IntType.v());
        } else if (lv instanceof LongConstant) {
            lop = resolver.typeVariable(LongType.v());
        } else if (lv instanceof NullConstant) {
            lop = resolver.typeVariable(NullType.v());
        } else if (lv instanceof StringConstant) {
            lop = resolver.typeVariable(RefType.v("java.lang.String"));
        } else if (lv instanceof ClassConstant) {
            lop = resolver.typeVariable(RefType.v("java.lang.Class"));
        } else {
            throw new RuntimeException("Unhandled binary expression left operand type: " + lv.getClass());
        }

        // ******** RIGHT ********
        if (rv instanceof Local) {
            rop = resolver.typeVariable((Local) rv);
        } else if (rv instanceof DoubleConstant) {
            rop = resolver.typeVariable(DoubleType.v());
        } else if (rv instanceof FloatConstant) {
            rop = resolver.typeVariable(FloatType.v());
        } else if (rv instanceof IntConstant) {
            rop = resolver.typeVariable(IntType.v());
        } else if (rv instanceof LongConstant) {
            rop = resolver.typeVariable(LongType.v());
        } else if (rv instanceof NullConstant) {
            rop = resolver.typeVariable(NullType.v());
        } else if (rv instanceof StringConstant) {
            rop = resolver.typeVariable(RefType.v("java.lang.String"));
        } else if (rv instanceof ClassConstant) {
            rop = resolver.typeVariable(RefType.v("java.lang.Class"));
        } else {
            throw new RuntimeException("Unhandled binary expression right operand type: " + rv.getClass());
        }

        TypeVariable common = resolver.typeVariable();
        rop.addParent(common);
        lop.addParent(common);
    }
}
项目:JAADAS    文件:RegisterAllocator.java   
private Register asConstant(Value v, ConstantVisitor constantV) {
    Constant c = (Constant) v;

    Register constantRegister = null;

    List<Register> rArray = null;
    AtomicInteger iI = null;
    if (c instanceof ClassConstant) {
        rArray = classConstantReg;
        iI = classI;
    } else if (c instanceof NullConstant) {
           rArray = nullConstantReg;
           iI = nullI;
       } else if (c instanceof FloatConstant) {
           rArray = floatConstantReg;
           iI = floatI;
       } else if (c instanceof IntConstant) {
           rArray = intConstantReg;
           iI = intI;
       } else if (c instanceof LongConstant) {
           rArray = longConstantReg;
           iI = longI;
       } else if (c instanceof DoubleConstant) {
           rArray = doubleConstantReg;
           iI = doubleI;
       } else if (c instanceof StringConstant) {
           rArray = stringConstantReg;
           iI = stringI;
       } else {
           throw new RuntimeException("Error. Unknown constant type: '"+ c.getType() +"'");
       }

    if (rArray.size() == 0 || iI.intValue() >= rArray.size()) {
        rArray.add(new Register(c.getType(), nextRegNum));
        nextRegNum += SootToDexUtils.getDexWords(c.getType());
    }

    constantRegister = rArray.get(iI.intValue()).clone();
    iI.set(iI.intValue() + 1);

    // "load" constant into the register...
    constantV.setDestination(constantRegister);
    c.apply(constantV);
    // ...but return an independent register object
    return constantRegister.clone();
}
项目:JAADAS    文件:CONSTANT_Class_info.java   
public Value createJimpleConstantValue(cp_info[] constant_pool) {
    CONSTANT_Utf8_info ci = (CONSTANT_Utf8_info)(constant_pool[name_index]);
    String name = ci.convert();
    return ClassConstant.v(name);
}
项目:JAADAS    文件:UnitThrowAnalysis.java   
public void caseClassConstant(ClassConstant c) {
}
项目:bixie    文件:SootValueSwitch.java   
@Override
public void caseClassConstant(ClassConstant arg0) {
    this.expressionStack.push(GlobalsCache.v().lookupClassConstant(arg0));
}
项目:DroidRA    文件:ClassValueAnalysis.java   
/**
 * Returns the variable values that are associated with an call statement.
 * 
 * @param sourceStmt The statement at which we should start.
 * @param visitedStmts The set of visited statements.
 * @return The set of possible values.
 */
protected Set<Object> handleInvokeExpression(Stmt sourceStmt, Set<Stmt> visitedStmts) {
  if (visitedStmts.contains(sourceStmt)) {
    return Collections.emptySet();
  } else {
    visitedStmts.add(sourceStmt);
  }
  Iterator<Edge> edges = Scene.v().getCallGraph().edgesOutOf(sourceStmt);
  Set<Object> result = new HashSet<>();

  while (edges.hasNext()) {
    Edge edge = edges.next();
    SootMethod target = edge.getTgt().method();
    if (target.isConcrete()) {
      for (Unit unit : target.getActiveBody().getUnits()) {
        if (unit instanceof ReturnStmt) {
          ReturnStmt returnStmt = (ReturnStmt) unit;

          Value returnValue = returnStmt.getOp();
          if (returnValue instanceof StringConstant) {
            result.add(((StringConstant) returnValue).value);
          } else if (returnValue instanceof ClassConstant) {
            result.add(((ClassConstant) returnValue).value);
          } else if (returnValue instanceof Local) {
            List<DefinitionStmt> assignStmts =
                findAssignmentsForLocal(returnStmt, (Local) returnValue, true,
                    new HashSet<Pair<Unit, Local>>());
            Set<Object> classConstants = processClassAssignments(assignStmts, visitedStmts);
            if (classConstants == null || classConstants.contains(TOP_VALUE)
                || classConstants.contains(Constants.ANY_STRING)) {
              return null;
            } else {
              result.addAll(classConstants);
            }
          } else {
            return null;
          }
        }
      }
    }
  }

  return result;
}
项目:petablox    文件:RelClassConstant.java   
@Override
public void visit(Value e) {
    if (e instanceof ClassConstant) {
        add((ClassConstant) e);
    }
}
项目:jar2bpl    文件:SootValueSwitch.java   
@Override
public void caseClassConstant(ClassConstant arg0) {
    this.expressionStack.push(GlobalsCache.v().lookupClassConstant(arg0));
}
项目:coal    文件:ClassValueAnalysis.java   
/**
 * Returns the variable values that are associated with an call statement.
 * 
 * @param sourceStmt The statement at which we should start.
 * @param visitedStmts The set of visited statements.
 * @return The set of possible values.
 */
protected Set<Object> handleInvokeExpression(Stmt sourceStmt, Set<Stmt> visitedStmts) {
  if (visitedStmts.contains(sourceStmt)) {
    return Collections.emptySet();
  } else {
    visitedStmts.add(sourceStmt);
  }
  Iterator<Edge> edges = Scene.v().getCallGraph().edgesOutOf(sourceStmt);
  Set<Object> result = new HashSet<>();

  while (edges.hasNext()) {
    Edge edge = edges.next();
    SootMethod target = edge.getTgt().method();
    if (target.isConcrete()) {
      for (Unit unit : target.getActiveBody().getUnits()) {
        if (unit instanceof ReturnStmt) {
          ReturnStmt returnStmt = (ReturnStmt) unit;

          Value returnValue = returnStmt.getOp();
          if (returnValue instanceof StringConstant) {
            result.add(((StringConstant) returnValue).value);
          } else if (returnValue instanceof ClassConstant) {
            result.add(((ClassConstant) returnValue).value);
          } else if (returnValue instanceof Local) {
            List<DefinitionStmt> assignStmts =
                findAssignmentsForLocal(returnStmt, (Local) returnValue, true,
                    new HashSet<Pair<Unit, Local>>());
            Set<Object> classConstants = processClassAssignments(assignStmts, visitedStmts);
            if (classConstants == null || classConstants.contains(TOP_VALUE)
                || classConstants.contains(Constants.ANY_STRING)) {
              return null;
            } else {
              result.addAll(classConstants);
            }
          } else {
            return null;
          }
        }
      }
    }
  }

  return result;
}
项目:jgs    文件:SecurityConstraintValueWriteSwitch.java   
@Override
public void caseClassConstant(ClassConstant v) {
    throwInvalidWriteException(v);
}
项目:jgs    文件:SecurityConstraintValueReadSwitch.java   
@Override
public void caseClassConstant(ClassConstant v) {
    addReadComponent(getWeakestSecurityLevel());
}
项目:jgs    文件:JimpleInjector.java   
/**
 * @param f
 * @param pos
 */
public static void setLevelOfAssignStmt(StaticFieldRef f, Unit pos) {
    logger.info( "Set Level of static Field " + f.toString() + " in assign stmt");

    SootField field = f.getField();

    String signature = getSignatureForField(field);
    System.out.println("Signature of static field in jimple injector " + signature);

    ArrayList<Type> parameterTypes = new ArrayList<Type>();
    parameterTypes.add(RefType.v("java.lang.Object"));
    parameterTypes.add(RefType.v("java.lang.String"));

    SootClass sc = field.getDeclaringClass();

    Unit assignDeclaringClass   = Jimple.v().newAssignStmt(
            local_for_Objects, ClassConstant.v(sc.getName().replace(".", "/")));

    Unit assignSignature = Jimple.v().newAssignStmt(
            local_for_Strings, StringConstant.v(signature));

    // insert: checkGlobalPC(Object, String)
    Expr checkGlobalPC  = Jimple.v().newVirtualInvokeExpr(
            hs, Scene.v().makeMethodRef(
            Scene.v().getSootClass(HANDLE_CLASS), "checkGlobalPC", 
            parameterTypes, VoidType.v(), false), 
            local_for_Objects, local_for_Strings);
    Unit checkGlobalPCExpr = Jimple.v().newInvokeStmt(checkGlobalPC);

    // Add setLevelOfField
    Expr addObj = Jimple.v().newVirtualInvokeExpr(
            hs, Scene.v().makeMethodRef(Scene.v().getSootClass(HANDLE_CLASS),
            "setLevelOfField", parameterTypes, 
            Scene.v().getObjectType(), false),
            local_for_Objects, local_for_Strings);
    Unit assignExpr = Jimple.v().newInvokeStmt(addObj);

    unitStore_Before.insertElement(
            unitStore_Before.new Element(assignDeclaringClass, pos));
    unitStore_Before.insertElement(unitStore_Before.new Element(assignSignature, pos));
    unitStore_Before.insertElement(unitStore_Before.new Element(checkGlobalPCExpr, pos));
    unitStore_Before.insertElement(unitStore_Before.new Element(assignExpr, pos));
    lastPos = pos;
}
项目:jgs    文件:SecurityLevelValueWriteSwitch.java   
/**
 * The method should update the <em>security level</em> of a
 * {@link ClassConstant}, but it is not possible to update the level of a
 * constant.
 * 
 * @param v
 *            The constant for which the <em>security level</em> should be
 *            updated.
 * @see soot.jimple.ConstantSwitch#caseClassConstant(soot.jimple.ClassConstant)
 * @throws InvalidSwitchException
 *             Always, because the update is not possible.
 */
@Override
public void caseClassConstant(ClassConstant v) {
    throw new SwitchException(getMsg("exception.analysis.switch.update_error",
                                     this.getClass().getSimpleName(),
                                     v.getClass().getSimpleName(),
                                     v.toString(),
                                     getSourceLine()));
}
项目:JAADAS    文件:PointsToSetEqualsWrapper.java   
/**
 * @return
 * @see soot.PointsToSet#possibleClassConstants()
 */
public Set<ClassConstant> possibleClassConstants() {
    return pts.possibleClassConstants();
}
项目:JAADAS    文件:PointsToSet.java   
/** If this points-to set consists entirely of objects of
 * type java.lang.Class of a known class,
 * returns a set of ClassConstant's that are these classes.
 * If this point-to set may contain something else, returns null. */
public Set<ClassConstant> possibleClassConstants();
项目:jgs    文件:AnnotationValueSwitch.java   
/**
 * DOC
 * 
 * @see soot.jimple.ConstantSwitch#caseClassConstant(soot.jimple.ClassConstant)
 */
@Override
public void caseClassConstant(ClassConstant v) {
}