public static void addModelImportByRoot( final Project project, final SModule contextModule, final SModel model, String initialText, @Nullable BaseAction parentAction, final ModelImportByRootCallback callback) { BaseMPSChooseModel goToNodeModel = new RootChooseModel(project, new RootNodeNameIndex()) { @Override public NavigationItem doGetNavigationItem(final NavigationTarget object) { return new RootNodeElement(object) { @Override public void navigate(boolean requestFocus) { ModelAccess.assertLegalRead(); new AddModelItem( project, model, object.getNodeReference().getModelReference(), contextModule) .navigate(requestFocus); } }; } @Override @Nullable public String getPromptText() { return "Import model that contains root:"; } }; ChooseByNamePopup popup = MpsPopupFactory.createNodePopup(project, goToNodeModel, initialText, parentAction); popup.invoke( new ChooseByNamePopupComponent.Callback() { @Override public void onClose() { // if (GoToRootNodeAction.class.equals(myInAction)) myInAction = null; } @Override public void elementChosen(final Object element) { ModelAccess.instance() .runWriteAction( new Runnable() { @Override public void run() { NavigationItem navigationItem = (NavigationItem) element; navigationItem.navigate(true); callback.importForRootAdded( navigationItem.getPresentation().getPresentableText()); } }); } }, ModalityState.current(), true); }