internal AnalysisEntityFactory( ControlFlowGraph controlFlowGraph, WellKnownTypeProvider wellKnownTypeProvider, Func <IOperation, PointsToAbstractValue>?getPointsToAbstractValue, Func <bool> getIsInsideAnonymousObjectInitializer, Func <IFlowCaptureOperation, bool> getIsLValueFlowCapture, INamedTypeSymbol containingTypeSymbol, AnalysisEntity?interproceduralInvocationInstance, AnalysisEntity?interproceduralThisOrMeInstanceForCaller, ImmutableStack <IOperation>?interproceduralCallStack, ImmutableDictionary <ISymbol, PointsToAbstractValue>?interproceduralCapturedVariablesMap, Func <IOperation, AnalysisEntity?>?interproceduralGetAnalysisEntityForFlowCapture, Func <ISymbol, ImmutableStack <IOperation>?> getInterproceduralCallStackForOwningSymbol) { _controlFlowGraph = controlFlowGraph; _wellKnownTypeProvider = wellKnownTypeProvider; _getPointsToAbstractValue = getPointsToAbstractValue; _getIsInsideAnonymousObjectInitializer = getIsInsideAnonymousObjectInitializer; _getIsLValueFlowCapture = getIsLValueFlowCapture; _interproceduralThisOrMeInstanceForCaller = interproceduralThisOrMeInstanceForCaller; _interproceduralCallStack = interproceduralCallStack; _interproceduralGetAnalysisEntityForFlowCapture = interproceduralGetAnalysisEntityForFlowCapture; _getInterproceduralCallStackForOwningSymbol = getInterproceduralCallStackForOwningSymbol; _analysisEntityMap = new Dictionary <IOperation, AnalysisEntity?>(); _tupleElementEntitiesMap = new Dictionary <ITupleOperation, ImmutableArray <AnalysisEntity> >(); _captureIdEntityMap = new Dictionary <CaptureId, AnalysisEntity>(); _captureIdCopyValueMap = new Dictionary <CaptureId, CopyAbstractValue>(); _instanceLocationsForSymbols = new Dictionary <ISymbol, PointsToAbstractValue>(); if (interproceduralCapturedVariablesMap != null) { _instanceLocationsForSymbols.AddRange(interproceduralCapturedVariablesMap); } if (interproceduralInvocationInstance != null) { ThisOrMeInstance = interproceduralInvocationInstance; } else { var thisOrMeInstanceLocation = AbstractLocation.CreateThisOrMeLocation(containingTypeSymbol, interproceduralCallStack); var instanceLocation = PointsToAbstractValue.Create(thisOrMeInstanceLocation, mayBeNull: false); ThisOrMeInstance = AnalysisEntity.CreateThisOrMeInstance(containingTypeSymbol, instanceLocation); } }
protected abstract void StopTrackingAbstractValue(AbstractLocation location);
protected abstract void SetAbstractValue(AbstractLocation location, TAbstractAnalysisValue value);
protected abstract TAbstractAnalysisValue GetAbstractValue(AbstractLocation location);