< prev index next >

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

Print this page

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













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

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

263         FLEXIBLE_CONSTRUCTORS(JDK22, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
264         MODULE_IMPORTS(JDK23, Fragments.FeatureModuleImports, DiagKind.PLURAL),
265         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
266         ;
267 
268         enum DiagKind {
269             NORMAL,
270             PLURAL;
271         }
272 
273         private final Source minLevel;
274         private final Source maxLevel;
275         private final Fragment optFragment;
276         private final DiagKind optKind;
277 
278         Feature(Source minLevel) {
279             this(minLevel, null, null);
280         }
281 
282         Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {

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

256         VAR_SYNTAX_IMPLICIT_LAMBDAS(JDK11, Fragments.FeatureVarSyntaxInImplicitLambda, DiagKind.PLURAL),
257         IMPORT_ON_DEMAND_OBSERVABLE_PACKAGES(JDK1_2, JDK8),
258         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
259         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
260         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
261         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
262         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
263         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
264         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
265         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
266         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
267         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
268         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
269         REDUNDANT_STRICTFP(JDK17),
270         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
271         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
272         IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
273         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
274         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
275         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
276         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
277         FLEXIBLE_CONSTRUCTORS(JDK22, Fragments.FeatureFlexibleConstructors, DiagKind.NORMAL),
278         MODULE_IMPORTS(JDK23, Fragments.FeatureModuleImports, DiagKind.PLURAL),
279         PRIVATE_MEMBERS_IN_PERMITS_CLAUSE(JDK19),
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         }
295 
296         Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
< prev index next >