for (PsiElement element : elements) {
PsiElement parent = element.getParent();
boolean isRuleId = parent instanceof BnfRule && (forNavigation || element == ((BnfRule)parent).getId());
if (!(isRuleId || forNavigation && element instanceof BnfExpression)) continue;
List<PsiElement> items = new ArrayList<PsiElement>();
NavigatablePsiElement method = getMethod(element);
if (method != null && (!forNavigation || visited.add(method))) {
items.add(method);
}
boolean hasPSI = false;
if (isRuleId) {
BnfRule rule = RuleGraphHelper.getSynonymTargetOrSelf((BnfRule)parent);
if (RuleGraphHelper.shouldGeneratePsi(rule, true)) {
hasPSI = true;
JavaHelper javaHelper = JavaHelper.getJavaHelper(rule.getProject());
for (String className : new String[]{ParserGeneratorUtil.getQualifiedRuleClassName(rule, false),
ParserGeneratorUtil.getQualifiedRuleClassName(rule, true)}) {
NavigatablePsiElement aClass = javaHelper.findClass(className);
if (aClass != null && (!forNavigation || visited.add(aClass))) {
items.add(aClass);
}
}
}