From b7dbe56df0bc7a0f93c8f761122cf51a996400aa Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 10 Jun 2016 00:16:59 +0300 Subject: [PATCH] lambda expressions breadcrumbs --- .../java/JavaBreadcrumbsInfoProvider.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/lang/java/JavaBreadcrumbsInfoProvider.java b/java/java-impl/src/com/intellij/lang/java/JavaBreadcrumbsInfoProvider.java index c645678e1a80..0d374e0db4d6 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaBreadcrumbsInfoProvider.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaBreadcrumbsInfoProvider.java @@ -16,9 +16,8 @@ package com.intellij.lang.java; import com.intellij.lang.Language; -import com.intellij.psi.ElementDescriptionUtil; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMember; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.*; import com.intellij.refactoring.util.RefactoringDescriptionLocation; import com.intellij.usageView.UsageViewShortNameLocation; import com.intellij.xml.breadcrumbs.BreadcrumbsInfoProvider; @@ -37,18 +36,45 @@ public class JavaBreadcrumbsInfoProvider extends BreadcrumbsInfoProvider { @Override public boolean acceptElement(@NotNull PsiElement e) { - return e instanceof PsiMember; + return e instanceof PsiMember || e instanceof PsiLambdaExpression; } @NotNull @Override public String getElementInfo(@NotNull PsiElement e) { + if (e instanceof PsiLambdaExpression) { + PsiType type = ((PsiFunctionalExpression)e).getFunctionalInterfaceType(); + return type == null ? "" : "lambda " + PsiNameHelper.getShortClassName(type.getCanonicalText()); + } return ElementDescriptionUtil.getElementDescription(e, UsageViewShortNameLocation.INSTANCE); } @Nullable @Override public String getElementTooltip(@NotNull PsiElement e) { + if (e instanceof PsiLambdaExpression) return getLambdaDescription((PsiLambdaExpression)e); return ElementDescriptionUtil.getElementDescription(e, RefactoringDescriptionLocation.WITH_PARENT); } + + @NotNull + private static String getLambdaDescription(@NotNull PsiLambdaExpression e) { + StringBuilder sb = new StringBuilder("lambda"); + PsiType functionalInterfaceType = e.getFunctionalInterfaceType(); + if (functionalInterfaceType != null) { + String shortClassName = PsiNameHelper.getShortClassName(functionalInterfaceType.getCanonicalText()); + sb.append(" ").append(StringUtil.htmlEmphasize(shortClassName)); + } + PsiParameter[] parameters = e.getParameterList().getParameters(); + if (parameters.length > 0) { + sb.append(" ("); + for (int i = 0; i < parameters.length; i++) { + if (i > 0) sb.append(", "); + String str = PsiNameHelper.getShortClassName(parameters[i].getType().getCanonicalText()); + if (str.isEmpty()) str = StringUtil.notNullize(parameters[i].getName()); + sb.append(StringUtil.htmlEmphasize(str)); + } + sb.append(")"); + } + return sb.toString(); + } }