254 NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
255 TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
256 PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
257 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
258 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
259 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
260 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
261 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
262 REDUNDANT_STRICTFP(JDK17),
263 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
264 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
265 IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
266 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
267 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
268 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
269 FLEXIBLE_CONSTRUCTORS(JDK22, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
270 MODULE_IMPORTS(JDK23, Fragments.FeatureModuleImports, DiagKind.PLURAL),
271 JAVA_BASE_TRANSITIVE(JDK24, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
272 PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
273 ERASE_POLY_SIG_RETURN_TYPE(JDK24),
274 ;
275
276 enum DiagKind {
277 NORMAL,
278 PLURAL;
279 }
280
281 private final Source minLevel;
282 private final Source maxLevel;
283 private final Fragment optFragment;
284 private final DiagKind optKind;
285
286 Feature(Source minLevel) {
287 this(minLevel, null, null);
288 }
289
290 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
291 this(minLevel, MAX, optFragment, optKind);
292 }
293
|
254 NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
255 TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
256 PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
257 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
258 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
259 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
260 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
261 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
262 REDUNDANT_STRICTFP(JDK17),
263 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
264 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
265 IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
266 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
267 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
268 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
269 FLEXIBLE_CONSTRUCTORS(JDK22, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
270 MODULE_IMPORTS(JDK23, Fragments.FeatureModuleImports, DiagKind.PLURAL),
271 JAVA_BASE_TRANSITIVE(JDK24, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
272 PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
273 ERASE_POLY_SIG_RETURN_TYPE(JDK24),
274 REFLECT_METHODS(JDK22, Fragments.FeatureReflectMethods, DiagKind.NORMAL),
275 ;
276
277 enum DiagKind {
278 NORMAL,
279 PLURAL;
280 }
281
282 private final Source minLevel;
283 private final Source maxLevel;
284 private final Fragment optFragment;
285 private final DiagKind optKind;
286
287 Feature(Source minLevel) {
288 this(minLevel, null, null);
289 }
290
291 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
292 this(minLevel, MAX, optFragment, optKind);
293 }
294
|