KT-1985 Creating class body on override/implement if necessary

This commit is contained in:
Vladimir Rudev
2012-11-07 19:50:41 +04:00
parent 8cff709bfb
commit 0dabbbeed5
2 changed files with 12 additions and 2 deletions
@@ -147,6 +147,11 @@ public class JetPsiFactory {
return function.getBodyExpression(); return function.getBodyExpression();
} }
public static JetClassBody createEmptyClassBody(Project project) {
JetClass aClass = createClass(project, "class A(){}");
return aClass.getBody();
}
public static JetParameter createParameter(Project project, String name, String type) { public static JetParameter createParameter(Project project, String name, String type) {
JetNamedFunction function = createFunction(project, "fun foo(" + name + " : " + type + ") {}"); JetNamedFunction function = createFunction(project, "fun foo(" + name + " : " + type + ") {}");
return function.getValueParameters().get(0); return function.getValueParameters().get(0);
@@ -68,9 +68,10 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
JetClassOrObject classOrObject, JetClassOrObject classOrObject,
List<DescriptorClassMember> selectedElements List<DescriptorClassMember> selectedElements
) { ) {
final JetClassBody body = classOrObject.getBody(); JetClassBody body = classOrObject.getBody();
Project project = classOrObject.getProject();
if (body == null) { if (body == null) {
return; body = JetPsiFactory.createEmptyClassBody(project);
} }
PsiElement afterAnchor = findInsertAfterAnchor(editor, body); PsiElement afterAnchor = findInsertAfterAnchor(editor, body);
@@ -86,6 +87,10 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
afterAnchor = added; afterAnchor = added;
elementsToCompact.add((JetElement) added); elementsToCompact.add((JetElement) added);
} }
if (!body.isPhysical()) {
classOrObject.add(JetPsiFactory.createWhiteSpace(project));
classOrObject.add(body);
}
ReferenceToClassesShortening.compactReferenceToClasses(elementsToCompact); ReferenceToClassesShortening.compactReferenceToClasses(elementsToCompact);
} }