Refactoring: use resolve session instead of binding context

This commit is contained in:
Nikolay Krasko
2014-10-02 19:25:24 +04:00
parent c80cdb4790
commit a0404b11b0
4 changed files with 9 additions and 19 deletions
@@ -30,7 +30,7 @@ import java.util.Set;
public class ImplementMethodsHandler extends OverrideImplementMethodsHandler implements IntentionAction { public class ImplementMethodsHandler extends OverrideImplementMethodsHandler implements IntentionAction {
@Override @Override
protected Set<CallableMemberDescriptor> collectMethodsToGenerate(ClassDescriptor descriptor) { protected Set<CallableMemberDescriptor> collectMethodsToGenerate(@NotNull ClassDescriptor descriptor) {
return OverrideResolver.getMissingImplementations(descriptor); return OverrideResolver.getMissingImplementations(descriptor);
} }
@@ -33,12 +33,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRenderer;
import org.jetbrains.jet.renderer.DescriptorRendererBuilder; import org.jetbrains.jet.renderer.DescriptorRendererBuilder;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -207,15 +206,15 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
} }
@NotNull @NotNull
public Set<CallableMemberDescriptor> collectMethodsToGenerate(@NotNull JetClassOrObject classOrObject, BindingContext bindingContext) { public Set<CallableMemberDescriptor> collectMethodsToGenerate(@NotNull JetClassOrObject classOrObject) {
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, classOrObject); DeclarationDescriptor descriptor = ResolvePackage.getLazyResolveSession(classOrObject).resolveToDescriptor(classOrObject);
if (descriptor instanceof ClassDescriptor) { if (descriptor instanceof ClassDescriptor) {
return collectMethodsToGenerate((ClassDescriptor) descriptor); return collectMethodsToGenerate((ClassDescriptor) descriptor);
} }
return Collections.emptySet(); return Collections.emptySet();
} }
protected abstract Set<CallableMemberDescriptor> collectMethodsToGenerate(ClassDescriptor descriptor); protected abstract Set<CallableMemberDescriptor> collectMethodsToGenerate(@NotNull ClassDescriptor descriptor);
private MemberChooser<DescriptorClassMember> showOverrideImplementChooser( private MemberChooser<DescriptorClassMember> showOverrideImplementChooser(
Project project, Project project,
@@ -248,9 +247,7 @@ public abstract class OverrideImplementMethodsHandler implements LanguageCodeIns
assert classOrObject != null : "ClassObject should be checked in isValidFor method"; assert classOrObject != null : "ClassObject should be checked in isValidFor method";
BindingContext bindingContext = AnalyzerFacadeWithCache.getContextForElement(classOrObject); Set<CallableMemberDescriptor> missingImplementations = collectMethodsToGenerate(classOrObject);
Set<CallableMemberDescriptor> missingImplementations = collectMethodsToGenerate(classOrObject, bindingContext);
if (missingImplementations.isEmpty() && !implementAll) { if (missingImplementations.isEmpty() && !implementAll) {
HintManager.getInstance().showErrorHint(editor, getNoMethodsFoundHint()); HintManager.getInstance().showErrorHint(editor, getNoMethodsFoundHint());
return; return;
@@ -35,7 +35,7 @@ import static org.jetbrains.jet.lang.resolve.OverridingUtil.OverrideCompatibilit
public class OverrideMethodsHandler extends OverrideImplementMethodsHandler { public class OverrideMethodsHandler extends OverrideImplementMethodsHandler {
@Override @Override
protected Set<CallableMemberDescriptor> collectMethodsToGenerate(ClassDescriptor descriptor) { protected Set<CallableMemberDescriptor> collectMethodsToGenerate(@NotNull ClassDescriptor descriptor) {
Set<CallableMemberDescriptor> superMethods = collectSuperMethods(descriptor); Set<CallableMemberDescriptor> superMethods = collectSuperMethods(descriptor);
for (DeclarationDescriptor member : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { for (DeclarationDescriptor member : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
if (member instanceof CallableMemberDescriptor) { if (member instanceof CallableMemberDescriptor) {
@@ -35,14 +35,10 @@ import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.OverrideResolver; 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.plugin.caches.resolve.ResolvePackage;
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
import org.junit.Assert; import org.junit.Assert;
import java.util.*; import java.util.*;
@@ -124,9 +120,7 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
assertNotNull("Caret should be inside class or object", classOrObject); assertNotNull("Caret should be inside class or object", classOrObject);
final JetFile jetFile = classOrObject.getContainingJetFile(); final JetFile jetFile = classOrObject.getContainingJetFile();
ResolveSessionForBodies resolveSession = ResolvePackage.getLazyResolveSession(jetFile); Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
Set<CallableMemberDescriptor> descriptors =
handler.collectMethodsToGenerate(classOrObject, resolveSession.resolveToElement(classOrObject));
final CallableMemberDescriptor singleToOverride; final CallableMemberDescriptor singleToOverride;
if (memberToOverride == null) { if (memberToOverride == null) {
@@ -178,8 +172,7 @@ public abstract class AbstractOverrideImplementTest extends JetLightCodeInsightF
assertNotNull("Caret should be inside class or object", classOrObject); assertNotNull("Caret should be inside class or object", classOrObject);
final JetFile jetFile = classOrObject.getContainingJetFile(); final JetFile jetFile = classOrObject.getContainingJetFile();
BindingContext bindingContext = AnalyzerFacadeWithCache.getContextForElement(classOrObject); Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject);
Set<CallableMemberDescriptor> descriptors = handler.collectMethodsToGenerate(classOrObject, bindingContext);
final List<CallableMemberDescriptor> descriptorsList = new ArrayList<CallableMemberDescriptor>(descriptors); final List<CallableMemberDescriptor> descriptorsList = new ArrayList<CallableMemberDescriptor>(descriptors);
Collections.sort(descriptorsList, new Comparator<CallableMemberDescriptor>() { Collections.sort(descriptorsList, new Comparator<CallableMemberDescriptor>() {