/* * import * : "import" ("namespace" ".")? SimpleName{"."} ("." "*" | "as" SimpleName)? SEMI? * ; */ private void parseImportDirective() { assert _at(IMPORT_KEYWORD); PsiBuilder.Marker importDirective = mark(); advance(); // IMPORT_KEYWORD PsiBuilder.Marker qualifiedName = mark(); if (at(PACKAGE_KEYWORD)) { advance(); // PACKAGE_KEYWORD expect(DOT, "Expecting '.'", TokenSet.create(IDENTIFIER, MUL, SEMICOLON)); } PsiBuilder.Marker reference = mark(); expect(IDENTIFIER, "Expecting qualified name"); reference.done(REFERENCE_EXPRESSION); while (at(DOT) && lookahead(1) != MUL) { advance(); // DOT reference = mark(); if (expect( IDENTIFIER, "Qualified name must be a '.'-separated identifier list", IMPORT_RECOVERY_SET)) { reference.done(REFERENCE_EXPRESSION); } else { reference.drop(); } PsiBuilder.Marker precede = qualifiedName.precede(); qualifiedName.done(DOT_QUALIFIED_EXPRESSION); qualifiedName = precede; } qualifiedName.drop(); if (at(DOT)) { advance(); // DOT assert _at(MUL); advance(); // MUL handleUselessRename(); } if (at(AS_KEYWORD)) { advance(); // AS_KEYWORD expect(IDENTIFIER, "Expecting identifier", TokenSet.create(SEMICOLON)); } consumeIf(SEMICOLON); importDirective.done(IMPORT_DIRECTIVE); }