Получив немного понимания, мне пришлось отредактировать весь вопрос.
В моем плагине eclipse я использую CDT CEditor
и CContentOutlinePage
для файлов с языками, близкими к C.
У схемы есть много особенностей, которые я не хочу пропустить. Но это также сопровождается нежелательным поведением. Когда я открываю два файла с одинаковыми именами, в представлении структуры всегда отображаются функции исходного файла, который был открыт первым.
Скажем, у меня есть файлы /subdir1/file.extension
и /subdir2/file.extension
с различным содержимым, я могу переключаться между ними без изменения вида Outline.
В моем редакторе я скопировал метод getOutlinePage()
из суперкласса CEditor
:
public class MyEditor extends CEditor {
private final String id = "de.blub.ide.myeditor";
private MyOutlinePage outlinePage;
/**
* Default constructor.
*/
public MyEditor() {
super();
outlinePage = new MyOutlinePage(this);
System.out.println("Working example");
}
/**
* Returns the outline page of the C/C++ editor.
* @return Outline page.
*/
public CContentOutlinePage getOutlinePage() {
if (outlinePage == null) {
outlinePage = new MyOutlinePage(this);
outlinePage.addSelectionChangedListener(this);
}
IEditorInput input = getEditorInput();
IWorkingCopyManager manager = CUIPlugin.getDefault().getWorkingCopyManager();
IWorkingCopy workingCopy = manager.getWorkingCopy(input);
if (workingCopy != outlinePage.getRoot()) {
outlinePage.setInput(workingCopy);
}
return outlinePage;
}
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(Class<T> adapterClass) {
if (adapterClass.isAssignableFrom(IContentOutlinePage.class)) {
return (T) getOutlinePage();
}
return super.getAdapter(adapterClass);
}
}
Этот класс ведет себя точно так же, как и суперкласс, но он дает мне возможность изменить поведение. Я могу проверить, что workingCopy
имеет неправильное значение, даже если input
является правильным. Путь к input
равен /project/subdir1/file.extension
, workingCopy
имеет ресурс, указывающий на `/project/subdir2/file.extension.