288 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
289 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
290 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
291 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
292 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
293 REDUNDANT_STRICTFP(JDK17),
294 TYPE_ANNOTATIONS_ON_VAR_LAMBDA_PARAMETER(MIN, JDK19),
295 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
296 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
297 IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
298 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
299 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
300 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
301 FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
302 MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
303 JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
304 PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
305 ERASE_POLY_SIG_RETURN_TYPE(JDK24),
306 CAPTURE_MREF_RETURN_TYPE(JDK26),
307 VALUE_CLASSES(DEFAULT, Fragments.FeatureValueClasses, DiagKind.PLURAL),
308 ;
309
310 enum DiagKind {
311 NORMAL,
312 PLURAL;
313 }
314
315 private final Source minLevel;
316 private final Source maxLevel;
317 private final Fragment optFragment;
318 private final DiagKind optKind;
319
320 Feature(Source minLevel) {
321 this(minLevel, null, null);
322 }
323
324 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
325 this(minLevel, MAX, optFragment, optKind);
326 }
327
|
288 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
289 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
290 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
291 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
292 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
293 REDUNDANT_STRICTFP(JDK17),
294 TYPE_ANNOTATIONS_ON_VAR_LAMBDA_PARAMETER(MIN, JDK19),
295 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
296 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
297 IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
298 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
299 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
300 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
301 FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
302 MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
303 JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
304 PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
305 ERASE_POLY_SIG_RETURN_TYPE(JDK24),
306 CAPTURE_MREF_RETURN_TYPE(JDK26),
307 VALUE_CLASSES(DEFAULT, Fragments.FeatureValueClasses, DiagKind.PLURAL),
308 REFLECT_METHODS(DEFAULT, Fragments.FeatureReflectMethods, DiagKind.NORMAL),
309 ;
310
311 enum DiagKind {
312 NORMAL,
313 PLURAL;
314 }
315
316 private final Source minLevel;
317 private final Source maxLevel;
318 private final Fragment optFragment;
319 private final DiagKind optKind;
320
321 Feature(Source minLevel) {
322 this(minLevel, null, null);
323 }
324
325 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
326 this(minLevel, MAX, optFragment, optKind);
327 }
328
|