Refactoring: extract method

This commit is contained in:
Nikolay Krasko
2014-10-04 22:54:39 +04:00
parent 774af134fa
commit c05d30de38
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase;
import org.jetbrains.jet.plugin.JetLightProjectDescriptor;
import org.jetbrains.jet.utils.UtilsPackage;
import org.junit.Assert;
import java.util.*;
@@ -116,13 +117,13 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
private void doOverrideImplement(OverrideImplementMethodsHandler handler, @Nullable String memberToOverride) {
PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
assertNotNull("Caret should be inside class or object", classOrObject);
final JetFile jetFile = classOrObject.getContainingJetFile();
JetFile jetFile = classOrObject.getContainingJetFile();
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
final CallableMemberDescriptor singleToOverride;
CallableMemberDescriptor singleToOverride;
if (memberToOverride == null) {
// Filter out fake overrides of members of Any (equals, hashCode, toString)
List<CallableMemberDescriptor> filtered = KotlinPackage.filter(descriptors, new Function1<CallableMemberDescriptor, Boolean>() {
@@ -156,25 +157,19 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
singleToOverride = candidateToOverride;
}
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
@Override
protected void run(@NotNull Result result) throws Throwable {
OverrideImplementMethodsHandler.generateMethods(myFixture.getEditor(), classOrObject,
OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, Collections.singletonList(singleToOverride))
);
}
}.execute();
performGenerateCommand(classOrObject,
OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, Collections.singletonList(singleToOverride)));
}
private void doMultiOverrideImplement(OverrideImplementMethodsHandler handler) {
PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
final JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(elementAtCaret, JetClassOrObject.class);
assertNotNull("Caret should be inside class or object", classOrObject);
final JetFile jetFile = classOrObject.getContainingJetFile();
JetFile jetFile = classOrObject.getContainingJetFile();
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
final List<CallableMemberDescriptor> descriptorsList = new ArrayList<CallableMemberDescriptor>(descriptors);
List<CallableMemberDescriptor> descriptorsList = new ArrayList<CallableMemberDescriptor>(descriptors);
Collections.sort(descriptorsList, new Comparator<CallableMemberDescriptor>() {
@Override
public int compare(@NotNull CallableMemberDescriptor desc1, @NotNull CallableMemberDescriptor desc2) {
@@ -182,14 +177,7 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
}
});
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
@Override
protected void run(@NotNull Result result) throws Throwable {
OverrideImplementMethodsHandler.generateMethods(
myFixture.getEditor(), classOrObject,
OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, descriptorsList));
}
}.execute();
performGenerateCommand(classOrObject, OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, descriptorsList));
}
private void generateImplementation(@NotNull final PsiMethod method) {
@@ -207,4 +195,21 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
}
});
}
private void performGenerateCommand(
final JetClassOrObject classOrObject,
final List<DescriptorClassMember> descriptorsToGenerate
) {
try {
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
@Override
protected void run(@NotNull Result result) throws Throwable {
OverrideImplementMethodsHandler.generateMethods(myFixture.getEditor(), classOrObject, descriptorsToGenerate);
}
}.performCommand();
}
catch (Throwable throwable) {
throw UtilsPackage.rethrow(throwable);
}
}
}