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); }
/// <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> /// 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); }
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; }
/// <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 }); } }
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); }
/// <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); }
/// <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); }
public UsageData(string docId, IApiCatalogLookup catalog, IApiRecommendations recommendations) { Api = new ApiInformation(docId, catalog, recommendations); }
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 } }, }; }
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; }
public StringContainsSearch(IApiCatalogLookup lookup) { _lookup = lookup; }
public AnalysisEngine(IApiCatalogLookup catalog, IApiRecommendations recommendations, IPackageFinder packageFinder) { _catalog = catalog; _recommendations = recommendations; _packageFinder = packageFinder; }
protected AncestorApiRecommendations(IApiCatalogLookup catalog) { Catalog = catalog; }
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 } }, }); }
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)); }
private BreakingChangeRecommendationsMock(IApiCatalogLookup catalog, IDictionary <string, IEnumerable <BreakingChange> > breakingChanges) : base(catalog) { _breakingChanges = breakingChanges; }
public static IApiRecommendations Create(IApiCatalogLookup catalog, IDictionary <string, IEnumerable <BreakingChange> > breakingChanges = null) { return(new BreakingChangeRecommendationsMock(catalog, breakingChanges ?? new Dictionary <string, IEnumerable <BreakingChange> >())); }
/// <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; }