< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java

Print this page

201     }
202 
203     private Source(String name) {
204         this.name = name;
205     }
206 
207     public static final Source MIN = Source.JDK8;
208 
209     private static final Source MAX = values()[values().length - 1];
210 
211     public static final Source DEFAULT = MAX;
212 
213     public static Source lookup(String name) {
214         return tab.get(name);
215     }
216 
217     public boolean isSupported() {
218         return this.compareTo(MIN) >= 0;
219     }
220 













221     public Target requiredTarget() {
222         return switch(this) {
223         case JDK28  -> Target.JDK1_28;
224         case JDK27  -> Target.JDK1_27;
225         case JDK26  -> Target.JDK1_26;
226         case JDK25  -> Target.JDK1_25;
227         case JDK24  -> Target.JDK1_24;
228         case JDK23  -> Target.JDK1_23;
229         case JDK22  -> Target.JDK1_22;
230         case JDK21  -> Target.JDK1_21;
231         case JDK20  -> Target.JDK1_20;
232         case JDK19  -> Target.JDK1_19;
233         case JDK18  -> Target.JDK1_18;
234         case JDK17  -> Target.JDK1_17;
235         case JDK16  -> Target.JDK1_16;
236         case JDK15  -> Target.JDK1_15;
237         case JDK14  -> Target.JDK1_14;
238         case JDK13  -> Target.JDK1_13;
239         case JDK12  -> Target.JDK1_12;
240         case JDK11  -> Target.JDK1_11;

268         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
269         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
270         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
271         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
272         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
273         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
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);

201     }
202 
203     private Source(String name) {
204         this.name = name;
205     }
206 
207     public static final Source MIN = Source.JDK8;
208 
209     private static final Source MAX = values()[values().length - 1];
210 
211     public static final Source DEFAULT = MAX;
212 
213     public static Source lookup(String name) {
214         return tab.get(name);
215     }
216 
217     public boolean isSupported() {
218         return this.compareTo(MIN) >= 0;
219     }
220 
221     public static boolean isSupported(Feature feature, int majorVersion) {
222         Source source = null;
223         for (Target target : Target.values()) {
224             if (majorVersion == target.majorVersion) {
225                 source = lookup(target.name);
226             }
227         }
228         if (source != null) {
229             return feature.allowedInSource(source);
230         }
231         return false;
232     }
233 
234     public Target requiredTarget() {
235         return switch(this) {
236         case JDK28  -> Target.JDK1_28;
237         case JDK27  -> Target.JDK1_27;
238         case JDK26  -> Target.JDK1_26;
239         case JDK25  -> Target.JDK1_25;
240         case JDK24  -> Target.JDK1_24;
241         case JDK23  -> Target.JDK1_23;
242         case JDK22  -> Target.JDK1_22;
243         case JDK21  -> Target.JDK1_21;
244         case JDK20  -> Target.JDK1_20;
245         case JDK19  -> Target.JDK1_19;
246         case JDK18  -> Target.JDK1_18;
247         case JDK17  -> Target.JDK1_17;
248         case JDK16  -> Target.JDK1_16;
249         case JDK15  -> Target.JDK1_15;
250         case JDK14  -> Target.JDK1_14;
251         case JDK13  -> Target.JDK1_13;
252         case JDK12  -> Target.JDK1_12;
253         case JDK11  -> Target.JDK1_11;

281         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
282         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
283         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
284         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
285         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
286         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
287         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
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         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
302         FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
303         MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
304         JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
305         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
306         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
307         CAPTURE_MREF_RETURN_TYPE(JDK26),
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);
< prev index next >