in src/org/intellij/grammar/psi/impl/GrammarUtil.java [54:71]
public static boolean equalsElement(BnfExpression e1, BnfExpression e2) {
if (e1 == null) return e2 == null;
if (e2 == null) return false;
if (getEffectiveType(e1) != getEffectiveType(e2)) return false;
if (isOneTokenExpression(e1)) {
return e1.getText().equals(e2.getText());
}
else {
for (PsiElement c1 = e1.getFirstChild(), c2 = e2.getFirstChild(); ;) {
boolean f1 = c1 == null || c1 instanceof BnfExpression;
boolean f2 = c2 == null || c2 instanceof BnfExpression;
if (f1 && f2 && !equalsElement((BnfExpression)c1, (BnfExpression)c2)) return false;
if (!f1 || f2) c1 = c1 == null ? null : c1.getNextSibling();
if (f1 || !f2) c2 = c2 == null ? null : c2.getNextSibling();
if (c1 == null && c2 == null) return true;
}
}
}