@Override public void visitNode(Tree tree) { execute((MethodTree) tree); }
new SymbolicExecutionVisitor().scanFile(javaFileScannerContext);
public void execute(MethodTree methodTree) { ExplodedGraphWalker walker = getWalker(); try { Symbol.MethodSymbol methodSymbol = methodTree.symbol(); if (methodCanNotBeOverriden(methodSymbol)) { MethodBehavior methodBehavior = behaviorCache.methodBehaviorForSymbol(methodSymbol); if (!methodBehavior.isVisited()) { methodBehavior = walker.visitMethod(methodTree, methodBehavior); methodBehavior.completed(); } } else { walker.visitMethod(methodTree); } } catch (ExplodedGraphWalker.MaximumStepsReachedException | ExplodedGraphWalker.ExplodedGraphTooBigException exception) { LOG.debug("Could not complete symbolic execution: ", exception); if (walker.methodBehavior != null) { walker.methodBehavior.visited(); } } }
@CheckForNull private MethodBehavior get(String signature, @Nullable Symbol.MethodSymbol symbol) { MethodBehavior mb = behaviors.get(signature); if(mb != null) { return mb; } if (symbol != null) { MethodTree declaration = symbol.declaration(); if (SymbolicExecutionVisitor.methodCanNotBeOverriden(symbol) && declaration != null) { sev.execute(declaration); return behaviors.get(signature); } } // disabled x-file analysis, behavior based on source code can still be used if (!crossFileEnabled && !isKnownSignature(signature)) { return null; } if (!bytecodeBehaviors.containsKey(signature)) { new BytecodeEGWalker(this, semanticModel).getMethodBehavior(signature, classLoader); } return bytecodeBehaviors.get(signature); }
runScanner(javaFileScannerContext, new SymbolicExecutionVisitor(executableScanners, behaviorCache), AnalysisError.Kind.SE_ERROR); behaviorCache.cleanup();
public void execute(MethodTree methodTree) { ExplodedGraphWalker walker = getWalker(); try { Symbol.MethodSymbol methodSymbol = methodTree.symbol(); if (methodCanNotBeOverriden(methodSymbol)) { MethodBehavior methodBehavior = behaviorCache.methodBehaviorForSymbol(methodSymbol); if (!methodBehavior.isVisited()) { methodBehavior = walker.visitMethod(methodTree, methodBehavior); methodBehavior.completed(); } } else { walker.visitMethod(methodTree); } } catch (ExplodedGraphWalker.MaximumStepsReachedException | ExplodedGraphWalker.ExplodedGraphTooBigException exception) { LOG.debug("Could not complete symbolic execution: ", exception); if (walker.methodBehavior != null) { walker.methodBehavior.visited(); } } }
@CheckForNull private MethodBehavior get(String signature, @Nullable Symbol.MethodSymbol symbol) { MethodBehavior mb = behaviors.get(signature); if(mb != null) { return mb; } if (symbol != null) { MethodTree declaration = symbol.declaration(); if (SymbolicExecutionVisitor.methodCanNotBeOverriden(symbol) && declaration != null) { sev.execute(declaration); return behaviors.get(signature); } } // disabled x-file analysis, behavior based on source code can still be used if (!crossFileEnabled && !isKnownSignature(signature)) { return null; } if (!bytecodeBehaviors.containsKey(signature)) { new BytecodeEGWalker(this, semanticModel).getMethodBehavior(signature, classLoader); } return bytecodeBehaviors.get(signature); }
runScanner(javaFileScannerContext, new SymbolicExecutionVisitor(executableScanners, behaviorCache), AnalysisError.Kind.SE_ERROR); behaviorCache.cleanup();
@Override public void visitNode(Tree tree) { execute((MethodTree) tree); }