Esempio n. 1
0
            public DisposeDataFlowOperationVisitor(
                INamedTypeSymbol iDisposable,
                INamedTypeSymbol taskType,
                ImmutableHashSet <INamedTypeSymbol> collectionTypes,
                ImmutableHashSet <INamedTypeSymbol> disposeOwnershipTransferLikelyTypes,
                DisposeAbstractValueDomain valueDomain,
                ISymbol owningSymbol,
                bool trackInstanceFields,
                DataFlowAnalysisResult <PointsToBlockAnalysisResult, PointsToAbstractValue> pointsToAnalysisResult,
                DataFlowAnalysisResult <NullBlockAnalysisResult, NullAbstractValue> nullAnalysisResultOpt)
                : base(valueDomain, owningSymbol, pessimisticAnalysis, nullAnalysisResultOpt: nullAnalysisResultOpt, pointsToAnalysisResultOpt: pointsToAnalysisResult)
            {
                Debug.Assert(iDisposable != null);
                Debug.Assert(collectionTypes.All(ct => ct.TypeKind == TypeKind.Interface));
                Debug.Assert(disposeOwnershipTransferLikelyTypes != null);
                Debug.Assert(pointsToAnalysisResult != null);

                _iDisposable     = iDisposable;
                _taskType        = taskType;
                _collectionTypes = collectionTypes;
                _disposeOwnershipTransferLikelyTypes = disposeOwnershipTransferLikelyTypes;
                if (trackInstanceFields)
                {
                    _trackedInstanceFieldLocationsOpt = new Dictionary <IFieldSymbol, PointsToAbstractValue>();
                }
            }
Esempio n. 2
0
            public DisposeDataFlowOperationVisitor(
                DisposeAbstractValueDomain valueDomain,
                ISymbol owningSymbol,
                WellKnownTypeProvider wellKnownTypeProvider,
                ImmutableHashSet <INamedTypeSymbol> disposeOwnershipTransferLikelyTypes,
                bool trackInstanceFields,
                DataFlowAnalysisResult <PointsToBlockAnalysisResult, PointsToAbstractValue> pointsToAnalysisResult)
                : base(valueDomain, owningSymbol, wellKnownTypeProvider, pessimisticAnalysis, predicateAnalysis: false, copyAnalysisResultOpt: null, pointsToAnalysisResultOpt: pointsToAnalysisResult)
            {
                Debug.Assert(wellKnownTypeProvider.IDisposable != null);
                Debug.Assert(wellKnownTypeProvider.CollectionTypes.All(ct => ct.TypeKind == TypeKind.Interface));
                Debug.Assert(disposeOwnershipTransferLikelyTypes != null);
                Debug.Assert(pointsToAnalysisResult != null);

                _disposeOwnershipTransferLikelyTypes = disposeOwnershipTransferLikelyTypes;
                if (trackInstanceFields)
                {
                    _trackedInstanceFieldLocationsOpt = new Dictionary <IFieldSymbol, PointsToAbstractValue>();
                }
            }
Esempio n. 3
0
            public DisposeDataFlowOperationVisitor(
                INamedTypeSymbol iDisposable,
                INamedTypeSymbol iCollection,
                INamedTypeSymbol genericICollection,
                ImmutableHashSet <INamedTypeSymbol> disposeOwnershipTransferLikelyTypes,
                DisposeAbstractValueDomain valueDomain,
                INamedTypeSymbol containingTypeSymbol,
                DataFlowAnalysisResult <PointsToBlockAnalysisResult, PointsToAbstractValue> pointsToAnalysisResult,
                DataFlowAnalysisResult <NullBlockAnalysisResult, NullAbstractValue> nullAnalysisResultOpt)
                : base(valueDomain, containingTypeSymbol, nullAnalysisResultOpt: nullAnalysisResultOpt, pointsToAnalysisResultOpt: pointsToAnalysisResult)
            {
                Debug.Assert(iDisposable != null);
                Debug.Assert(disposeOwnershipTransferLikelyTypes != null);
                Debug.Assert(pointsToAnalysisResult != null);

                _iDisposable        = iDisposable;
                _iCollection        = iCollection;
                _genericICollection = genericICollection;
                _disposeOwnershipTransferLikelyTypes = disposeOwnershipTransferLikelyTypes;
            }