Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2015 The Pennsylvania State University and the University of Wisconsin
   * Systems and Internet Infrastructure Security Laboratory
   *
   * Author: Damien Octeau
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package edu.psu.cse.siis.coal.arguments;
 
 import java.util.List;
 import java.util.Set;
 
 import soot.Local;
 import soot.Scene;
 import soot.Unit;
 import soot.Value;
An argument value analysis for integer types.
 
 public class IntValueAnalysis extends BackwardValueAnalysis {
   private static final int TOP_VALUE = .;
 
   @Override
   public Set<ObjectcomputeArgumentValues(Argument argumentUnit callSite) {
     Stmt stmt = (StmtcallSite;
     if (!stmt.containsInvokeExpr()) {
       throw new RuntimeException("Statement " + stmt + " does not contain an invoke expression");
     }
     Value value = stmt.getInvokeExpr().getArg(argument.getArgnum()[0]);
 
     return findIntConstantValues(stmtvalue);
   }
 
   @Override
   public Set<ObjectcomputeInlineArgumentValues(String[] inlineValues) {
     Set<Objectresult = new HashSet<>(inlineValues.length);
 
     for (String intString : inlineValues) {
       result.add(Integer.parseInt(intString));
     }
 
     return result;
   }

  
Returns the possible values for an integer variable.

Parameters:
start The statement where the variable is used.
value The variable whose value we are looking for.
Returns:
The set of possible values for the variable.
 
   private Set<ObjectfindIntConstantValues(Unit startValue value) {
     if (value instanceof IntConstant) {
       return Collections.singleton((Object) ((IntConstantvalue).);
     } else if (value instanceof LongConstant) {
       return Collections.singleton((Object) ((LongConstantvalue).);
     } else if (value instanceof Local) {
       return findIntAssignmentsForLocal(start, (Localvaluenew HashSet<Stmt>());
     } else {
       return Collections.singleton((Object);
     }
   }

  
Return all possible values for an integer local variable.

Parameters:
start The statement where the analysis should start.
local The local variable whose values we are looking for.
visitedStmts The set of visited statement.
Returns:
The set of possible values for the local variable.
 
   private Set<ObjectfindIntAssignmentsForLocal(Unit startLocal localSet<StmtvisitedStmts) {
     List<DefinitionStmtassignStmts =
         findAssignmentsForLocal(startlocaltruenew HashSet<Pair<UnitLocal>>());
    Set<Objectresult = new HashSet<>(assignStmts.size());
    for (DefinitionStmt assignStmt : assignStmts) {
      Value rhsValue = assignStmt.getRightOp();
      if (rhsValue instanceof IntConstant) {
        result.add(((IntConstantrhsValue).);
      } else if (rhsValue instanceof LongConstant) {
        result.add(((LongConstantrhsValue).);
      } else if (rhsValue instanceof ParameterRef) {
        ParameterRef parameterRef = (ParameterRefrhsValue;
        Iterator<Edgeedges =
            Scene.v().getCallGraph()
                .edgesInto(AnalysisParameters.v().getIcfg().getMethodOf(assignStmt));
        while (edges.hasNext()) {
          Edge edge = edges.next();
          InvokeExpr invokeExpr = edge.srcStmt().getInvokeExpr();
          Value argValue = invokeExpr.getArg(parameterRef.getIndex());
          if (argValue instanceof IntConstant) {
            result.add(((IntConstantargValue).);
          } else if (argValue instanceof LongConstant) {
            result.add(((LongConstantargValue).);
          } else if (argValue instanceof Local) {
            Set<ObjectnewResults =
                findIntAssignmentsForLocal(edge.srcStmt(), (LocalargValuevisitedStmts);
            result.addAll(newResults);
          } else {
            result.add();
          }
        }
      } else {
        return Collections.singleton((Object);
      }
    }
    return result;
  }
  public Object getTopValue() {
    return ;
  }
New to GrepCode? Check out our FAQ X