Abandon storing BindingContext in JetFunctionPsiElementCellRenderer

#EA-61357 Fixed
This commit is contained in:
Nikolay Krasko
2014-10-08 14:45:44 +04:00
parent 1143db85f1
commit 4b197aafa4
4 changed files with 21 additions and 37 deletions
@@ -34,13 +34,12 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.plugin.JetBundle;
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import java.util.Collection;
import java.util.List;
@@ -60,9 +59,7 @@ public class GotoSuperActionHandler implements CodeInsightActionHandler {
JetObjectDeclaration.class);
if (declaration == null) return;
BindingContext bindingContext = AnalyzerFacadeWithCache.getContextForElement(declaration);
DeclarationDescriptor descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration);
DeclarationDescriptor descriptor = ResolvePackage.getLazyResolveSession(declaration).resolveToDescriptor(declaration);
Collection<? extends DeclarationDescriptor> superDescriptors;
String message;
@@ -117,7 +114,7 @@ public class GotoSuperActionHandler implements CodeInsightActionHandler {
JBPopup popup = descriptor instanceof ClassDescriptor
? NavigationUtil.getPsiElementPopup(superDeclarationsArray, message)
: NavigationUtil.getPsiElementPopup(superDeclarationsArray,
new JetFunctionPsiElementCellRenderer(bindingContext), message);
new JetFunctionPsiElementCellRenderer(), message);
popup.showInBestPositionFor(editor);
}
}
@@ -18,25 +18,18 @@ package org.jetbrains.jet.plugin.codeInsight;
import com.intellij.ide.util.DefaultPsiElementCellRenderer;
import com.intellij.psi.PsiElement;
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetNamedFunction;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
import org.jetbrains.jet.renderer.DescriptorRenderer;
public class JetFunctionPsiElementCellRenderer extends DefaultPsiElementCellRenderer {
private final BindingContext bindingContext;
public JetFunctionPsiElementCellRenderer(BindingContext bindingContext) {
this.bindingContext = bindingContext;
}
@Override
public String getElementText(PsiElement element) {
if (element instanceof JetNamedFunction) {
JetNamedFunction function = (JetNamedFunction) element;
SimpleFunctionDescriptor fd = bindingContext.get(BindingContext.FUNCTION, function);
assert fd != null;
return DescriptorRenderer.SHORT_NAMES_IN_TYPES.render(fd);
DeclarationDescriptor descriptor = ResolvePackage.getLazyResolveSession(function).resolveToDescriptor(function);
return DescriptorRenderer.SHORT_NAMES_IN_TYPES.render(descriptor);
}
return super.getElementText(element);
}
@@ -190,7 +190,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
// NOTE: Don't store descriptors in line markers because line markers are not deleted while editing other files and this can prevent
// clearing the whole BindingTrace.
LineMarkerInfo<JetElement> marker = new LineMarkerInfo<JetElement>(
LineMarkerInfo<JetDeclaration> marker = new LineMarkerInfo<JetDeclaration>(
declaration,
declaration.getTextOffset(),
isImplementsAndNotOverrides(resolveWithParents.getDescriptor(), resolveWithParents.getOverriddenDescriptors()) ?
@@ -16,9 +16,6 @@
package org.jetbrains.jet.plugin.highlighter.markers
import org.jetbrains.jet.lang.psi.JetElement
import org.jetbrains.jet.lang.resolve.BindingContext
import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor
import org.jetbrains.jet.lang.resolve.OverrideResolver
import org.jetbrains.jet.lang.descriptors.Modality
@@ -37,13 +34,12 @@ import org.jetbrains.annotations.TestOnly
import com.intellij.codeInsight.daemon.GutterIconNavigationHandler
import java.util.ArrayList
import com.intellij.util.Function
import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession
import org.jetbrains.jet.lang.psi.JetDeclaration
object SuperDeclarationMarkerTooltip: Function<JetElement, String> {
override fun `fun`(param: JetElement?): String? {
val element = param!!
[suppress("UNUSED_VARIABLE")]
val (elementDescriptor, _, overriddenDescriptors) = resolveDeclarationWithParents(element)
object SuperDeclarationMarkerTooltip: Function<JetDeclaration, String> {
override fun `fun`(jetDeclaration: JetDeclaration?): String? {
val (elementDescriptor, overriddenDescriptors) = resolveDeclarationWithParents(jetDeclaration!!)
if (overriddenDescriptors.isEmpty()) return ""
val isAbstract = elementDescriptor!!.getModality() == Modality.ABSTRACT
@@ -67,7 +63,7 @@ object SuperDeclarationMarkerTooltip: Function<JetElement, String> {
}
}
public class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandler<JetElement> {
public class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandler<JetDeclaration> {
private var testNavigableElements: List<NavigatablePsiElement>? = null
TestOnly
@@ -77,10 +73,10 @@ public class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandl
return navigationResult
}
override fun navigate(e: MouseEvent?, element: JetElement?) {
override fun navigate(e: MouseEvent?, element: JetDeclaration?) {
if (element == null) return
val (elementDescriptor, bindingContext, overriddenDescriptors) = resolveDeclarationWithParents(element)
val (elementDescriptor, overriddenDescriptors) = resolveDeclarationWithParents(element)
if (overriddenDescriptors.isEmpty()) return
val superDeclarations = ArrayList<NavigatablePsiElement>()
@@ -101,7 +97,7 @@ public class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandl
superDeclarations.copyToArray(),
JetBundle.message("navigation.title.super.declaration", elementName),
JetBundle.message("navigation.findUsages.title.super.declaration", elementName),
JetFunctionPsiElementCellRenderer(bindingContext))
JetFunctionPsiElementCellRenderer())
}
else {
// Only store elements for retrieve in test
@@ -112,15 +108,13 @@ public class SuperDeclarationMarkerNavigationHandler : GutterIconNavigationHandl
public data class ResolveWithParentsResult(
val descriptor: CallableMemberDescriptor?,
val bindingContext: BindingContext,
val overriddenDescriptors: Collection<CallableMemberDescriptor>)
public fun resolveDeclarationWithParents(element: JetElement): ResolveWithParentsResult {
val bindingContext = AnalyzerFacadeWithCache.getContextForElement(element)
val descriptor = bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, element)
public fun resolveDeclarationWithParents(element: JetDeclaration): ResolveWithParentsResult {
val descriptor = element.getLazyResolveSession().resolveToDescriptor(element)
if (descriptor !is CallableMemberDescriptor) return ResolveWithParentsResult(null, bindingContext, listOf())
if (descriptor !is CallableMemberDescriptor) return ResolveWithParentsResult(null, listOf())
val overriddenMembers = OverrideResolver.getDirectlyOverriddenDeclarations(descriptor)
return ResolveWithParentsResult(descriptor, bindingContext, overriddenMembers)
return ResolveWithParentsResult(descriptor, overriddenMembers)
}