mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
IJPL-157920 Semantic search presentation rendering fix
GitOrigin-RevId: d75cbfc05173d42f263906405cc0982ac63fa356
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c024e85769
commit
dcdc264fd4
@@ -116,45 +116,50 @@ public final class PSIPresentationBgRendererWrapper implements WeightedSearchEve
|
||||
Function<? super PsiElement, ? extends TargetPresentation> psiPresentationCalculator,
|
||||
@Nullable SearchEverywherePresentationProvider<Object> rendererPresentationProvider) {
|
||||
if (elementDescriptor.getItem() instanceof PsiItemWithSimilarity<?> itemWithSimilarity) {
|
||||
var newDescriptor = new FoundItemDescriptor<Object>(itemWithSimilarity.getValue(), elementDescriptor.getWeight());
|
||||
var descriptorWithPresentation = element2presentation(newDescriptor, psiPresentationCalculator, rendererPresentationProvider);
|
||||
return new FoundItemDescriptor<>(new PsiItemWithSimilarity<>(descriptorWithPresentation.getItem(),
|
||||
itemWithSimilarity.getSimilarityScore()), elementDescriptor.getWeight());
|
||||
TargetPresentation presentation = calcPresentation(itemWithSimilarity.getValue(), psiPresentationCalculator, rendererPresentationProvider);
|
||||
PsiItemWithSimilarity<?> newItemWithSimilarity = new PsiItemWithSimilarity<>(itemWithSimilarity.getValue(), itemWithSimilarity.getSimilarityScore());
|
||||
return new FoundItemDescriptor<>(new ItemWithPresentation<>(newItemWithSimilarity, presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
TargetPresentation presentation = calcPresentation(elementDescriptor.getItem(), psiPresentationCalculator, rendererPresentationProvider);
|
||||
|
||||
if (elementDescriptor.getItem() instanceof PsiElement psi) {
|
||||
TargetPresentation presentation = psiPresentationCalculator.apply(psi);
|
||||
return new FoundItemDescriptor<>(new PsiItemWithPresentation(psi, presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
if (elementDescriptor.getItem() instanceof PsiElementNavigationItem psiElementNavigationItem) {
|
||||
var realElement = psiElementNavigationItem.getTargetElement();
|
||||
TargetPresentation presentation = psiPresentationCalculator.apply(realElement);
|
||||
return new FoundItemDescriptor<>(new PsiItemWithPresentation(realElement, presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
if (elementDescriptor.getItem() instanceof NavigationItem navigationItem) {
|
||||
ItemPresentation itemPresentation = Objects.requireNonNull(navigationItem.getPresentation());
|
||||
TargetPresentation presentation = convertPresentation(itemPresentation);
|
||||
return new FoundItemDescriptor<>(new ItemWithPresentation<>(navigationItem, presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
if (elementDescriptor.getItem() instanceof ItemPresentation itemPresentation) {
|
||||
TargetPresentation presentation = convertPresentation(itemPresentation);
|
||||
return new FoundItemDescriptor<>(new ItemWithPresentation<>(itemPresentation, presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
if (rendererPresentationProvider != null) {
|
||||
TargetPresentation presentation = rendererPresentationProvider.getTargetPresentation(elementDescriptor.getItem());
|
||||
return new FoundItemDescriptor<>(new ItemWithPresentation<>(elementDescriptor.getItem(), presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
LOG.error("Found items expected to be PsiItems or to have [com.intellij.navigation.ItemPresentation] field. But item [" + elementDescriptor.getItem().getClass() + "] is not");
|
||||
TargetPresentation presentation = calcFallbackPresentation(elementDescriptor.getItem());
|
||||
return new FoundItemDescriptor<>(new ItemWithPresentation<>(elementDescriptor.getItem(), presentation), elementDescriptor.getWeight());
|
||||
}
|
||||
|
||||
private static TargetPresentation calcFallbackPresentation(Object item) {
|
||||
private static TargetPresentation calcPresentation(Object item, Function<? super PsiElement, ? extends TargetPresentation> psiPresentationCalculator,
|
||||
@Nullable SearchEverywherePresentationProvider<Object> rendererPresentationProvider) {
|
||||
if (item instanceof PsiElement psi) {
|
||||
return psiPresentationCalculator.apply(psi);
|
||||
}
|
||||
|
||||
if (item instanceof PsiElementNavigationItem psiElementNavigationItem) {
|
||||
var realElement = psiElementNavigationItem.getTargetElement();
|
||||
return psiPresentationCalculator.apply(realElement);
|
||||
}
|
||||
|
||||
if (item instanceof NavigationItem navigationItem) {
|
||||
ItemPresentation itemPresentation = Objects.requireNonNull(navigationItem.getPresentation());
|
||||
return convertPresentation(itemPresentation);
|
||||
}
|
||||
|
||||
if (item instanceof ItemPresentation itemPresentation) {
|
||||
return convertPresentation(itemPresentation);
|
||||
}
|
||||
|
||||
if (rendererPresentationProvider != null) {
|
||||
return rendererPresentationProvider.getTargetPresentation(item);
|
||||
}
|
||||
|
||||
LOG.error("Found items expected to be PsiItems or to have [com.intellij.navigation.ItemPresentation] field. But item [" + item.getClass() + "] is not");
|
||||
return TargetPresentation.builder(item != null ? item.toString() : "").icon(IconUtil.getEmptyIcon(false)).presentation();
|
||||
}
|
||||
|
||||
|
||||
@@ -47,11 +47,10 @@ interface SearchEverywhereConcurrentPsiElementsFetcher : SearchEverywhereConcurr
|
||||
knownItems: MutableList<FoundItemDescriptor<PsiItemWithSimilarity<*>>>,
|
||||
durationMs: Long): () -> FoundItemDescriptor<Any>? {
|
||||
val element = descriptor.item.value
|
||||
val foundElement = if (element is PsiElement) attachPsiPresentation(element, psiElementsRenderer) else element
|
||||
val newItem = PsiItemWithSimilarity(foundElement, descriptor.item.similarityScore)
|
||||
val newItem = PsiItemWithSimilarity(element, descriptor.item.similarityScore)
|
||||
|
||||
return {
|
||||
val equal = knownItems.firstOrNull { checkItemsEqual(it.item.value, foundElement) }
|
||||
val equal = knownItems.firstOrNull { checkItemsEqual(it.item.value, element) }
|
||||
if (equal != null) {
|
||||
mergeOrSkipItem(newItem, equal, durationMs)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user