IElementType () { final IElementType token = myBuilder.getTokenType(); if (isName(token)) { final PsiBuilder.Marker marker = myBuilder.mark(); makeName(); if (myBuilder.getTokenType() == LBRACKET) { skipAnnotation(marker, RncElementTypes.ANNOTATION_ELEMENT); return currentToken(); } else { marker.rollbackTo(); } } else if (token == LBRACKET) { final PsiBuilder.Marker marker = myBuilder.mark(); skipAnnotation(marker, RncElementTypes.ANNOTATION); return currentToken(); } else if (token == GTGT) { final PsiBuilder.Marker marker = myBuilder.mark(); advance(); if (isName(myBuilder.getTokenType())) { makeName(); if (myBuilder.getTokenType() == LBRACKET) { skipAnnotation(marker, RncElementTypes.FORWARD_ANNOTATION); return currentToken(); } } marker.done(RncElementTypes.FORWARD_ANNOTATION); return currentToken(); } return token; }