/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.keshmesh.detector;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import org.eclipse.jdt.core.IJavaProject;
import com.ibm.wala.ipa.callgraph.CGNode;
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
import com.ibm.wala.ipa.callgraph.propagation.PointerKey;
import edu.illinois.keshmesh.detector.bugs.BugInstances;
/**
*
* @author Mohsen Vakilian
* @author Stas Negara
*
*/
public abstract class BugPatternDetector {
protected IJavaProject javaProject = null;
protected BasicAnalysisData basicAnalysisData = null;
public final BugInstances performAnalysis(IJavaProject javaProject, BasicAnalysisData basicAnalysisData) {
this.javaProject = javaProject;
this.basicAnalysisData = basicAnalysisData;
return doPerformAnalysis(javaProject, basicAnalysisData);
}
protected abstract BugInstances doPerformAnalysis(IJavaProject javaProject, BasicAnalysisData basicAnalysisData);
/**
* Tests can perform more rigorous checks if the detectors collect more fine
* grained information along their way.
*
* @return an object that contains the results while analyzing the code for
* a bug pattern.
*/
public abstract IntermediateResults getIntermediateResults();
protected PointerKey getPointerForValueNumber(CGNode cgNode, int valueNumber) {
return basicAnalysisData.heapModel.getPointerKeyForLocal(cgNode, valueNumber);
}
protected Collection<InstanceKey> getPointedInstances(PointerKey pointer) {
Collection<InstanceKey> pointedInstances = new HashSet<InstanceKey>();
Iterator<InstanceKey> pointedInstancesIterator = basicAnalysisData.pointerAnalysis.getPointsToSet(pointer).iterator();
while (pointedInstancesIterator.hasNext()) {
pointedInstances.add(pointedInstancesIterator.next());
}
return pointedInstances;
}
}