void (@NotNull AnActionEvent e) { final LayoutTreeComponent treeComponent = myArtifactEditor.getLayoutTreeComponent(); final LayoutTreeSelection selection = treeComponent.getSelection(); final CompositePackagingElement<?> parent = selection.getCommonParentElement(); if (parent == null) return; final PackagingElementNode<?> parentNode = selection.getNodes().get(0).getParentNode(); if (parentNode == null) return; if (!treeComponent.checkCanModifyChildren(parent, parentNode, selection.getNodes())) { return; } final Collection<? extends PackagingElement> selectedElements = selection.getElements(); String initialName = "artifact"; if (selectedElements.size() == 1) { initialName = PathUtil.suggestFileName(ContainerUtil.getFirstItem(selectedElements, null).createPresentation(myArtifactEditor.getContext()).getPresentableName()); } IExtractArtifactDialog dialog = showDialog(treeComponent, initialName); if (dialog == null) return; final Project project = myArtifactEditor.getContext().getProject(); final ModifiableArtifactModel model = myArtifactEditor.getContext().getOrCreateModifiableArtifactModel(); final ModifiableArtifact artifact = model.addArtifact(dialog.getArtifactName(), dialog.getArtifactType()); treeComponent.editLayout(() -> { for (PackagingElement<?> element : selectedElements) { artifact.getRootElement().addOrFindChild(ArtifactUtil.copyWithChildren(element, project)); } for (PackagingElement element : selectedElements) { parent.removeChild(element); } parent.addOrFindChild(new ArtifactPackagingElement(project, ArtifactPointerManager.getInstance(project).createPointer(artifact, myArtifactEditor.getContext().getArtifactModel()))); }); treeComponent.rebuildTree(); }