WALA/com.ibm.wala.core/src/com/ibm/wala/ipa/callgraph/AnalysisCache.java

98 lines
2.7 KiB
Java

/*******************************************************************************
* Copyright (c) 2007 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.ipa.callgraph;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.ipa.callgraph.impl.Everywhere;
import com.ibm.wala.ssa.DefUse;
import com.ibm.wala.ssa.IR;
import com.ibm.wala.ssa.IRFactory;
import com.ibm.wala.ssa.SSACache;
import com.ibm.wala.ssa.SSAOptions;
import com.ibm.wala.util.ref.ReferenceCleanser;
/**
* A place to hold onto caches of various analysis artifacts.
*
* Someday this should maybe go away?
*/
class AnalysisCache implements IAnalysisCacheView {
private final IRFactory<IMethod> irFactory;
private final SSACache ssaCache;
private final SSAOptions ssaOptions;
public AnalysisCache(IRFactory<IMethod> irFactory, SSAOptions ssaOptions, SSACache cache) {
super();
this.ssaOptions = ssaOptions;
this.irFactory = irFactory;
this.ssaCache = cache;
ReferenceCleanser.registerCache(this);
}
/*
* @see com.ibm.wala.ipa.callgraph.IAnalysisCacheView#invalidate(com.ibm.wala.classLoader.IMethod, com.ibm.wala.ipa.callgraph.Context)
*/
@Override
public void invalidate(IMethod method, Context C) {
ssaCache.invalidate(method, C);
}
public SSACache getSSACache() {
return ssaCache;
}
public SSAOptions getSSAOptions() {
return ssaOptions;
}
/*
* @see com.ibm.wala.ipa.callgraph.IAnalysisCacheView#getIRFactory()
*/
@Override
public IRFactory<IMethod> getIRFactory() {
return irFactory;
}
/*
* @see com.ibm.wala.ipa.callgraph.IAnalysisCacheView#getIR(com.ibm.wala.classLoader.IMethod)
*/
@Override
public IR getIR(IMethod method, Context context) {
if (method == null) {
throw new IllegalArgumentException("method is null");
}
return ssaCache.findOrCreateIR(method, context, ssaOptions);
}
@Override
public IR getIR(IMethod m) {
return getIR(m, Everywhere.EVERYWHERE);
}
/*
* @see com.ibm.wala.ipa.callgraph.IAnalysisCacheView#getDefUse(com.ibm.wala.ssa.IR)
*/
@Override
public DefUse getDefUse(IR ir) {
if (ir == null) {
throw new IllegalArgumentException("ir is null");
}
return ssaCache.findOrCreateDU(ir, Everywhere.EVERYWHERE);
}
@Override
public void clear() {
ssaCache.wipe();
}
}