Eclipse PDE: пользовательское QuickFix доступно только в представлении «Проблемы»?

у меня возникли проблемы с пользовательскими быстрыми исправлениями, которые я хочу предоставить в своем подключаемом модуле Eclipse, и я надеюсь, что кто-то более опытный, чем я, в Eclipse PDE даст мне несколько советов по этой проблеме.

Как я понял, я могу предоставить пользовательские так называемые «быстрые исправления» (или «разрешения» в терминологии Eclipse внутри), расширив точку расширения org.eclipse.ui.ide.markerResolution для конкретный идентификатор маркера, такой как, например, маркер Eclipse по умолчанию, org.eclipse.core.resources.problemmarker.

Это работает для меня для типов маркеров по умолчанию и для пользовательских типов маркеров, НО: QuickFixes, которые предоставляет мой IMarkerResolutionGenerator, доступны только из "Problems"-View, не из редактора, в котором отображаются мои маркеры.

Что у меня есть: я создаю маркеры в текстовом редакторе по умолчанию, в результате чего (1) значок с всплывающей подсказкой маркеров отображается на левой линейке редактора в строке, которой назначен маркер , (2) маркер в правой части редактора, (3) некоторые подчеркнутые символы в редакторе и (4) запись в представлении «Проблемы».

Что мне нужно: как и в случае с поддержкой Java IDE, я хочу нажать Strg+1, или контекстное меню->быстрое исправление, или щелкнуть значок ошибки на левой линейке, для просмотра доступных быстрых исправлений и выбора одного из них.

Однако: Только в окне "Проблемы" я могу получить быстрые исправления, нажав Strg+1 или из контекстного меню.

Является ли это нормальным поведением, и мне нужно получить доступ к другой точке расширения или конкретным функциям редактора, чтобы подключить к ним мои быстрые исправления? Я не нашел ничего подробного об этом, за исключением того, что все, кажется, очень довольны этой единственной точкой расширения, о которой я упоминал выше. Что мне не хватает?

Для завершения, вот мое определение точки расширения:

<extension point="org.eclipse.ui.ide.markerResolution">
    <markerResolutionGenerator
        class="com.markers.test.MarkerResolutionGenerator"
        markerType="org.eclipse.core.resources.problemmarker">
    </markerResolutionGenerator>
</extension>

person Janos    schedule 15.01.2012    source источник
comment
Я забыл упомянуть самое важное: сейчас я работаю с Eclipse Indigo SR1, чистым дистрибутивом RCP&RAP.   -  person Janos    schedule 15.01.2012


Ответы (2)


У меня та же проблема, и я не уверен, что это правильный путь, но, по крайней мере, он работает:

Если вы хотите видеть свои быстрые исправления в средстве просмотра исходного кода, вы должны установить для него QuickAssistAssistant. В вашем классе реализация SourceViewerConfiguration переопределяет getQuickAssistAssistant. Вы можете создать экземпляр org.eclipse.jface.text.quickassist.QuickAssistAssistant, но вы должны установить QuickAssistProcessor, поэтому реализуйте интерфейс org.eclipse.jface.text.quickassist.IQuickAssistProcessor, особенно computeQuickAssistProposals, чтобы вернуть ваши предложения по быстрому исправлению.

public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
  IQuickAssistAssistant quickAssist = new QuickAssistAssistant();
  quickAssist.setQuickAssistProcessor(new MyQuickAssistProcessor());
  quickAssist.setInformationControlCreator(getInformationControlCreator(sourceViewer));
  return quickAssist; 
}

Также взгляните на код в последнем сообщении здесь, немного сумбурно, но вы поймете. И посмотрите на этот код здесь для примера реализации ICompletionProposal, который вам нужно будет вернуть в файле QuickAssistProcessor.

person Baris Akar    schedule 23.01.2012
comment
Большое спасибо, это, безусловно, приведет меня в правильном направлении! Только сейчас: похоже, все дело в обогащении настраиваемого редактора с помощью настраиваемого SourceViewerConfiguration. Можно ли также предоставить существующий редактор (например, текстовый редактор, редактор XML) с настраиваемой «SourceViewerConfiguration»? - person Janos; 24.01.2012
comment
Просто расширьте org.eclipse.ui.editors.text.TextEditor и используйте setSourceViewerConfiguration(new MySourceViewerConfiguration(new ColorManager()));, чтобы установить свой собственный SourceViewerConfiguration. Но я не знаю о существующем редакторе XML, возможно, вам поможет эта ссылка: vzurczak.wordpress.com/2010/09/25/ - person Baris Akar; 25.01.2012

Если вы просто добавите одну строку в точку расширения маркера:

<super type="org.eclipse.core.resources.textmarker"/>

и добавить атрибуты к маркеру marker.setAttribute(IMarker.CHAR_START, ...); marker.setAttribute(IMarker.CHAR_END, ...);

Вы сможете получить это:

быстрое исправление отображается при наведении курсора

Но я до сих пор не могу найти, как изменить значок маркера (на вариант с лампочкой), показать возможное быстрое исправление также после нажатия на значок аннотации.

person ATom    schedule 20.08.2012
comment
Я могу получить значок лампочки с помощью аннотации, но не могу получить быстрое исправление, как показано на скриншоте. не могли бы вы мне помочь? - person Shalin; 13.03.2015
comment
@shalin, вы можете создать свой собственный вопрос и предоставить дополнительную информацию о своей реализации. - person Danny Lo; 17.06.2015