CIDR-debugger: resolving struct fields

This commit is contained in:
Anton Makeev
2010-07-27 15:37:22 +04:00
parent 63c5c05107
commit 97639c3c42
@@ -180,12 +180,22 @@ public class PsiTreeUtil {
}
@Nullable public static <T extends PsiElement> T findChildOfType(@NotNull final PsiElement element, @NotNull final Class<T> aClass, final boolean strict) {
return findChildOfAnyType(element, strict, aClass);
}
@Nullable public static <T extends PsiElement> T findChildOfAnyType(@NotNull final PsiElement element, @NotNull final Class<T>... classes) {
return findChildOfAnyType(element, true, classes);
}
@Nullable public static <T extends PsiElement> T findChildOfAnyType(@NotNull final PsiElement element, final boolean strict, @NotNull final Class<T>... classes) {
PsiElementProcessor.FindElement<PsiElement> processor = new PsiElementProcessor.FindElement<PsiElement>() {
@Override
public boolean execute(PsiElement each) {
if (strict && each == element) return true;
if (instanceOf(aClass, each)) {
return setFound(each);
for (Class<T> eachClass : classes) {
if (instanceOf(eachClass, each)) {
return setFound(each);
}
}
return true;
}