mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-highlighting] IDEA-323955 Record patterns support available only for Java 20 preview. Change HighlightingFeature
GitOrigin-RevId: 0aa46e13853d2a3e1daeb7f151d255cb34f3283d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1600745464
commit
26e5f2d5dc
@@ -82,9 +82,10 @@ public final class LanguageLevelUtil {
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_17, "18");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_18, "19");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_19, "20");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_19_PREVIEW, "20");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_20, "21");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_20_PREVIEW, "21");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_21, "22");
|
||||
ourPresentableShortMessage.put(LanguageLevel.JDK_21_PREVIEW, "22");
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
+3
-22
@@ -1841,7 +1841,8 @@ public final class HighlightUtil {
|
||||
}
|
||||
|
||||
static HighlightInfo.Builder checkInstanceOfPatternSupertype(@NotNull PsiInstanceOfExpression expression) {
|
||||
PsiTypeTestPattern pattern = getTypeTestPattern(expression.getPattern());
|
||||
@Nullable PsiPattern expressionPattern = expression.getPattern();
|
||||
PsiTypeTestPattern pattern = tryCast(expressionPattern, PsiTypeTestPattern.class);
|
||||
if (pattern == null) return null;
|
||||
PsiPatternVariable variable = pattern.getPatternVariable();
|
||||
if (variable == null) return null;
|
||||
@@ -1865,26 +1866,6 @@ public final class HighlightUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Contract(value = "null -> null", pure = true)
|
||||
private static @Nullable PsiTypeTestPattern getTypeTestPattern(@Nullable PsiPattern expressionPattern) {
|
||||
PsiPattern innerMostPattern = JavaPsiPatternUtil.skipParenthesizedPatternDown(expressionPattern);
|
||||
if (innerMostPattern == null) return null;
|
||||
|
||||
PsiTypeTestPattern pattern = tryCast(innerMostPattern, PsiTypeTestPattern.class);
|
||||
if (pattern != null) return pattern;
|
||||
|
||||
PsiGuardedPattern guardedPattern = tryCast(innerMostPattern, PsiGuardedPattern.class);
|
||||
if (guardedPattern == null) return null;
|
||||
|
||||
Object condition = ExpressionUtils.computeConstantExpression(guardedPattern.getGuardingExpression());
|
||||
if (!Boolean.TRUE.equals(condition)) return null;
|
||||
|
||||
PsiPattern patternInGuard = JavaPsiPatternUtil.skipParenthesizedPatternDown(guardedPattern.getPrimaryPattern());
|
||||
if (patternInGuard == null || patternInGuard instanceof PsiTypeTestPattern) return (PsiTypeTestPattern)patternInGuard;
|
||||
|
||||
return getTypeTestPattern(patternInGuard);
|
||||
}
|
||||
|
||||
static HighlightInfo.Builder checkPolyadicOperatorApplicable(@NotNull PsiPolyadicExpression expression) {
|
||||
PsiExpression[] operands = expression.getOperands();
|
||||
|
||||
@@ -3629,7 +3610,7 @@ public final class HighlightUtil {
|
||||
Module module = ModuleUtilCore.findModuleForPsiElement(file);
|
||||
if (module != null) {
|
||||
LanguageLevel moduleLanguageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module);
|
||||
if (moduleLanguageLevel.isAtLeast(feature.level)) {
|
||||
if (moduleLanguageLevel.isAtLeast(feature.level) && !feature.isLimited()) {
|
||||
for (FilePropertyPusher<?> pusher : FilePropertyPusher.EP_NAME.getExtensions()) {
|
||||
if (pusher instanceof JavaLanguageLevelPusher) {
|
||||
String newMessage = ((JavaLanguageLevelPusher)pusher).getInconsistencyLanguageLevelMessage(message, level, file);
|
||||
|
||||
+39
-22
@@ -46,37 +46,55 @@ public enum HighlightingFeature {
|
||||
LOCAL_INTERFACES(LanguageLevel.JDK_16, "feature.local.interfaces"),
|
||||
LOCAL_ENUMS(LanguageLevel.JDK_16, "feature.local.enums"),
|
||||
INNER_STATICS(LanguageLevel.JDK_16, "feature.inner.statics"),
|
||||
PATTERNS_IN_SWITCH(LanguageLevel.JDK_19_PREVIEW, "feature.patterns.in.switch"),
|
||||
GUARDED_AND_PARENTHESIZED_PATTERNS(LanguageLevel.JDK_19_PREVIEW, "feature.guarded.and.parenthesised.patterns"),
|
||||
PATTERN_GUARDS_AND_RECORD_PATTERNS(LanguageLevel.JDK_19_PREVIEW, "feature.pattern.guard.and.record.patterns"),
|
||||
RECORD_PATTERNS_IN_FOR_EACH(LanguageLevel.JDK_20_PREVIEW, LanguageLevel.JDK_20_PREVIEW, "feature.record.patterns.in.for.each");
|
||||
PARENTHESIZED_PATTERNS(LanguageLevel.JDK_20_PREVIEW, "feature.guarded.and.parenthesised.patterns"){
|
||||
@Override
|
||||
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
|
||||
LanguageLevel until = LanguageLevel.JDK_20_PREVIEW;
|
||||
return until == level;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean isLimited() {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
PATTERNS_IN_SWITCH(LanguageLevel.JDK_21, "feature.patterns.in.switch") {
|
||||
@Override
|
||||
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
|
||||
return super.isSufficient(useSiteLevel) || LanguageLevel.JDK_20_PREVIEW == useSiteLevel;
|
||||
}
|
||||
},
|
||||
PATTERN_GUARDS_AND_RECORD_PATTERNS(LanguageLevel.JDK_21, "feature.pattern.guard.and.record.patterns"){
|
||||
@Override
|
||||
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
|
||||
return super.isSufficient(useSiteLevel) || LanguageLevel.JDK_20_PREVIEW == useSiteLevel;
|
||||
}
|
||||
},
|
||||
RECORD_PATTERNS_IN_FOR_EACH(LanguageLevel.JDK_20_PREVIEW, "feature.record.patterns.in.for.each"){
|
||||
@Override
|
||||
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
|
||||
LanguageLevel until = LanguageLevel.JDK_20_PREVIEW;
|
||||
return until == level;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
boolean isLimited() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
public static final @NonNls String JDK_INTERNAL_PREVIEW_FEATURE = "jdk.internal.PreviewFeature";
|
||||
public static final @NonNls String JDK_INTERNAL_JAVAC_PREVIEW_FEATURE = "jdk.internal.javac.PreviewFeature";
|
||||
|
||||
final LanguageLevel level;
|
||||
@Nullable
|
||||
private final LanguageLevel until;
|
||||
@PropertyKey(resourceBundle = JavaErrorBundle.BUNDLE) final String key;
|
||||
|
||||
HighlightingFeature(@NotNull LanguageLevel level, @NotNull @PropertyKey(resourceBundle = JavaAnalysisBundle.BUNDLE) String key) {
|
||||
this.level = level;
|
||||
this.key = key;
|
||||
this.until = null;
|
||||
}
|
||||
|
||||
HighlightingFeature(@NotNull LanguageLevel from,
|
||||
@NotNull LanguageLevel until,
|
||||
@NotNull @PropertyKey(resourceBundle = JavaAnalysisBundle.BUNDLE) String key) {
|
||||
if (!(from.isPreview() && until.isPreview())) {
|
||||
throw new UnsupportedOperationException("Levels for temporary features must be preview");
|
||||
}
|
||||
this.level = from;
|
||||
this.until = until;
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
|
||||
public LanguageLevel getLevel() {
|
||||
return level;
|
||||
}
|
||||
@@ -91,12 +109,11 @@ public enum HighlightingFeature {
|
||||
|
||||
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
|
||||
return useSiteLevel.isAtLeast(level) &&
|
||||
(!level.isPreview() || useSiteLevel.isPreview()) &&
|
||||
(until == null || until.isAtLeast(useSiteLevel));
|
||||
(!level.isPreview() || useSiteLevel.isPreview());
|
||||
}
|
||||
|
||||
boolean isLimited() {
|
||||
return until != null;
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Override if feature was preview and then accepted as standard
|
||||
|
||||
@@ -38,7 +38,6 @@ public enum LanguageLevel {
|
||||
JDK_17(JavaPsiBundle.messagePointer("jdk.17.language.level.description"), 17),
|
||||
JDK_18(JavaPsiBundle.messagePointer("jdk.18.language.level.description"), 18),
|
||||
JDK_19(JavaPsiBundle.messagePointer("jdk.19.language.level.description"), 19),
|
||||
JDK_19_PREVIEW(JavaPsiBundle.messagePointer("jdk.19.preview.language.level.description"), 19),
|
||||
JDK_20(JavaPsiBundle.messagePointer("jdk.20.language.level.description"), 20),
|
||||
JDK_20_PREVIEW(JavaPsiBundle.messagePointer("jdk.20.preview.language.level.description"), 20),
|
||||
JDK_21(JavaPsiBundle.messagePointer("jdk.21.language.level.description"), 21),
|
||||
@@ -48,7 +47,7 @@ public enum LanguageLevel {
|
||||
/**
|
||||
* Should point to the last released JDK.
|
||||
*/
|
||||
public static final LanguageLevel HIGHEST = JDK_20;
|
||||
public static final LanguageLevel HIGHEST = JDK_21;
|
||||
|
||||
private final Supplier<@Nls String> myPresentableText;
|
||||
private final JavaVersion myVersion;
|
||||
|
||||
@@ -24,12 +24,12 @@ public enum LanguageLevel {
|
||||
JDK_16(16),
|
||||
JDK_17(17),
|
||||
JDK_18(18),
|
||||
JDK_19(19), JDK_19_PREVIEW(19),
|
||||
JDK_19(19),
|
||||
JDK_20(20), JDK_20_PREVIEW(20),
|
||||
JDK_21(21), JDK_21_PREVIEW(21),
|
||||
JDK_X(22);
|
||||
|
||||
public static final LanguageLevel HIGHEST = JDK_20;
|
||||
public static final LanguageLevel HIGHEST = JDK_21;
|
||||
|
||||
private final JavaVersion myVersion;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user