238 IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
239 SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
240 SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
241 SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
242 NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
243 TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
244 PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
245 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
246 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
247 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
248 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
249 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
250 REDUNDANT_STRICTFP(JDK17),
251 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
252 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
253 IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
254 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
255 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
256 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
257 SUPER_INIT(JDK22, Fragments.FeatureSuperInit, DiagKind.NORMAL),
258 ;
259
260 enum DiagKind {
261 NORMAL,
262 PLURAL;
263 }
264
265 private final Source minLevel;
266 private final Source maxLevel;
267 private final Fragment optFragment;
268 private final DiagKind optKind;
269
270 Feature(Source minLevel) {
271 this(minLevel, null, null);
272 }
273
274 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
275 this(minLevel, MAX, optFragment, optKind);
276 }
277
|
238 IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
239 SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
240 SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
241 SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
242 NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
243 TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
244 PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
245 REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
246 RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
247 SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
248 CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
249 PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
250 REDUNDANT_STRICTFP(JDK17),
251 UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
252 RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
253 IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
254 WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
255 UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
256 PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
257 SUPER_INIT(JDK22, Fragments.FeatureSuperInit, DiagKind.NORMAL),
258 REFLECT_METHODS(JDK22, Fragments.FeatureReflectMethods, DiagKind.NORMAL),
259 ;
260
261 enum DiagKind {
262 NORMAL,
263 PLURAL;
264 }
265
266 private final Source minLevel;
267 private final Source maxLevel;
268 private final Fragment optFragment;
269 private final DiagKind optKind;
270
271 Feature(Source minLevel) {
272 this(minLevel, null, null);
273 }
274
275 Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
276 this(minLevel, MAX, optFragment, optKind);
277 }
278
|