else AnalysisScopeReader.addClassPathToScope(inPath, scope, ClassLoaderReference.Application); AnalysisOptions options = new AnalysisOptions(scope, null); AnalysisCache cache = new AnalysisCacheImpl(); IClassHierarchy cha = ClassHierarchyFactory.makeWithPhantom(scope); Warnings.clear();
public void testDynamicParam2() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccess.testDynamicParam2(ZLcfg/exc/intra/B;Lcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } }
/** * test that type inference works in the presence of a getfield where the * field's declared type cannot be loaded */ @Test public void testBug38540() throws ClassHierarchyException, IOException { AnalysisScope scope = null; scope = AnalysisScopeReader.readJavaScope(TestConstants.WALA_TESTDATA, (new FileProvider()).getFile("J2SEClassHierarchyExclusions.txt"), MY_CLASSLOADER); AnalysisOptions options = new AnalysisOptions(); ClassHierarchy cha = ClassHierarchyFactory.make(scope); TypeReference t = TypeReference.findOrCreateClass(scope.getApplicationLoader(), "cornerCases", "Main"); IClass klass = cha.lookupClass(t); Assert.assertTrue(klass != null); ShrikeCTMethod m = (ShrikeCTMethod) klass.getMethod(new Selector(Atom.findOrCreateAsciiAtom("foo"), Descriptor .findOrCreateUTF8("()Ljava/lang/Object;"))); Assert.assertTrue(m != null); IR ir = new AnalysisCacheImpl().getSSACache().findOrCreateIR(m, Everywhere.EVERYWHERE, options.getSSAOptions()); TypeInference.make(ir, false); }
@Test public void testDynamicIf() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccessDynamic.testIf(ZLcfg/exc/intra/B;Lcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } }
public static IAnalysisCacheView makeCache(IRFactory<IMethod> factory) { return new AnalysisCacheImpl(factory); }
@Test public void testDynamicWhile2() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccessDynamic.testWhile2(ZLcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } }
public static IAnalysisCacheView makeCache(IRFactory<IMethod> factory) { return new AnalysisCacheImpl(factory); }
@Test public void testWhile2() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccess.testWhile2(ZLcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } }
@Override public IAnalysisCacheView makeDefaultCache() { return new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory()); }
@Test public void testDynamicParam() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccessDynamic.testParam(ZLcfg/exc/intra/B;Lcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NULL, returnState.getState(returnVal)); } }
@Override public IAnalysisCacheView makeDefaultCache() { return new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory()); }
@Test public void testParam2() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccess.testParam2(ZLcfg/exc/intra/B;Lcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } }
@Override public IAnalysisCacheView makeDefaultCache() { return new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory()); }
@Test public void testIf() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccess.testIf(ZLcfg/exc/intra/B;Lcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NOT_NULL, returnState.getState(returnVal)); } }
@Override public IAnalysisCacheView makeDefaultCache() { return new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory()); }
@Test public void testParam() throws UnsoundGraphException, CancelException { MethodReference mr = StringStuff.makeMethodReference("cfg.exc.intra.FieldAccess.testParam(ZLcfg/exc/intra/B;Lcfg/exc/intra/B;)Lcfg/exc/intra/B"); IMethod m = cha.resolveMethod(mr); AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode); { ExceptionPruningAnalysis<SSAInstruction, IExplodedBasicBlock> intraExplodedCFG = NullPointerAnalysis.createIntraproceduralExplodedCFGAnalysis(ir); intraExplodedCFG.compute(new NullProgressMonitor()); final IExplodedBasicBlock returnNodeExploded = returnNodeExploded(returnNode, intraExplodedCFG.getCFG()); final NullPointerState returnState = intraExplodedCFG.getState(returnNodeExploded); Assert.assertEquals(State.NULL, returnState.getState(returnVal)); } { ExceptionPruningAnalysis<SSAInstruction, ISSABasicBlock> intraSSACFG = NullPointerAnalysis.createIntraproceduralSSACFGAnalyis(ir); intraSSACFG.compute(new NullProgressMonitor()); Assert.assertEquals(ir.getControlFlowGraph().exit(), intraSSACFG.getCFG().exit()); Assert.assertEquals(returnNode, returnNode(intraSSACFG.getCFG())); final NullPointerState returnState = intraSSACFG.getState(returnNode); Assert.assertEquals(State.NULL, returnState.getState(returnVal)); } }
@Override public IAnalysisCacheView makeDefaultCache() { return new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory()); }
AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode);
@Override public IAnalysisCacheView makeDefaultCache() { return new AnalysisCacheImpl(AstIRFactory.makeDefaultFactory()); }
AnalysisCacheImpl cache = new AnalysisCacheImpl(); IR ir = cache.getIR(m); final ISSABasicBlock returnNode = returnNode(ir.getControlFlowGraph()); final int returnVal = returnVal(returnNode);