mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
dom GenericValueReferenceProvider: micro-optimizations
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user