예제 #1
0
		public static AssemblyDom Build(AssemblyDoc asmDoc, Assembly asm, Func<MemberDom, bool> filterMembers, FindOptions findOptions)
		{
			var ret = new AssemblyDom { _name = asmDoc.Name, ReflectionAssembly = asm };
			asmDoc.MergeWithReflection(asm, findOptions, out ret.ErrorUnboundTypes, out ret.ErrorUnboundMembers);
			ret.AllTypes = asmDoc.Types.Select(_ => TypeDom.Build(_, ret, filterMembers)).ToArray();
			ret.FillNamespaces();
			ret.FillNestedTypes();
			return ret;			
		}
예제 #2
0
        public static AssemblyDom Build(AssemblyDoc asmDoc, Assembly asm, Func <MemberDom, bool> filterMembers, FindOptions findOptions)
        {
            var ret = new AssemblyDom {
                _name = asmDoc.Name, ReflectionAssembly = asm
            };

            asmDoc.MergeWithReflection(asm, findOptions, out ret.ErrorUnboundTypes, out ret.ErrorUnboundMembers);
            ret.AllTypes = asmDoc.Types.Select(_ => TypeDom.Build(_, ret, filterMembers)).ToArray();
            ret.FillNamespaces();
            ret.FillNestedTypes();
            return(ret);
        }
예제 #3
0
		private static void AddAssembly(OfflineDynamicPage rootItems, AssemblyDom asmDom)
		{
			var asmItem = new OfflineDynamicPage
			{
				Parent = rootItems,
				UrlPart = asmDom.Name,
				RussianTitle = asmDom.Name,
				RussianContent = GenerateHtml.Generate(asmDom),
			};
			rootItems.Childs.Add(asmItem);
			AddNamespaces(asmItem, asmDom.Namespaces);
		}
예제 #4
0
 static WarningOrError GetUnboundError(AssemblyDom asmDom)
 {
     if (
         (asmDom.ErrorUnboundTypes == null || asmDom.ErrorUnboundTypes.Length == 0) &&
         (asmDom.ErrorUnboundMembers == null || asmDom.ErrorUnboundMembers.Length == 0)
         )
     {
         return(null);
     }
     return(new WarningOrError
     {
         ErrorType = WarningOrError.ErrorTypeEn.HaveUnboundTypesOrMembers,
         AssemblyName = asmDom.Name,
         UnboundTypes = asmDom.ErrorUnboundTypes,
         UnboundMembers = asmDom.ErrorUnboundMembers
     });
 }
예제 #5
0
        public static TypeDom Build(TypeDoc doc, AssemblyDom asm, Func <MemberDom, bool> filterMembers)
        {
            var ret = new TypeDom
            {
                Assembly = asm,
                DocInfo  = doc.DocInfo,
                Type     = doc.ReflectionType,
            };

            MemberDom[] members = doc.Members
                                  .Where(_ => _.ReflectionMemberInfo != null)
                                  .Select(_ => MemberDom.Build(ret, _.ReflectionMemberInfo, _.DocInfo))
                                  .ToArray();

            members = members.Where(
                _ => (filterMembers == null || filterMembers(_)) && !_.IsPrivateOrInternal
                ).ToArray();

            ret.AllMembers   = members;
            ret.Constructors = members.OfType <ConstructorDom>().OrderBy(_ => _.ShortSignature).ToArray();
            ret.Fields       = members.OfType <FieldDom>()
                               .OrderBy(_ => _.ShortSignature)
                               .ToArray();
            ret.Properties = members.OfType <PropertyDom>()
                             .OrderBy(_ => _.ShortSignature)
                             .ToArray();
            ret.Methods = members.OfType <MethodDom>()
                          .Where(_ => !_.IsOperator)
                          .OrderBy(_ => _.ShortSignature)
                          .ToArray();
            ret.Operators = members.OfType <MethodDom>()
                            .Where(_ => _.IsOperator)
                            .OrderBy(_ => _.ShortSignature)
                            .ToArray();
            ret.Events = members.OfType <EventDom>()
                         .OrderBy(_ => _.ShortSignature)
                         .ToArray();
            ret.GenericTypeParameters = GenericParameterDom.BuildTypeGenericParameters(ret.Type, ret.DocInfo);
            return(ret);
        }
