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));
				});
		}
Пример #2
0
        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);
        }
Пример #3
0
        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);
		}
Пример #5
0
        /// <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);
            }
        }