< prev index next >

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

Print this page

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













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

239         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
240         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
241         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
242         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
243         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
244         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
245         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
246         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
247         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
248         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
249         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
250         REDUNDANT_STRICTFP(JDK17),
251         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
252         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
253         STRING_TEMPLATES(JDK21, Fragments.FeatureStringTemplates, DiagKind.PLURAL),
254         IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
255         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
256         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
257         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
258         SUPER_INIT(JDK22, Fragments.FeatureSuperInit, DiagKind.NORMAL),

259         ;
260 
261         enum DiagKind {
262             NORMAL,
263             PLURAL;
264         }
265 
266         private final Source minLevel;
267         private final Source maxLevel;
268         private final Fragment optFragment;
269         private final DiagKind optKind;
270 
271         Feature(Source minLevel) {
272             this(minLevel, null, null);
273         }
274 
275         Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
276             this(minLevel, MAX, optFragment, optKind);
277         }
278 

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

252         SWITCH_MULTIPLE_CASE_LABELS(JDK14, Fragments.FeatureMultipleCaseLabels, DiagKind.PLURAL),
253         SWITCH_RULE(JDK14, Fragments.FeatureSwitchRules, DiagKind.PLURAL),
254         SWITCH_EXPRESSION(JDK14, Fragments.FeatureSwitchExpressions, DiagKind.PLURAL),
255         NO_TARGET_ANNOTATION_APPLICABILITY(JDK14),
256         TEXT_BLOCKS(JDK15, Fragments.FeatureTextBlocks, DiagKind.PLURAL),
257         PATTERN_MATCHING_IN_INSTANCEOF(JDK16, Fragments.FeaturePatternMatchingInstanceof, DiagKind.NORMAL),
258         REIFIABLE_TYPES_INSTANCEOF(JDK16, Fragments.FeatureReifiableTypesInstanceof, DiagKind.PLURAL),
259         RECORDS(JDK16, Fragments.FeatureRecords, DiagKind.PLURAL),
260         SEALED_CLASSES(JDK17, Fragments.FeatureSealedClasses, DiagKind.PLURAL),
261         CASE_NULL(JDK21, Fragments.FeatureCaseNull, DiagKind.NORMAL),
262         PATTERN_SWITCH(JDK21, Fragments.FeaturePatternSwitch, DiagKind.PLURAL),
263         REDUNDANT_STRICTFP(JDK17),
264         UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL),
265         RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL),
266         STRING_TEMPLATES(JDK21, Fragments.FeatureStringTemplates, DiagKind.PLURAL),
267         IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL),
268         WARN_ON_ILLEGAL_UTF8(MIN, JDK21),
269         UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL),
270         PRIMITIVE_PATTERNS(JDK23, Fragments.FeaturePrimitivePatterns, DiagKind.PLURAL),
271         SUPER_INIT(JDK22, Fragments.FeatureSuperInit, DiagKind.NORMAL),
272         VALUE_CLASSES(JDK22, Fragments.FeatureValueClasses, DiagKind.PLURAL),
273         ;
274 
275         enum DiagKind {
276             NORMAL,
277             PLURAL;
278         }
279 
280         private final Source minLevel;
281         private final Source maxLevel;
282         private final Fragment optFragment;
283         private final DiagKind optKind;
284 
285         Feature(Source minLevel) {
286             this(minLevel, null, null);
287         }
288 
289         Feature(Source minLevel, Fragment optFragment, DiagKind optKind) {
290             this(minLevel, MAX, optFragment, optKind);
291         }
292 
< prev index next >