allow to define CompletionConfidence for language="any"

This commit is contained in:
peter
2016-07-25 17:17:39 +02:00
parent 32cc31526f
commit 3c6bf02bb9
3 changed files with 26 additions and 26 deletions
@@ -22,11 +22,13 @@ package com.intellij.lang;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.KeyedExtensionCollector;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
public class LanguageExtension<T> extends KeyedExtensionCollector<T, Language> {
private final T myDefaultImplementation;
@@ -97,4 +99,16 @@ public class LanguageExtension<T> extends KeyedExtensionCollector<T, Language> {
protected Key<T> getLanguageCache() {
return IN_LANGUAGE_CACHE;
}
@NotNull
protected Set<String> getAllBaseLanguageIdsWithAny(@NotNull Language key) {
Set<String> allowed = new THashSet<String>();
while (key != null) {
allowed.add(keyToString(key));
key = key.getBaseLanguage();
}
allowed.add("any");
return allowed;
}
}
@@ -26,7 +26,13 @@ import java.util.List;
* @author peter
*/
public class CompletionConfidenceEP extends LanguageExtensionPoint<CompletionContributor> {
private static final LanguageExtension<CompletionConfidence> INSTANCE = new LanguageExtension<CompletionConfidence>("com.intellij.completion.confidence");
private static final LanguageExtension<CompletionConfidence> INSTANCE = new LanguageExtension<CompletionConfidence>("com.intellij.completion.confidence") {
@NotNull
@Override
protected List<CompletionConfidence> buildExtensions(@NotNull String stringKey, @NotNull Language key) {
return buildExtensions(getAllBaseLanguageIdsWithAny(key));
}
};
public static List<CompletionConfidence> forLanguage(@NotNull Language language) {
return INSTANCE.allForLanguage(language);
@@ -18,13 +18,13 @@ package com.intellij.codeInsight.completion;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementPresentation;
import com.intellij.lang.Language;
import com.intellij.lang.LanguageExtension;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.KeyedExtensionCollector;
import com.intellij.openapi.util.Pair;
import com.intellij.patterns.ElementPattern;
import com.intellij.psi.PsiElement;
@@ -33,13 +33,11 @@ import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.Consumer;
import com.intellij.util.ProcessingContext;
import com.intellij.util.containers.MultiMap;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
/**
* Completion FAQ:<p>
@@ -242,33 +240,15 @@ public abstract class CompletionContributor {
@NotNull
public static List<CompletionContributor> forLanguage(@NotNull Language language) {
return MyExtensionPointManager.INSTANCE.forKey(language);
return INSTANCE.forKey(language);
}
private static class MyExtensionPointManager extends KeyedExtensionCollector<CompletionContributor, Language> {
public static final MyExtensionPointManager INSTANCE = new MyExtensionPointManager();
MyExtensionPointManager() {
super("com.intellij.completion.contributor");
}
private static final LanguageExtension<CompletionContributor> INSTANCE = new LanguageExtension<CompletionContributor>("com.intellij.completion.contributor") {
@NotNull
@Override
protected List<CompletionContributor> buildExtensions(@NotNull String stringKey, @NotNull Language key) {
Set<String> allowed = new THashSet<String>();
while (key != null) {
allowed.add(keyToString(key));
key = key.getBaseLanguage();
}
allowed.add("any");
return buildExtensions(allowed);
return buildExtensions(getAllBaseLanguageIdsWithAny(key));
}
@NotNull
@Override
protected String keyToString(@NotNull Language key) {
return key.getID();
}
}
};
}