Removed line markers for everything except for overriding functions.

This commit is contained in:
Evgeny Gerashchenko
2012-03-29 18:20:04 +04:00
parent 494b489075
commit f28a490a1e
@@ -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 "&lt;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) {
} }