< 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;

261         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
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         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
276         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
277         IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
278         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
279         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
280         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),

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

274         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
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         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
289         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
290         IMPLICIT_CLASSES(JDK25, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
291         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
292         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
293         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
294         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
295         FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
296         MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
297         JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
298         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
299         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
300         CAPTURE_MREF_RETURN_TYPE(JDK26),
301         ;
302 
303         enum DiagKind {
304             NORMAL,
305             PLURAL;
306         }
307 
308         private final Source minLevel;
309         private final Source maxLevel;
310         private final Fragment optFragment;
311         private final DiagKind optKind;
312 
313         Feature(Source minLevel) {
314             this(minLevel, null, null);
< prev index next >