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;
 
 import java.util.List;
 import java.util.Set;
 
 import soot.Scene;
 import soot.Unit;
A default result builder to record results after solving the IDE problem.
 
 public class DefaultResultBuilder implements ResultBuilder {
   public Result buildResult(PropagationSolver solver) {
     PropagationTimers.v()..start();
     Result result = new DefaultResult();
 
     List<MethodOrMethodContexteps =
         new ArrayList<MethodOrMethodContext>(Scene.v().getEntryPoints());
     ReachableMethods reachableMethods =
         new ReachableMethods(Scene.v().getCallGraph(), eps.iterator(), null);
     reachableMethods.update();
     long reachableStatements = 0;
     for (Iterator<MethodOrMethodContextiter = reachableMethods.listener(); iter.hasNext();) {
       SootMethod method = iter.next().method();
       if (method.hasActiveBody()
           && !Model.v().isExcludedClass(method.getDeclaringClass().getName())
           && !method.getDeclaringClass().getName().equals("dummyMainClass")) {
         ++PropagationTimers.v().;
         ExceptionalUnitGraph cfg = new ExceptionalUnitGraph(method.getActiveBody());
 
         Stack<Unitstack = new Stack<>();
         for (Unit unit : cfg.getHeads()) {
           stack.push(unit);
         }
         Set<Unitvisited = new HashSet<>();
 
         while (!stack.empty()) {
           Unit unit = stack.pop();
 
           if (visited.contains(unit)) {
             continue;
           } else {
             visited.add(unit);
           }
 
           for (Unit successor : cfg.getSuccsOf(unit)) {
             stack.push(successor);
           }
 
           Argument[] arguments = Model.v().getArgumentsForQuery((Stmtunit);
           if (arguments != null) {
             Stmt stmt = (Stmtunit;
 
             for (Argument argument : arguments) {
               if (Model.v().isModeledType(argument.getType())) {
                 int argnum = argument.getArgnum()[0];
                 BasePropagationValue basePropagationValue;
                 InvokeExpr invokeExpr = stmt.getInvokeExpr();
                 if (argnum >= 0) {
                   basePropagationValue = solver.resultAt(unitinvokeExpr.getArg(argnum));
                 } else if (invokeExpr instanceof InstanceInvokeExpr && argnum == -1) {
                   InstanceInvokeExpr instanceInvokeExpr = (InstanceInvokeExprinvokeExpr;
                   basePropagationValue = solver.resultAt(stmtinstanceInvokeExpr.getBase());
                 } else {
                   throw new RuntimeException("Unexpected argument number " + argnum
                       + " for invoke expression " + invokeExpr);
                }
                if (basePropagationValue instanceof PropagationValue) {
                  PropagationValue propagationValue = (PropagationValuebasePropagationValue;
                  PropagationTimers.v()..end();
                  PropagationTimers.v()..start();
                  propagationValue.makeFinalValue(solver);
                  PropagationTimers.v()..end();
                  PropagationTimers.v()..start();
                  result.addResult(unitargument.getArgnum()[0], propagationValue);
                } else {
                  result.addResult(unitargument.getArgnum()[0], basePropagationValue);
                }
              } else if (AnalysisParameters.v().inferNonModeledTypes()) {
                result.addResult(unitargument.getArgnum()[0], ArgumentValueManager.v()
                    .getArgumentValues(argumentunit));
              }
            }
          }
        }
        reachableStatements += visited.size();
      }
      PropagationTimers.v(). += reachableStatements;
    }
    PropagationTimers.v()..end();
    return result;
  }
New to GrepCode? Check out our FAQ X