import java.io.FileNotFoundException;
import com.graph.internal.NodeNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import org.objectweb.asm.tree.analysis.AnalyzerException;
import com.graph.element.Node;
import com.graph.pdg.ProceduralDependenceGraphMatrix;
import com.graph.internal.*;
this is my program and i call some package program.
public class A {
public static void main(String[] args) throws FileNotFoundException, IOException, AnalyzerException,NodeNotFoundException
{
ProceduralDependenceGraphMatrix lvPDG = new ProceduralDependenceGraphMatrix.getPDGByMethodSignature("C:\\Program Files\\Java\\jdk1.7.0\\bin\\My\\fact.class","fact","I()");
Iterator<Node> lvIterator =lvPDG.controlDependenceBFSIterator();
while (lvIterator.hasNext()) {
Node lvNode = lvIterator.next();
}
}
}
and package program
package com.graph.pdg;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.tree.MethodNode;
import org.objectweb.asm.tree.analysis.AnalyzerException;
import com.asm.internal.ConstructGraphClassAdapter;
import com.asm.internal.EmptyClassVisitor;
import com.graph.AbstractAdjacentMatrix;
import com.graph.Graph;
import com.graph.Iterator.ControlDependenceBFSIterator;
import com.graph.Iterator.ControlDependenceDFSIterator;
import com.graph.Iterator.DataDependenceDFSIterator;
import com.graph.element.Node;
import com.graph.internal.MethodCallerGraph;
import com.graph.internal.MethodDependenceGraph;
import com.util.StringUtils;
import com.util.Utils;
public class ProceduralDependenceGraphMatrix extends AbstractAdjacentMatrix implements Graph{
private int [] mvActualInNodeIndex;
private int mvActualOutNodeIndex ;
private Node mvExpandingNode = null;
private Map<string,> mvIndexNodeMap = new HashMap<string,>();
private String mvOwner = null;
private String mvName = null;
private String mvDesc = null;
private class NodeCompartor implements Comparator<node>{
public int compare(Node pObject1, Node pObject2){
int lvObject1Index = pObject1.getIndex();
int lvObject2Index = pObject2.getIndex();
if( lvObject1Index > lvObject2Index )
return 1;
else if( lvObject1Index < lvObject2Index )
return -1;
else
return 0;
}
}
public static ProceduralDependenceGraphMatrix getPDGByMethodSignature(String pClassFile, String pName, String pDesc) throws FileNotFoundException, IOException, AnalyzerException {
if(pClassFile == null || pName == null || pDesc == null) {
return null;
}
ClassReader lvClassReader = new ClassReader (new FileInputStream(pClassFile));
ConstructGraphClassAdapter lvConstructGraphClassAdapter = new ConstructGraphClassAdapter(new EmptyClassVisitor(), null);
lvClassReader.accept(lvConstructGraphClassAdapter, ClassReader.EXPAND_FRAMES);
for(int i = 0 ; i < lvConstructGraphClassAdapter.getMethodNodeList().toArray().length ; i++ ) {
MethodNode lvMethodNode = lvConstructGraphClassAdapter.getMethodNodeList().get(i);
if(lvMethodNode.name.equals(pName) && lvMethodNode.desc.equals(pDesc)) {
ProceduralDependenceGraphMatrix lvProceduralDependenceGraphMatrix = lvConstructGraphClassAdapter.getPDGByMethodNode
( (MethodNode)lvConstructGraphClassAdapter.getMethodNodeList().toArray()[i]);
return lvProceduralDependenceGraphMatrix;
}
}
return null;
}
public ProceduralDependenceGraphMatrix(MethodDependenceGraph pMethodDependenceGraph){
mvOwner = pMethodDependenceGraph.getOwner();
mvName = pMethodDependenceGraph.getName();
mvDesc = pMethodDependenceGraph.getDesc();
int lvNumberOfNode = countNumberOfNormalNode(pMethodDependenceGraph) + countNumberOfExtraNode(pMethodDependenceGraph);
int lvNumberOfActualInNode = pMethodDependenceGraph.getActualInVariable().size();
mvActualInNodeIndex = new int[lvNumberOfActualInNode];
mvNodes = new Node[lvNumberOfNode];
mvAdjacentMatrix = new int[lvNumberOfNode][lvNumberOfNode];
for(int i = 0; i < mvAdjacentMatrix.length ; i++) {
for(int j = 0 ; j < mvAdjacentMatrix[i].length ; j++) {
mvAdjacentMatrix[i][j] = Utils.ZERO;
}
}
int lvCounter = 0;
Iterator<node> lvNodeList = pMethodDependenceGraph.getNodeList().iterator();
while(lvNodeList.hasNext()) {
Node lvNode = lvNodeList.next();
if(lvNode == null || lvNode.getName() == null) { continue;}
mvNodes[lvCounter++] = lvNode;
}
addExtraNode(lvCounter, pMethodDependenceGraph);
Arrays.sort(mvNodes, new NodeCompartor());
for(int i = 0 ; i < mvNodes.length ; i++) {
mvIndexNodeMap.put(String.valueOf(i), mvNodes[i]);
}
lvCounter = 0;
Iterator<node> lvActualInVariable= pMethodDependenceGraph.getActualInVariable().iterator();
while(lvActualInVariable.hasNext()) {
Node lvNode = lvActualInVariable.next();
mvActualInNodeIndex[lvCounter++] = lookForNodeIndexByNode(lvNode);
}
if(pMethodDependenceGraph.getActualOutVariable() != null) {
mvActualOutNodeIndex = lookForNodeIndexByNode(pMethodDependenceGraph.getActualOutVariable());
}else {
mvActualOutNodeIndex = Utils.MINUSONE;
}
lvCounter = 0;
constructMartix(pMethodDependenceGraph.getDataDependenceMap(), Utils.DATADEPENDENCE);
constructMartix(pMethodDependenceGraph.getControlDependenceMap(), Utils.CONTROLDEPENDENCE);
mvIndexNodeMap = null;
}
private int countNumberOfNormalNode(MethodDependenceGraph pMethodDependenceGraph) {
int lvCounter = 0;
for(int i = 0 ; i < pMethodDependenceGraph.getNodeList().size(); i++) {
if(pMethodDependenceGraph.getNodeList().get(i) != null && pMethodDependenceGraph.getNodeList().get(i).getName() != null) {
lvCounter++;
}
}
return lvCounter;
}
private int countNumberOfExtraNode(MethodDependenceGraph pMethodDependenceGraph) {
int lvCounter = 0;
Iterator<node> lvControlDependenceKeyIterator = pMethodDependenceGraph.getControlDependenceMap().keySet().iterator();
while(lvControlDependenceKeyIterator.hasNext()) {
Node lvKey = lvControlDependenceKeyIterator.next();
Iterator lvControlDependenceValueIterator = ( (List) pMethodDependenceGraph.getControlDependenceMap().get(lvKey)).iterator();
while(lvControlDependenceValueIterator.hasNext()) {
Object lvValue = lvControlDependenceValueIterator.next();
if(lvValue instanceof MethodCallerGraph) {
MethodCallerGraph lvMethodCallerGraph = (MethodCallerGraph) lvValue;
lvMethodCallerGraph.getFormalInVariable().remove(null);
lvCounter++;
lvCounter+= lvMethodCallerGraph.getFormalInVariable().size();
lvCounter+= lvMethodCallerGraph.getFormalOutVariable() == null? Utils.ZERO : Utils.ONE;
}
}
}
return lvCounter;
}
private void addExtraNode(int pCounter, MethodDependenceGraph pMethodDependenceGraph) {
Iterator<node> lvControlDependenceKeyIterator = pMethodDependenceGraph.getControlDependenceMap().keySet().iterator();
while(lvControlDependenceKeyIterator.hasNext()) {
Node lvKey = lvControlDependenceKeyIterator.next();
Iterator lvControlDependenceValueIterator = ( (List) pMethodDependenceGraph.getControlDependenceMap().get(lvKey)).iterator();
while(lvControlDependenceValueIterator.hasNext()) {
Object lvValue = lvControlDependenceValueIterator.next();
if(lvValue instanceof MethodCallerGraph) {
MethodCallerGraph lvMethodCallerGraph = (MethodCallerGraph) lvValue;
if(lvMethodCallerGraph.getEntryNode() != null) {
mvNodes[pCounter++] = lvMethodCallerGraph.getEntryNode();
}
Iterator<node> lvFormalInIterator = lvMethodCallerGraph.getFormalInVariable().iterator();
while(lvFormalInIterator.hasNext()) {
Node lvNode = lvFormalInIterator.next();
if(lvNode != null) {
mvNodes[pCounter++] = lvNode;
}
}
if(lvMethodCallerGraph.getFormalOutVariable() != null) {
mvNodes[pCounter++] = lvMethodCallerGraph.getFormalOutVariable();
}
}
}
}
}
private void constructMartix (Map<node,> pDependenceMap, int pAddValue) {
Iterator<node> lvKeyIterator = pDependenceMap.keySet().iterator();
while(lvKeyIterator.hasNext()) {
Node lvKey = lvKeyIterator.next();
Iterator lvControlDependenceValueIterator = pDependenceMap.get(lvKey).iterator();
while(lvControlDependenceValueIterator.hasNext()) {
Object lvValue = lvControlDependenceValueIterator.next();
if(lvValue instanceof MethodCallerGraph) {
MethodCallerGraph lvMethodCallerGraph = (MethodCallerGraph) lvValue;
constructMartix(lvMethodCallerGraph.getControlDependenceMap(), Utils.CONTROLDEPENDENCE);
constructMartix(lvMethodCallerGraph.getDataDependenceMap(), Utils.DATADEPENDENCE);
}else {
Node lvToNode = (Node) lvValue;
addValueInMaxtrix(lvKey , lvToNode, pAddValue);
}
}
}
}
private void addValueInMaxtrix(Node lvFromNode, Node lvToNode, int pAddValue) {
int lvRow = lookForNodeIndexByNode(lvFromNode);
int lvColumn = lookForNodeIndexByNode(lvToNode);
if(lvRow == -1 || lvColumn == -1 ||mvAdjacentMatrix[lvRow][lvColumn] == pAddValue) {
return;
}
mvAdjacentMatrix[lvRow][lvColumn] += pAddValue;
}
private int lookForNodeIndexByNode(Node pNode) {
Iterator<string> lvIndexIterator = mvIndexNodeMap.keySet().iterator();
while(lvIndexIterator.hasNext()) {
String lvIndex = lvIndexIterator.next();
if(pNode.equals(mvIndexNodeMap.get(lvIndex))) {
return Integer.parseInt(lvIndex);
}
}
return Utils.MINUSONE;
}
public void printingDependency(int pvDependency)
{
String lvTypeOfDependency = null;
if(pvDependency == Utils.DATADEPENDENCE)
lvTypeOfDependency = "Data";
else
lvTypeOfDependency = "Control";
System.out.println("********* Printing " + lvTypeOfDependency + " Dependency of Owner:" + mvOwner + " Method:" + mvName + " Desc: " + mvDesc + "**********" );
for(int i=0; i< mvAdjacentMatrix.length; i++)
{
for(int j=0; j< mvAdjacentMatrix.length; j++)
{
if(mvAdjacentMatrix[i][j] == pvDependency)
{
System.out.println(mvNodes[i].getName() + " --> " + mvNodes[j].getName());
}
else if(mvAdjacentMatrix[i][j] == 3)
{
System.out.println(mvNodes[i].getName() + " --> " + mvNodes[j].getName());
}
}
}
System.out.println("********* End of Printing " + lvTypeOfDependency + " Dependency of Owner:" + mvOwner + " Method:" + mvName + " Desc: " + mvDesc + "**********" );
System.out.println();
}
public int[] getActualInNodeIndex() {
return mvActualInNodeIndex;
}
public int getActualOutNodeIndex() {
return mvActualOutNodeIndex;
}
public Node getExpandingNode() {
return mvExpandingNode;
}
public void setExpandingNode(Node pExpandingNode) {
mvExpandingNode = pExpandingNode;
}
public String getOwner() {
return mvOwner;
}
public String getName() {
return mvName;
}
public String getDesc() {
return mvDesc;
}
private int getLevelIndexOfNode (Node pNode, int pDependence) {
int lvLevel = 1;
Node lvUpperLevelOneNode = getAncestorByNode(pNode, pDependence);
while(lvUpperLevelOneNode != null) {
lvUpperLevelOneNode = getAncestorByNode(lvUpperLevelOneNode, pDependence);
lvLevel ++;
}
return lvLevel;
}
public LinkedList<node> getPeersListByNode (Node pNode, int pDependence) {
LinkedList<node> lvReturnList = new LinkedList<node>();
int lvLevel = getLevelIndexOfNode(pNode, pDependence);
for(int i = 1 ; i < lvLevel ; i++ ) {
if(i == 1) {
lvReturnList = getDescendantListByNode (mvNodes[0], pDependence);
}else {
lvReturnList = getDescendantListByNodeList (lvReturnList, pDependence);
}
}
return lvReturnList;
}
public LinkedList<node> getDescendantListByNode (Node pNode, int pDependence) {
LinkedList<node> lvReturnList = new LinkedList<node>();
for(int i = 0 ; i < mvNodes.length ; i++) {
if(pNode.equals(mvNodes[i])) {
for(int j = 0; j < mvNodes.length ; j++) {
if(mvAdjacentMatrix[i][j] == pDependence || mvAdjacentMatrix[i][j] == Utils.CONTROLDEPENDENCE + Utils.DATADEPENDENCE) {
if(pNode.equals(mvNodes[j])) {
continue;
}
lvReturnList.add(mvNodes[j]);
}
}
break;
}
}
return lvReturnList;
}
public LinkedList<node> getDescendantListByNodeList (LinkedList<node> pNodeList, int pDependence) {
LinkedList<node> lvReturnList = new LinkedList<node>();
Iterator<node> lvNodeIterator = pNodeList.iterator();
while(lvNodeIterator.hasNext()) {
Node lvNode = lvNodeIterator.next();
lvReturnList.addAll(getDescendantListByNode(lvNode, pDependence));
}
return lvReturnList;
}
public Node getAncestorByNode (Node pNode, int pDependence) {
for(int i = 0 ; i < mvNodes.length ; i++) {
if(pNode.equals(mvNodes[i])) {
for(int j = 0; j < mvNodes.length ; j++) {
if(mvAdjacentMatrix[j][i] == pDependence || mvAdjacentMatrix[j][i] == Utils.CONTROLDEPENDENCE + Utils.DATADEPENDENCE) {
if(pNode.equals(mvNodes[j])) {
continue;
}
return mvNodes[j];
}
}
break;
}
}
return null;
}
@Override
public Iterator<node> controlDependenceBFSIterator() {
return controlDependenceBFSIterator(getEntryNode());
}
@Override
public Iterator<node> controlDependenceDFSIterator() {
return controlDependenceDFSIterator(getEntryNode());
}
@Override
public Iterator<node> controlDependenceDFSIterator(Node pProcessNode) {
return new ControlDependenceDFSIterator(null, pProcessNode, this);
}
@Override
public Iterator<node> controlDependenceBFSIterator(Node pProcessNode) {
return new ControlDependenceBFSIterator(null, pProcessNode, this);
}
@Override
public Iterator<node> dataDependenceDFSIterator(Node pProcessNode) {
return new DataDependenceDFSIterator(null, pProcessNode, this);
}
@Override
public BigInteger countTotalNumberOfNode() {
return new BigInteger(String.valueOf(mvNodes.length));
}
@Override
public BigInteger countTotalNumberOfPDG() {
return new BigInteger(StringUtils.ONE);
}
@Override
public void printAll() {
System.out.println("********* Printing Node of Owner:" + mvOwner + " Method:" + mvName + " Desc: " + mvDesc + "**********" );
for(int i = 0 ; i <mvnodes.length;>
System.out.print(mvNodes[i].getName() + " , ");
}
System.out.println();
System.out.println("********* End of Printing Node of Owner:" + mvOwner + " Method:" + mvName + " Desc: " + mvDesc + "**********" );
printingDependency(Utils.DATADEPENDENCE);
printingDependency(Utils.CONTROLDEPENDENCE);
}
}
this is my error
C:\Program Files\Java\jdk1.7.0\bin\My>javac A.java
A.java:18: error: cannot find symbol
ProceduralDependenceGraphMatrix lvPDG = new ProceduralDependenceGraphMatrix.get
PDGByMethodSignature("C:\\Program Files\\Java\\jdk1.7.0\\bin\\My\\fact.class","f
act","I()");
^
symbol: class getPDGByMethodSignature
location: class ProceduralDependenceGraphMatrix
1 error
methods name does not match.which argument i want to give.