PsiClass (final PsiClass psiClass, final PsiDirectory targetDirectory, final String className, boolean showChooser) { final Project project = psiClass.getProject(); final PsiClass[] targetClass = new PsiClass[1]; WriteCommandAction.writeCommandAction(project).withName(getTitle(psiClass)).withGroupId(getTitle(psiClass)).run(() -> { IdeDocumentHistory.getInstance(project).includeCurrentPlaceAsChangePlace(); final PsiTypeParameterList oldTypeParameterList = psiClass.getTypeParameterList(); try { targetClass[0] = JavaDirectoryService.getInstance().createClass(targetDirectory, className); } catch (final IncorrectOperationException e) { ApplicationManager.getApplication().invokeLater( () -> Messages.showErrorDialog(project, JavaBundle.message("intention.error.cannot.create.class.message", className) + "\n" + e.getLocalizedMessage(), JavaBundle.message("intention.error.cannot.create.class.title"))); return; } startTemplate(oldTypeParameterList, project, psiClass, targetClass[0], false); }); if (targetClass[0] == null) return null; if (!ApplicationManager.getApplication().isUnitTestMode() && !psiClass.hasTypeParameters()) { final Editor editor = CodeInsightUtil.positionCursorAtLBrace(project, targetClass[0].getContainingFile(), targetClass[0]); if (editor == null) return targetClass[0]; chooseAndImplement(psiClass, project, targetClass[0], editor, showChooser); } return targetClass[0]; }