< prev index next >

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

Print this page

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













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

262         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
263         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
264         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
265         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
266         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
267         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
268         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
269         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
270         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
271         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
272         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
273         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
274         REDUNDANT_STRICTFP(JDK17),
275         TYPE_ANNOTATIONS_ON_VAR_LAMBDA_PARAMETER(MIN, JDK19),
276         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
277         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
278         IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
279         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
280         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
281         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),

282         FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
283         MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
284         JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
285         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
286         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
287         CAPTURE_MREF_RETURN_TYPE(JDK26),
288         ;
289 
290         enum DiagKind {
291             NORMAL,
292             PLURAL;
293         }
294 
295         private final Source minLevel;
296         private final Source maxLevel;
297         private final Fragment optFragment;
298         private final DiagKind optKind;
299 
300         Feature(Source minLevel) {
301             this(minLevel, null, null);

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

275         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
276         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
277         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
278         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
279         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
280         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
281         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
282         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
283         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
284         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
285         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
286         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
287         REDUNDANT_STRICTFP(JDK17),
288         TYPE_ANNOTATIONS_ON_VAR_LAMBDA_PARAMETER(MIN, JDK19),
289         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
290         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
291         IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
292         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
293         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
294         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
295         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
296         FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
297         MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
298         JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
299         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
300         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
301         CAPTURE_MREF_RETURN_TYPE(JDK26),
302         ;
303 
304         enum DiagKind {
305             NORMAL,
306             PLURAL;
307         }
308 
309         private final Source minLevel;
310         private final Source maxLevel;
311         private final Fragment optFragment;
312         private final DiagKind optKind;
313 
314         Feature(Source minLevel) {
315             this(minLevel, null, null);
< prev index next >