예제 #1
0
        static void Main(string[] args)
        {
            LogManager.inst.Init();
            PathExt.InitPath();

            AssemblyParser.AssemblyParse(PathExt.codePath);
            Console.ReadKey();
        }
예제 #2
0
        public static List <ILocalizationUnit> ParseAssembly()
        {
            var asm_parser = new AssemblyParser();

            asm_parser.Add(typeof(Catalog).Assembly.Location);
            asm_parser.Add(typeof(Strings).Assembly.Location);
            return(new List <ILocalizationUnit> (asm_parser.Parse()));
        }
예제 #3
0
        public void GetMethodsInvalidDirectory()
        {
            string         directoryPath = null;
            AssemblyParser parser        = new AssemblyParser();

            var result = parser.GetMethods(directoryPath);

            Assert.AreEqual(result.Count, 0);
        }
예제 #4
0
        static void Main(string[] args)
        {
            Environment.CurrentDirectory = Path.GetDirectoryName(Path.GetFullPath(args[0]));
            AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_ReflectionOnlyAssemblyResolve;

            var assem = Assembly.LoadFrom(Path.GetFullPath(args[0]));

            AssemblyParser p = new AssemblyParser();

            p.Load(assem, args[1]);
        }
예제 #5
0
        public MappingsHelper(string[] code)
        {
            var copy = code;

            code = AssemblyParser.ReplaceDefines(code);
            code = AssemblyParser.RemoveLabels(code);
            code = AssemblyParser.GetRidOfCommentsAndEmptyLines(code);

            var copyOfCopy = copy;

            copy = copy.Select((x) =>
            {
                if (!x.Contains(';'))
                {
                    return(x.Trim());
                }

                return(x.Substring(0, x.IndexOf(';')).Trim());
            }).ToArray();

            var table = AssemblyParser.GenerateDefineReplacementTable(copy);

            for (int i = 0; i < copy.Length; i++)
            {
                if (copy.Contains("define"))
                {
                    continue;
                }

                foreach (var defineValue in table)
                {
                    if (copy[i].Contains(defineValue.Key))
                    {
                        copy[i] = copy[i].Replace(defineValue.Key, defineValue.Value);
                    }
                }
            }

            int internalCount = 0;

            for (int i = 0; i < copy.Length; i++)
            {
                if (code.Contains(copy[i].Trim()))
                {
                    LineIndexToDissassemblyIndex.Add(i, internalCount);

                    DissassemblyIndexToLineIndex.Add(internalCount, i);

                    LineIndexToLength.Add(i, copyOfCopy[i].Length);

                    internalCount++;
                }
            }
        }
예제 #6
0
        protected void Application_Start(object sender, EventArgs e)
        {
            var app = new AssemblyParser();

            app.AddAssembly(typeof(Sharp.EndPoints.Sitemap).Assembly);
            app.AddAssembly(typeof(Global).Assembly);

            app.AddGlobalParsers(new RouteParser());

            app.Parse();
        }
예제 #7
0
        private void LoadForgeModAPI(AssemblyInfo assemblyInfo)
        {
            var modAPIType = AssemblyParser.FindType <ModAPI>(assemblyInfo, "ModForge_1.7.10");

            if (modAPIType == null)
            {
                throw new NetworkHandlerException($"ModAPI loading error: {assemblyInfo.FileName} was not found or corrupted.");
            }

            try { ModAPIs.Add((ModAPI)Activator.CreateInstance(modAPIType, ModAPISide.Client, this)); }
            catch (MissingMemberException) { throw new NetworkHandlerException("Protocol not supported."); }
        }
예제 #8
0
        public void GetMethodsValidDirectory()
        {
            string         directoryPath = @"..\..\..\TestLibrary\bin\Debug\netstandard2.0\";
            AssemblyParser parser        = new AssemblyParser();

            var result = parser.GetMethods(directoryPath);

            //TestClass1 и TestClass2
            Assert.AreEqual(result.Count, 2);
            //2 метода Void, 1 int, геттер и сеттер автосвойства и 4 метода, унаследованных от класса object
            Assert.AreEqual(result["TestClass1"].Count, 8);
            //1 метод Void, 1 int, и 4 метода, унаследованных от класса object
            Assert.AreEqual(result["TestClass2"].Count, 6);
        }
