[java-inspections] PreviewFeatureInspection: add features from Java 20-22

Fixes IDEA-340983 Preview API (structured concurrency) usage in Java 21 is not highlighted

GitOrigin-RevId: cd02d5e1fe328104a47ac1fd684b2e2324b6558d
This commit is contained in:
Tagir Valeev
2023-12-14 14:43:02 +01:00
committed by intellij-monorepo-bot
parent 5b363f94d2
commit f7074186ea
2 changed files with 43 additions and 3 deletions

View File

@@ -137,6 +137,12 @@ feature.enum.qualified.name.in.switch=Qualified enum as a constant in switch
feature.string.templates=String templates
feature.unnamed.vars=Unnamed patterns and variables
feature.implicit.classes=Implicitly declared classes
feature.scoped.values=Scoped Values
feature.structured.concurrency=Structured Concurrency
feature.classfile.api=ClassFile API
feature.stream.gatherers=Stream Gatherers
feature.foreign.functions=Foreign Function & Memory API
feature.virtual.threads=Virtual Threads
find.searching.for.references.to.class.progress=Searching for references to class {0}...
find.usages.panel.title.derived.classes.cap=Derived classes

View File

@@ -77,10 +77,30 @@ public enum HighlightingFeature {
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 == useSiteLevel;
return LanguageLevel.JDK_20_PREVIEW == useSiteLevel.getSupportedLevel();
}
@Override
boolean isLimited() {
return true;
}
},
VIRTUAL_THREADS(LanguageLevel.JDK_20_PREVIEW, "feature.virtual.threads") {
@Override
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
return LanguageLevel.JDK_20_PREVIEW == useSiteLevel.getSupportedLevel();
}
@Override
boolean isLimited() {
return true;
}
},
FOREIGN_FUNCTIONS(LanguageLevel.JDK_20_PREVIEW, "feature.foreign.functions") {
@Override
boolean isSufficient(@NotNull LanguageLevel useSiteLevel) {
return LanguageLevel.JDK_20_PREVIEW == useSiteLevel.getSupportedLevel();
}
@Override
boolean isLimited() {
@@ -95,7 +115,12 @@ public enum HighlightingFeature {
return super.isSufficient(useSiteLevel) || LanguageLevel.JDK_21_PREVIEW == useSiteLevel;
}
},
IMPLICIT_CLASSES(LanguageLevel.JDK_21_PREVIEW, "feature.implicit.classes");
IMPLICIT_CLASSES(LanguageLevel.JDK_21_PREVIEW, "feature.implicit.classes"),
SCOPED_VALUES(LanguageLevel.JDK_21_PREVIEW, "feature.scoped.values"),
STRUCTURED_CONCURRENCY(LanguageLevel.JDK_21_PREVIEW, "feature.structured.concurrency"),
CLASSFILE_API(LanguageLevel.JDK_22_PREVIEW, "feature.classfile.api"),
STREAM_GATHERERS(LanguageLevel.JDK_22_PREVIEW, "feature.stream.gatherers"),
;
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";
@@ -158,6 +183,7 @@ public enum HighlightingFeature {
return convertFromPreviewFeatureName(enumConstant.getName());
}
// Should correspond to jdk.internal.javac.PreviewFeature.Feature enum
@Nullable
@Contract(pure = true)
private static HighlightingFeature convertFromPreviewFeatureName(@NotNull @NonNls String feature) {
@@ -166,6 +192,14 @@ public enum HighlightingFeature {
case "TEXT_BLOCKS" -> TEXT_BLOCKS;
case "RECORDS" -> RECORDS;
case "SEALED_CLASSES" -> SEALED_CLASSES;
case "STRING_TEMPLATES" -> STRING_TEMPLATES;
case "UNNAMED_CLASSES", "IMPLICIT_CLASSES" -> IMPLICIT_CLASSES;
case "SCOPED_VALUES" -> SCOPED_VALUES;
case "STRUCTURED_CONCURRENCY" -> STRUCTURED_CONCURRENCY;
case "CLASSFILE_API" -> CLASSFILE_API;
case "STREAM_GATHERERS" -> STREAM_GATHERERS;
case "FOREIGN" -> FOREIGN_FUNCTIONS;
case "VIRTUAL_THREADS" -> VIRTUAL_THREADS;
default -> null;
};
}