package ddg.DefUseCFG;
import java.util.List;
import neo4j.traversals.batchInserter.CFG;
import org.neo4j.graphdb.index.IndexHits;
public class BatchInserterFactory extends DefUseCFGFactory
{
DefUseCFG cfg;
public DefUseCFG create(Long funcId)
{
cfg = new DefUseCFG();
getStatementsOfFunction(funcId);
getUsesAndDefs();
getParentBlocks();
getChildBlocks();
return cfg;
}
private void getStatementsOfFunction(Long funcId)
{
IndexHits<Long> blocks = CFG.getStatementsFromIndex(funcId);
for (Long block : blocks)
cfg.addStatement(block);
}
private void getUsesAndDefs()
{
for (Object obj : cfg.getStatements())
{
Long statement = (Long) obj;
List<String> useSymbols = CFG.getSymbolsUsedByStatement(statement);
for (String symbol : useSymbols)
cfg.addSymbolUsed(statement, symbol);
List<String> defSymbols = CFG
.getSymbolsDefinedByStatement(statement);
for (String symbol : defSymbols)
cfg.addSymbolDefined(statement, symbol);
}
}
private void getParentBlocks()
{
for (Object obj : cfg.getStatements())
{
Long statement = (Long) obj;
List<Long> parents = CFG.getParentStatements(statement);
for (Long parent : parents)
cfg.addParentBlock(statement, parent);
}
}
private void getChildBlocks()
{
for (Object obj : cfg.getStatements())
{
Long statement = (Long) obj;
List<Long> children = CFG.getChildStatements(statement);
for (Long child : children)
cfg.addChildBlock(statement, child);
}
}
}