< prev index next >

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

Print this page

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













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

249         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
250         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
251         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
252         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
253         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
254         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
255         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
256         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
257         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
258         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
259         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
260         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
261         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
262         REDUNDANT_STRICTFP(JDK17),
263         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
264         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
265         IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
266         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
267         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
268         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),

269         FLEXIBLE_CONSTRUCTORS(JDK22, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
270         MODULE_IMPORTS(JDK23, Fragments.FeatureModuleImports, DiagKind.PLURAL),
271         JAVA_BASE_TRANSITIVE(JDK24, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
272         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
273         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
274         ;
275 
276         enum DiagKind {
277             NORMAL,
278             PLURAL;
279         }
280 
281         private final Source minLevel;
282         private final Source maxLevel;
283         private final Fragment optFragment;
284         private final DiagKind optKind;
285 
286         Feature(Source minLevel) {
287             this(minLevel, null, null);
288         }

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

262         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
263         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
264         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
265         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
266         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
267         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
268         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
269         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
270         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
271         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
272         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
273         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
274         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
275         REDUNDANT_STRICTFP(JDK17),
276         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
277         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
278         IMPLICIT_CLASSES(JDK21, 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         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
283         FLEXIBLE_CONSTRUCTORS(JDK22, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
284         MODULE_IMPORTS(JDK23, Fragments.FeatureModuleImports, DiagKind.PLURAL),
285         JAVA_BASE_TRANSITIVE(JDK24, Fragments.FeatureJavaBaseTransitive, DiagKind.PLURAL),
286         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
287         ERASE_POLY_SIG_RETURN_TYPE(JDK24),
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);
302         }
< prev index next >