From a8772ee91a7467ec6d1a2a11cc8dd3626e715330 Mon Sep 17 00:00:00 2001 From: Stephan Herrmann Date: Sun, 26 May 2024 22:52:01 +0200 Subject: [PATCH] [23] JEP 476: Module Import Declarations (Preview) Fix Scanner: "import module." does not start a module import! --- .../jdt/internal/compiler/parser/Scanner.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java index 9732706eac1..b5487f0a926 100644 --- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java +++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Scanner.java @@ -5415,21 +5415,17 @@ int disambiguatedRestrictedKeyword(int restrictedKeywordToken) { if (this.scanContext != ScanContext.AFTER_REQUIRES) { token = TokenNameIdentifier; } else { - getVanguardParser(); - this.vanguardScanner.resetTo(this.currentPosition, this.eofPosition - 1, true, ScanContext.EXPECTING_IDENTIFIER); - try { - int lookAhead = this.vanguardScanner.getNextToken(); - if (lookAhead == TokenNameSEMICOLON) - token = TokenNameIdentifier; - } catch (InvalidInputException e) { - // - } + if (lookAhead(true, ScanContext.EXPECTING_IDENTIFIER) == TokenNameSEMICOLON) + token = TokenNameIdentifier; } break; case TokenNamemodule: switch (this.scanContext) { case EXPECTING_KEYWORD: + break; case AFTER_IMPORT: + if (lookAhead(true, ScanContext.EXPECTING_IDENTIFIER) == TokenNameDOT) + token = TokenNameIdentifier; break; default: token = TokenNameIdentifier; @@ -5450,6 +5446,15 @@ int disambiguatedRestrictedKeyword(int restrictedKeywordToken) { } return token; } +int lookAhead(boolean isModuleInfo, ScanContext context) { + getVanguardParser(); + this.vanguardScanner.resetTo(this.currentPosition, this.eofPosition - 1, isModuleInfo, context); + try { + return this.vanguardScanner.getNextToken(); + } catch (InvalidInputException e) { + return TokenNameNotAToken; + } +} int disambiguatesRestrictedIdentifierWithLookAhead(Predicate checkPrecondition, int restrictedIdentifierToken, Goal goal) { if (checkPrecondition.test(restrictedIdentifierToken)) { VanguardParser vp = getNewVanguardParser();