private void BuildPropertyRow(XDoc html, ReflectedPropertyInfo member) { var xmlDoc = GetDoc(member.Signature); html.Start("tr") .Elem("td", member.MemberAccess) .Start("td").StartSpan("member"); if (IsTypeInDocumentation(member.DeclaringType)) { html.Link(member.UriPath, member.DisplayName); } else { html.Value(member.DisplayName); } html .EndSpan() .StartSpan("description"); if (member.IsOverride && !member.IsInherited) { html.Value("(Override)"); } html.AddNodes(xmlDoc["summary"]); if (member.IsInherited) { html.Value(string.Format("(Inherited from {0})", member.DeclaringType.DisplayName)); } html .EndSpan() .End() // td .End(); // tr }
private SuperSearchFilterData GetSearchableContentTypes() { SuperSearchFilterData filterData = new SuperSearchFilterData(); Assembly targetAssembly = Assembly.Load("PureAlloyMvc"); List <Type> semiFilteredTypes = targetAssembly.GetTypes().Where(type => type.IsClass).ToList(); // Find all types inheriting from PageData and all their members List <Type> pageDataTypes = semiFilteredTypes.Where(t => t.IsSubclassOf(typeof(PageData))).ToList(); foreach (Type type in pageDataTypes) { ReflectedContentType reflectedContent = new ReflectedContentType() { Type = type, FromEpi = false // No class in episerver inherits from PageData }; foreach (PropertyInfo property in type.GetProperties()) { ReflectedPropertyInfo reflectedProperty = new ReflectedPropertyInfo() { PropertyInfo = property, FromEpi = typeof(PageData).GetProperty(property.Name) != null // if the property is defined in PageData or on an even lower level }; reflectedContent.Properties.Add(property.Name, reflectedProperty); } filterData.PageTypes.Add(type.Name, reflectedContent); } // Find all types inheriting from BlockData and all their members List <Type> blockDataTypes = semiFilteredTypes.Where(t => t.IsSubclassOf(typeof(BlockData))).ToList(); foreach (Type type in blockDataTypes) { ReflectedContentType reflectedContent = new ReflectedContentType() { Type = type, FromEpi = false // No class in episerver inherits BlockData }; foreach (PropertyInfo property in type.GetProperties()) { ReflectedPropertyInfo reflectedProperty = new ReflectedPropertyInfo() { PropertyInfo = property, FromEpi = typeof(BlockData).GetProperty(property.Name) != null // if the property is defined in BlockData or on an even lower level }; reflectedContent.Properties.Add(property.Name, reflectedProperty); } filterData.BlockTypes.Add(type.Name, reflectedContent); } // Find all interfaces that is implemented for any of the found types List <Type> blocksAndPages = new List <Type>(); blocksAndPages.AddRange(pageDataTypes); blocksAndPages.AddRange(blockDataTypes); foreach (Type type in blocksAndPages.SelectMany(type => type.GetInterfaces()).Distinct()) // make sure to remove duplicates, or else it will be alot of them { if (filterData.InterfaceTypes.Keys.Contains(type.Name)) { continue; } ReflectedContentType reflectedContent = new ReflectedContentType() { Type = type, FromEpi = type.Assembly.FullName.StartsWith("EPiServer") // EPiServer have many interfaces on pages and blocks }; foreach (PropertyInfo property in type.GetProperties()) { ReflectedPropertyInfo reflectedProperty = new ReflectedPropertyInfo() { PropertyInfo = property, FromEpi = reflectedContent.FromEpi // if the property is in an interface from episerver, the property is from episerver }; reflectedContent.Properties.Add(property.Name, reflectedProperty); } filterData.InterfaceTypes.Add(type.Name, reflectedContent); } return(filterData); }