Extracted generatedOverridingMembers() method in OverrideImplementMethodsHandler.

This commit is contained in:
Evgeny Gerashchenko
2012-04-25 16:25:55 +04:00
parent 97d96b480e
commit 298d98ee12
2 changed files with 24 additions and 20 deletions
@@ -67,10 +67,9 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
protected abstract Set<CallableMemberDescriptor> collectMethodsToGenerate(MutableClassDescriptor descriptor); protected abstract Set<CallableMemberDescriptor> collectMethodsToGenerate(MutableClassDescriptor descriptor);
public static void generateMethods(Project project, public static void generateMethods(Editor editor,
Editor editor, JetClassOrObject classOrObject,
JetClassOrObject classOrObject, List<DescriptorClassMember> selectedElements) {
List<DescriptorClassMember> selectedElements) {
final JetClassBody body = classOrObject.getBody(); final JetClassBody body = classOrObject.getBody();
if (body == null) { if (body == null) {
return; return;
@@ -82,17 +81,8 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
return; return;
} }
for (DescriptorClassMember selectedElement : selectedElements) { for (JetElement element : generateOverridingMembers(selectedElements, (JetFile)classOrObject.getContainingFile(), false)) {
final DeclarationDescriptor descriptor = selectedElement.getDescriptor(); afterAnchor = body.addAfter(element, afterAnchor);
JetFile containingFile = (JetFile)classOrObject.getContainingFile();
if (descriptor instanceof SimpleFunctionDescriptor) {
JetElement target = overrideFunction(project, containingFile, (SimpleFunctionDescriptor)descriptor);
afterAnchor = body.addAfter(target, afterAnchor);
}
else if (descriptor instanceof PropertyDescriptor) {
JetElement target = overrideProperty(project, containingFile, (PropertyDescriptor)descriptor);
afterAnchor = body.addAfter(target, afterAnchor);
}
} }
} }
@@ -119,7 +109,21 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
return afterAnchor; return afterAnchor;
} }
private static JetElement overrideProperty(Project project, JetFile file, PropertyDescriptor descriptor) { private static List<JetElement> generateOverridingMembers(List<DescriptorClassMember> selectedElements, JetFile file, boolean fqNames) {
List<JetElement> overridingMembers = new ArrayList<JetElement>();
for (DescriptorClassMember selectedElement : selectedElements) {
final DeclarationDescriptor descriptor = selectedElement.getDescriptor();
if (descriptor instanceof SimpleFunctionDescriptor) {
overridingMembers.add(overrideFunction(file.getProject(), file, (SimpleFunctionDescriptor)descriptor, fqNames));
}
else if (descriptor instanceof PropertyDescriptor) {
overridingMembers.add(overrideProperty(file.getProject(), file, (PropertyDescriptor)descriptor, fqNames));
}
}
return overridingMembers;
}
private static JetElement overrideProperty(Project project, JetFile file, PropertyDescriptor descriptor, boolean fqNames) {
StringBuilder bodyBuilder = new StringBuilder(); StringBuilder bodyBuilder = new StringBuilder();
bodyBuilder.append(displayableVisibility(descriptor)).append("override "); bodyBuilder.append(displayableVisibility(descriptor)).append("override ");
if (descriptor.isVar()) { if (descriptor.isVar()) {
@@ -141,7 +145,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
return JetPsiFactory.createProperty(project, bodyBuilder.toString()); return JetPsiFactory.createProperty(project, bodyBuilder.toString());
} }
private static JetElement overrideFunction(Project project, JetFile file, SimpleFunctionDescriptor descriptor) { private static JetElement overrideFunction(Project project, JetFile file, SimpleFunctionDescriptor descriptor, boolean fqNames) {
StringBuilder bodyBuilder = new StringBuilder(); StringBuilder bodyBuilder = new StringBuilder();
bodyBuilder.append(displayableVisibility(descriptor)); bodyBuilder.append(displayableVisibility(descriptor));
bodyBuilder.append("override fun "); bodyBuilder.append("override fun ");
@@ -303,7 +307,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
ApplicationManager.getApplication().runWriteAction(new Runnable() { ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override @Override
public void run() { public void run() {
generateMethods(project, editor, classOrObject, selectedElements); generateMethods(editor, classOrObject, selectedElements);
} }
}); });
} }
@@ -209,7 +209,7 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
@Override @Override
protected void run(Result result) throws Throwable { protected void run(Result result) throws Throwable {
OverrideImplementMethodsHandler.generateMethods( OverrideImplementMethodsHandler.generateMethods(
myFixture.getProject(), myFixture.getEditor(), classOrObject, myFixture.getEditor(), classOrObject,
OverrideImplementMethodsHandler.membersFromDescriptors(Collections.singletonList(singleToOverride))); OverrideImplementMethodsHandler.membersFromDescriptors(Collections.singletonList(singleToOverride)));
} }
}.execute(); }.execute();
@@ -233,7 +233,7 @@ public class OverrideImplementTest extends LightCodeInsightFixtureTestCase {
@Override @Override
protected void run(Result result) throws Throwable { protected void run(Result result) throws Throwable {
OverrideImplementMethodsHandler.generateMethods( OverrideImplementMethodsHandler.generateMethods(
myFixture.getProject(), myFixture.getEditor(), classOrObject, myFixture.getEditor(), classOrObject,
OverrideImplementMethodsHandler.membersFromDescriptors(descriptorsList)); OverrideImplementMethodsHandler.membersFromDescriptors(descriptorsList));
} }
}.execute(); }.execute();