dom GenericValueReferenceProvider: micro-optimizations

This commit is contained in:
peter
2015-05-26 22:50:56 +02:00
parent e4a2e9c39f
commit 60a6dd7cb6
@@ -26,7 +26,6 @@ import com.intellij.util.ReflectionUtil;
import com.intellij.util.xml.*;
import com.intellij.xml.util.XmlEnumeratedValueReferenceProvider;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -80,7 +79,7 @@ public class GenericValueReferenceProvider extends PsiReferenceProvider {
Class<? extends CustomReferenceConverter> clazz = referencing.value();
converter = ((ConverterManagerImpl)domManager.getConverterManager()).getInstance(clazz);
}
PsiReference[] references = createReferences(domValue, (XmlElement)psiElement, converter, handler);
PsiReference[] references = createReferences(domValue, (XmlElement)psiElement, converter, handler, domManager);
if (ApplicationManager.getApplication().isUnitTestMode()) {
for (PsiReference reference : references) {
if (!reference.isSoft()) {
@@ -98,39 +97,31 @@ public class GenericValueReferenceProvider extends PsiReferenceProvider {
return references;
}
private static ConvertContext createConvertContext(final PsiElement psiElement, final GenericDomValue domValue) {
return ConvertContextFactory.createConvertContext(domValue);
}
@Nullable
private static DomInvocationHandler getInvocationHandler(final GenericDomValue domValue) {
return DomManagerImpl.getDomInvocationHandler(domValue);
}
private PsiReference[] createReferences(final GenericDomValue domValue, final XmlElement psiElement, final Object converter, DomInvocationHandler handler) {
ConvertContext context = createConvertContext(psiElement, domValue);
private PsiReference[] createReferences(final GenericDomValue domValue, final XmlElement psiElement, final Object converter, DomInvocationHandler handler, DomManager domManager) {
final XmlFile file = handler.getFile();
final DomFileDescription<?> description = domManager.getDomFileDescription(file);
if (description == null) {
return PsiReference.EMPTY_ARRAY; // should not happen
}
List<PsiReference> result = new ArrayList<PsiReference>();
final XmlFile file = handler.getFile();
final DomFileDescription<?> description = DomManagerImpl.getDomManager(file.getProject()).getDomFileDescription(file);
if (description != null) {
final List<DomReferenceInjector> injectors = description.getReferenceInjectors();
if (!injectors.isEmpty()) {
String unresolvedText = ElementManipulators.getValueText(psiElement);
for (DomReferenceInjector each : injectors) {
Collections.addAll(result, each.inject(unresolvedText, psiElement, context));
}
ConvertContext context = ConvertContextFactory.createConvertContext(domValue);
final List<DomReferenceInjector> injectors = description.getReferenceInjectors();
if (!injectors.isEmpty()) {
String unresolvedText = ElementManipulators.getValueText(psiElement);
for (DomReferenceInjector each : injectors) {
Collections.addAll(result, each.inject(unresolvedText, psiElement, context));
}
}
Collections.addAll(result, doCreateReferences(domValue, psiElement, converter, context));
Collections.addAll(result, doCreateReferences(domValue, psiElement, converter, context, handler));
return result.toArray(new PsiReference[result.size()]);
}
@NotNull
private PsiReference[] doCreateReferences(GenericDomValue domValue, XmlElement psiElement, Object converter, ConvertContext context) {
private PsiReference[] doCreateReferences(GenericDomValue domValue, XmlElement psiElement, Object converter, ConvertContext context, DomInvocationHandler invocationHandler) {
if (converter instanceof CustomReferenceConverter) {
final PsiReference[] references =
((CustomReferenceConverter)converter).createReferences(domValue, psiElement, context);
@@ -148,8 +139,6 @@ public class GenericValueReferenceProvider extends PsiReferenceProvider {
return new PsiReference[]{new GenericDomValueReference(domValue)};
}
final DomInvocationHandler invocationHandler = getInvocationHandler(domValue);
assert invocationHandler != null;
final Class clazz = DomUtil.getGenericValueParameter(invocationHandler.getDomElementType());
if (clazz == null) return PsiReference.EMPTY_ARRAY;