TypeInfo (PsiBuilder builder, int flags) { TypeInfo typeInfo = parseTypeInfo(builder, flags, false); if (typeInfo != null) { assert !isSet(flags, DISJUNCTIONS) || !isSet(flags, CONJUNCTIONS) : "don't set both flags simultaneously"; IElementType operator = isSet(flags, DISJUNCTIONS) ? JavaTokenType.OR : isSet(flags, CONJUNCTIONS) ? JavaTokenType.AND : null; if (operator != null && builder.getTokenType() == operator) { typeInfo.marker = typeInfo.marker.precede(); while (builder.getTokenType() == operator) { builder.advanceLexer(); IElementType tokenType = builder.getTokenType(); if (tokenType != JavaTokenType.IDENTIFIER && tokenType != JavaTokenType.AT) { error(builder, JavaPsiBundle.message("expected.identifier")); } parseTypeInfo(builder, flags, false); } typeInfo.marker.done(myJavaElementTypeContainer.TYPE); } } return typeInfo; }