Refactoring: extract method
This commit is contained in:
+27
-22
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.OverrideResolver;
|
|||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase;
|
import org.jetbrains.jet.plugin.JetLightCodeInsightFixtureTestCase;
|
||||||
import org.jetbrains.jet.plugin.JetLightProjectDescriptor;
|
import org.jetbrains.jet.plugin.JetLightProjectDescriptor;
|
||||||
|
import org.jetbrains.jet.utils.UtilsPackage;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -116,13 +117,13 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
|
|||||||
|
|
||||||
private void doOverrideImplement(OverrideImplementMethodsHandler handler, @Nullable String memberToOverride) {
|
private void doOverrideImplement(OverrideImplementMethodsHandler handler, @Nullable String memberToOverride) {
|
||||||
PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
|
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);
|
assertNotNull("Caret should be inside class or object", classOrObject);
|
||||||
|
|
||||||
final JetFile jetFile = classOrObject.getContainingJetFile();
|
JetFile jetFile = classOrObject.getContainingJetFile();
|
||||||
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
|
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
|
||||||
|
|
||||||
final CallableMemberDescriptor singleToOverride;
|
CallableMemberDescriptor singleToOverride;
|
||||||
if (memberToOverride == null) {
|
if (memberToOverride == null) {
|
||||||
// Filter out fake overrides of members of Any (equals, hashCode, toString)
|
// Filter out fake overrides of members of Any (equals, hashCode, toString)
|
||||||
List<CallableMemberDescriptor> filtered = KotlinPackage.filter(descriptors, new Function1<CallableMemberDescriptor, Boolean>() {
|
List<CallableMemberDescriptor> filtered = KotlinPackage.filter(descriptors, new Function1<CallableMemberDescriptor, Boolean>() {
|
||||||
@@ -156,25 +157,19 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
|
|||||||
singleToOverride = candidateToOverride;
|
singleToOverride = candidateToOverride;
|
||||||
}
|
}
|
||||||
|
|
||||||
new WriteCommandAction(myFixture.getProject(), myFixture.getFile()) {
|
performGenerateCommand(classOrObject,
|
||||||
@Override
|
OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, Collections.singletonList(singleToOverride)));
|
||||||
protected void run(@NotNull Result result) throws Throwable {
|
|
||||||
OverrideImplementMethodsHandler.generateMethods(myFixture.getEditor(), classOrObject,
|
|
||||||
OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, Collections.singletonList(singleToOverride))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doMultiOverrideImplement(OverrideImplementMethodsHandler handler) {
|
private void doMultiOverrideImplement(OverrideImplementMethodsHandler handler) {
|
||||||
PsiElement elementAtCaret = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
|
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);
|
assertNotNull("Caret should be inside class or object", classOrObject);
|
||||||
|
|
||||||
final JetFile jetFile = classOrObject.getContainingJetFile();
|
JetFile jetFile = classOrObject.getContainingJetFile();
|
||||||
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
|
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>() {
|
Collections.sort(descriptorsList, new Comparator<CallableMemberDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(@NotNull CallableMemberDescriptor desc1, @NotNull CallableMemberDescriptor desc2) {
|
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()) {
|
performGenerateCommand(classOrObject, OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, descriptorsList));
|
||||||
@Override
|
|
||||||
protected void run(@NotNull Result result) throws Throwable {
|
|
||||||
OverrideImplementMethodsHandler.generateMethods(
|
|
||||||
myFixture.getEditor(), classOrObject,
|
|
||||||
OverrideImplementMethodsHandler.membersFromDescriptors(jetFile, descriptorsList));
|
|
||||||
}
|
|
||||||
}.execute();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateImplementation(@NotNull final PsiMethod method) {
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user