public void Case0_Should_RemoveBaseTypes2() { //Given var types = CompilerUtils.GetLinks(typeof(Class2)); Assume.That(types, Has.Exactly(2).Items); //When var interfaces = AssemblyAnalizer <object> .RemoveBaseTypes(types); //Then Assert.That(interfaces, Has.Exactly(1).Items); }
public IChain <MessageInfo, LinkInfo <T> > Analize(Assembly[] assemblies, Type[] attributes, Func <Type, bool> messageTypeFilter = null) { var result = new Chain <MessageInfo, LinkInfo <T> >(); if (attributes == null) { throw new ArgumentNullException(nameof(attributes)); //attributes = Core.Defaults.GetAvailableAttributes(); } foreach (var assembly in assemblies) { var types = assembly.GetTypes(); if (messageTypeFilter != null) { types = types.Where(messageTypeFilter).ToArray(); } var messages = types.Where(t => attributes.Any(a => CompilerUtils.MessageTypeHasAttribute(t, a))) .ToArray(); if (messages.Any()) { foreach (var message in messages) { result.AddNode(new ChainNode <MessageInfo>(message.FullName, new MessageInfo() { Type = message, Attributes = CompilerUtils.GetAttributes(message), Interfaces = RemoveBaseTypes(CompilerUtils.GetLinks(message)) })); } } } foreach (var assembly in assemblies) { var types = assembly.GetTypes(); if (messageTypeFilter != null) { types = types.Where(messageTypeFilter).ToArray(); } var messages = types.Where(t => attributes.Any(a => CompilerUtils.MessageTypeHasAttribute(t, a))) .ToArray(); if (messages.Any()) { foreach (var message in messages) { var interfaces = CompilerUtils.GetLinks(message); interfaces = RemoveBaseTypes(interfaces); var msgAttributes = CompilerUtils.GetAttributes(message); var links = _theme.GetThemedLinks(message, msgAttributes, interfaces, result); if (links == null || links.Length == 0) { continue; } foreach (var linkMetadata in links) { result.AddDirectedEdge(result[message.FullName], result[linkMetadata.ToMessage.FullName], linkMetadata.Link); } } } } return(result); }