@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (caller == null) { throw new IllegalArgumentException("null caller"); } return delegate.getCalleeTarget(caller, site, callee, receiver); }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (caller == null) { throw new IllegalArgumentException("null caller"); } return delegate.getCalleeTarget(caller, site, callee, receiver); }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return delegate.getRelevantParameters(caller, site); }
/** * If only one Context exists return it, else return a DelegatingContext. */ @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { final Context ctxA = A.getCalleeTarget(caller, site, callee, receiver); final Context ctxB = B.getCalleeTarget(caller, site, callee, receiver); if (ctxA == null) { return ctxB; } else if (ctxB == null) { return ctxA; } else { final Context ctxU = new DelegatingContext(ctxA, ctxB); return ctxU; } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }
/** * If only one Context exists return it, else return a DelegatingContext. */ @Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { final Context ctxA = A.getCalleeTarget(caller, site, callee, receiver); final Context ctxB = B.getCalleeTarget(caller, site, callee, receiver); if (ctxA == null) { return ctxB; } else if (ctxB == null) { return ctxA; } else { final Context ctxU = new DelegatingContext(ctxA, ctxB); return ctxU; } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (DEBUG) { System.err.println(("getCalleeTarget " + caller + ' ' + site + ' ' + callee)); System.err.println("Trying with A: " + A.getClass()); System.err.println("Trying with B: " + B.getClass()); } if (A != null) { Context C = A.getCalleeTarget(caller, site, callee, receiver); if (C != null) { if (DEBUG) { System.err.println(("Case A " + A.getClass() + ' ' + C)); } Context CB = B.getCalleeTarget(caller, site, callee, receiver); if (CB != null) { return new DelegatingContext(C, CB); } else { return C; } } } Context C = B.getCalleeTarget(caller, site, callee, receiver); if (DEBUG) { System.err.println(("Case B " + B.getClass() + ' ' + C)); } return C; }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return baseSelector.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (DEBUG) { System.err.println(("getCalleeTarget " + caller + ' ' + site + ' ' + callee)); System.err.println("Trying with A: " + A.getClass()); System.err.println("Trying with B: " + B.getClass()); } if (A != null) { Context C = A.getCalleeTarget(caller, site, callee, receiver); if (C != null) { if (DEBUG) { System.err.println(("Case A " + A.getClass() + ' ' + C)); } Context CB = B.getCalleeTarget(caller, site, callee, receiver); if (CB != null) { return new DelegatingContext(C, CB); } else { return C; } } } Context C = B.getCalleeTarget(caller, site, callee, receiver); if (DEBUG) { System.err.println(("Case B " + B.getClass() + ' ' + C)); } return C; }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] actualParameters) { Context target = base.getCalleeTarget(caller, site, callee, actualParameters); if (actualParameters != null && actualParameters.length > 0) { return new CPAContext(target, actualParameters); } else { return target; } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return delegate.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { final Context base = baseSelector.getCalleeTarget(caller, site, callee, receiver); if (receiver != null && receiver[0] != null && receiver[0] instanceof ScopeMappingInstanceKey) { final ScopeMappingInstanceKey smik = (ScopeMappingInstanceKey) receiver[0]; return new ArgumentInstanceContext(base, 0, smik); } else { return base; } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] receiver) { if (methodsToSpecialize.contains(site.getDeclaredTarget()) || methodsToSpecialize.contains(callee.getReference())) { return specialPolicy.getCalleeTarget(caller, site, callee, receiver); } else { return basePolicy.getCalleeTarget(caller, site, callee, receiver); } }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }
@Override public Context getCalleeTarget(CGNode caller, CallSiteReference site, IMethod callee, InstanceKey[] actualParameters) { Context baseContext = base.getCalleeTarget(caller, site, callee, actualParameters); assert !recursiveContext(baseContext, callee); return baseContext; }
@Override public IntSet getRelevantParameters(CGNode caller, CallSiteReference site) { return base.getRelevantParameters(caller, site); }