public OfflineApiPortService(IApiCatalogLookup lookup, IRequestAnalyzer requestAnalyzer, ITargetMapper mapper, ICollection <IReportWriter> reportWriters, ITargetNameParser targetNameParser)
 {
     _lookup          = lookup;
     _requestAnalyzer = requestAnalyzer;
     _mapper          = mapper;
     _reportWriters   = reportWriters;
     _defaultTargets  = new HashSet <FrameworkName>(targetNameParser.DefaultTargets);
 }
Пример #2
0
        /// <summary>
        /// Adds a DocId with a parameter to the catalog
        /// </summary>
        /// <param name="docIDType">Type of ID to add (M, T, P, E, etc)</param>
        /// <param name="catalog">The catalog to add to</param>
        private static void AddDocIdWithParameter(string docIDType, IApiCatalogLookup catalog)
        {
            var docId = $"{docIDType}:{ValidDocId}{ParamText}";

            catalog.IsFrameworkMember(docId).Returns(r => true);
            catalog.GetApiDefinition(docId).Returns(r => new ApiDefinition {
                DocId = docId
            });
        }
Пример #3
0
        /// <summary>
        /// Identitifies the status of an API for all of the targets.
        /// </summary>
        private MemberInfo ProcessMemberInfo(IApiCatalogLookup catalog, IEnumerable <FrameworkName> targets, MemberInfo member)
        {
            member.IsSupportedAcrossTargets = IsSupportedAcrossTargets(catalog, member.MemberDocId, targets, out var targetStatus);
            member.TargetStatus             = targetStatus;
            member.RecommendedChanges       = _recommendations.GetRecommendedChanges(member.MemberDocId);
            member.SourceCompatibleChange   = _recommendations.GetSourceCompatibleChanges(member.MemberDocId);

            return(member);
        }
Пример #4
0
 public OfflineApiPortService(IApiCatalogLookup lookup, IRequestAnalyzer requestAnalyzer, ITargetMapper mapper, ICollection <IReportWriter> reportWriters, ITargetNameParser targetNameParser, IApiRecommendations apiRecommendations)
 {
     _lookup             = lookup;
     _requestAnalyzer    = requestAnalyzer;
     _mapper             = mapper;
     _reportWriters      = reportWriters;
     _defaultTargets     = new HashSet <FrameworkName>(targetNameParser.DefaultTargets);
     _searcher           = new StringContainsSearcher(lookup);
     _apiRecommendations = apiRecommendations;
 }
Пример #5
0
 /// <summary>
 /// Adds a DocId to the catalog
 /// </summary>
 /// <param name="docIDType">Type of Id to add (M, T, P, E, etc)</param>
 /// <param name="catalog">The catalog to add to</param>
 private static void AddDocIdsForType(string docIDType, IApiCatalogLookup catalog)
 {
     for (int iCounter = 0; iCounter < MaxDocIdSetCount; iCounter++)
     {
         var docId = $"{docIDType}:{ValidDocId}{iCounter}";
         catalog.IsFrameworkMember(docId).Returns(r => true);
         catalog.GetApiDefinition(docId).Returns(r => new ApiDefinition {
             DocId = docId
         });
     }
 }
Пример #6
0
        public ApiInformation(string docId, IApiCatalogLookup catalog, IApiRecommendations recommendations)
        {
            if (string.IsNullOrWhiteSpace(docId))
            {
                throw new ArgumentNullException("docId");
            }

            Definition = catalog.GetApiDefinition(docId);

            Supported = catalog.GetSupportedVersions(docId);

            AdditionalInformation = recommendations.GetNotes(docId);
            SourceCompatibleChanges = recommendations.GetSourceCompatibleChanges(docId);
            RecommendedChanges = recommendations.GetRecommendedChanges(docId);
            Component = recommendations.GetComponent(docId);
        }
        public ApiInformation(string docId, IApiCatalogLookup catalog, IApiRecommendations recommendations)
        {
            if (string.IsNullOrWhiteSpace(docId))
            {
                throw new ArgumentNullException(nameof(docId));
            }

            Definition = catalog.GetApiDefinition(docId);

            Supported = catalog.GetSupportedVersions(docId);

            AdditionalInformation   = recommendations.GetNotes(docId);
            SourceCompatibleChanges = recommendations.GetSourceCompatibleChanges(docId);
            RecommendedChanges      = recommendations.GetRecommendedChanges(docId);
            Component = recommendations.GetComponent(docId);
        }