예제 #9
0
        static void Main(string[] args)
        {
            //PrintReferences(typeof(TestClass));

            var definition = AssemblyParser.Parse(typeof(TestClass).Assembly);

            var testMethod = definition.Modules
                             .SelectMany(x => x.Types)
                             .Where(x => x.Name == nameof(TestClass))
                             .SelectMany(x => x.Methods)
                             .FirstOrDefault(x => x.Name == nameof(TestClass.TestAsync));

            Console.ReadLine();
        }
        public void AssemblyParserParseDeTest(string assemblyFile, string targetNamespace, string culture)
        {
            // Arrange
            var parser = new AssemblyParser(assemblyFile, targetNamespace, culture);

            // Act
            var result = parser.Parse();

            // Assert
            Assert.That(result.Count, Is.EqualTo(2), "Number of children not as expected.");
            Assert.That((string)result.SelectToken("address.city.required.message"), Is.EqualTo("Ort ist obligatorisch."));
            Assert.That((int)result.SelectToken("address.zipCode.size.min"), Is.EqualTo(4));
            Assert.That((int)result.SelectToken("person.age.max.value"), Is.EqualTo(99));
            Assert.That((string)result.SelectToken("person.url.url.message"), Is.EqualTo("Must be a valid URL."));
        }
예제 #11
0
        public void CliRunnerBuildCompleteJavaScriptTest()
        {
            // Arrange
            var parser = new AssemblyParser("Nca.Valdr.Tests.dll", "Nca.Valdr.Tests.DTOs", "en");
            var metadata = parser.Parse();
            var runner = new CliRunner(new CliOptions(new[] { "-i:x", "-o:y" }));

            // Act
            var result = runner.BuildJavaScript("app", metadata.ToString());

            // Assert
            var appValdrJsFile = File.OpenText("../../app/app.valdr.js");
            var fileContent = appValdrJsFile.ReadToEnd();
            Assert.That(result, Is.EqualTo(fileContent));
        }
예제 #12
0
        public void CliRunnerBuildCompleteJavaScriptTest()
        {
            // Arrange
            var parser   = new AssemblyParser("Nca.Valdr.Tests.dll", "Nca.Valdr.Tests.DTOs", "en");
            var metadata = parser.Parse();
            var runner   = new CliRunner(new CliOptions(new[] { "-i:x", "-o:y" }));

            // Act
            var result = runner.BuildJavaScript("app", metadata.ToString());

            // Assert
            var appValdrJsFile = File.OpenText("../../app/app.valdr.js");
            var fileContent    = appValdrJsFile.ReadToEnd();

            Assert.That(result.Replace("\r", string.Empty), Is.EqualTo(fileContent.Replace("\r", string.Empty)));
        }
예제 #13
0
        private bool ParseInit()
        {
            if (client == null)
            {
                Log.WriteLine("tcp already disconnected!now to compile the protoBuff");
            }
            else
            {
                client.Exit();
            }
            if (!bIsAssembly)
            {
                return(true);
            }

            return(AssemblyParser.AssemblyParse(PathExt.codePath));
        }
        public void AssemblyParserParseEnTest(string assemblyFile, string targetNamespace, string culture)
        {
            // Arrange
            var parser = new AssemblyParser(assemblyFile, targetNamespace, culture);

            // Act
            var result = parser.Parse();

            // Assert
            Assert.That(result.Count, Is.EqualTo(2), "Number of children not as expected.");
            Assert.That((string)result.SelectToken("address.city.required.message"), Is.EqualTo("City is required."));
            Assert.That((int)result.SelectToken("address.zipCode.size.min"), Is.EqualTo(4));
            Assert.That((string)result.SelectToken("person.validTo.future.message"), Is.EqualTo("validTo must be in the future."));
            Assert.That((string)result.SelectToken("person.birthday.past.message"), Is.EqualTo("Birthday must be in the past."));
            Assert.That((int)result.SelectToken("person.age.max.value"), Is.EqualTo(99));
            Assert.That((string)result.SelectToken("person.url.url.message"), Is.EqualTo("Must be a valid URL."));
        }
