PsiClass (@NotNull PsiClass aClass, @NotNull PsiClass targetClass) { if (!(aClass instanceof GrTypeDefinition)) return null; GroovyChangeContextUtil.encodeContextInfo(aClass); PsiDocComment doc = aClass.getDocComment(); PsiElement brace = targetClass.getRBrace(); PsiClass newClass = (PsiClass)targetClass.addBefore(aClass, brace); PsiElement sibling = newClass.getPrevSibling(); GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(targetClass.getProject()); if (!org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil.isNewLine(sibling)) { targetClass.addBefore(factory.createLineTerminator("\n "), newClass); } else if (doc != null) { LOG.assertTrue(sibling != null); sibling.replace(factory.createLineTerminator(sibling.getText() + " ")); } if (doc != null) { targetClass.addBefore(doc, newClass); targetClass.addBefore(factory.createLineTerminator("\n"), newClass); } if (targetClass.isInterface()) { PsiUtil.setModifierProperty(newClass, PsiModifier.PUBLIC, true); } else { PsiUtil.setModifierProperty(newClass, PsiModifier.STATIC, true); } GroovyChangeContextUtil.decodeContextInfo(newClass, null, null); return newClass; }