/* * Copyright 2000-2010 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.util.Iconable; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.PsiFormatUtil; import com.intellij.psi.util.PsiFormatUtilBase; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author nik */ public class JavaLookupElementBuilder { private JavaLookupElementBuilder() { } public static LookupElementBuilder forField(@NotNull PsiField field) { return forField(field, field.getName(), null); } public static LookupElementBuilder forField(@NotNull PsiField field, final String lookupString, final @Nullable PsiClass qualifierClass) { final LookupElementBuilder builder = LookupElementBuilder.create(field, lookupString).withIcon( field.getIcon(Iconable.ICON_FLAG_VISIBILITY)); return setBoldIfInClass(field, qualifierClass, builder); } public static LookupElementBuilder forMethod(@NotNull PsiMethod method, final PsiSubstitutor substitutor) { return forMethod(method, method.getName(), substitutor, null); } public static LookupElementBuilder forMethod(@NotNull PsiMethod method, @NotNull String lookupString, final @NotNull PsiSubstitutor substitutor, @Nullable PsiClass qualifierClass) { LookupElementBuilder builder = LookupElementBuilder.create(method, lookupString) .withIcon(method.getIcon(Iconable.ICON_FLAG_VISIBILITY)) .withPresentableText(method.getName()) .withTailText(PsiFormatUtil.formatMethod(method, substitutor, PsiFormatUtilBase.SHOW_PARAMETERS, PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_TYPE)); final PsiType returnType = method.getReturnType(); if (returnType != null) { builder = builder.withTypeText(substitutor.substitute(returnType).getPresentableText()); } builder = setBoldIfInClass(method, qualifierClass, builder); return builder; } private static LookupElementBuilder setBoldIfInClass(@NotNull PsiMember member, @Nullable PsiClass psiClass, @NotNull LookupElementBuilder builder) { if (psiClass != null && member.getManager().areElementsEquivalent(member.getContainingClass(), psiClass)) { return builder.bold(); } return builder; } public static LookupElementBuilder forClass(@NotNull PsiClass psiClass) { return forClass(psiClass, psiClass.getName()); } public static LookupElementBuilder forClass(@NotNull PsiClass psiClass, final String lookupString) { return forClass(psiClass, lookupString, false); } public static LookupElementBuilder forClass(@NotNull PsiClass psiClass, final String lookupString, final boolean withLocation) { LookupElementBuilder builder = LookupElementBuilder.create(psiClass, lookupString).withIcon(psiClass.getIcon(Iconable.ICON_FLAG_VISIBILITY)); String name = psiClass.getName(); if (StringUtil.isNotEmpty(name)) { builder = builder.withLookupString(name); } if (withLocation) { return builder.withTailText(" (" + PsiFormatUtil.getPackageDisplayName(psiClass) + ")", true); } return builder; } }