При попытке написать класс, который расширяется, я получаю сообщение об ошибке:
The hierarchy of the type 'MYEditor' is inconsistent.
import org.eclipse.cdt.internal.ui.editor.CEditor;
public class MYEditor extends CEditor {
}
Этот ответ говорит:
These errors happened because some interface/class in the hierarchy cannot be resolved.
Это указывает на то, что eclipse не может найти класс в иерархии. Но когда я использую класс в своем plugin.xml, он работает. Я использую это так:
<editor
class = "org.eclipse.cdt.internal.ui.editor.CEditor"
contributorClass = "org.eclipse.cdt.internal.ui.editor.CEditorActionContributor"
default = "true"
filenames = "*.grasp, *.c"
icon = "icons/small.png"
id = "de.blub.ide.myeditor"
name = "My Editor">
</editor>
Это работает, но не хватает нескольких функций, которые мне нужны для моего плагина. Вот почему я хочу использовать класс, наследуемый от CEditor.
Этот ответ не сработал (удалить и добавить системную библиотеку JRE).
Я также читал, что файл jar нужно поместить в раздел Classpath файла plugin.xml. Но кнопки «Добавить» и «Новый» не позволяют выбрать внешний файл jar. Я могу вручную скопировать этот jar-файл из «~/.p2/pool/plugins» в папку lib моих проектов, но это не помогло.
Итак, что я могу сделать, чтобы добавить функциональность в CEditor?
Посмотрите на точки расширения, определенные для редактора.
Плагины ссылаются на код других плагинов, включая их в свой список зависимостей. Это запись Require-Bundle
в файле MANIFEST.MF плагина.
В редакторе MANIFEST.MF/plugin.xml/build.properties вы можете установить зависимости в разделе «Необходимые плагины» на странице «Зависимости».
Не копируйте jar-файлы плагинов, не помещайте jar-файлы плагинов в путь сборки Java.
Но обратите внимание, что расширение классов внутренний противоречит Правила взаимодействия с Eclipse API. Внутренние классы могут изменяться без предупреждения и могут быть другими в более старых версиях.
Руководство программиста подключаемых модулей CDT охватывает официальные API для Eclipse CDT.
org.eclipse.cdt.ui
уже указан в разделе «Необходимые плагины». Одно это, похоже, не позволяет мне расширять CEditor.
Предполагая, что это плагин, содержащий редактор, больше ничего не требуется, если ваш плагин настроен правильно.
Что может быть неправильно настроено?
Дистанционно диагностировать проблемы с настройкой и сборкой очень сложно. Может быть, если вы покажете нам содержимое файлов .project
, .classpath
, META-INF/MANIFEST.MF
, plugin.xml
и build.properties
плагина, кто-нибудь что-нибудь увидит.
Я не понимаю, зачем это нужно, ведь все остальное работает. build.properties
не имеет записи, влияющей на cdt. В MANIFEST.MF есть запись для org.eclipse.cdt.ui
в разделе «Require-Bundle». Возможно, не стоит расширять CEditor. Вроде бы и не предназначено.
Обратите внимание, что расширение классов внутренний противоречит правилам — Правила взаимодействия с Eclipse API. Внутренние классы могут быть изменены без предупреждения.