генератор кода
От: _Umka  
Дата: 25.02.05 12:41
Оценка:
Как затсавть генератор кода создавать код следующего типа


using System;
using System.Collections;
using DevExpress.Xpo;

namespace CBO
{
    public class Class : XPObject
    {
    }
 
}



а не

namespace CBO
{
    using System;
    using System.Collections;
    using DevExpress.Xpo;
    
    
    public class Class : XPObject
    {
    }
 
}


Мой код для генерации кода:


        public CodeGeneratorOptions CodeGeneratorOptions
        {
            get
            {
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                options.BlankLinesBetweenMembers = true;
                options.BracingStyle = @"C";
                options.ElseOnClosing = true;
                return options;
            }
        }

        private void CreateFileBody(StreamWriter sw, BOClass BO)
        {
            try
            {
                CodeDomProvider codeProvider = new CSharpCodeProvider();
                ICodeGenerator codeGenerator =  codeProvider.CreateGenerator();
                
                CodeCompileUnit ccu = new CodeCompileUnit();

                CodeNamespace codeNamespace = new CodeNamespace(_NameSpaceName);
                CodeNamespaceCollection cnc = new CodeNamespaceCollection();
    
                codeNamespace.Imports.Add(new CodeNamespaceImport("System"));
                codeNamespace.Imports.Add(new CodeNamespaceImport("System.Collections"));
                codeNamespace.Imports.Add(new CodeNamespaceImport("DevExpress.Xpo"));

                CodeTypeDeclaration newclass = new CodeTypeDeclaration(BO.Name);
                newclass.Attributes = MemberAttributes.Public;
                newclass.BaseTypes.Add(_DefaultBaseClass);
                newclass.IsClass = true;
                

                
                codeNamespace.Types.Add(newclass);
                ccu.Namespaces.Add(codeNamespace);

                codeGenerator.GenerateCodeFromCompileUnit(ccu, sw, this.CodeGeneratorOptions);
            }
            catch (Exception E)
            {
                ExceptionManager.Publish(E);
            }
        }
--
То, что вы уникальны еще не значит, что от вас есть толк
Re: генератор кода
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.02.05 16:04
Оценка:
Здравствуйте, _Umka, Вы писали:

_U>Как затсавть генератор кода создавать код следующего типа


Скорее всего очередные косяки в CodDom-е.

Для чего ты им пользушся?
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: генератор кода
От: _Umka  
Дата: 25.02.05 22:07
Оценка:
_U>>Как затсавть генератор кода создавать код следующего типа

VD>Скорее всего очередные косяки в CodDom-е.


VD>Для чего ты им пользушся?


Генерирую код бизнес объектов на основе пользовательского дизайна, так же генерирую код из CodeDOM модели (дизайнер форм).
Иногда раздражают всякие мелочи, раньше генерил NameSpace все было класно, сейчас решил сделать генерацию CompileUnit — получил кучу мусора в файлике... типа сгенрировано кем и когда... абзац, и нафига это надо было делать?

P.S. Так же зеализовал C# парсер в CodeDOM модель.
--
То, что вы уникальны еще не значит, что от вас есть толк
Re[3]: генератор кода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.02.05 00:46
Оценка:
Здравствуйте, _Umka, Вы писали:

_U>Генерирую код бизнес объектов на основе пользовательского дизайна,


Тогда выбраси этот коддом и пользуйся AST R#-а. Он намного качественнее, шустрее и расширяемее. И парсер полноценный. Плюс если что всегда можно поправить, так как исходинки доступны.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: генератор кода
От: _Umka  
Дата: 26.02.05 09:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, _Umka, Вы писали:


_U>>Генерирую код бизнес объектов на основе пользовательского дизайна,


VD>Тогда выбраси этот коддом и пользуйся AST R#-а. Он намного качественнее, шустрее и расширяемее. И парсер полноценный. Плюс если что всегда можно поправить, так как исходинки доступны.


А лицензия и спользование в коммерческом приложении?
Надо будт посмореть на досуге на этот проект. Мне будут нужны его отдельные копоненты — это генератор кода, CodeDOM парсер и дизайнер форм. Нсколько реально взять эти части из проекта и использовать по отдельности, как модули.
--
То, что вы уникальны еще не значит, что от вас есть толк
Re[5]: генератор кода
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.03.05 02:14
Оценка:
Здравствуйте, _Umka, Вы писали:

_U>А лицензия и спользование в коммерческом приложении?


http://www.rsdn.ru/projects/rsharp/article/rsharp_mag.xml#EDA

_U>Надо будт посмореть на досуге на этот проект. Мне будут нужны его отдельные копоненты — это генератор кода, CodeDOM парсер и дизайнер форм. Нсколько реально взять эти части из проекта и использовать по отдельности, как модули.


Дизайнер форм взять не удастся, так как его там нет. Остальное легко.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: генератор кода
От: _Umka  
Дата: 04.03.05 08:37
Оценка:
VD>Дизайнер форм взять не удастся, так как его там нет. Остальное легко.

Мой парсер сохраняет промежуточную DOM модель, которая содержит положение "токенов" в тексте и я могу отредактировать легко любой метод или поле, а также легко делаю merge InitalizeComponent и полей класса, легко добавляю методы/обработчики событий в код.
--
То, что вы уникальны еще не значит, что от вас есть толк
Re[7]: генератор кода
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.03.05 15:04
Оценка:
Здравствуйте, _Umka, Вы писали:

_U>Мой парсер сохраняет промежуточную DOM модель, которая содержит положение "токенов" в тексте и я могу отредактировать легко любой метод или поле, а также легко делаю merge InitalizeComponent и полей класса, легко добавляю методы/обработчики событий в код.


R#-повский парсер тоже хранит позицию в тексте для каждой AST-ветки. Я тут как-то даже делал рефакторинг на его базе.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.