mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[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:
committed by
intellij-monorepo-bot
parent
2d17e3e062
commit
ba6afd02e0
@@ -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 ||
|
||||
|
||||
Reference in New Issue
Block a user