< prev index next >

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

Print this page

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













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

255         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
256         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
257         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
258         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
259         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
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         }

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

268         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
269         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
270         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
271         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
272         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
273         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
274         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
275         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
276         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
277         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
278         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
279         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
280         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
281         REDUNDANT_STRICTFP(JDK17),
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         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
289         FLEXIBLE_CONSTRUCTORS(JDK25, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
290         MODULE_IMPORTS(JDK25, Fragments.FeatureModuleImports, DiagKind.PLURAL),
291         JAVA_BASE_TRANSITIVE(JDK25, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
292         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
293         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
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);
308         }
< prev index next >