Посмотрите на org.eclipse.jdt.internal.ui.actions.OpenTypeAction , как его обрабатывает Eclipse. Ключевая часть такова:
SelectionDialog dialog= new OpenTypeSelectionDialog(parent, true,
PlatformUI.getWorkbench().getProgressService(), null,
IJavaSearchConstants.TYPE);
dialog.setTitle(JavaUIMessages.OpenTypeAction_dialogTitle);
dialog.setMessage(JavaUIMessages.OpenTypeAction_dialogMessage);
int result= dialog.open();
Где parent - это композит, для которого вы хотите открыть диалоговое окно. Обычно активная рабочая оболочка, полученная путем:
Shell parent= JavaPlugin.getActiveWorkbenchShell();
OpenTypeSelectionDialog находится во внутреннем пакете, поэтому вы получите предупреждение «Отказ в доступе». Пока вы знаете о рисках, я бы рекомендовал использовать этот тип. «Обескураженный» - это предупреждение, а не ошибка, и на практике Eclipse вводит OpenTypeSelectionDialog 2 вместо того, чтобы изменять подписи текущего. Платформа Eclipse и основные продукты стараются поддерживать максимально возможную совместимость, чтобы стимулировать инновации (см. policy в вики).
В целом, при ограниченном доступе имеет смысл защитить остальную часть кода от изменений API с помощью помощника. Это означает, что у вас есть одна точка, которую вы должны изменить, если ссылочный тип изменится.
В качестве альтернативы вы можете самостоятельно реализовать диалоговое окно и его родительский объект, но родительский объект, FilteredTypesSelectionDialog, имеет более 20 внутренних ссылок, что усугубит проблему.