RUBY-30957 add "Current" hint support for usages when using the new UsageSearcher APIs

(cherry picked from commit 2abfe555f5a3bb666714e97064f139c821ccb85a)

IJ-CR-103466

GitOrigin-RevId: 80f7404b46ae1397d802761e97b8ba438e3e4be7
This commit is contained in:
Henry Wylde
2023-02-23 18:27:35 +00:00
committed by intellij-monorepo-bot
parent 2362a47eed
commit 8b8490c8cd
@@ -11,6 +11,7 @@ import com.intellij.find.FindSettings;
import com.intellij.find.findUsages.*;
import com.intellij.find.impl.FindManagerImpl;
import com.intellij.find.usages.api.SearchTarget;
import com.intellij.find.usages.impl.Psi2UsageInfo2UsageAdapter;
import com.intellij.icons.AllIcons;
import com.intellij.ide.DataManager;
import com.intellij.ide.util.PropertiesComponent;
@@ -58,6 +59,7 @@ import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.SmartPsiFileRange;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
@@ -103,6 +105,7 @@ import java.util.stream.Collectors;
import static com.intellij.find.actions.ResolverKt.findShowUsages;
import static com.intellij.find.actions.ShowUsagesActionHandler.getSecondInvocationHint;
import static com.intellij.find.findUsages.FindUsagesHandlerFactory.OperationMode.USAGES_WITH_DEFAULT_OPTIONS;
import static com.intellij.util.ObjectUtils.doIfNotNull;
import static org.jetbrains.annotations.Nls.Capitalization.Sentence;
public class ShowUsagesAction extends AnAction implements PopupAction, HintManagerImpl.ActionToIgnore {
@@ -634,6 +637,20 @@ public class ShowUsagesAction extends AnAction implements PopupAction, HintManag
return usage -> usage instanceof UsageInfo2UsageAdapter &&
((UsageInfo2UsageAdapter)usage).getUsageInfo().equals(originUsageInfo);
}
int offset = editor.getCaretModel().getOffset();
return usage -> {
if (usage instanceof Psi2UsageInfo2UsageAdapter adapter) {
for (UsageInfo info : adapter.getMergedInfos()) {
final Segment range = doIfNotNull(info.getPsiFileRange(), SmartPsiFileRange::getRange);
if (range != null && range.getStartOffset() <= offset && offset <= range.getEndOffset()) {
return true;
}
}
}
return false;
};
}
return __ -> false;
}