src/share/classes/com/sun/tools/javac/code/Source.java
author jjg
Fri Jun 26 18:51:39 2009 -0700 (7 months ago)
changeset 304 03944ee4fac4
parent 27679eb8795a1de
child 3798109aa93b212
permissions -rw-r--r--
6843077: JSR 308: Annotations on types
Reviewed-by: jjg, mcimadamore, darcy
Contributed-by: mernst@cs.washington.edu, mali@csail.mit.edu, mpapi@csail.mit.edu
        1 /*
        2  * Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
        3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
        4  *
        5  * This code is free software; you can redistribute it and/or modify it
        6  * under the terms of the GNU General Public License version 2 only, as
        7  * published by the Free Software Foundation.  Sun designates this
        8  * particular file as subject to the "Classpath" exception as provided
        9  * by Sun in the LICENSE file that accompanied this code.
       10  *
       11  * This code is distributed in the hope that it will be useful, but WITHOUT
       12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       14  * version 2 for more details (a copy is included in the LICENSE file that
       15  * accompanied this code).
       16  *
       17  * You should have received a copy of the GNU General Public License version
       18  * 2 along with this work; if not, write to the Free Software Foundation,
       19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       20  *
       21  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       22  * CA 95054 USA or visit www.sun.com if you need additional information or
       23  * have any questions.
       24  */
       25 
       26 package com.sun.tools.javac.code;
       27 
       28 import com.sun.tools.javac.util.*;
       29 import com.sun.tools.javac.jvm.Target;
       30 import javax.lang.model.SourceVersion;
       31 import static javax.lang.model.SourceVersion.*;
       32 import java.util.*;
       33 
       34 /** The source language version accepted.
       35  *
       36  *  <p><b>This is NOT part of any API supported by Sun Microsystems.  If
       37  *  you write code that depends on this, you do so at your own risk.
       38  *  This code and its internal interfaces are subject to change or
       39  *  deletion without notice.</b>
       40  */
       41 public enum Source {
       42     /** 1.0 had no inner classes, and so could not pass the JCK. */
       43     // public static final Source JDK1_0 =              new Source("1.0");
       44 
       45     /** 1.1 did not have strictfp, and so could not pass the JCK. */
       46     // public static final Source JDK1_1 =              new Source("1.1");
       47 
       48     /** 1.2 introduced strictfp. */
       49     JDK1_2("1.2"),
       50 
       51     /** 1.3 is the same language as 1.2. */
       52     JDK1_3("1.3"),
       53 
       54     /** 1.4 introduced assert. */
       55     JDK1_4("1.4"),
       56 
       57     /** 1.5 introduced generics, attributes, foreach, boxing, static import,
       58      *  covariant return, enums, varargs, et al. */
       59     JDK1_5("1.5"),
       60 
       61     /** 1.6 reports encoding problems as errors instead of warnings. */
       62     JDK1_6("1.6"),
       63 
       64     /** 1.7 covers the to be determined language features that will be added in JDK 7. */
       65     JDK1_7("1.7");
       66 
       67     private static final Context.Key<Source> sourceKey
       68         = new Context.Key<Source>();
       69 
       70     public static Source instance(Context context) {
       71         Source instance = context.get(sourceKey);
       72         if (instance == null) {
       73             Options options = Options.instance(context);
       74             String sourceString = options.get("-source");
       75             if (sourceString != null) instance = lookup(sourceString);
       76             if (instance == null) instance = DEFAULT;
       77             context.put(sourceKey, instance);
       78         }
       79         return instance;
       80     }
       81 
       82     public final String name;
       83 
       84     private static Map<String,Source> tab = new HashMap<String,Source>();
       85     static {
       86         for (Source s : values()) {
       87             tab.put(s.name, s);
       88         }
       89         tab.put("5", JDK1_5); // Make 5 an alias for 1.5
       90         tab.put("6", JDK1_6); // Make 6 an alias for 1.6
       91         tab.put("7", JDK1_7); // Make 7 an alias for 1.7
       92     }
       93 
       94     private Source(String name) {
       95         this.name = name;
       96     }
       97 
       98     public static final Source DEFAULT = JDK1_7;
       99 
      100     public static Source lookup(String name) {
      101         return tab.get(name);
      102     }
      103 
      104     public Target requiredTarget() {
      105         if (this.compareTo(JDK1_7) >= 0) return Target.JDK1_7;
      106         if (this.compareTo(JDK1_6) >= 0) return Target.JDK1_6;
      107         if (this.compareTo(JDK1_5) >= 0) return Target.JDK1_5;
      108         if (this.compareTo(JDK1_4) >= 0) return Target.JDK1_4;
      109         return Target.JDK1_1;
      110     }
      111 
      112     /** Allow encoding errors, giving only warnings. */
      113     public boolean allowEncodingErrors() {
      114         return compareTo(JDK1_6) < 0;
      115     }
      116     public boolean allowAsserts() {
      117         return compareTo(JDK1_4) >= 0;
      118     }
      119     public boolean allowCovariantReturns() {
      120         return compareTo(JDK1_5) >= 0;
      121     }
      122     public boolean allowGenerics() {
      123         return compareTo(JDK1_5) >= 0;
      124     }
      125     public boolean allowEnums() {
      126         return compareTo(JDK1_5) >= 0;
      127     }
      128     public boolean allowForeach() {
      129         return compareTo(JDK1_5) >= 0;
      130     }
      131     public boolean allowStaticImport() {
      132         return compareTo(JDK1_5) >= 0;
      133     }
      134     public boolean allowBoxing() {
      135         return compareTo(JDK1_5) >= 0;
      136     }
      137     public boolean allowVarargs() {
      138         return compareTo(JDK1_5) >= 0;
      139     }
      140     public boolean allowAnnotations() {
      141         return compareTo(JDK1_5) >= 0;
      142     }
      143     // hex floating-point literals supported?
      144     public boolean allowHexFloats() {
      145         return compareTo(JDK1_5) >= 0;
      146     }
      147     public boolean allowAnonOuterThis() {
      148         return compareTo(JDK1_5) >= 0;
      149     }
      150     public boolean addBridges() {
      151         return compareTo(JDK1_5) >= 0;
      152     }
      153     public boolean enforceMandatoryWarnings() {
      154         return compareTo(JDK1_5) >= 0;
      155     }
      156     public boolean allowTypeAnnotations() {
      157         return compareTo(JDK1_7) >= 0;
      158     }
      159     public static SourceVersion toSourceVersion(Source source) {
      160         switch(source) {
      161         case JDK1_2:
      162             return RELEASE_2;
      163         case JDK1_3:
      164             return RELEASE_3;
      165         case JDK1_4:
      166             return RELEASE_4;
      167         case JDK1_5:
      168             return RELEASE_5;
      169         case JDK1_6:
      170             return RELEASE_6;
      171         case JDK1_7:
      172             return RELEASE_7;
      173         default:
      174             return null;
      175         }
      176     }
      177 }