@Override public Set<CGNode> getNodes(MethodReference m) { Set<CGNode> tmp = cg.getNodes(m); Set<CGNode> ret = new HashSet<>(); for (CGNode n : tmp) { if (keep.contains(n)) { ret.add(n); } } return ret; }
@Override public Set<CGNode> getNodes(MethodReference m) { Set<CGNode> tmp = cg.getNodes(m); Set<CGNode> ret = new HashSet<>(); for (CGNode n : tmp) { if (keep.contains(n)) { ret.add(n); } } return ret; }
@Override public Set<CGNode> getNodes(MethodReference m) { Set<CGNode> result = HashSetFactory.make(); for (CGNode x : cg.getNodes(m)) { if (containsNode(x)) { result.add(x); } } return result; }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { return new MapIterator<>( new FilterIterator<>( CG.getNodes(method.getReference()).iterator(), o -> o.getMethod().equals(method) ), object -> Pair.make(object, site)); } }
protected void checkNodes(CallGraph staticCG, Predicate<MethodReference> filter) throws IOException { final Set<MethodReference> notFound = HashSetFactory.make(); check(staticCG, (staticCG1, caller, callee) -> { boolean checkForCallee = !staticCG1.getNodes(callee).isEmpty(); if (!checkForCallee) { notFound.add(callee); } else { System.err.println("found expected node " + callee); } }, filter); Assert.assertTrue("could not find " + notFound, notFound.isEmpty()); }
private Set<ISinkPoint> calculateSinkPoints(StaticFieldSinkSpec sinkSpec) { Set<ISinkPoint> points = HashSetFactory.make(); ICFGSupergraph graph = (ICFGSupergraph) ctx.graph; for (CGNode node : ctx.cg.getNodes(sinkSpec.getMethod().getReference())) { points.add(new StaticFieldSinkPoint(sinkSpec, graph.getICFG() .getExit(node))); } return points; }
@Test public void testIfException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callIfException()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertTrue(intraExplodedCFG.hasExceptions()); }
@Test public void testDynamicIfNoException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callDynamicIfNoException()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertFalse(intraExplodedCFG.hasExceptions()); }
@Test public void testGetException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callGetException()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertTrue(intraExplodedCFG.hasExceptions()); }
@Test public void testIfNoException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callIfNoException()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertFalse(intraExplodedCFG.hasExceptions()); }
@Test public void testDynamicIf2Exception() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callDynamicIf2Exception()Lcfg/exc/intra/B"); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertTrue(intraExplodedCFG.hasExceptions()); }
@Test public void testIf2Exception() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callIf2Exception()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertTrue(intraExplodedCFG.hasExceptions()); }
@Test public void testDynamicGetException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callDynamicGetException()Lcfg/exc/intra/B"); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertTrue(intraExplodedCFG.hasExceptions()); } }
@Test public void testDynamicIfException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callDynamicIfException()Lcfg/exc/intra/B"); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertTrue(intraExplodedCFG.hasExceptions()); }
@Test public void testIf2NoException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callIf2NoException()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertFalse(intraExplodedCFG.hasExceptions()); }
@Test public void testDynamicIf2NoException() throws UnsoundGraphException, CancelException, WalaException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.inter.CallFieldAccess.callDynamicIf2NoException()Lcfg/exc/intra/B"); InterprocAnalysisResult<SSAInstruction, IExplodedBasicBlock> interExplodedCFG = NullPointerAnalysis.computeInterprocAnalysis(cg, new NullProgressMonitor()); Assert.assertEquals(1, cg.getNodes(mr).size()); final CGNode callNode = cg.getNodes(mr).iterator().next(); ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = interExplodedCFG.getResult(callNode); Assert.assertFalse(intraExplodedCFG.hasExceptions()); }
@Override public Iterator<MethodReference> getPredNodes(MethodReference N) { Set<MethodReference> pred = HashSetFactory.make(10); MethodReference methodReference = N; for (CGNode cgNode : cg.getNodes(methodReference)) for (CGNode p : Iterator2Iterable.make(cg.getPredNodes(cgNode))) pred.add(p.getMethod().getReference()); return pred.iterator(); }
@Override public Iterator<MethodReference> getSuccNodes(MethodReference N) { Set<MethodReference> succ = HashSetFactory.make(10); MethodReference methodReference = N; for (CGNode node : cg.getNodes(methodReference)) for (CGNode p : Iterator2Iterable.make(cg.getSuccNodes(node))) succ.add(p.getMethod().getReference()); return succ.iterator(); }
@Test public void testArrayLiteral1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Collections.singletonList( cg -> { MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral1#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); CGNode node = cg.getNodes(mref).iterator().next(); SSAInstruction s = node.getIR().getInstructions()[2]; Assert.assertTrue("Did not find new array instruction.", s instanceof SSANewInstruction); Assert.assertTrue("", ((SSANewInstruction) s).getNewSite().getDeclaredType().isArrayType()); }), true, null); }
@Override public void check(CallGraph cg) { MethodReference mref = descriptorToMethodRef(method, cg.getClassHierarchy()); for (CGNode cgNode : cg.getNodes(mref)) { Assert.assertTrue("failed for " + this.variableName + " in " + cgNode + "\n" + cgNode.getIR(), this.check(cgNode.getMethod(), cgNode.getIR())); } }