Пример #8
0
        /// <summary>
        /// Identitifies the status of an API Exception for all of the targets.
        /// </summary>
        /// <returns>ExceptionInfo will be null if no exceptions are thrown.</returns>
        private static ExceptionInfo ProcessExceptionInfo(IApiCatalogLookup catalog, IEnumerable <FrameworkName> targets, MemberInfo member)
        {
            var exceptionsThrownList = GetThrownExceptions(catalog, member.MemberDocId, targets);

            if (exceptionsThrownList == null)
            {
                return(null);
            }

            var exceptionHold = new ExceptionInfo();

            exceptionHold.MemberDocId = member.MemberDocId;
            exceptionHold.DefinedInAssemblyIdentity = member.DefinedInAssemblyIdentity;
            exceptionHold.IsSupportedAcrossTargets  = IsSupportedAcrossTargets(catalog, member.MemberDocId, targets, out var ignore);
            exceptionHold.ExceptionsThrown          = exceptionsThrownList;

            return(exceptionHold);
        }
        private static bool IsSupportedOnTarget(IApiCatalogLookup catalog, string memberDocId, FrameworkName target, out Version status)
        {
            status = null;

            // If the member is part of the API surface, no need to report it.
            if (catalog.IsMemberInTarget(memberDocId, target, out status))
            {
                return(true);
            }

            var sourceEquivalent = catalog.GetSourceCompatibilityEquivalent(memberDocId);

            if (!string.IsNullOrEmpty(sourceEquivalent) && catalog.IsMemberInTarget(sourceEquivalent, target, out status))
            {
                return(true);
            }

            return(false);
        }
Пример #10
0
        /// <summary>
        /// Computes a list of strings that describe the status of the api on all the targets (not supported or version when it was introduced).
        /// </summary>
        private static bool IsSupportedAcrossTargets(IApiCatalogLookup catalog, string memberDocId, IEnumerable <FrameworkName> targets, out List <Version> targetStatus)
        {
            targetStatus = new List <Version>();
            bool isSupported = true;

            foreach (var target in targets)
            {
                // For each target we should get the status of the api:
                //   - 'null' if not supported
                //   - Version introduced in
                if (!IsSupportedOnTarget(catalog, memberDocId, target, out var status))
                {
                    isSupported = false;
                }

                targetStatus.Add(status);
            }

            return(isSupported);
        }
Пример #11
0
 public UsageData(string docId, IApiCatalogLookup catalog, IApiRecommendations recommendations)
 {
     Api = new ApiInformation(docId, catalog, recommendations);
 }
Пример #12
0
 public AnalysisEngine(IApiCatalogLookup catalog, IApiRecommendations recommendations)
 {
     _catalog         = catalog;
     _recommendations = recommendations;
 }
        private static IDictionary<MemberInfo, ICollection<AssemblyInfo>> GenerateTestData(IApiCatalogLookup catalog)
        {
            var userAsm1 = new AssemblyInfo { AssemblyIdentity = "userAsm1, Version=1.0.0.0", FileVersion = "1.0.0.0" };
            var userAsm2 = new AssemblyInfo { AssemblyIdentity = "userAsm2, Version=2.0.0.0", FileVersion = "2.0.0.0" };
            var userAsm3 = new AssemblyInfo { AssemblyIdentity = "userAsm3, Version=3.0.0.0", FileVersion = "3.0.0.0" };
            var mi1 = new MemberInfo { DefinedInAssemblyIdentity = "System.Drawing, Version=1.0.136.0, PublicKeyToken=b03f5f7f11d50a3a", MemberDocId = TestDocId1 };
            var mi2 = new MemberInfo { DefinedInAssemblyIdentity = "System.Data, Version=1.0.136.0, PublicKeyToken=b77a5c561934e089", MemberDocId = TestDocId2 };
            var mi3 = new MemberInfo { DefinedInAssemblyIdentity = "userAsm1, Version=1.0.0.0", MemberDocId = "T:MyType" };

            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(mi1.DefinedInAssemblyIdentity)).Returns(true);
            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(mi2.DefinedInAssemblyIdentity)).Returns(true);
            catalog.IsFrameworkMember(mi1.MemberDocId).Returns(true);
            catalog.IsFrameworkMember(mi2.MemberDocId).Returns(true);

            return new Dictionary<MemberInfo, ICollection<AssemblyInfo>>
            {
                {mi1, new[] { userAsm1 } },
                {mi2, new[] { userAsm2 } },
                {mi3, new[] { userAsm3 } },
            };
        }
Пример #14
0
 public TargetNameParser(IApiCatalogLookup catalog, string defaultTargets)
 {
     _catalog       = catalog;
     DefaultTargets = GetDefaultTargets(defaultTargets).ToList();
 }
 private BreakingChangeRecommendationsMock(IApiCatalogLookup catalog, IDictionary<string, IEnumerable<BreakingChange>> breakingChanges)
     : base(catalog)
 {
     _breakingChanges = breakingChanges;
 }
 public OfflineApiRecommendations(IApiCatalogLookup lookup, IEnumerable <BreakingChange> breakingChanges)
 {
     _lookup          = lookup;
     _breakingChanges = breakingChanges;
 }
Пример #17
0
 public StringContainsSearch(IApiCatalogLookup lookup)
 {
     _lookup = lookup;
 }
