97714e96235030223ecd2b9edc0a3301279f9652
[idea/community.git] / java / java-impl / src / com / intellij / codeInsight / lookup / LookupItemUtil.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.codeInsight.lookup;
17
18 import com.intellij.codeInsight.TailType;
19 import com.intellij.codeInsight.completion.JavaClassNameCompletionContributor;
20 import com.intellij.codeInsight.completion.JavaMethodCallElement;
21 import com.intellij.codeInsight.template.Template;
22 import com.intellij.openapi.diagnostic.Logger;
23 import com.intellij.psi.*;
24 import com.intellij.psi.meta.PsiMetaData;
25 import com.intellij.psi.util.PsiUtilCore;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28
29 import java.util.Collection;
30
31 /**
32  * Created by IntelliJ IDEA.
33  * User: ik
34  * Date: 06.02.2003
35  * Time: 16:05:20
36  * To change this template use Options | File Templates.
37  */
38 public class LookupItemUtil{
39   private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.lookup.LookupItemUtil");
40
41   /**
42    * @deprecated to remove in IDEA 16
43    */
44   @Nullable
45   public static LookupElement addLookupItem(Collection<LookupElement> set, @NotNull Object object) {
46     if (object instanceof PsiType) {
47       PsiType psiType = (PsiType)object;
48       for (final LookupElement lookupItem : set) {
49         Object o = lookupItem.getObject();
50         if (o.equals(psiType)) {
51           return lookupItem;
52         }
53       }
54     }
55
56     for (LookupElement lookupItem : set) {
57       if(lookupItem.getObject().equals(lookupItem)) return null;
58     }
59     LookupElement item = objectToLookupItem(object);
60     return set.add(item) ? item : null;
61   }
62
63   /**
64    * @deprecated
65    * @see LookupElementBuilder
66   */
67   @NotNull
68   public static LookupElement objectToLookupItem(Object object) {
69     if (object instanceof LookupElement) return (LookupElement)object;
70     if (object instanceof PsiClass) {
71       return JavaClassNameCompletionContributor.createClassLookupItem((PsiClass)object, true);
72     }
73     if (object instanceof PsiMethod) {
74       return new JavaMethodCallElement((PsiMethod)object);
75     }
76     if (object instanceof PsiVariable) {
77       return new VariableLookupItem((PsiVariable)object);
78     }
79     if (object instanceof PsiExpression) {
80       return new ExpressionLookupItem((PsiExpression) object);
81     }
82     if (object instanceof PsiType) {
83       return PsiTypeLookupItem.createLookupItem((PsiType)object, null);
84     }
85     if (object instanceof PsiPackage) {
86       return new PackageLookupItem((PsiPackage)object);
87     }
88
89     String s = null;
90     LookupItem item = new LookupItem(object, "");
91     if (object instanceof PsiElement){
92       s = PsiUtilCore.getName((PsiElement)object);
93     }
94     TailType tailType = TailType.NONE;
95     if (object instanceof PsiMetaData) {
96       s = ((PsiMetaData)object).getName();
97     }
98     else if (object instanceof String) {
99       s = (String)object;
100     }
101     else if (object instanceof Template) {
102       s = ((Template) object).getKey();
103     }
104     else if (object instanceof PresentableLookupValue) {
105       s = ((PresentableLookupValue)object).getPresentation();
106     }
107
108     if (object instanceof LookupValueWithUIHint && ((LookupValueWithUIHint) object).isBold()) {
109       item.setBold();
110     }
111
112     if (s == null) {
113       LOG.error("Null string for object: " + object + " of class " + (object != null ? object.getClass() : null));
114     }
115     item.setLookupString(s);
116
117     item.setTailType(tailType);
118     return item;
119   }
120 }