/** * add public methods * @param className * @param methodName */ public void addPublicMethod(String className, String methodName) { publicMethods.add(new CallContext(ResourceList .getClassNameFromResourcePath(className), methodName)); }
private void addPublicClassMethod(String className, String methodName, Set<CallContext> contexts){ List<Call> calls = new ArrayList<>(); Call call = new Call(className, methodName); calls.add(call); CallContext context = new CallContext(calls); if(publicMethods.contains(context)&&className.equals(this.className)) contexts.add(context); }
/** * @param className * @param methodName * @param caller */ private void updateMethodContextMaps(String className, String methodName, Object caller) { String id = className + "." + methodName; if (!coveredMethodContext.containsKey(id)) { coveredMethodContext.put(id, new HashMap<>()); } // CallContext context = new CallContext(new Throwable().getStackTrace()); CallContext context = new CallContext(stack); if (!coveredMethodContext.get(id).containsKey(context)) { coveredMethodContext.get(id).put(context, 1); } else { coveredMethodContext.get(id).put(context, coveredMethodContext.get(id).get(context) + 1); } }
/** * computes and returns the call contexts of the specific method * * @param className * @param methodName * @return */ public Set<CallContext> getMethodEntryPoint(String className, String methodName) { Set<CallContext> contexts = new HashSet<>(); List<Call> cont = new ArrayList<>(); cont.add(new Call(className, methodName)); CallContext context = new CallContext(cont); if(publicMethods.contains(context)){ contexts.add(context); }else{ contexts.add(new CallContext()); } return contexts; }
/** * @param branch * @param true_distance * @param false_distance */ private void updateBranchContextMaps(int branch, double true_distance, double false_distance) { if (!coveredPredicateContext.containsKey(branch)) { coveredPredicateContext.put(branch, new HashMap<>()); coveredTrueContext.put(branch, new HashMap<>()); coveredFalseContext.put(branch, new HashMap<>()); } //CallContext context = new CallContext(new Throwable().getStackTrace()); CallContext context = new CallContext(stack); if (!coveredPredicateContext.get(branch).containsKey(context)) { coveredPredicateContext.get(branch).put(context, 1); coveredTrueContext.get(branch).put(context, true_distance); coveredFalseContext.get(branch).put(context, false_distance); } else { coveredPredicateContext.get(branch).put(context, coveredPredicateContext.get(branch).get(context) + 1); coveredTrueContext.get(branch).put(context, Math.min(coveredTrueContext.get(branch).get(context), true_distance)); coveredFalseContext.get(branch).put(context, Math.min(coveredFalseContext.get(branch).get(context), false_distance)); } }
private Set<CallContext> convertIntoCallContext( Set<List<CallGraphEntry>> paths) { Set<CallContext> contexts = new HashSet<>(); // return only context that starts from the class under test for (List<CallGraphEntry> list : paths) { boolean insert = false; List<Call> cont = new ArrayList<>(); for (int i = list.size() - 1; i >= 0; i--) { if (!insert && list.get(i).getClassName().equals(className)) { insert = true; } if (insert) cont.add(new Call(list.get(i).getClassName(), list.get(i) .getMethodName())); } contexts.add(new CallContext(cont)); } return contexts; }