clean up MethodHandle support
This commit is contained in:
parent
25bb519221
commit
c5cdb9e32a
|
@ -27,7 +27,6 @@ import com.ibm.wala.ipa.callgraph.Entrypoint;
|
|||
import com.ibm.wala.ipa.callgraph.IAnalysisCacheView;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.DelegatingSSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyFactory;
|
||||
|
@ -59,11 +58,7 @@ public class Java7CallGraphTest extends DynamicCallGraphTestBase {
|
|||
|
||||
SSAPropagationCallGraphBuilder builder = Util.makeZeroOneContainerCFABuilder(options, cache, cha, scope);
|
||||
|
||||
options.setSelector(new MethodHandles.InvokeExactTargetSelector(options.getMethodTargetSelector()));
|
||||
|
||||
builder.setContextSelector(new MethodHandles.ContextSelectorImpl(builder.getContextSelector()));
|
||||
builder.setContextInterpreter(new DelegatingSSAContextInterpreter(new MethodHandles.InvokeContextInterpreterImpl(), builder.getCFAContextInterpreter()));
|
||||
builder.setContextInterpreter(new DelegatingSSAContextInterpreter(new MethodHandles.FindContextInterpreterImpl(), builder.getCFAContextInterpreter()));
|
||||
MethodHandles.analyzeMethodHandles(options, builder);
|
||||
|
||||
CallGraph cg = builder.makeCallGraph(options, null);
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@ import com.ibm.wala.ipa.callgraph.Entrypoint;
|
|||
import com.ibm.wala.ipa.callgraph.IAnalysisCacheView;
|
||||
import com.ibm.wala.ipa.callgraph.impl.Util;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.DelegatingSSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchy;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyException;
|
||||
import com.ibm.wala.ipa.cha.ClassHierarchyFactory;
|
||||
|
@ -85,11 +84,7 @@ public class KawaCallGraphTest extends DynamicCallGraphTestBase {
|
|||
|
||||
SSAPropagationCallGraphBuilder builder = Util.makeZeroCFABuilder(Language.JAVA, options, cache, cha, scope);
|
||||
|
||||
options.setSelector(new MethodHandles.InvokeExactTargetSelector(options.getMethodTargetSelector()));
|
||||
|
||||
builder.setContextSelector(new MethodHandles.ContextSelectorImpl(builder.getContextSelector()));
|
||||
builder.setContextInterpreter(new DelegatingSSAContextInterpreter(new MethodHandles.InvokeContextInterpreterImpl(), builder.getCFAContextInterpreter()));
|
||||
builder.setContextInterpreter(new DelegatingSSAContextInterpreter(new MethodHandles.FindContextInterpreterImpl(), builder.getCFAContextInterpreter()));
|
||||
MethodHandles.analyzeMethodHandles(options, builder);
|
||||
|
||||
return builder.makeCallGraph(options, null);
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import com.ibm.wala.classLoader.IClass;
|
|||
import com.ibm.wala.classLoader.IMethod;
|
||||
import com.ibm.wala.classLoader.NewSiteReference;
|
||||
import com.ibm.wala.classLoader.SyntheticMethod;
|
||||
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
|
||||
import com.ibm.wala.ipa.callgraph.CGNode;
|
||||
import com.ibm.wala.ipa.callgraph.Context;
|
||||
import com.ibm.wala.ipa.callgraph.ContextItem;
|
||||
|
@ -30,6 +31,8 @@ import com.ibm.wala.ipa.callgraph.MethodTargetSelector;
|
|||
import com.ibm.wala.ipa.callgraph.propagation.ConstantKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.InstanceKey;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.SSAPropagationCallGraphBuilder;
|
||||
import com.ibm.wala.ipa.callgraph.propagation.cfa.DelegatingSSAContextInterpreter;
|
||||
import com.ibm.wala.ipa.summaries.MethodSummary;
|
||||
import com.ibm.wala.ipa.summaries.SummarizedMethod;
|
||||
import com.ibm.wala.shrikeBT.IInvokeInstruction.Dispatch;
|
||||
|
@ -176,7 +179,7 @@ public class MethodHandles {
|
|||
|
||||
}
|
||||
|
||||
public static class MethodContext implements Context {
|
||||
private static class MethodContext implements Context {
|
||||
private final Context base;
|
||||
private final MethodReference method;
|
||||
|
||||
|
@ -231,7 +234,7 @@ public class MethodHandles {
|
|||
}
|
||||
}
|
||||
|
||||
public static class ContextSelectorImpl implements ContextSelector {
|
||||
private static class ContextSelectorImpl implements ContextSelector {
|
||||
private final ContextSelector base;
|
||||
|
||||
public ContextSelectorImpl(ContextSelector base) {
|
||||
|
@ -271,7 +274,7 @@ public class MethodHandles {
|
|||
}
|
||||
}
|
||||
|
||||
public static class InvokeExactTargetSelector implements MethodTargetSelector {
|
||||
private static class InvokeExactTargetSelector implements MethodTargetSelector {
|
||||
private final MethodTargetSelector base;
|
||||
private final Map<MethodReference, SyntheticMethod> impls = HashMapFactory.make();
|
||||
|
||||
|
@ -385,7 +388,7 @@ public class MethodHandles {
|
|||
|
||||
}
|
||||
|
||||
public static class FindContextInterpreterImpl extends HandlersContextInterpreterImpl {
|
||||
private static class FindContextInterpreterImpl extends HandlersContextInterpreterImpl {
|
||||
|
||||
@Override
|
||||
public boolean understands(CGNode node) {
|
||||
|
@ -420,7 +423,7 @@ public class MethodHandles {
|
|||
}
|
||||
}
|
||||
|
||||
public static class InvokeContextInterpreterImpl extends HandlersContextInterpreterImpl {
|
||||
private static class InvokeContextInterpreterImpl extends HandlersContextInterpreterImpl {
|
||||
|
||||
@Override
|
||||
public boolean understands(CGNode node) {
|
||||
|
@ -476,6 +479,13 @@ public class MethodHandles {
|
|||
|
||||
return irs.get(node).get();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void analyzeMethodHandles(AnalysisOptions options, SSAPropagationCallGraphBuilder builder) {
|
||||
options.setSelector(new InvokeExactTargetSelector(options.getMethodTargetSelector()));
|
||||
|
||||
builder.setContextSelector(new ContextSelectorImpl(builder.getContextSelector()));
|
||||
builder.setContextInterpreter(new DelegatingSSAContextInterpreter(new InvokeContextInterpreterImpl(), builder.getCFAContextInterpreter()));
|
||||
builder.setContextInterpreter(new DelegatingSSAContextInterpreter(new FindContextInterpreterImpl(), builder.getCFAContextInterpreter()));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue