public AnalysisEntityFactory( Func <IOperation, PointsToAbstractValue> getPointsToAbstractValueOpt, INamedTypeSymbol containingTypeSymbol) { _getPointsToAbstractValueOpt = getPointsToAbstractValueOpt; _analysisEntityMap = new Dictionary <IOperation, AnalysisEntity>(); _instanceLocationsForSymbols = new Dictionary <ISymbol, PointsToAbstractValue>(); var thisOrMeInstanceLocation = AbstractLocation.CreateThisOrMeLocation(containingTypeSymbol); var instanceLocation = new PointsToAbstractValue(thisOrMeInstanceLocation); ThisOrMeInstance = AnalysisEntity.CreateThisOrMeInstance(containingTypeSymbol, instanceLocation); }
private static PointsToAbstractValue GetThisOrMeInstancePointsToValue(INamedTypeSymbol containingTypeSymbol) { if (!containingTypeSymbol.HasValueCopySemantics()) { var thisOrMeLocation = AbstractLocation.CreateThisOrMeLocation(containingTypeSymbol); return(new PointsToAbstractValue(thisOrMeLocation)); } else { return(PointsToAbstractValue.NoLocation); } }
public AnalysisEntityFactory( Func <IOperation, PointsToAbstractValue> getPointsToAbstractValueOpt, INamedTypeSymbol containingTypeSymbol) { _getPointsToAbstractValueOpt = getPointsToAbstractValueOpt; _analysisEntitiesPerInstance = ImmutableDictionary.CreateBuilder <PointsToAbstractValue, ImmutableHashSet <AnalysisEntity> .Builder>(); _analysisEntityMap = new Dictionary <IOperation, AnalysisEntity>(); _instanceLocationsForSymbols = new Dictionary <ISymbol, PointsToAbstractValue>(); var thisOrMeInstanceLocation = AbstractLocation.CreateThisOrMeLocation(containingTypeSymbol); var instanceLocation = new PointsToAbstractValue(thisOrMeInstanceLocation); ThisOrMeInstance = AnalysisEntity.CreateThisOrMeInstance(containingTypeSymbol, instanceLocation); AddToMap(instanceLocation, ThisOrMeInstance); }
public AnalysisEntityFactory( Func <IOperation, PointsToAbstractValue> getPointsToAbstractValueOpt, Func <bool> getIsInsideObjectInitializer, INamedTypeSymbol containingTypeSymbol) { _getPointsToAbstractValueOpt = getPointsToAbstractValueOpt; _getIsInsideObjectInitializer = getIsInsideObjectInitializer; _analysisEntityMap = new Dictionary <IOperation, AnalysisEntity>(); _instanceLocationsForSymbols = new Dictionary <ISymbol, PointsToAbstractValue>(); var thisOrMeInstanceLocation = AbstractLocation.CreateThisOrMeLocation(containingTypeSymbol); var instanceLocation = PointsToAbstractValue.Create(thisOrMeInstanceLocation, mayBeNull: false); ThisOrMeInstance = AnalysisEntity.CreateThisOrMeInstance(containingTypeSymbol, instanceLocation); }
private PointsToAbstractValue EnsureLocation(PointsToAbstractValue instanceLocationOpt, ISymbol symbolOpt, AnalysisEntity parentOpt) { if (instanceLocationOpt == null && symbolOpt != null) { Debug.Assert(symbolOpt.Kind == SymbolKind.Local || symbolOpt.Kind == SymbolKind.Parameter || symbolOpt.IsStatic); if (!_instanceLocationsForSymbols.TryGetValue(symbolOpt, out instanceLocationOpt)) { if (parentOpt != null) { instanceLocationOpt = parentOpt.InstanceLocation; } else { var location = AbstractLocation.CreateSymbolLocation(symbolOpt); instanceLocationOpt = new PointsToAbstractValue(location); } _instanceLocationsForSymbols.Add(symbolOpt, instanceLocationOpt); } } return(instanceLocationOpt); }
protected abstract void SetAbstractValue(AbstractLocation location, TAbstractAnalysisValue value);
protected abstract TAbstractAnalysisValue GetAbstractValue(AbstractLocation location);