예제 #15
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            LogManager.inst.Init(this);

            PathExt.InitPath();
            InitXml();
            LoadXml();
            if (bIsAssembly)
            {
                if (ParseInit())
                {
                    msgApi = new AssemblyProtoMsg();
                }
            }
            else
            {
                msgApi = new ProtoMsg();
            }
            if (msgApi == null)
            {
                Log.ErrorLine("msgApi is null");
                return;
            }
            msgApi.BindMsgId();
            msgApi.BindParser();
            Connect();

            AssemblyHandler handler;
            AssemblyResult  result;

            AssemblyParser.GetAsseblyResult(out handler, out result);
            if (result == null)
            {
                Log.ErrorLine("AssemblyResult is null");
            }
            foreach (var item in result.ClassList)
            {
                if (item.Value.Contains("Message") && item.Key.Contains("MSG_CG"))
                {
                    AssemblyClassInfo classInfo = handler.GetClassInfo(ConstData.ClientMsgDll, item.Value);
                    list.Add(classInfo.ClassName, classInfo);
                    comboBox2.Items.Add(classInfo.ClassName);
                }
            }
        }
예제 #16
0
        private M CreateAssemblyParsers(bool includeReferences = false)
        {
            string solutionName = SolutionNodeName;

            Solution solution = new Solution(solutionFilePath);
            IReadOnlyList <Project> projects = solution.GetSolutionProjects();

            foreach (Project project in projects)
            {
                string assemblyPath = project.GetOutputPath();
                if (assemblyPath == null)
                {
                    return(Error.From($"Failed to parse:\n {solutionFilePath}\n" +
                                      $"Project\n{project}\nhas no Debug assembly."));
                }

                string parent = GetProjectParentName(solutionName, project);

                var assemblyParser = new AssemblyParser(
                    assemblyPath, project.ProjectFilePath, parent, nodeCallback, linkCallback, isReadSymbols);

                assemblyParsers.Add(assemblyParser);
            }

            if (includeReferences)
            {
                var internalModules = assemblyParsers.Select(p => p.ModuleName).ToList();
                var referencePaths  = assemblyParsers
                                      .SelectMany(parser => parser.GetReferencePaths(internalModules))
                                      .Distinct()
                                      .Where(File.Exists)
                                      .ToList();

                foreach (string referencePath in referencePaths)
                {
                    var assemblyParser = new AssemblyParser(
                        referencePath, null, null, nodeCallback, linkCallback, isReadSymbols);

                    assemblyParsers.Add(assemblyParser);
                }
            }

            return(M.Ok);
        }
예제 #17
0
        public ModularProtocolHandler(MineLibClient client, AssemblyInfo assemblyInfo, string login = "", string password = "") : base(client, assemblyInfo)
        {
            var protocolType = AssemblyParser.FindType <Protocol>(AssemblyInfo, "ProtocolModern_1.7.10");

            if (protocolType == null)
            {
                throw new NetworkHandlerException($"Protocol loading error: {AssemblyInfo.FileName} was not found or corrupted.");
            }

            try { Protocol = (Protocol)Activator.CreateInstance(protocolType, Client, ProtocolPurpose.Play); }
            catch (MissingMemberException) { throw new NetworkHandlerException("Protocol not supported."); }

            if (!string.IsNullOrEmpty(login) && !string.IsNullOrEmpty(password))
            {
                if (!Protocol.Login(login, password).Result)
                {
                    throw new NetworkHandlerException("Login Failed");
                }
            }
        }
예제 #18
0
        public void Test()
        {
            var parser          = new AssemblyParser(GetType().Assembly);
            var implementations = parser.GetImplementations();

            foreach (var implementation in implementations)
            {
                _output.WriteLine($"{implementation.Key}:");
                foreach (var type in implementation.Value)
                {
                    _output.WriteLine($"    {type.FullName}");

                    var excluded = parser.GetExcludedMethods(type, implementation.Key);
                    _output.WriteLine($"     - excludes:");
                    foreach (var method in excluded)
                    {
                        _output.WriteLine($"       {method}");
                    }
                }
            }
        }
