Removed line markers for everything except for overriding functions.
This commit is contained in:
@@ -27,17 +27,15 @@ import com.intellij.ide.util.DefaultPsiElementCellRenderer;
|
|||||||
import com.intellij.openapi.ui.popup.JBPopup;
|
import com.intellij.openapi.ui.popup.JBPopup;
|
||||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||||
import com.intellij.openapi.util.IconLoader;
|
import com.intellij.openapi.util.IconLoader;
|
||||||
import com.intellij.openapi.util.Iconable;
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.util.PsiUtilBase;
|
import com.intellij.psi.util.PsiUtilBase;
|
||||||
import com.intellij.ui.awt.RelativePoint;
|
import com.intellij.ui.awt.RelativePoint;
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.PlatformIcons;
|
|
||||||
import com.intellij.util.PsiIconUtil;
|
|
||||||
import com.intellij.util.PsiNavigateUtil;
|
import com.intellij.util.PsiNavigateUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetNamedFunction;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
import org.jetbrains.jet.plugin.compiler.WholeProjectAnalyzerFacade;
|
||||||
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
||||||
@@ -57,35 +55,21 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LineMarkerInfo getLineMarkerInfo(PsiElement element) {
|
public LineMarkerInfo getLineMarkerInfo(PsiElement element) {
|
||||||
JetFile file = (JetFile) element.getContainingFile();
|
JetFile file = (JetFile)element.getContainingFile();
|
||||||
if (file == null) return null;
|
if (file == null) return null;
|
||||||
|
|
||||||
|
if (!(element instanceof JetNamedFunction)) return null;
|
||||||
|
JetNamedFunction jetFunction = (JetNamedFunction)element;
|
||||||
|
|
||||||
final BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(file);
|
final BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile(file);
|
||||||
|
|
||||||
if (element instanceof JetClass) {
|
|
||||||
JetClass jetClass = (JetClass) element;
|
|
||||||
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, jetClass);
|
|
||||||
String text = classDescriptor == null ? "<i>Unresolved</i>" : DescriptorRenderer.HTML.render(classDescriptor);
|
|
||||||
return createLineMarkerInfo(jetClass, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element instanceof JetProperty) {
|
|
||||||
JetProperty jetProperty = (JetProperty) element;
|
|
||||||
final VariableDescriptor variableDescriptor = bindingContext.get(BindingContext.VARIABLE, jetProperty);
|
|
||||||
if (variableDescriptor instanceof PropertyDescriptor) {
|
|
||||||
return createLineMarkerInfo(element, DescriptorRenderer.HTML.render(variableDescriptor));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element instanceof JetNamedFunction) {
|
|
||||||
JetNamedFunction jetFunction = (JetNamedFunction) element;
|
|
||||||
|
|
||||||
final SimpleFunctionDescriptor functionDescriptor = bindingContext.get(BindingContext.FUNCTION, jetFunction);
|
final SimpleFunctionDescriptor functionDescriptor = bindingContext.get(BindingContext.FUNCTION, jetFunction);
|
||||||
if (functionDescriptor == null) return null;
|
if (functionDescriptor == null) return null;
|
||||||
final Set<? extends FunctionDescriptor> overriddenFunctions = functionDescriptor.getOverriddenDescriptors();
|
final Set<? extends FunctionDescriptor> overriddenFunctions = functionDescriptor.getOverriddenDescriptors();
|
||||||
Icon icon = isMember(functionDescriptor) ? (overriddenFunctions.isEmpty() ? PlatformIcons.METHOD_ICON : OVERRIDING_FUNCTION) : PlatformIcons.FUNCTION_ICON;
|
if (overriddenFunctions.size() == 0) return null;
|
||||||
|
|
||||||
return new LineMarkerInfo<JetNamedFunction>(
|
return new LineMarkerInfo<JetNamedFunction>(
|
||||||
jetFunction, jetFunction.getTextOffset(), icon, Pass.UPDATE_ALL,
|
jetFunction, jetFunction.getTextOffset(), OVERRIDING_FUNCTION, Pass.UPDATE_ALL,
|
||||||
new Function<JetNamedFunction, String>() {
|
new Function<JetNamedFunction, String>() {
|
||||||
@Override
|
@Override
|
||||||
public String fun(JetNamedFunction jetFunction) {
|
public String fun(JetNamedFunction jetFunction) {
|
||||||
@@ -147,61 +131,6 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element instanceof JetNamespaceHeader) {
|
|
||||||
JetNamespaceHeader header = (JetNamespaceHeader) element;
|
|
||||||
if (header.getNameIdentifier() != null) {
|
|
||||||
return createLineMarkerInfo(header,
|
|
||||||
DescriptorRenderer.HTML.render(bindingContext.get(BindingContext.NAMESPACE, file)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element instanceof JetObjectDeclaration && !(element.getParent() instanceof JetExpression)) {
|
|
||||||
JetObjectDeclaration jetObjectDeclaration = (JetObjectDeclaration) element;
|
|
||||||
|
|
||||||
return new LineMarkerInfo<JetObjectDeclaration>(
|
|
||||||
jetObjectDeclaration, jetObjectDeclaration.getTextOffset(), PlatformIcons.ANONYMOUS_CLASS_ICON, Pass.UPDATE_ALL,
|
|
||||||
new Function<JetObjectDeclaration, String>() {
|
|
||||||
@Override
|
|
||||||
public String fun(JetObjectDeclaration jetObjectDeclaration) {
|
|
||||||
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, jetObjectDeclaration);
|
|
||||||
if (classDescriptor != null) {
|
|
||||||
return DescriptorRenderer.HTML.renderAsObject(classDescriptor);
|
|
||||||
}
|
|
||||||
return "<none>";
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new GutterIconNavigationHandler<JetObjectDeclaration>() {
|
|
||||||
@Override
|
|
||||||
public void navigate(MouseEvent e, JetObjectDeclaration elt) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T extends PsiElement> LineMarkerInfo<T> createLineMarkerInfo(T element, final String text) {
|
|
||||||
return new LineMarkerInfo<T>(
|
|
||||||
element, element.getTextOffset(), PsiIconUtil.getProvidersIcon(element, Iconable.ICON_FLAG_CLOSED), Pass.UPDATE_ALL,
|
|
||||||
new Function<T, String>() {
|
|
||||||
@Override
|
|
||||||
public String fun(T jetNamespace) {
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new GutterIconNavigationHandler<T>() {
|
|
||||||
@Override
|
|
||||||
public void navigate(MouseEvent e, T elt) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isMember(@NotNull SimpleFunctionDescriptor functionDescriptor) {
|
|
||||||
return functionDescriptor.getContainingDeclaration().getOriginal() instanceof ClassifierDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectSlowLineMarkers(List<PsiElement> elements, Collection<LineMarkerInfo> result) {
|
public void collectSlowLineMarkers(List<PsiElement> elements, Collection<LineMarkerInfo> result) {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user