Пример #18
0
 public AnalysisEngine(IApiCatalogLookup catalog, IApiRecommendations recommendations, IPackageFinder packageFinder)
 {
     _catalog         = catalog;
     _recommendations = recommendations;
     _packageFinder   = packageFinder;
 }
 protected AncestorApiRecommendations(IApiCatalogLookup catalog)
 {
     Catalog = catalog;
 }
 /// <summary>
 /// Adds a DocId with a parameter to the catalog
 /// </summary>
 /// <param name="docIDType">Type of ID to add (M, T, P, E, etc)</param>
 /// <param name="catalog">The catalog to add to</param>
 private static void AddDocIdWithParameter(string docIDType, IApiCatalogLookup catalog)
 {
     var docId = $"{docIDType}:{ValidDocId}{ParamText}";
     catalog.IsFrameworkMember(docId).Returns(r => true);
     catalog.GetApiDefinition(docId).Returns(r => new ApiDefinition { DocId = docId });
 }
 /// <summary>
 /// Adds a DocId to the catalog
 /// </summary>
 /// <param name="docIDType">Type of Id to add (M, T, P, E, etc)</param>
 /// <param name="catalog">The catalog to add to</param>
 private static void AddDocIdsForType(string docIDType, IApiCatalogLookup catalog)
 {
     for (int iCounter = 0; iCounter < MaxDocIdSetCount; iCounter++)
     {
         var docId = $"{docIDType}:{ValidDocId}{iCounter}";
         catalog.IsFrameworkMember(docId).Returns(r => true);
         catalog.GetApiDefinition(docId).Returns(r => new ApiDefinition { DocId = docId });
     }
 }
Пример #22
0
        private static IDictionary <MemberInfo, ICollection <AssemblyInfo> > GenerateTestData(IApiCatalogLookup catalog)
        {
            var userAsm1 = new AssemblyInfo {
                AssemblyIdentity = "userAsm1, Version=1.0.0.0", FileVersion = "1.0.0.0"
            };
            var userAsm2 = new AssemblyInfo {
                AssemblyIdentity = "userAsm2, Version=2.0.0.0", FileVersion = "2.0.0.0"
            };
            var userAsm3 = new AssemblyInfo {
                AssemblyIdentity = "userAsm3, Version=3.0.0.0", FileVersion = "3.0.0.0"
            };
            var mi1 = new MemberInfo {
                DefinedInAssemblyIdentity = "System.Drawing, Version=1.0.136.0, PublicKeyToken=b03f5f7f11d50a3a", MemberDocId = TestDocId1
            };
            var mi2 = new MemberInfo {
                DefinedInAssemblyIdentity = "System.Data, Version=1.0.136.0, PublicKeyToken=b77a5c561934e089", MemberDocId = TestDocId2
            };
            var mi3 = new MemberInfo {
                DefinedInAssemblyIdentity = "userAsm1, Version=1.0.0.0", MemberDocId = "T:MyType"
            };

            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(mi1.DefinedInAssemblyIdentity)).Returns(true);
            catalog.IsFrameworkAssembly(GetAssemblyIdentityWithoutCultureAndVersion(mi2.DefinedInAssemblyIdentity)).Returns(true);
            catalog.IsFrameworkMember(mi1.MemberDocId).Returns(true);
            catalog.IsFrameworkMember(mi2.MemberDocId).Returns(true);

            return(new Dictionary <MemberInfo, ICollection <AssemblyInfo> >
            {
                { mi1, new[] { userAsm1 } },
                { mi2, new[] { userAsm2 } },
                { mi3, new[] { userAsm3 } },
            });
        }
Пример #23
0
 public TargetNameParser(IApiCatalogLookup catalog, string defaultTargets)
 {
     _catalog = catalog;
     DefaultTargets = GetDefaultTargets(defaultTargets).ToList();
 }
Пример #24
0
 public UsageData(string docId, IApiCatalogLookup catalog, IApiRecommendations recommendations)
 {
     Api = new ApiInformation(docId, catalog, recommendations);
 }
 public static IApiRecommendations Create(IApiCatalogLookup catalog, IDictionary<string, IEnumerable<BreakingChange>> breakingChanges = null)
 {
     return new BreakingChangeRecommendationsMock(catalog, breakingChanges ?? new Dictionary<string, IEnumerable<BreakingChange>>());
 }
 public static IApiRecommendations Create(IApiCatalogLookup catalog)
 {
     return(new AncestorApiRecommendations(catalog));
 }
Пример #27
0
 private BreakingChangeRecommendationsMock(IApiCatalogLookup catalog, IDictionary <string, IEnumerable <BreakingChange> > breakingChanges)
     : base(catalog)
 {
     _breakingChanges = breakingChanges;
 }
Пример #28
0
 public static IApiRecommendations Create(IApiCatalogLookup catalog, IDictionary <string, IEnumerable <BreakingChange> > breakingChanges = null)
 {
     return(new BreakingChangeRecommendationsMock(catalog, breakingChanges ?? new Dictionary <string, IEnumerable <BreakingChange> >()));
 }
Пример #29
0
 /// <summary>
 /// Finds out if the given <paramref name="docId"/> is supported on any target.
 /// </summary>
 private static bool IsSupportedOnAnyTarget(IApiCatalogLookup catalog, string docId) => catalog.GetSupportedVersions(docId).Any();
 public OfflineApiRecommendations(IApiCatalogLookup lookup, IEnumerable<BreakingChange> breakingChanges)
     : base(lookup)
 {
     _lookup = lookup;
     _breakingChanges = breakingChanges;
 }