Пример #1
0
        public void GeneratePackage(IProject project, PackageDescriptor pd)
        {
            string name = MakeIDName(pd.PackageName, pd);
            string fname = MakeVHDSourceFileName(name);
            string path = project.AddFile(fname);
            project.AddFileAttribute(fname, pd);
            if (pd.Library != null)
                project.SetFileLibrary(fname, pd.Library);
            MemoryStream ms = new MemoryStream();
            StreamWriter sw = new StreamWriter(ms);
            IndentedTextWriter tw = new IndentedTextWriter(sw, "  ");
            ClearDependencies();
            tw.WriteLine("package " + name + " is");
            tw.Indent++;
            GenerateTypeDecls(pd, tw);
            foreach (MethodDescriptor md in pd.GetActiveMethods())
            {
                GenerateMethodDecl(md, tw);
            }
            foreach (FieldDescriptor fd in pd.GetConstants())
            {
                DeclareField(fd, tw);
            }
            tw.Indent--;
            tw.WriteLine("end;");
            tw.WriteLine();
            tw.WriteLine("package body " + name + " is");
            tw.Indent++;
            foreach (MethodDescriptor md in pd.GetActiveMethods())
            {
                GenerateMethodImpl(md, tw);
                tw.WriteLine();
            }
            tw.Indent--;
            tw.WriteLine("end package body;");
            tw.Flush();

            sw = new StreamWriter(path);
            tw = new IndentedTextWriter(sw, "  ");
            CreateFileHeader(new GeneratorInfo(name), tw);
            GenerateDependencies(pd, tw);
            tw.Flush();
            ms.Seek(0, SeekOrigin.Begin);
            ms.CopyTo(sw.BaseStream);
            ms.Close();
            tw.Close();
            sw.Close();
        }