예제 #6
0
        public static SolutionDom Build(string name, string[] assemblyFiles, string[] xmlDocFiles, string xmlNamespaceProjectFile = null, Func <MemberDom, bool> filterMembers = null, FindOptions findOptions = null)
        {
            if (findOptions == null)
            {
                findOptions = new FindOptions();                 //использовать значения по умолчанию
            }
            IEnumerable <AssemblyDoc> docs = ParseDocfiles(xmlDocFiles);
            var asmsDict = AssemblyUtils.LoadAllAssemblies(assemblyFiles)
                           .ToDictionary(_ => _.GetName().Name);
            var asmDoms = new List <AssemblyDom>();
            var errors  = new List <WarningOrError>();

            foreach (var doc in docs)
            {
                AssemblyDom asmDom = null;
                try
                {
                    asmDom = AssemblyDom.Build(doc, asmsDict[doc.Name], filterMembers, findOptions);
                }
                catch (Exception ex)
                {
                    errors.Add(new WarningOrError {
                        AssemblyName = doc.Name, InnerException = ex, ErrorType = WarningOrError.ErrorTypeEn.BindingWithReflection
                    });
                }
                if (asmDom != null)
                {
                    asmDoms.Add(asmDom);
                    var error = GetUnboundError(asmDom);
                    if (error != null)
                    {
                        errors.Add(error);
                    }
                }
            }
            var ret = new SolutionDom {
                Assemblies = asmDoms.ToArray(), Errors = errors, Name = name
            };

            ret.Namespaces = MergeNamespaces(ret.Assemblies.SelectMany(_ => _.Namespaces));
            ret.AllTypes   = ret.Assemblies.SelectMany(_ => _.AllTypes).ToArray();
            //ret.Namespaces.SelectMany(_ => _.Types).ToArray();

            PopulateExtentionMethods.Populate(ret.AllTypes);
            MergeDocWithBaseClasses.Merge(ret.AllTypes);

            //namespaces
            if (xmlNamespaceProjectFile != null)
            {
                var comm = NamespaceCommentsParser.Parse(XDocument.Load(xmlNamespaceProjectFile).Root);

                foreach (var ns in ret.Namespaces)
                {
                    NamespaceComments c;
                    if (comm.TryGetValue(ns.Name, out c))
                    {
                        ns.DocInfo = c.Comments;
                    }
                }
            }

            foreach (var type in ret.AllTypes)
            {
                type.FillOverrideIndex();
            }
            return(ret);
        }
예제 #7
0
		public static TypeDom Build(TypeDoc doc, AssemblyDom asm, Func<MemberDom, bool> filterMembers)
		{
			var ret = new TypeDom
				{
					Assembly = asm,
					DocInfo = doc.DocInfo,
					Type = doc.ReflectionType,
				};
			MemberDom[] members = doc.Members
									 .Where(_ => _.ReflectionMemberInfo != null)
									 .Select(_ => MemberDom.Build(ret, _.ReflectionMemberInfo, _.DocInfo))
									 .ToArray();
			
			members = members.Where(
				_ => (filterMembers==null || filterMembers(_)) && !_.IsPrivateOrInternal
				).ToArray();
			
			ret.AllMembers = members;
			ret.Constructors = members.OfType<ConstructorDom>().OrderBy(_ => _.ShortSignature).ToArray();
			ret.Fields = members.OfType<FieldDom>()
			                .OrderBy(_ => _.ShortSignature)
			                .ToArray();
			ret.Properties = members.OfType<PropertyDom>()
			                .OrderBy(_ => _.ShortSignature)
			                .ToArray();
			ret.Methods = members.OfType<MethodDom>()
			                .Where(_ => !_.IsOperator)
			                .OrderBy(_ => _.ShortSignature)
			                .ToArray();
			ret.Operators = members.OfType<MethodDom>()
			                .Where(_ => _.IsOperator)
			                .OrderBy(_ => _.ShortSignature)
			                .ToArray();
			ret.Events = members.OfType<EventDom>()
			                .OrderBy(_ => _.ShortSignature)
			                .ToArray();
			ret.GenericTypeParameters = GenericParameterDom.BuildTypeGenericParameters(ret.Type, ret.DocInfo);
			return ret;
		}
예제 #8
0
		static WarningOrError GetUnboundError(AssemblyDom asmDom)
		{
			if (
				(asmDom.ErrorUnboundTypes == null || asmDom.ErrorUnboundTypes.Length == 0) &&
				(asmDom.ErrorUnboundMembers == null || asmDom.ErrorUnboundMembers.Length == 0)
				)
				return null;
			return new WarningOrError
				{
					ErrorType = WarningOrError.ErrorTypeEn.HaveUnboundTypesOrMembers,
					AssemblyName = asmDom.Name,
					UnboundTypes = asmDom.ErrorUnboundTypes,
					UnboundMembers = asmDom.ErrorUnboundMembers
				};

		}
예제 #9
0
		static XElement BuildEnding(AssemblyDom asm,XElement docInfo)
		{
			var remarks = XMLUtils.GetTagInnerXml(docInfo, "remarks", Navigation, true);

			return 
				x("div",
					remarks == null ? x("span") : Section(Names[Strings.Remarks], x("p", remarks)),
					Section(Names[Strings.VersionInfo],
						x("p",
							x("b", Names[Strings.Version] + ": "), asm.Version,
							x("br"),
							x("b", Names[Strings.NetRuntimeVersion] + ": "), asm.RuntimeVersion
						),
						a("class", "doc_version")
					)
				);

		}