[java] IDEA-345355 Refactor HighlightingFeature (in progress)

Replace explicit language levels with features in parser

GitOrigin-RevId: 270053606902ecb8b951ca55618e422ef6482c7b
This commit is contained in:
Tagir Valeev
2024-02-08 10:08:14 +00:00
committed by intellij-monorepo-bot
parent ea2b70a2d1
commit 5715a9cac5
3 changed files with 10 additions and 9 deletions
@@ -5,6 +5,7 @@ import com.intellij.core.JavaPsiBundle;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.PsiBuilderUtil;
import com.intellij.openapi.util.Pair;
import com.intellij.pom.java.JavaFeature;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.JavaTokenType;
import com.intellij.psi.PsiKeyword;
@@ -409,19 +410,19 @@ public class BasicDeclarationParser {
if (tokenType == JavaTokenType.IDENTIFIER && PsiKeyword.RECORD.equals(builder.getTokenText()) &&
builder.lookAhead(1) == JavaTokenType.IDENTIFIER) {
LanguageLevel level = getLanguageLevel(builder);
return level.isAtLeast(LanguageLevel.JDK_16);
return JavaFeature.RECORDS.isSufficient(level);
}
return false;
}
private static boolean isSealedToken(PsiBuilder builder, IElementType tokenType) {
return getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_17) &&
return JavaFeature.SEALED_CLASSES.isSufficient(getLanguageLevel(builder)) &&
tokenType == JavaTokenType.IDENTIFIER &&
PsiKeyword.SEALED.equals(builder.getTokenText());
}
static boolean isNonSealedToken(PsiBuilder builder, IElementType tokenType) {
if (!getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_17) ||
if (!JavaFeature.SEALED_CLASSES.isSufficient(getLanguageLevel(builder)) ||
tokenType != JavaTokenType.IDENTIFIER ||
!"non".equals(builder.getTokenText()) ||
builder.lookAhead(1) != JavaTokenType.MINUS ||
@@ -703,7 +704,7 @@ public class BasicDeclarationParser {
@Nullable
public PsiBuilder.Marker parseLambdaParameter(PsiBuilder builder, boolean typed) {
int flags = BasicReferenceParser.ELLIPSIS;
if (getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_11)) flags |= BasicReferenceParser.VAR_TYPE;
if (JavaFeature.VAR_LAMBDA_PARAMETER.isSufficient(getLanguageLevel(builder))) flags |= BasicReferenceParser.VAR_TYPE;
return parseListElement(builder, typed, flags, myJavaElementTypeContainer.PARAMETER);
}
@@ -3,7 +3,7 @@ package com.intellij.lang.java.parser;
import com.intellij.core.JavaPsiBundle;
import com.intellij.lang.PsiBuilder;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.JavaTokenType;
import com.intellij.psi.PsiKeyword;
import com.intellij.psi.impl.source.AbstractBasicJavaElementTypeFactory;
@@ -95,7 +95,7 @@ public class BasicReferenceParser {
builder.lookAhead(1) != JavaTokenType.DOT &&
builder.lookAhead(1) != JavaTokenType.COLON &&
PsiKeyword.VAR.equals(builder.getTokenText()) &&
getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_10)) {
JavaFeature.LVTI.isSufficient(getLanguageLevel(builder))) {
builder.remapCurrentToken(tokenType = JavaTokenType.VAR_KEYWORD);
}
else if (tokenType == JavaTokenType.VAR_KEYWORD && !isSet(flags, VAR_TYPE)) {
@@ -5,7 +5,7 @@ import com.intellij.core.JavaPsiBundle;
import com.intellij.lang.PsiBuilder;
import com.intellij.lang.WhitespacesBinders;
import com.intellij.openapi.util.Pair;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.pom.java.JavaFeature;
import com.intellij.psi.JavaTokenType;
import com.intellij.psi.PsiKeyword;
import com.intellij.psi.impl.source.AbstractBasicJavaElementTypeFactory;
@@ -276,7 +276,7 @@ public class BasicStatementParser {
private static boolean isStmtYieldToken(@NotNull PsiBuilder builder, IElementType tokenType) {
if (!(tokenType == JavaTokenType.IDENTIFIER &&
PsiKeyword.YIELD.equals(builder.getTokenText()) &&
getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_14))) {
JavaFeature.SWITCH_EXPRESSION.isSufficient(getLanguageLevel(builder)))) {
return false;
}
// we prefer to parse it as yield stmt wherever possible (even in incomplete syntax)
@@ -564,7 +564,7 @@ public class BasicStatementParser {
builder.advanceLexer();
if (isCase) {
boolean patternsAllowed = getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_17);
boolean patternsAllowed = JavaFeature.PATTERNS_IN_SWITCH.isSufficient(getLanguageLevel(builder));
PsiBuilder.Marker list = builder.mark();
do {
Pair<PsiBuilder.Marker, Boolean> markerAndIsExpression = parseCaseLabel(builder);