260 NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
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 ;
281
282 enum DiagKind {
283 NORMAL,
284 PLURAL;
285 }
286
287 private final Source minLevel;
288 private final Source maxLevel;
289 private final Fragment optFragment;
290 private final DiagKind optKind;
291
292 Feature(Source minLevel) {
293 this(minLevel, null, null);
294 }
295
296 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
297 this(minLevel, MAX, optFragment, optKind);
298 }
299
|
260 NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
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 REFLECT_METHODS(JDK22, Fragments.FeatureReflectMethods, DiagKind.NORMAL),
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
|