예제 #19
0
    static int Main(string[] args)
    {
        try
        {
            // If a path to an assembly is passed on the command line, use
            // that as a test target.  If the command line is empty, use
            // the path to this program's EXE.
            //
            string fileName = (args.Length > 0 ? args[0] : Assembly.GetExecutingAssembly().Location);

            using (AssemblyParser asmParser = new AssemblyParser(fileName))
            {
                if (asmParser.IsAssembly)
                {
                    return(1);
                }
            }
        }
        catch
        {
        }
        return(0);
    }
예제 #20
0
        public Protocol(MineLibClient client, ProtocolPurpose purpose) : base(client, purpose)
        {
            Stream = new ProtobufStream(TCPClientWrapper.Create());

            RegisterSupportedSendings();



            //ModAPIs
            var modules = AssemblyParser.GetAssemblyInfos("Forge*.dll");

            if (modules.Any())
            {
                foreach (var module in modules)
                {
                    LoadForgeModAPI(module);
                }
            }
            else
            {
                LoadForgeModAPI(new AssemblyInfo("NONE"));
            }
        }
예제 #21
0
        private void DoReflection()
        {
            TreeView.Nodes.Clear();

            // get the binding flags
            var bindingFlags = ShowInheritiedMembersCheckBox.Checked ? AssemblyParser.BindingFlagsWithHierarchy : AssemblyParser.BindingFlagsDeclaredOnly;

            // parse the assembly via reflection into XML
            _assemblyParser = new AssemblyParser();
            _xml            = _assemblyParser.ParseAssembly(_assembly, _assemblyFileName, bindingFlags);

            // load xml into xdoc
            XDocument codeDoc = XDocument.Parse(_xml);

            // build the assembly Facet from the xml doc root
            AssemblyFacet assemblyFacet = new AssemblyFacet(codeDoc.Root);

            // iterate over the assemblyFacet to populate the tree
            DisplayAssemblyTree(assemblyFacet);

            // enable export
            ExportButton.Enabled = true;
        }
예제 #22
0
        public async Task <M <NodeDataSource> > TryGetSourceAsync(string nodeName)
        {
            M result = CreateAssemblyParsers(true);

            if (result.IsFaulted)
            {
                return(result.Error);
            }

            string         moduleName     = GetModuleName(nodeName);
            AssemblyParser assemblyParser = assemblyParsers
                                            .FirstOrDefault(p => p.ModuleName == moduleName);

            if (assemblyParser == null)
            {
                return(Error.From($"Failed to find assembly for {moduleName}"));
            }

            return(await Task.Run(() =>
            {
                M <NodeDataSource> source = assemblyParser.TryGetSource(nodeName);

                if (source.IsFaulted || source.Value.Path != null)
                {
                    return source;
                }

                var sourcePath = TryGetFilePath(nodeName, assemblyParser.ProjectPath);
                if (sourcePath.IsOk)
                {
                    return new NodeDataSource(source.Value.Text, source.Value.LineNumber, sourcePath.Value);
                }

                return source;
            }));
        }
예제 #23
0
 public void Setup()
 {
     _cache  = new OutputWriter(new NullResponseWriter());
     _parser = new AssemblyParser(_cache);
 }
예제 #24
0
 public void TestFixtureSetUp()
 {
     _assemblyParser = new AssemblyParser(Assembly.GetExecutingAssembly().Location);
 }
