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