mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
old completion code cleanup
This commit is contained in:
@@ -45,7 +45,7 @@ import static com.intellij.patterns.StandardPatterns.character;
|
||||
import static com.intellij.patterns.StandardPatterns.not;
|
||||
|
||||
/**
|
||||
* @deprecated see {@link com.intellij.codeInsight.completion.CompletionContributor}
|
||||
* @deprecated see {@link CompletionContributor}
|
||||
*/
|
||||
public class CompletionData {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.CompletionData");
|
||||
@@ -81,30 +81,15 @@ public class CompletionData {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void defineScopeEquivalence(Class scopeClass, Class equivClass){
|
||||
final Iterator<CompletionVariant> iter = myCompletionVariants.iterator();
|
||||
if(isScopeFinal(scopeClass)){
|
||||
declareFinalScope(equivClass);
|
||||
}
|
||||
|
||||
while(iter.hasNext()){
|
||||
final CompletionVariant variant = iter.next();
|
||||
if(variant.isScopeClassAcceptable(scopeClass)){
|
||||
variant.includeScopeClass(equivClass, variant.isScopeClassFinal(scopeClass));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @see com.intellij.codeInsight.completion.CompletionContributor
|
||||
* @see CompletionContributor
|
||||
*/
|
||||
protected void registerVariant(CompletionVariant variant){
|
||||
myCompletionVariants.add(variant);
|
||||
}
|
||||
|
||||
public void completeReference(final PsiReference reference, final Set<LookupElement> set, @NotNull final PsiElement position, final PsiFile file,
|
||||
final int offset){
|
||||
public void completeReference(final PsiReference reference, final Set<LookupElement> set, @NotNull final PsiElement position, final PsiFile file) {
|
||||
final CompletionVariant[] variants = findVariants(position, file);
|
||||
boolean hasApplicableVariants = false;
|
||||
for (CompletionVariant variant : variants) {
|
||||
@@ -123,11 +108,9 @@ public class CompletionData {
|
||||
ContainerUtil.addAll(set, findVariants(position, file));
|
||||
}
|
||||
|
||||
public void completeKeywordsBySet(final Set<LookupElement> set, Set<CompletionVariant> variants, final PsiElement position,
|
||||
final PrefixMatcher matcher,
|
||||
final PsiFile file){
|
||||
void completeKeywordsBySet(final Set<LookupElement> set, Set<CompletionVariant> variants, final PsiElement position){
|
||||
for (final CompletionVariant variant : variants) {
|
||||
variant.addKeywords(set, position, matcher, file, this);
|
||||
variant.addKeywords(set, position, this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,7 +147,7 @@ public class CompletionData {
|
||||
|
||||
protected final CompletionVariant myGenericVariant = new CompletionVariant() {
|
||||
@Override
|
||||
public void addReferenceCompletions(PsiReference reference, PsiElement position, Set<LookupElement> set, final PsiFile file,
|
||||
void addReferenceCompletions(PsiReference reference, PsiElement position, Set<LookupElement> set, final PsiFile file,
|
||||
final CompletionData completionData) {
|
||||
completeReference(reference, position, set, TailType.NONE, file, TrueFilter.INSTANCE, this);
|
||||
}
|
||||
@@ -260,13 +243,12 @@ public class CompletionData {
|
||||
if (object instanceof LookupValueWithUIHint && ((LookupValueWithUIHint) object).isBold()) {
|
||||
item.setBold();
|
||||
}
|
||||
item.setAttribute(CompletionUtil.TAIL_TYPE_ATTR, tailType);
|
||||
item.setAttribute(LookupItem.TAIL_TYPE_ATTR, tailType);
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
protected void addLookupItem(Set<LookupElement> set, TailType tailType, @NotNull Object completion, final PsiFile file,
|
||||
final CompletionVariant variant) {
|
||||
protected void addLookupItem(Set<LookupElement> set, TailType tailType, @NotNull Object completion, final CompletionVariant variant) {
|
||||
LookupElement ret = objectToLookupItem(completion);
|
||||
if (ret == null) return;
|
||||
if (!(ret instanceof LookupItem)) {
|
||||
@@ -316,7 +298,7 @@ public class CompletionData {
|
||||
if (completion instanceof PsiElement) {
|
||||
final PsiElement psiElement = (PsiElement)completion;
|
||||
if (filter.isClassAcceptable(psiElement.getClass()) && filter.isAcceptable(psiElement, position)) {
|
||||
addLookupItem(set, tailType, completion, file, variant);
|
||||
addLookupItem(set, tailType, completion, variant);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -327,7 +309,7 @@ public class CompletionData {
|
||||
}
|
||||
}
|
||||
try {
|
||||
addLookupItem(set, tailType, completion, file, variant);
|
||||
addLookupItem(set, tailType, completion, variant);
|
||||
}
|
||||
catch (AssertionError e) {
|
||||
LOG.error("Caused by variant from reference: " + reference.getClass(), e);
|
||||
@@ -351,30 +333,27 @@ public class CompletionData {
|
||||
return references;
|
||||
}
|
||||
|
||||
protected void addKeywords(final Set<LookupElement> set, final PsiElement position, final PrefixMatcher matcher, final PsiFile file,
|
||||
final CompletionVariant variant, final Object comp, final TailType tailType) {
|
||||
void addKeywords(final Set<LookupElement> set, final PsiElement position, final CompletionVariant variant, final Object comp, final TailType tailType) {
|
||||
if (comp instanceof String) {
|
||||
addKeyword(set, tailType, comp, matcher, file, variant);
|
||||
addKeyword(set, tailType, comp, variant);
|
||||
}
|
||||
else {
|
||||
final CompletionContext context = position.getUserData(CompletionContext.COMPLETION_CONTEXT_KEY);
|
||||
if (comp instanceof ContextGetter) {
|
||||
final Object[] elements = ((ContextGetter)comp).get(position, context);
|
||||
for (Object element : elements) {
|
||||
addLookupItem(set, tailType, element, file, variant);
|
||||
addLookupItem(set, tailType, element, variant);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void addKeyword(Set<LookupElement> set, final TailType tailType, final Object comp, final PrefixMatcher matcher,
|
||||
final PsiFile file,
|
||||
final CompletionVariant variant) {
|
||||
private void addKeyword(Set<LookupElement> set, final TailType tailType, final Object comp, final CompletionVariant variant) {
|
||||
for (final LookupElement item : set) {
|
||||
if (item.getObject().toString().equals(comp.toString())) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
addLookupItem(set, tailType, comp, file, variant);
|
||||
addLookupItem(set, tailType, comp, variant);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,11 +16,9 @@
|
||||
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightSettings;
|
||||
import com.intellij.codeInsight.TailType;
|
||||
import com.intellij.codeInsight.lookup.Lookup;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupItem;
|
||||
import com.intellij.codeInsight.lookup.LookupValueWithPsiElement;
|
||||
import com.intellij.diagnostic.LogEventException;
|
||||
import com.intellij.diagnostic.ThreadDumper;
|
||||
@@ -32,8 +30,6 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.NotNullLazyValue;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -42,7 +38,6 @@ import com.intellij.psi.filters.TrueFilter;
|
||||
import com.intellij.util.ExceptionUtil;
|
||||
import com.intellij.util.UnmodifiableIterator;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -52,7 +47,6 @@ import java.util.*;
|
||||
import static com.intellij.patterns.PlatformPatterns.character;
|
||||
|
||||
public class CompletionUtil {
|
||||
public static final Key<TailType> TAIL_TYPE_ATTR = LookupItem.TAIL_TYPE_ATTR;
|
||||
|
||||
private static final CompletionData ourGenericCompletionData = new CompletionData() {
|
||||
{
|
||||
@@ -61,36 +55,9 @@ public class CompletionUtil {
|
||||
registerVariant(variant);
|
||||
}
|
||||
};
|
||||
private static final HashMap<FileType, NotNullLazyValue<CompletionData>> ourCustomCompletionDatas = new HashMap<FileType, NotNullLazyValue<CompletionData>>();
|
||||
|
||||
public static final @NonNls String DUMMY_IDENTIFIER = CompletionInitializationContext.DUMMY_IDENTIFIER;
|
||||
public static final @NonNls String DUMMY_IDENTIFIER_TRIMMED = DUMMY_IDENTIFIER.trim();
|
||||
|
||||
public static boolean startsWith(String text, String prefix) {
|
||||
//if (text.length() <= prefix.length()) return false;
|
||||
return toLowerCase(text).startsWith(toLowerCase(prefix));
|
||||
}
|
||||
|
||||
private static String toLowerCase(String text) {
|
||||
CodeInsightSettings settings = CodeInsightSettings.getInstance();
|
||||
switch (settings.COMPLETION_CASE_SENSITIVE) {
|
||||
case CodeInsightSettings.NONE:
|
||||
return text.toLowerCase();
|
||||
|
||||
case CodeInsightSettings.FIRST_LETTER: {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append(text.toLowerCase());
|
||||
if (buffer.length() > 0) {
|
||||
buffer.setCharAt(0, text.charAt(0));
|
||||
}
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
default:
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static CompletionData getCompletionDataByElement(@Nullable final PsiElement position, @NotNull PsiFile originalFile) {
|
||||
if (position == null) return null;
|
||||
@@ -110,17 +77,15 @@ public class CompletionUtil {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static CompletionData getCompletionDataByFileType(FileType fileType) {
|
||||
private static CompletionData getCompletionDataByFileType(FileType fileType) {
|
||||
for(CompletionDataEP ep: Extensions.getExtensions(CompletionDataEP.EP_NAME)) {
|
||||
if (ep.fileType.equals(fileType.getName())) {
|
||||
return ep.getHandler();
|
||||
}
|
||||
}
|
||||
final NotNullLazyValue<CompletionData> lazyValue = ourCustomCompletionDatas.get(fileType);
|
||||
return lazyValue == null ? null : lazyValue.getValue();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public static boolean shouldShowFeature(final CompletionParameters parameters, @NonNls final String id) {
|
||||
if (FeatureUsageTracker.getInstance().isToBeAdvertisedInLookup(id, parameters.getPosition().getProject())) {
|
||||
FeatureUsageTracker.getInstance().triggerFeatureShown(id);
|
||||
|
||||
@@ -41,7 +41,6 @@ public class CompletionVariant {
|
||||
private final Set<Scope> myScopeClasses = new HashSet<Scope>();
|
||||
private ElementFilter myPosition;
|
||||
private final List<CompletionVariantItem> myCompletionsList = new ArrayList<CompletionVariantItem>();
|
||||
private final Set<Class> myScopeClassExceptions = new HashSet<Class>();
|
||||
private InsertHandler myInsertHandler = null;
|
||||
private final Map<Object, Object> myItemProperties = new HashMap<Object, Object>();
|
||||
|
||||
@@ -63,15 +62,15 @@ public class CompletionVariant {
|
||||
myPosition = position;
|
||||
}
|
||||
|
||||
public boolean isScopeAcceptable(PsiElement scope){
|
||||
boolean isScopeAcceptable(PsiElement scope){
|
||||
return isScopeClassAcceptable(scope.getClass());
|
||||
}
|
||||
|
||||
public boolean isScopeFinal(PsiElement scope){
|
||||
boolean isScopeFinal(PsiElement scope){
|
||||
return isScopeClassFinal(scope.getClass());
|
||||
}
|
||||
|
||||
public InsertHandler getInsertHandler(){
|
||||
InsertHandler getInsertHandler(){
|
||||
return myInsertHandler;
|
||||
}
|
||||
|
||||
@@ -79,15 +78,11 @@ public class CompletionVariant {
|
||||
myInsertHandler = handler;
|
||||
}
|
||||
|
||||
public void setItemProperty(Object id, Object value){
|
||||
myItemProperties.put(id, value);
|
||||
}
|
||||
|
||||
public Map<Object, Object> getItemProperties() {
|
||||
Map<Object, Object> getItemProperties() {
|
||||
return myItemProperties;
|
||||
}
|
||||
|
||||
public boolean isScopeClassFinal(Class scopeClass){
|
||||
private boolean isScopeClassFinal(Class scopeClass){
|
||||
for (final Object myScopeClass : myScopeClasses) {
|
||||
Scope scope = (Scope)myScopeClass;
|
||||
if (ReflectionUtil.isAssignable(scope.myClass, scopeClass) && scope.myIsFinalScope) {
|
||||
@@ -97,7 +92,7 @@ public class CompletionVariant {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isScopeClassAcceptable(Class scopeClass){
|
||||
private boolean isScopeClassAcceptable(Class scopeClass){
|
||||
boolean ret = false;
|
||||
|
||||
for (final Object myScopeClass : myScopeClasses) {
|
||||
@@ -108,21 +103,9 @@ public class CompletionVariant {
|
||||
}
|
||||
}
|
||||
|
||||
if(ret){
|
||||
for (final Class aClass: myScopeClassExceptions) {
|
||||
if (ReflectionUtil.isAssignable(aClass, scopeClass)) {
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void excludeScopeClass(Class<?> aClass){
|
||||
myScopeClassExceptions.add(aClass);
|
||||
}
|
||||
|
||||
public void includeScopeClass(Class<?> aClass){
|
||||
myScopeClasses.add(new Scope(aClass, false));
|
||||
}
|
||||
@@ -169,11 +152,11 @@ public class CompletionVariant {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isVariantApplicable(PsiElement position, PsiElement scope){
|
||||
boolean isVariantApplicable(PsiElement position, PsiElement scope){
|
||||
return isScopeAcceptable(scope) && myPosition.isAcceptable(position, scope);
|
||||
}
|
||||
|
||||
public void addReferenceCompletions(PsiReference reference, PsiElement position, Set<LookupElement> set, final PsiFile file,
|
||||
void addReferenceCompletions(PsiReference reference, PsiElement position, Set<LookupElement> set, final PsiFile file,
|
||||
final CompletionData completionData){
|
||||
for (final CompletionVariantItem ce : myCompletionsList) {
|
||||
if(ce.myCompletion instanceof ElementFilter){
|
||||
@@ -183,15 +166,13 @@ public class CompletionVariant {
|
||||
}
|
||||
}
|
||||
|
||||
public void addKeywords(Set<LookupElement> set, PsiElement position, final PrefixMatcher matcher, final PsiFile file,
|
||||
final CompletionData completionData){
|
||||
|
||||
void addKeywords(Set<LookupElement> set, PsiElement position, final CompletionData completionData) {
|
||||
for (final CompletionVariantItem ce : myCompletionsList) {
|
||||
completionData.addKeywords(set, position, matcher, file, this, ce.myCompletion, ce.myTailType);
|
||||
completionData.addKeywords(set, position, this, ce.myCompletion, ce.myTailType);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasReferenceFilter(){
|
||||
boolean hasReferenceFilter(){
|
||||
for (final CompletionVariantItem item: myCompletionsList) {
|
||||
if (item.myCompletion instanceof ElementFilter) {
|
||||
return true;
|
||||
@@ -200,7 +181,7 @@ public class CompletionVariant {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean hasKeywordCompletions(){
|
||||
boolean hasKeywordCompletions(){
|
||||
for (final CompletionVariantItem item : myCompletionsList) {
|
||||
if (!(item.myCompletion instanceof ElementFilter)) {
|
||||
return true;
|
||||
@@ -220,7 +201,7 @@ public class CompletionVariant {
|
||||
}
|
||||
}
|
||||
|
||||
protected static class CompletionVariantItem{
|
||||
private static class CompletionVariantItem{
|
||||
public Object myCompletion;
|
||||
public TailType myTailType;
|
||||
|
||||
@@ -240,7 +221,7 @@ public class CompletionVariant {
|
||||
}
|
||||
|
||||
public void setCaseInsensitive(boolean caseInsensitive) {
|
||||
setItemProperty(LookupItem.CASE_INSENSITIVE, caseInsensitive);
|
||||
myItemProperties.put(LookupItem.CASE_INSENSITIVE, caseInsensitive);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-3
@@ -55,7 +55,7 @@ public class LegacyCompletionContributor extends CompletionContributor {
|
||||
final Set<CompletionVariant> keywordVariants = new HashSet<CompletionVariant>();
|
||||
PsiFile file = parameters.getOriginalFile();
|
||||
completionData.addKeywordVariants(keywordVariants, insertedElement, file);
|
||||
completionData.completeKeywordsBySet(lookupSet, keywordVariants, insertedElement, result.getPrefixMatcher(), file);
|
||||
completionData.completeKeywordsBySet(lookupSet, keywordVariants, insertedElement);
|
||||
result.addAllElements(lookupSet);
|
||||
}
|
||||
|
||||
@@ -70,8 +70,7 @@ public class LegacyCompletionContributor extends CompletionContributor {
|
||||
@Override
|
||||
public void consume(final PsiReference reference, final CompletionResultSet resultSet) {
|
||||
final Set<LookupElement> lookupSet = new LinkedHashSet<LookupElement>();
|
||||
completionData
|
||||
.completeReference(reference, lookupSet, parameters.getPosition(), parameters.getOriginalFile(), parameters.getOffset());
|
||||
completionData.completeReference(reference, lookupSet, parameters.getPosition(), parameters.getOriginalFile());
|
||||
for (final LookupElement item : lookupSet) {
|
||||
if (resultSet.getPrefixMatcher().prefixMatches(item)) {
|
||||
hasVariants.set(true);
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.intellij.codeInsight.lookup;
|
||||
|
||||
import com.intellij.codeInsight.CharTailType;
|
||||
import com.intellij.codeInsight.TailType;
|
||||
import com.intellij.codeInsight.completion.CompletionUtil;
|
||||
import com.intellij.codeInsight.completion.InsertHandler;
|
||||
import com.intellij.codeInsight.completion.InsertionContext;
|
||||
import com.intellij.codeInsight.lookup.impl.ElementLookupRenderer;
|
||||
@@ -222,7 +221,7 @@ public class LookupItem<T> extends MutableLookupElement<T> implements Comparable
|
||||
|
||||
if (lookupElement instanceof LookupItem) {
|
||||
final LookupItem<?> item = (LookupItem)lookupElement;
|
||||
final TailType attr = item.getAttribute(CompletionUtil.TAIL_TYPE_ATTR);
|
||||
final TailType attr = item.getAttribute(TAIL_TYPE_ATTR);
|
||||
if (attr != null) {
|
||||
return attr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user