protected static object GetDataContextActivities(Activity compiledRoot, bool forImplementation) { var vistor = new CompiledDataContextActivityVistor(); vistor.Visit(compiledRoot, forImplementation); var cache = new CompiledDataContextActivitiesCache(vistor.DataContextActivities); return(cache); }
private static ActivityInstance GetDataContextInstance(CompiledDataContextActivitiesCache dataContextActivities, ActivityContext activityContext, Activity compiledRoot) { ActivityInstance dataContextInstance = null; var currentInstance = activityContext.CurrentInstance; while (currentInstance != null) { if (dataContextActivities.Contains(currentInstance.Activity)) { dataContextInstance = currentInstance; break; } // // Make sure we don't walk out of our IdSpace if (currentInstance.Activity == compiledRoot) { break; } // // For SecondaryRoot scenarios the ActivityInstance tree may not // contain any of the data context activity instances because // the instance tree does not have to match the activity definition tree. // In this case just use the root instance. if (currentInstance.Parent == null) { dataContextInstance = currentInstance; } currentInstance = currentInstance.Parent; } if (dataContextInstance == null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.CompiledExpressionsNoCompiledRoot(activityContext.Activity.Id))); } return(dataContextInstance); }