コード例 #1
0
        protected override byte[] Generate(string inputFilePath, string inputFileContents, string defaultNamespace, IVsGeneratorProgress progressCallback)
        {
            var codeProvider = CodeDomProvider.CreateProvider("CSharp");

            var compileUnit = new CodeCompileUnit();

            compileUnit.ReferencedAssemblies.Add(typeof(string).Assembly.Location);

            var parser      = new RecSharpParser();
            var parseResult = parser.TryParse(inputFileContents);

            if (parseResult.Field0 < 0)
            {
                var errorInfo = parser.GetMaxRollbackPosAndNames();
                var location  = parser.ParsingSource.GetSourceLine(errorInfo.Field0);
                var lineInfo  = location.StartLineColumn;
                var startPos  = location.StartPos;

                progressCallback.GeneratorError(0, 0, $"Error parsing source, expected {string.Join(" or ", errorInfo.Field1)}", (uint)lineInfo.Field0, (uint)(errorInfo.Field0 - startPos));
                return(new byte[0]);
            }

            foreach (var reference in parseResult.Field1.References)
            {
                compileUnit.ReferencedAssemblies.Add(reference.Path);
            }

            foreach (var nmspace in parseResult.Field1.Namespaces)
            {
                var builder = new NamespaceDeclarationBuilder(nmspace);
                compileUnit.Namespaces.Add(builder.Build());
            }

            var codeStringBuilder = new StringBuilder();
            var codeWriter        = new StringWriter(codeStringBuilder);

            codeProvider.GenerateCodeFromCompileUnit(compileUnit, codeWriter, null);

            return(Encoding.UTF8.GetBytes(codeStringBuilder.ToString()));
        }
コード例 #2
0
        protected override byte[] Generate(string inputFilePath, string inputFileContents, string defaultNamespace, IVsGeneratorProgress progressCallback)
        {
            var codeProvider = CodeDomProvider.CreateProvider("CSharp");

            var compileUnit = new CodeCompileUnit();
            compileUnit.ReferencedAssemblies.Add(typeof(string).Assembly.Location);

            var parser = new RecSharpParser();
            var parseResult = parser.TryParse(inputFileContents);

            if (parseResult.Field0 < 0)
            {
                var errorInfo = parser.GetMaxRollbackPosAndNames();
                var location = parser.ParsingSource.GetSourceLine(errorInfo.Field0);
                var lineInfo = location.StartLineColumn;
                var startPos = location.StartPos;

                progressCallback.GeneratorError(0, 0, $"Error parsing source, expected {string.Join(" or ", errorInfo.Field1)}", (uint)lineInfo.Field0, (uint)(errorInfo.Field0 - startPos));
                return new byte[0];
            }

            foreach (var reference in parseResult.Field1.References)
            {
                compileUnit.ReferencedAssemblies.Add(reference.Path);
            }

            foreach (var nmspace in parseResult.Field1.Namespaces)
            {
                var builder = new NamespaceDeclarationBuilder(nmspace);
                compileUnit.Namespaces.Add(builder.Build());
            }

            var codeStringBuilder = new StringBuilder();
            var codeWriter = new StringWriter(codeStringBuilder);

            codeProvider.GenerateCodeFromCompileUnit(compileUnit, codeWriter, null);

            return Encoding.UTF8.GetBytes(codeStringBuilder.ToString());
        }