/* * declaration * : function * : property * : extension * : class * : typeAlias * : object * ; */ private IElementType parseLocalDeclarationRest(boolean isEnum) { IElementType keywordToken = tt(); IElementType declType = null; if (keywordToken == CLASS_KEYWORD || keywordToken == TRAIT_KEYWORD) { declType = myJetParsing.parseClass(isEnum); } else if (keywordToken == FUN_KEYWORD) { declType = myJetParsing.parseFunction(); } else if (keywordToken == VAL_KEYWORD || keywordToken == VAR_KEYWORD) { declType = myJetParsing.parseProperty(true); } else if (keywordToken == TYPE_ALIAS_KEYWORD) { declType = myJetParsing.parseTypeAlias(); } else if (keywordToken == OBJECT_KEYWORD) { // Object expression may appear at the statement position: should parse it // as expression instead of object declaration // sample: // { // object : Thread() { // } // } IElementType lookahead = lookahead(1); if (lookahead == COLON || lookahead == LBRACE) { return null; } myJetParsing.parseObject(NameParsingMode.REQUIRED, true); declType = OBJECT_DECLARATION; } return declType; }