boolean (@NotNull final PsiElement scopeRoot, @NotNull final Processor<? super PsiClass> processor) { final boolean[] stopped = {false}; final JavaElementVisitor visitor = scopeRoot instanceof PsiCompiledElement ? new JavaRecursiveElementVisitor() { @Override public void visitElement(@NotNull PsiElement element) { if (!stopped[0]) { super.visitElement(element); } } @Override public void visitClass(@NotNull PsiClass aClass) { stopped[0] = !processor.process(aClass); super.visitClass(aClass); } } : new JavaRecursiveElementWalkingVisitor() { @Override public void visitElement(@NotNull PsiElement element) { if (!stopped[0]) { super.visitElement(element); } } @Override public void visitClass(@NotNull PsiClass aClass) { stopped[0] = !processor.process(aClass); super.visitClass(aClass); } }; ApplicationManager.getApplication().runReadAction(() -> scopeRoot.accept(visitor)); return !stopped[0]; }