[java-psi] Avoid parsing sealed classes at language level 16 (non-preview)

We parsed them which caused weird highlighting and errors afterwards (e.g. "permits is not keyword" on completion -- EA-256196 - IOE: PsiElementFactoryImpl.createKeyword)

GitOrigin-RevId: c28f5cad4ccffd0ff30f45ae0c968ce7828ad504
This commit is contained in:
Tagir Valeev
2021-02-18 08:40:43 +00:00
committed by intellij-monorepo-bot
parent 2d17e3e062
commit ba6afd02e0
2 changed files with 8 additions and 3 deletions
@@ -40,7 +40,11 @@ public final class JavaLexer extends LexerBase {
level.isAtLeast(LanguageLevel.JDK_10) && VAR.contentEquals(id) ||
level.isAtLeast(LanguageLevel.JDK_15_PREVIEW) && RECORD.contentEquals(id) ||
level.isAtLeast(LanguageLevel.JDK_14) && YIELD.contentEquals(id) ||
(level.isAtLeast(LanguageLevel.JDK_15_PREVIEW) && (level == LanguageLevel.JDK_X || level.isPreview()) && (SEALED.contentEquals(id) || PERMITS.contentEquals(id))));
(isSealedAvailable(level) && (SEALED.contentEquals(id) || PERMITS.contentEquals(id))));
}
public static boolean isSealedAvailable(@NotNull LanguageLevel level) {
return level.isAtLeast(LanguageLevel.JDK_15_PREVIEW) && (level == LanguageLevel.JDK_X || level.isPreview());
}
private final _JavaLexer myFlexLexer;
@@ -4,6 +4,7 @@ package com.intellij.lang.java.parser;
import com.intellij.core.JavaPsiBundle;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.PsiBuilderUtil;
import com.intellij.lang.java.lexer.JavaLexer;
import com.intellij.openapi.util.Pair;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.JavaTokenType;
@@ -434,13 +435,13 @@ public class DeclarationParser {
}
private static boolean isSealedToken(PsiBuilder builder, IElementType tokenType) {
return getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_15_PREVIEW) &&
return JavaLexer.isSealedAvailable(getLanguageLevel(builder)) &&
tokenType == JavaTokenType.IDENTIFIER &&
PsiKeyword.SEALED.equals(builder.getTokenText());
}
private static boolean isNonSealedToken(PsiBuilder builder, IElementType tokenType) {
if (!getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_15_PREVIEW) ||
if (!JavaLexer.isSealedAvailable(getLanguageLevel(builder)) ||
tokenType != JavaTokenType.IDENTIFIER ||
!"non".equals(builder.getTokenText()) ||
builder.lookAhead(1) != JavaTokenType.MINUS ||