void (@NotNull final AnActionEvent e) { final Project project = getEventProject(e); if (project == null) { return; } ResourceBundleEditor resourceBundleEditor; final DataContext context = e.getDataContext(); FileEditor fileEditor = PlatformCoreDataKeys.FILE_EDITOR.getData(context); if (fileEditor instanceof ResourceBundleEditor) { resourceBundleEditor = (ResourceBundleEditor)fileEditor; } else { final Editor editor = CommonDataKeys.EDITOR.getData(context); resourceBundleEditor = editor != null ? editor.getUserData(ResourceBundleEditor.RESOURCE_BUNDLE_EDITOR_KEY) : null; } if (resourceBundleEditor == null) { for (FileEditor editor : FileEditorManager.getInstance(project).getSelectedEditors()) { if (editor instanceof ResourceBundleEditor) { resourceBundleEditor = (ResourceBundleEditor)editor; } } if (resourceBundleEditor == null) { return; } } final ResourceBundle bundle = resourceBundleEditor.getResourceBundle(); final VirtualFile file = bundle.getDefaultPropertiesFile().getVirtualFile(); final ReadonlyStatusHandler.OperationStatus status = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(Collections.singletonList(file)); if (status.hasReadonlyFiles()) { Messages.showErrorDialog(bundle.getProject(), ResourceBundleEditorBundle.message("new.property.read.only.error.message", bundle.getBaseName()), ResourceBundleEditorBundle.message("already.exists.dialog.title")); return; } final String prefix; final String separator; final String place = e.getPlace(); if (ActionPlaces.STRUCTURE_VIEW_TOOLBAR.equals(place)) { prefix = null; separator = null; } else { final Object selectedElement = resourceBundleEditor.getSelectedElementIfOnlyOne(); if (selectedElement == null) { return; } if (selectedElement instanceof PropertiesPrefixGroup group) { prefix = group.getPrefix(); separator = group.getSeparator(); } else if (selectedElement instanceof PropertyStructureViewElement || selectedElement instanceof ResourceBundleFileStructureViewElement) { prefix = null; separator = null; } else { throw new IllegalStateException("unsupported type: " + selectedElement.getClass()); } } final ResourceBundlePropertiesUpdateManager propertiesUpdateManager = resourceBundleEditor.getPropertiesInsertDeleteManager(); final NewPropertyNameValidator nameValidator = new NewPropertyNameValidator(resourceBundleEditor, prefix, separator); final String keyToInsert; final IProperty anchor; IProperty selectedProperty = resourceBundleEditor.getSelectedProperty(); if (propertiesUpdateManager.isAlphaSorted() || !propertiesUpdateManager.isSorted() || selectedProperty == null) { keyToInsert = Messages.showInputDialog(project, ResourceBundleEditorBundle.message("new.property.dialog.name.prompt.text"), ResourceBundleEditorBundle.message("new.property.dialog.title"), Messages.getQuestionIcon(), selectedProperty == null ? getSelectedPrefixText(resourceBundleEditor) : null, nameValidator); anchor = null; } else { final Pair<String, Boolean> keyNameAndInsertPlaceModification = Messages.showInputDialogWithCheckBox(ResourceBundleEditorBundle.message("new.property.dialog.name.prompt.text"), ResourceBundleEditorBundle.message("new.property.dialog.title"), ResourceBundleEditorBundle.message("new.property.dialog.checkbox.text"), PropertiesComponent.getInstance().getBoolean(ADD_NEW_PROPERTY_AFTER_SELECTED_PROP, false), true, Messages.getQuestionIcon(), null, nameValidator); keyToInsert = keyNameAndInsertPlaceModification.getFirst(); final Boolean insertAfterSelectedProperty = keyNameAndInsertPlaceModification.getSecond(); PropertiesComponent.getInstance().setValue(ADD_NEW_PROPERTY_AFTER_SELECTED_PROP, insertAfterSelectedProperty, false); anchor = insertAfterSelectedProperty ? selectedProperty : null; } if (keyToInsert != null) { final ResourceBundlePropertiesUpdateManager updateManager = resourceBundleEditor.getPropertiesInsertDeleteManager(); final Runnable insertionAction = () -> { if (anchor == null) { updateManager.insertNewProperty(keyToInsert, ""); } else { final String anchorKey = anchor.getKey(); LOG.assertTrue(anchorKey != null); updateManager.insertAfter(keyToInsert, "", anchorKey); } }; ResourceBundleEditor finalResourceBundleEditor = resourceBundleEditor; ApplicationManager.getApplication().runWriteAction(() -> { WriteCommandAction.runWriteCommandAction(bundle.getProject(), ResourceBundleEditorBundle.message("action.NewPropertyAction.text"), null, insertionAction); finalResourceBundleEditor.flush(); }); resourceBundleEditor.updateTreeRoot(); resourceBundleEditor.getStructureViewComponent() .select(keyToInsert, false) .onProcessed(p -> finalResourceBundleEditor.selectProperty(keyToInsert)); } }