micro optimisations

This commit is contained in:
Alexey Kudravtsev
2015-05-29 13:33:46 +03:00
parent c4ea15cad3
commit bf42abf3cb
2 changed files with 22 additions and 21 deletions
@@ -36,16 +36,16 @@ import java.util.Map;
/**
* @author maxim
*/
abstract class NamedObjectProviderBinding<Provider> implements ProviderBinding<Provider> {
private final Map<String, List<ProviderInfo<Provider, ElementPattern>>> myNamesToProvidersMap = new THashMap<String, List<ProviderInfo<Provider,ElementPattern>>>(5);
private final Map<String, List<ProviderInfo<Provider, ElementPattern>>> myNamesToProvidersMapInsensitive = new THashMap<String, List<ProviderInfo<Provider, ElementPattern>>>(5);
public abstract class NamedObjectProviderBinding implements ProviderBinding {
private final Map<String, List<ProviderInfo<ElementPattern>>> myNamesToProvidersMap = new THashMap<String, List<ProviderInfo<ElementPattern>>>(5);
private final Map<String, List<ProviderInfo<ElementPattern>>> myNamesToProvidersMapInsensitive = new THashMap<String, List<ProviderInfo<ElementPattern>>>(5);
void registerProvider(@NonNls @NotNull String[] names,
@NotNull ElementPattern filter,
boolean caseSensitive,
@NotNull Provider provider,
final double priority) {
final Map<String, List<ProviderInfo<Provider, ElementPattern>>> map = caseSensitive ? myNamesToProvidersMap : myNamesToProvidersMapInsensitive;
public void registerProvider(@NonNls @NotNull String[] names,
@NotNull ElementPattern filter,
boolean caseSensitive,
@NotNull PsiReferenceProvider provider,
final double priority) {
final Map<String, List<ProviderInfo<ElementPattern>>> map = caseSensitive ? myNamesToProvidersMap : myNamesToProvidersMapInsensitive;
for (final String attributeName : names) {
String key = caseSensitive ? attributeName : attributeName.toLowerCase();
@@ -89,18 +89,18 @@ abstract class NamedObjectProviderBinding<Provider> implements ProviderBinding<P
}
@Nullable
protected abstract String getName(final PsiElement position);
protected abstract String getName(@NotNull PsiElement position);
static <Provider> void addMatchingProviders(@NotNull PsiElement position,
@Nullable final List<ProviderInfo<Provider, ElementPattern>> providerList,
@NotNull Collection<ProviderInfo<Provider, ProcessingContext>> output,
@NotNull PsiReferenceService.Hints hints) {
static void addMatchingProviders(@NotNull PsiElement position,
@Nullable final List<ProviderInfo<ElementPattern>> providerList,
@NotNull Collection<ProviderInfo<ProcessingContext>> output,
@NotNull PsiReferenceService.Hints hints) {
if (providerList == null) return;
//noinspection ForLoopReplaceableByForEach
for (int i = 0; i < providerList.size(); i++) {
ProviderInfo<Provider, ElementPattern> info = providerList.get(i);
if (hints != PsiReferenceService.Hints.NO_HINTS && !((PsiReferenceProvider)info.provider).acceptsHints(position, hints)) {
ProviderInfo<ElementPattern> info = providerList.get(i);
if (hints != PsiReferenceService.Hints.NO_HINTS && !info.provider.acceptsHints(position, hints)) {
continue;
}
@@ -115,7 +115,7 @@ abstract class NamedObjectProviderBinding<Provider> implements ProviderBinding<P
catch (IndexNotReadyException ignored) {
}
if (suitable) {
output.add(new ProviderInfo<Provider, ProcessingContext>(info.provider, context, info.priority));
output.add(new ProviderInfo<ProcessingContext>(info.provider, context, info.priority));
}
}
}
@@ -18,6 +18,7 @@ package com.intellij.psi.impl.source.resolve.reference;
import com.intellij.patterns.ElementPattern;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceProvider;
import com.intellij.psi.PsiReferenceService;
import com.intellij.util.ProcessingContext;
import com.intellij.util.SmartList;
@@ -33,11 +34,11 @@ import java.util.List;
* Time: 16:52:28
* To change this template use Options | File Templates.
*/
class SimpleProviderBinding<Provider> implements ProviderBinding<Provider> {
private final List<ProviderInfo<Provider, ElementPattern>> myProviderPairs = new SmartList<ProviderInfo<Provider, ElementPattern>>();
class SimpleProviderBinding implements ProviderBinding {
private final List<ProviderInfo<ElementPattern>> myProviderPairs = new SmartList<ProviderInfo<ElementPattern>>();
void registerProvider(Provider provider, ElementPattern pattern, double priority) {
myProviderPairs.add(new ProviderInfo<Provider, ElementPattern>(provider, pattern, priority));
void registerProvider(@NotNull PsiReferenceProvider provider, @NotNull ElementPattern pattern, double priority) {
myProviderPairs.add(new ProviderInfo<ElementPattern>(provider, pattern, priority));
}
@Override