java functional expressions: render functional expressions in show implementation using stubs if possible

This commit is contained in:
Dmitry Batkovich
2016-10-25 21:35:36 +03:00
parent 381bbbed8c
commit 7b35665044
9 changed files with 277 additions and 10 deletions
@@ -15,15 +15,18 @@
*/
package com.intellij.ide.util;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiExpressionTrimRenderer;
import com.intellij.psi.NavigatablePsiElement;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFunctionalExpression;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiFormatUtil;
import com.intellij.psi.util.PsiFormatUtilBase;
import javax.swing.*;
import static com.intellij.ide.util.PsiClassOrFunctionalExpressionListCellRenderer.renderFunctionalExpression;
public class MethodOrFunctionalExpressionCellRenderer extends PsiElementListCellRenderer<NavigatablePsiElement> {
private final PsiClassListCellRenderer myClassListCellRenderer = PsiClassListCellRenderer.INSTANCE;
private final MethodCellRenderer myMethodCellRenderer;
public MethodOrFunctionalExpressionCellRenderer(boolean showMethodNames) {
@@ -35,7 +38,7 @@ public class MethodOrFunctionalExpressionCellRenderer extends PsiElementListCell
public String getElementText(NavigatablePsiElement element) {
return element instanceof PsiMethod ? myMethodCellRenderer.getElementText((PsiMethod)element)
: PsiExpressionTrimRenderer.render((PsiExpression)element);
: renderFunctionalExpression((PsiFunctionalExpression)element);
}
protected Icon getIcon(PsiElement element) {
@@ -15,17 +15,21 @@
*/
package com.intellij.ide.util;
import com.intellij.extapi.psi.StubBasedPsiElementBase;
import com.intellij.psi.NavigatablePsiElement;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiFunctionalExpression;
import com.intellij.psi.impl.java.stubs.FunctionalExpressionStub;
import com.intellij.psi.presentation.java.ClassPresentationUtil;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.util.PsiExpressionTrimRenderer;
import org.jetbrains.annotations.NotNull;
public class PsiClassOrFunctionalExpressionListCellRenderer extends PsiElementListCellRenderer<NavigatablePsiElement> {
@Override
public String getElementText(NavigatablePsiElement element) {
return element instanceof PsiClass ? ClassPresentationUtil.getNameForClass((PsiClass)element, false)
: PsiExpressionTrimRenderer.render((PsiExpression)element);
: renderFunctionalExpression((PsiFunctionalExpression)element);
}
@Override
@@ -37,4 +41,12 @@ public class PsiClassOrFunctionalExpressionListCellRenderer extends PsiElementLi
protected int getIconFlags() {
return 0;
}
@NotNull
static String renderFunctionalExpression(@NotNull PsiFunctionalExpression expression) {
final StubElement stub = ((StubBasedPsiElementBase<?>)expression).getGreenStub();
return stub instanceof FunctionalExpressionStub
? ((FunctionalExpressionStub)stub).getPresentableText()
: PsiExpressionTrimRenderer.render(expression);
}
}