* (named elements do not have parents)
*/
public Set<TokenType> getNextPossibleTokens() {
if (nextPossibleTokens == null) {
nextPossibleTokens = new THashSet<TokenType>();
ElementType elementType = getElementType();
ElementType parentElementType = elementType.getParent();
while (parentElementType != null) {
if (parentElementType instanceof SequenceElementType) {
SequenceElementType sequenceElementType = (SequenceElementType) parentElementType;
int elementsCount = sequenceElementType.getElementTypes().length;
int index = sequenceElementType.indexOf(elementType, 0);
for (int i = index + 1; i < elementsCount; i++) {
ElementType next = sequenceElementType.getElementTypes()[i];
nextPossibleTokens.addAll(next.getLookupCache().getFirstPossibleTokens());
if (!sequenceElementType.isOptional(i)) {
parentElementType = null;
break;
}
}