package com.jetbrains.lang.dart.ide.hierarchy.call;
import com.intellij.find.findUsages.FindUsagesHandler;
import com.intellij.find.findUsages.FindUsagesOptions;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.CommonProcessors;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class DartCallerTreeStructure extends DartCallHierarchyTreeStructure {
public DartCallerTreeStructure(Project project, PsiElement element, String currentScopeType) {
super(project, element, currentScopeType);
}
private static void getCallers(@NotNull PsiElement element, @NotNull List<PsiElement> results, @NotNull GlobalSearchScope scope) {
FindUsagesHandler finder = createFindUsageHandler(element);
final CommonProcessors.CollectProcessor<UsageInfo> processor = new CommonProcessors.CollectProcessor<>();
FindUsagesOptions options = new FindUsagesOptions(scope);
options.isUsages = true;
options.isSearchForTextOccurrences = false;
finder.processElementUsages(element, processor, options);
for (UsageInfo each : processor.getResults()) {
PsiElement eachElement = each.getElement();
collectDeclarations(eachElement, results);
}
}
@NotNull
@Override
protected List<PsiElement> getChildren(@NotNull PsiElement element) {
final List<PsiElement> list = new ArrayList<>();
getCallers(element, list, getScope());
return list;
}
}