274 PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
275 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
276 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
277 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
278 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
279 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
280 REDUNDANT_STRICTFP(JDK17),
281 TYPE_ANNOTATIONS_ON_VAR_LAMBDA_PARAMETER(MIN, JDK19),
282 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
283 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
284 IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
285 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
286 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
287 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
288 FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
289 MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
290 JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
291 PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
292 ERASE_POLY_SIG_RETURN_TYPE(JDK24),
293 CAPTURE_MREF_RETURN_TYPE(JDK26),
294 ;
295
296 enum DiagKind {
297 NORMAL,
298 PLURAL;
299 }
300
301 private final Source minLevel;
302 private final Source maxLevel;
303 private final Fragment optFragment;
304 private final DiagKind optKind;
305
306 Feature(Source minLevel) {
307 this(minLevel, null, null);
308 }
309
310 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
311 this(minLevel, MAX, optFragment, optKind);
312 }
313
|
274 PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
275 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
276 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
277 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
278 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
279 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
280 REDUNDANT_STRICTFP(JDK17),
281 TYPE_ANNOTATIONS_ON_VAR_LAMBDA_PARAMETER(MIN, JDK19),
282 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
283 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
284 IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
285 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
286 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
287 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
288 FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
289 MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
290 JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
291 PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
292 ERASE_POLY_SIG_RETURN_TYPE(JDK24),
293 CAPTURE_MREF_RETURN_TYPE(JDK26),
294 REFLECT_METHODS(JDK22, Fragments.FeatureReflectMethods, DiagKind.NORMAL),
295 ;
296
297 enum DiagKind {
298 NORMAL,
299 PLURAL;
300 }
301
302 private final Source minLevel;
303 private final Source maxLevel;
304 private final Fragment optFragment;
305 private final DiagKind optKind;
306
307 Feature(Source minLevel) {
308 this(minLevel, null, null);
309 }
310
311 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
312 this(minLevel, MAX, optFragment, optKind);
313 }
314
|