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

77 lines
2.2 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.DefaultIRFactory;
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?
*/
public class AnalysisCache {
private final IRFactory<IMethod> irFactory;
private final SSACache ssaCache;
public AnalysisCache(IRFactory<IMethod> irFactory) {
super();
this.irFactory = irFactory;
this.ssaCache = new SSACache(irFactory);
ReferenceCleanser.registerCache(this);
}
public AnalysisCache() {
this(new DefaultIRFactory());
}
public void invalidate(IMethod method, Context C) {
ssaCache.invalidate(method, C);
}
public SSACache getSSACache() {
return ssaCache;
}
public IRFactory<IMethod> getIRFactory() {
return irFactory;
}
/**
* Find or create an IR for the method using the {@link Everywhere} context and default {@link SSAOptions}
*/
public IR getIR(IMethod method) {
if (method == null) {
throw new IllegalArgumentException("method is null");
}
return ssaCache.findOrCreateIR(method, Everywhere.EVERYWHERE, new AnalysisOptions().getSSAOptions());
}
/**
* Find or create a DefUse for the IR using the {@link Everywhere} context
*/
public DefUse getDefUse(IR ir) {
if (ir == null) {
throw new IllegalArgumentException("ir is null");
}
return ssaCache.findOrCreateDU(ir, Everywhere.EVERYWHERE);
}
}