Template (@NotNull MethodKind methodKind, TestFramework descriptor, @NotNull PsiClass targetClass, @Nullable PsiClass sourceClass, @Nullable String name, boolean automatic, Set<? super String> existingNames) { FileTemplateDescriptor templateDesc = methodKind.getFileTemplateDescriptor(descriptor); String templateName = templateDesc.getFileName(); FileTemplate fileTemplate = FileTemplateManager.getInstance(targetClass.getProject()).getCodeTemplate(templateName); Template template = TemplateManager.getInstance(targetClass.getProject()).createTemplate("", ""); String templateText; try { Properties properties = FileTemplateManager.getInstance(targetClass.getProject()).getDefaultProperties(); if (sourceClass != null && sourceClass.isValid()) { properties.setProperty(FileTemplate.ATTRIBUTE_CLASS_NAME, sourceClass.getQualifiedName()); } templateText = fileTemplate.getText(properties); } catch (IOException e) { LOG.warn(e); templateText = fileTemplate.getText(); } if (name == null) name = methodKind.getDefaultName(); if (existingNames != null && !existingNames.add(name)) { int idx = 1; while (existingNames.contains(name)) { if (!name.startsWith("test")) { name = "test" + StringUtil.capitalize(name); if (existingNames.add(name)) { break; } } String newName = name + (idx++); if (existingNames.add(newName)) { name = newName; break; } } } templateText = StringUtil.replace(templateText, "${BODY}\n", ""); int from = 0; while (true) { int index = templateText.indexOf("${NAME}", from); if (index == -1) break; template.addTextSegment(templateText.substring(from, index)); if (index > 0 && !Character.isWhitespace(templateText.charAt(index - 1))) { name = StringUtil.capitalize(name); } else { name = StringUtil.decapitalize(name); } if (from == 0) { Expression nameExpr = new ConstantNode(name); template.addVariable("name", nameExpr, nameExpr, !automatic); } else { template.addVariableSegment("name"); } from = index + "${NAME}".length(); } template.addTextSegment(templateText.substring(from)); template.setToIndent(true); template.setToReformat(true); template.setToShortenLongNames(true); return template; }