![]() |
#8 |
Боец
|
Опишу проблему - возможно, корень и решение общее.
Проблема Некорректное обновление класса-наследника при смене его родителя. Воспроизведение 1. Создаём класс-наследник RunBase 2. Создаём в этом классе произвольный метод и вызываем в нём любой метод базового класса, напр: this.saveLast(); 3. Компилируем. 4. Отвязываем класс от RunBase, т.е. делаем его самостоятельным, не наследником (убираем extends RunBase). Компилируем. Симптомы Что видим - класс всё-равно остался наследником RunBase. (об этом свидетельствует отсутствие ошибок в нашем методе, где вызывается метод базового класса. При выполнении происходит вызов методов родителя). Как его не компилируй, как не модифицируй и снова компилируй, а от RunBase он не отвязывается. Инкрементная компиляция RunBase также не помогает. Решение a. Раньше лечил так: экспорт класса, удаление из системы, импорт b. Нашлось более изящное решение - обновление перекрестных ссылок именно для проблемного класса. Но не по контекстному меню, а из главного меню IDE. Итак: 1) Tools->DevelopmentTools->CrossReference->Periodic->Update 2) В фильтре появившегося диалога устанавливаем фильтр на поле Имя=ВашКласс 3) Выполняется мгновенно, после чего с классом всё в порядке. Что именно происходит внутри, и что конкретно исправляет этот недочёт компилятора - разбираться уж не стал. Может поможет. (ещё раз обращу внимание, что нужно обновить CrossReference из меню IDE, а не по контексту. По контексту (как я предложил в 1-ом посту) не помогает) |
|
|
За это сообщение автора поблагодарили: belugin (5), f18 (1), alex55 (1). |
Теги |
aod, compilation, cross-reference, flush, incorrect, refresh, update, интерпретатор, интерпретируемый, компилятор, компиляция, обновление, ошибка, перекрестные ссылки, наследование, macros |
|
|