Пример #1
0
        public SecondlifeWikiLibraryData(IDocumentationProvider documentationProvider, IEnumerable <string> subsets)
        {
            _client = new CachedWebDownloader(WebCacheFileDirectory);

            _subsets = subsets.ToList();


            Log.WriteLine("============================");
            Log.WriteLine("Starting scrape of " + SecondlifeWikiDomain + " ... ");
            Log.WriteLine("============================");

            foreach (var lslLibraryConstantSignature in GetLSLConstants())
            {
                lslLibraryConstantSignature.DocumentationString =
                    documentationProvider.DocumentConstant(lslLibraryConstantSignature);

                _constants.Add(lslLibraryConstantSignature.Name, lslLibraryConstantSignature);
            }

            foreach (var lslLibraryFunctionSignature in GetLSLFunctions())
            {
                lslLibraryFunctionSignature.DocumentationString =
                    documentationProvider.DocumentFunction(lslLibraryFunctionSignature);

                if (_functions.ContainsKey(lslLibraryFunctionSignature.Name))
                {
                    _functions[lslLibraryFunctionSignature.Name].Add(lslLibraryFunctionSignature);
                }
                else
                {
                    _functions.Add(lslLibraryFunctionSignature.Name,
                                   new GenericArray <LSLLibraryFunctionSignature> {
                        lslLibraryFunctionSignature
                    });
                }
            }


            foreach (var lslLibraryEventSignature in GetLSLEvents())
            {
                lslLibraryEventSignature.DocumentationString =
                    documentationProvider.DocumentEvent(lslLibraryEventSignature);

                _events.Add(lslLibraryEventSignature.Name, lslLibraryEventSignature);
            }


            Log.WriteLine("============================");
            Log.WriteLine("Finished scrape of " + SecondlifeWikiDomain);
            Log.WriteLine("============================");
        }
        private IEnumerable <LSLLibraryFunctionSignature> InterfaceMethods(Type containerType)
        {
            foreach (var v in containerType.GetMethods())
            {
                var subsets = _subsetsMap[containerType];

                var returnType = LslTypeFromCsharpType(v.ReturnType);

                var pTypes = new GenericArray <LSLParameterSignature>();

                foreach (var p in v.GetParameters())
                {
                    var isVariadic = IsParams(p);
                    if (p.ParameterType == (typeof(object[])) && isVariadic)
                    {
                        pTypes.Add(new LSLParameterSignature(LSLType.Void, p.Name, true));
                        goto omitRestOfParameters;
                    }

                    if (isVariadic)
                    {
                        Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                                "Interface function {0} of type {1}, variadic parameter {2} is an un-recognized data type ({3}), function omitted",
                                                v.Name, containerType.Name, p.Name, p.ParameterType.Name);
                        goto omitFunction;
                    }

                    var type = LslTypeFromCsharpParameterType(p.ParameterType);
                    if (type != null)
                    {
                        pTypes.Add(new LSLParameterSignature(type.Value, p.Name, false));
                    }
                    else
                    {
                        Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                                "Interface function {0} of type {1}, parameter {2} is an un-recognized data type ({3}), function omitted",
                                                v.Name, containerType.Name, p.Name, p.ParameterType.Name);

                        goto omitFunction;
                    }
                }

omitRestOfParameters:

                if (returnType != null)
                {
                    var f = new LSLLibraryFunctionSignature(returnType.Value, v.Name, pTypes);
                    f.DocumentationString = _documentationProvider.DocumentFunction(f);
                    f.Subsets.SetSubsets(subsets);

                    yield return(f);
                }
                else
                {
                    Log.WriteLineWithHeader("[OpenSimLibraryDataReflector]: ",
                                            "function {0} of type {1} return type is an un-recognized data type ({2})",
                                            v.Name, containerType.Name, v.ReturnType.Name);
                }

omitFunction:
                ;
            }
        }