예제 #25
0
        /// <summary>
        /// Parse the files.
        /// </summary>
        private static void Parse()
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var location    = Directory.GetCurrentDirectory();
            var versionPath = Path.Combine(location, VersionInfo);

            Console.WriteLine($"Retrieving version info from {versionPath}...");
            var    versionDoc = JsonDocument.Parse(File.ReadAllText(versionPath));
            string version    = versionDoc.RootElement.GetProperty(nameof(version)).GetString();

            Console.WriteLine($"Docs version is {version}");
            var fileChecker = new FileHelper(location);
            var xmlParser   = new XmlDocParser(fileChecker);
            var markdown    = new DocsToMarkdownParser();
            var writer      = new FileWriter(
                rootDir.StartsWith("..") ? Path.Combine(location, rootDir) : rootDir,
                version);

            Console.WriteLine("Parsing assemblies (pass 1)...");
            var assemblies = new List <(DocAssembly doc, AssemblyParser parser)>();

            foreach (var type in ExampleTypes)
            {
                var parser = new AssemblyParser(type.Assembly);
                var doc    = parser.Parse();
                assemblies.Add((doc, parser));
            }

            WriteSuccess($"Parsed {ExampleTypes.Length} assemblies. Starting pass 2...");

            int  fileCount = 0;
            long elapsed   = 0;

            bool deleted = false;

            foreach (var(doc, parser) in assemblies)
            {
                parser.Parse(doc);
                Console.WriteLine($"Checking {doc.Name}...");
                var docName = $"{doc.Name}.xml";
                Console.Write($"Documentation file: {docName} exists? ");
                if (fileChecker.FileExists(docName))
                {
                    WriteSuccess("YES");
                }
                else
                {
                    WriteWarning("NO");
                }

                Console.WriteLine("Parsing XML documents...");
                xmlParser.ParseComments(docName, doc);
                Console.WriteLine("Transforming to markdown...");
                var docFile = markdown.Parse(doc);
                if (deleted == false)
                {
                    Console.WriteLine("Purging existing docs....");
                    writer.Purge();
                    deleted = true;
                }

                Console.WriteLine("Writing documentation...");
                writer.Write(docFile);
                stopwatch.Stop();
                elapsed   += stopwatch.ElapsedMilliseconds;
                fileCount += docFile.FileCount;
                WriteSuccess("Success.");
            }

            WriteSuccess($"Processed {TypeCache.Cache.TypeCount} types and generated {fileCount} files in {elapsed}ms.");
        }
예제 #26
0
        private static int Main(string[] args)
        {
            BindingFlags bindingFlags = BindingFlags.Default;

            // parse the command line
            // https://github.com/gsscoder/commandline
            var options = new CommandLineOptions();

            if (CommandLine.Parser.Default.ParseArguments(args, options))
            {
                // validate command line options
                if (options.BindingFlags == "declaredOnly")
                {
                    bindingFlags = AssemblyParser.BindingFlagsDeclaredOnly;
                }
                else if (options.BindingFlags == "withHierarchy")
                {
                    bindingFlags = AssemblyParser.BindingFlagsWithHierarchy;
                }
                else
                {
                    Console.WriteLine("ERROR: Invalid binding flags.");
                    return(-1);
                }

                if (options.Verbose == "true")
                {
                    Console.WriteLine("Assembly target : {0}", options.InputFile);
                    Console.WriteLine("Output folder : {0}", options.OutputPath);
                }
            }
            else
            {
                Console.WriteLine("Error: Command line arguments failed to parse");
                return(-1);
            }

            try {
                // input file must exist
                if (!File.Exists(options.InputFile))
                {
                    Console.WriteLine($"ERROR: Reflector input file does not exist : {options.InputFile}");
                    return(-1);
                }

                // output path must exist
                Directory.CreateDirectory(options.OutputPath);
                if (!Directory.Exists(options.OutputPath))
                {
                    Console.WriteLine($"ERROR: Reflector output path does not exist : {options.OutputPath}");
                    return(-1);
                }

                // load assembly
                var      inputFileName = options.InputFile;
                Assembly assembly      = Assembly.LoadFrom(inputFileName);

                // parse the assembly via reflection into XML
                AssemblyParser assemblyParser = new AssemblyParser();
                var            xml            = assemblyParser.ParseAssembly(assembly, inputFileName, bindingFlags);

                // <assembly name>.xml file name
                string xmlFileName    = Path.GetFileNameWithoutExtension(inputFileName) + ".xml";
                string outputFileName = Path.Combine(options.OutputPath, xmlFileName);

                // Write assembly xml output overwriting existing files
                File.WriteAllText(outputFileName, xml);

                // parsed type names are written to <assembly name>.types.xml file name
                xml            = assemblyParser.ParsedTypeNames();
                xmlFileName    = Path.GetFileNameWithoutExtension(inputFileName) + ".types.xml";
                outputFileName = Path.Combine(options.OutputPath, xmlFileName);
                File.WriteAllText(outputFileName, xml);
            } catch (Exception e)
            {
                Console.WriteLine("ERROR: An Exception Occurred : {0}", e.ToString());
                return(-1);
            }

            return(0);
        }
예제 #27
0
 private bool ParseInit()
 {
     return(AssemblyParser.AssemblyParse(PathExt.codePath));
 }