blob: b92ca4d3ac52862c8252e63e3fd4074de2d81dd6 [file] [log] [blame]
/*
* 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;
}
}