diff --git a/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicDeclarationParser.java b/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicDeclarationParser.java index 1896f68d0bff..994e7785e199 100644 --- a/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicDeclarationParser.java +++ b/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicDeclarationParser.java @@ -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); } diff --git a/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicReferenceParser.java b/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicReferenceParser.java index f9251abcca18..decd4ea1e412 100644 --- a/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicReferenceParser.java +++ b/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicReferenceParser.java @@ -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)) { diff --git a/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicStatementParser.java b/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicStatementParser.java index 76d2084aa519..a0ff589b2dd4 100644 --- a/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicStatementParser.java +++ b/java/java-frontback-psi-impl/src/com/intellij/lang/java/parser/BasicStatementParser.java @@ -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 markerAndIsExpression = parseCaseLabel(builder);