boolean () { if (isIdentifier(myBuilder) || atToken(PyTokenTypes.MULT) || atToken(PyTokenTypes.EXP)) { SyntaxTreeBuilder.Marker typeParamMarker = myBuilder.mark(); if (atAnyOfTokens(PyTokenTypes.MULT, PyTokenTypes.EXP)) { nextToken(); } if (!parseIdentifierOrSkip(PyTokenTypes.RBRACKET, PyTokenTypes.COMMA, PyTokenTypes.COLON)) { typeParamMarker.drop(); return false; } if (matchToken(PyTokenTypes.COLON)) { if (!myContext.getExpressionParser().parseSingleExpression(false)) { myBuilder.error(PyParsingBundle.message("PARSE.expected.expression")); } } typeParamMarker.done(PyElementTypes.TYPE_PARAMETER); return true; } return false; }