public void GenerateCode(FileProjectItem item, CustomToolContext context) { context.RunAsync( ()=> { string fileName = item.FileName; var projectNode = item.Project; SpecFlowProject specFlowProject = CreateSpecFlowProjectFrom(projectNode); var specFlowGenerator = new SpecFlowGenerator(specFlowProject); string outputFile = context.GetOutputFileName(item, ".feature"); var specFlowFeatureFile = specFlowProject.GetOrCreateFeatureFile(fileName); var fileContents = File.ReadAllText(fileName); string outputFileContents; using(var reader = new StringReader(fileContents)) { using (var writer = new StringWriter(new StringBuilder())) { specFlowGenerator.GenerateTestFile(specFlowFeatureFile, projectNode.LanguageProperties.CodeDomProvider, reader, writer); outputFileContents = writer.ToString(); } } File.WriteAllText(outputFile, outputFileContents); WorkbenchSingleton.SafeThreadCall( () => context.EnsureOutputFileIsInProject(item, outputFile)); }); }
public void GenerateCode(FileProjectItem item, CustomToolContext context) { LanguageOption languageToGenerateCode = LanguageOption.GenerateCSharpCode; if (item.Project.Language != "C#") languageToGenerateCode = LanguageOption.GenerateVBCode; XDocument edmxDocument = XDocument.Load(item.FileName); XElement conceptualModelsElement = EDMXIO.ReadSection(edmxDocument, EDMXIO.EDMXSection.CSDL); if (conceptualModelsElement == null) throw new ArgumentException("Input file is not a valid EDMX file."); XDocument csdlDocument = new XDocument(new XDeclaration("1.0", "utf-8", null), conceptualModelsElement.Element(XName.Get("Schema", csdlNamespace.NamespaceName))); string tempFileName = IO.GetTempFilenameWithExtension("csdl"); csdlDocument.Save(tempFileName); string outputFileName = context.GetOutputFileName(item, "Designer"); EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); IList<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); File.Delete(tempFileName); context.EnsureOutputFileIsInProject(item, outputFileName); }
public void GenerateCode(FileProjectItem item, CustomToolContext context) { context.RunAsync(() => { var ideSingleFileGenerator = new IdeSingleFileGenerator(); string outputFilePath = context.GetOutputFileName(item, ".feature"); ideSingleFileGenerator.GenerateFile(item.FileName, outputFilePath, () => new SharpDevelop4GeneratorServices(item.Project)); WorkbenchSingleton.SafeThreadCall( () => context.EnsureOutputFileIsInProject(item, outputFilePath)); }); }
public void GenerateCode(FileProjectItem item, CustomToolContext context) { XElement schema = GetModelSchema(item); XDocument csdlDocument = CreateCsdlDocument(schema); string tempFileName = IO.GetTempFilenameWithExtension("csdl"); csdlDocument.Save(tempFileName); LanguageOption languageToGenerateCode = GetLanguageOption(item); string outputFileName = context.GetOutputFileName(item, "Designer"); EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode); AddNamespaceMapping(entityCodeGenerator, schema, context.OutputNamespace); IList<EdmSchemaError> edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName); File.Delete(tempFileName); context.EnsureOutputFileIsInProject(item, outputFileName); }
/// <summary> /// Called by SharpDevelop when your tool has to generate code. /// </summary> /// <param name="item"> /// The file for which your tool should generate code. /// </param> public void GenerateCode(FileProjectItem item, CustomToolContext context) { string dir = Path.GetDirectoryName(item.FileName); string traceFile = Path.Combine(dir, "trace.txt"); string parserOutFile = Path.Combine(dir, "Parser.cs"); string scannerOutFile = Path.Combine(dir, "Scanner.cs"); ErrorsInTaskService.ClearAllErrors(); CocoCategory.ClearText(); CocoCategory.AppendLine("Generating " + Path.GetFileName(item.FileName) + "..."); using (FileStream inputStream = File.OpenRead(item.FileName)) { Scanner scanner = new Scanner(inputStream); Parser parser = new Parser(scanner); parser.errors = new ErrorsInTaskService(item.FileName); parser.errors.errorStream = new MessageViewCategoryWriter(CocoCategory); parser.tab = new Tab(parser); parser.tab.trace = new LazyTextWriter(delegate { return new StreamWriter(traceFile); } ); parser.dfa = new DFA(parser); parser.pgen = new ParserGen(parser); parser.tab.srcName = item.FileName; parser.tab.srcDir = Path.GetDirectoryName(item.FileName); parser.tab.nsName = context.OutputNamespace; parser.tab.frameDir = parser.tab.srcDir; parser.tab.outDir = parser.tab.srcDir; try { parser.Parse(); } catch (FatalError err) { CocoCategory.AppendLine("Fatal error: " + err.Message); return; } finally { parser.tab.trace.Close(); } CocoCategory.AppendLine("Done. " + parser.errors.count + " error(s)."); } if (File.Exists(parserOutFile)) { context.EnsureOutputFileIsInProject(item, parserOutFile); } if (File.Exists(scannerOutFile)) { context.EnsureOutputFileIsInProject(item, scannerOutFile); } }