From cb3a2d6e35933403475ecdf22b32cee3f07f6c19 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 4 Feb 2011 20:44:13 +0100 Subject: [PATCH] use LookupElement.as instead of ad hoc inlining everywhere --- .../CastingLookupElementDecorator.java | 10 ------- .../completion/JavaChainLookupElement.java | 2 +- .../JavaCompletionStatistician.java | 3 +- .../completion/JavaCompletionUtil.java | 29 +++++++------------ .../JavaSmartCompletionContributor.java | 2 +- .../completion/PreferSimpleWeigher.java | 8 ++--- .../codeInsight/lookup/PsiTypeLookupItem.java | 14 ++------- .../codeInsight/lookup/TypedLookupItem.java | 3 ++ .../completion/PrioritizedLookupElement.java | 11 ++----- .../completion/PriorityWeigher.java | 8 ++--- .../codeInsight/lookup/LookupItem.java | 8 ----- 11 files changed, 25 insertions(+), 73 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java b/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java index 9b97a9451a2b..00b8538dcc66 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/CastingLookupElementDecorator.java @@ -81,14 +81,4 @@ public class CastingLookupElementDecorator extends LookupElementDecorator>() { - @Override - public void renderElement(LookupElementDecorator element, LookupElementPresentation presentation) { - element.getDelegate().renderElement(presentation); - presentation.setItemTextBold(true); - } - }), 1); + return PrioritizedLookupElement.withGrouping( + LookupElementDecorator.withRenderer(decorator, new LookupElementRenderer>() { + @Override + public void renderElement(LookupElementDecorator element, LookupElementPresentation presentation) { + element.getDelegate().renderElement(presentation); + presentation.setItemTextBold(true); + } + }), 1); } private static LookupItem createLookupElement(CompletionElement completionElement, PsiType qualifierType) { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java index 180ef6f374a8..57b98d2a4cc6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java @@ -200,7 +200,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { final CompletionService service = CompletionService.getCompletionService(); new BasicExpressionCompletionContributor().fillCompletionVariants(parameters, service.createResultSet(parameters, new Consumer() { public void consume(final LookupElement lookupElement) { - final TypedLookupItem typed = JavaCompletionUtil.typedFrom(lookupElement); + final TypedLookupItem typed = lookupElement.as(TypedLookupItem.CLASS_CONDITION_KEY); if (typed != null) { final PsiType psiType = typed.getType(); if (psiType != null && type.isAssignableFrom(psiType)) { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/PreferSimpleWeigher.java b/java/java-impl/src/com/intellij/codeInsight/completion/PreferSimpleWeigher.java index 97339f0b33c7..c7361df1f7af 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/PreferSimpleWeigher.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/PreferSimpleWeigher.java @@ -18,7 +18,6 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.PsiTypeLookupItem; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author peter @@ -26,14 +25,11 @@ import org.jetbrains.annotations.Nullable; public class PreferSimpleWeigher extends CompletionWeigher { public Comparable weigh(@NotNull final LookupElement item, @NotNull final CompletionLocation location) { - if (location == null) { - return null; - } - final PsiTypeLookupItem lookupItem = PsiTypeLookupItem.from(item); + final PsiTypeLookupItem lookupItem = item.as(PsiTypeLookupItem.CLASS_CONDITION_KEY); if (lookupItem != null) { return -lookupItem.getBracketsCount(); } - if (CastingLookupElementDecorator.from(item) != null) { + if (item.as(CastingLookupElementDecorator.CLASS_CONDITION_KEY) != null) { return -239; } return 0; diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java index a268b4339513..48d521bc9856 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/PsiTypeLookupItem.java @@ -18,9 +18,9 @@ package com.intellij.codeInsight.lookup; import com.intellij.codeInsight.completion.DefaultInsertHandler; import com.intellij.codeInsight.completion.InsertionContext; import com.intellij.codeInsight.completion.JavaPsiClassReferenceElement; +import com.intellij.openapi.util.ClassConditionKey; import com.intellij.psi.*; import com.intellij.psi.impl.source.PsiClassReferenceType; -import com.intellij.psi.util.TypeConversionUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,6 +29,8 @@ import org.jetbrains.annotations.Nullable; * @author peter */ public class PsiTypeLookupItem extends LookupItem { + public static final ClassConditionKey CLASS_CONDITION_KEY = ClassConditionKey.create(PsiTypeLookupItem.class); + public PsiTypeLookupItem(Object o, @NotNull @NonNls String lookupString) { super(o, lookupString); } @@ -130,16 +132,6 @@ public class PsiTypeLookupItem extends LookupItem { } return new LookupItem(type, type.getPresentableText()); } - - public static @Nullable PsiTypeLookupItem from(LookupElement element) { - if (element instanceof PsiTypeLookupItem) return (PsiTypeLookupItem)element; - else if (element instanceof LookupElementDecorator) { - element = ((LookupElementDecorator)element).getDelegate(); - if (element instanceof PsiTypeLookupItem) return (PsiTypeLookupItem)element; - } - - return null; - } @Override public void renderElement(LookupElementPresentation presentation) { diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/TypedLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/TypedLookupItem.java index e2bfb8945e78..34415abc0f16 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/TypedLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/TypedLookupItem.java @@ -15,6 +15,7 @@ */ package com.intellij.codeInsight.lookup; +import com.intellij.openapi.util.ClassConditionKey; import com.intellij.psi.PsiType; import org.jetbrains.annotations.Nullable; @@ -22,6 +23,8 @@ import org.jetbrains.annotations.Nullable; * @author peter */ public interface TypedLookupItem { + ClassConditionKey CLASS_CONDITION_KEY = ClassConditionKey.create(TypedLookupItem.class); + @Nullable PsiType getType(); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/PrioritizedLookupElement.java b/platform/lang-api/src/com/intellij/codeInsight/completion/PrioritizedLookupElement.java index 07718c7181fd..3a801015849c 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/PrioritizedLookupElement.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/PrioritizedLookupElement.java @@ -19,7 +19,6 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementDecorator; import com.intellij.openapi.util.ClassConditionKey; -import org.jetbrains.annotations.Nullable; /** * Use only when you want to control lookup sorting & preference in simple cases when you have control over ALL the items in lookup. @@ -48,18 +47,12 @@ public class PrioritizedLookupElement extends LookupEle } public static LookupElement withPriority(LookupElement element, double priority) { - final PrioritizedLookupElement prioritized = PrioritizedLookupElement.from(element); + final PrioritizedLookupElement prioritized = element.as(CLASS_CONDITION_KEY); return new PrioritizedLookupElement(element, priority, prioritized == null ? 0 : prioritized.getGrouping()); } public static LookupElement withGrouping(LookupElement element, int grouping) { - final PrioritizedLookupElement prioritized = PrioritizedLookupElement.from(element); + final PrioritizedLookupElement prioritized = element.as(CLASS_CONDITION_KEY); return new PrioritizedLookupElement(element, prioritized == null ? 0 : prioritized.getPriority(), grouping); } - - public static @Nullable PrioritizedLookupElement from(LookupElement element) { - if (element instanceof PrioritizedLookupElement) return (PrioritizedLookupElement)element; - if (element instanceof LookupElementDecorator) return from (((LookupElementDecorator)element).getDelegate()); - return null; - } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/PriorityWeigher.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/PriorityWeigher.java index b4eabfb4cc1b..196f443e8c07 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/PriorityWeigher.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/PriorityWeigher.java @@ -19,7 +19,6 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupItem; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author peter @@ -27,15 +26,12 @@ import org.jetbrains.annotations.Nullable; public class PriorityWeigher extends CompletionWeigher { @Override public Double weigh(@NotNull LookupElement element, @NotNull CompletionLocation location) { - if (location == null) { - return null; - } - final PrioritizedLookupElement prioritized = PrioritizedLookupElement.from(element); + final PrioritizedLookupElement prioritized = element.as(PrioritizedLookupElement.CLASS_CONDITION_KEY); if (prioritized != null) { return -prioritized.getPriority(); } - final LookupItem item = LookupItem.from(element); + final LookupItem item = element.as(LookupItem.CLASS_CONDITION_KEY); if (item != null) { return -item.getPriority(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupItem.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupItem.java index 113fc37dd4f2..4ba771b58efb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupItem.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupItem.java @@ -365,12 +365,4 @@ public class LookupItem extends MutableLookupElement implements Comparable public boolean isCaseSensitive() { return !Boolean.TRUE.equals(getAttribute(CASE_INSENSITIVE)); } - - public static @Nullable LookupItem from(LookupElement lookupElement) { - while (lookupElement instanceof LookupElementDecorator) { - lookupElement = ((LookupElementDecorator)lookupElement).getDelegate(); - } - if (lookupElement instanceof LookupItem) return (LookupItem)lookupElement; - return null; - } }