package com.jetbrains.actionscript.profiler.util;
import com.intellij.javascript.flex.resolve.ActionScriptClassResolver;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiElement;
import com.intellij.psi.search.EverythingGlobalScope;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.actionscript.profiler.sampler.FrameInfo;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author: Fedor.Korotkov
*/
public class ResolveUtil {
private ResolveUtil() {
}
public static List<FrameInfo> filterByScope(Collection<FrameInfo> traces, final GlobalSearchScope scope) {
if (scope == null || scope instanceof EverythingGlobalScope) {
return new ArrayList<>(traces);
}
return ContainerUtil.filter(traces, frameInfo -> {
final String qName = frameInfo.isAnonymous() ? frameInfo.getQNameByFile() : frameInfo.getQName();
if (qName == null) {
return false;
}
return findClassByQName(qName, scope) != null;
});
}
@Nullable
public static PsiElement findClassByQName(String name, @Nullable GlobalSearchScope scope) {
if (scope == null) {
return null;
}
return ActionScriptClassResolver.findClassByQNameStatic(name, scope);
}
public static boolean containsInScope(String name, @Nullable GlobalSearchScope scope) {
if (scope instanceof EverythingGlobalScope) {
return true;
}
return findClassByQName(name, scope) != null;
}
}