03.06.2004, 14:39 | #1 |
Участник
|
Инкрементная компиляция после установки SP3
После установки SP3 наблюдалось такое явление: был мой класс, отнаследованный от стандартного, в SP3 добавили переменную в родительский класс, но из наследника она не была видна, пока родителю не сделали инкрементную компиляцию. Т.е., получается, что компиляция всех классов после установки SP3 не решает эту проблему. Подскажите, пожалуйста, нельзя ли запустить инкрементную компиляцию ВСЕХ классов, и если возможно, то каким образом?
|
|
03.06.2004, 16:18 | #2 |
Дмитрий Ерин
|
Компиляция в Аксапте - это просто праздник какой-то!
Лично мной вопрос до конца не изучен, да и стОит ли тратить время на подробное изучение чужих глюков. Однако некоторые моменты удивляют:
1. Иногда не помогает даже инкрементная компиляция. Например, в случае переименования / добавления непосредственного родителя ("отца") какому-то классу (если он раньше наследовался от кого-то другого), то этот отпрыск в упор не хочет видеть папу, и по-прежнему обращается к "деду". Может, у меня руки кривые, но вот именно в таком случае инкрементная компиляция не помогала. 2. Самое смешное, что иногда спасает обновление перекрестных ссылок, но не всех (ждать замучаешься), а только с пометкой "Обновить иерархию типов". Видимо в этой процедуре реализована корректная инкрементная компиляция. 3. Бывало, что Аксапту приводила в чувство откровенная "грубость" Один класс никак не хотел видеть метод своего предка. Стоило перекрыть в нем этот злополучный метод, но с ошибками (с отличным от отца кол-вом параметров), компилятор, конечно же, ругнулся, но после возвращения всего на место свершилось чудо - сын признал-таки отца! Кстати, не уверен, но может быть в Вашем случае можно было попробовать объявить ту же переменную в дочернем классе, чем вызвать гнев компилятора. Жаль теперь, когда все устаканилось, уже попробовать не получится (такие чудеса обычно сложно воспроизвести). P.S. А еще иногда достаточно закрыть и открыть Аксапту, когда совсем непонятно, что происходит...
__________________
|
|
03.06.2004, 16:53 | #3 |
Участник
|
Возможно, я не точно выразился... Мне не важно, почему "сын" не признает "отца", просто, как я понимаю, после установки SP3 было бы очень неплохо сделать инкрементную компиляцию всех классов, вот мне и интересно, как это сделать (естественно, не "ручками", а что-то типа Job'a).
А обновление перекрестных ссылок делали, не спасло... |
|
04.06.2004, 10:40 | #4 |
Юзовские
|
Что-то типа джоба написать конечно можно. Сам я этим не занимался, но примерно представляю как это сделать.
Понадобяться классы TreeNode - дя того чтобы пройтись по всем классам репозитария и DictClass чтобы для каждого класса получить всех его родителей. Объект АОТ компилируется методом AOTcompile класса TreeNode. |
|
04.06.2004, 11:43 | #5 |
Участник
|
Насколько я понимаю, все классы компилить не нужно, а только те, у которых есть потомки. В связи с этим вопрос: как найти эти классы (а также получить и имена всех потомков)?
|
|
04.06.2004, 11:44 | #6 |
Дмитрий Ерин
|
Ну, если уж писать джоб, то посмотрите классы:
SysCompileAll, SysCompileForward, SysCompilerOutput. Хотя, все ведь уже написано... Но не всегда работает, поэтому никакой гарантии, что будет работать свой Job, по-моему нет.
__________________
|
|
04.06.2004, 11:56 | #7 |
Юзовские
|
Цитата:
Изначально опубликовано Shirmin Oleg
как найти эти классы (а также получить и имена всех потомков)? |
|
04.06.2004, 13:02 | #8 |
Дмитрий Ерин
|
Вот такая заготовка поможет?
PHP код:
__________________
|
|
|
|