Как грязный EditorPart запрещает Eclipse переименовывать свой ресурс?

#eclipse-plugin #eclipse-rcp

#eclipse-плагин #eclipse-rcp

Вопрос:

Допустим, я определил свой собственный TextEditorX extends TextEditor . В типичном сценарии Eclipse-RCP (стандартные плагины, workbench с Project Explorer / Navigator) поведение, когда кто-то пытается переименовать (через Project Explorer или Navigator) файл, открытый каким-либо редактором, выглядит следующим образом:

  • Если редактор не dirty является, переименование разрешено. После editor.setInput() этого будет вызвано новое имя файла в качестве аргумента.

  • Если это так dirty , выдается ошибка («Переименовать ресурс»: «Произошла неустранимая ошибка при выполнении рефакторинга» «Обнаружены проблемы: doc.txt является несохраненным»).

Мои вопросы:

  • На каком уровне определено это поведение? Я предполагаю, что org.eclipse.ltk.ui.refactoring.resource задействован пакет… Но предположим, например, что я хочу запретить переименование, даже если редактор не загрязнен: может ли это поведение определяться каким-либо методом в редакторе (или поставщике документов), или я должен кодировать / расширять некоторые RenameParticipant ?

  • Как переименователь узнает, что ресурс doc.txt открыт этим экземпляром редактора? Он просто проверяет все открытые редакторы и запрашивает у каждого его editorInput или documentProviders участвует? В частности, предположим, что у меня есть конкретный редактор, который, помимо «основного» файла, зависит от других ресурсов (многофайловый ввод), и он хочет, чтобы переименователь спросил его, прежде чем переименовывать какие-либо из его входных данных. Как бы вы подошли к этому сценарию?

Комментарии:

1. Здесь нет исходного кода, поэтому трудно понять, какие классы где задействованы, но для вашего первого вопроса, рассматривали ли вы возможность простого переопределения isDirty() для возврата true в вашем редакторе? Вы все равно можете использовать super.isDirty() , если вам нужно выяснить, действительно ли он изменен…

2. Не будет ли побочным эффектом этого того, что маленькая звездочка «эта вещь грязная» на вкладке части редактора никогда не исчезнет? Это может заставить пользователей почесать затылки.

Ответ №1:

У Eclipse нет теоретической причины предотвращать переименование измененного файла. Во-первых, редактор может зарегистрировать ResourceChangeListener в рабочей области и просто обновить его IEditorInput в ответ на уведомление о перемещении. Не уверен, что это хороший ответ, но, возможно, это хороший подход.