EMMA Coverage Report (generated Thu Dec 06 15:52:10 GMT 2007)
[all classes][javax.lang.model]

COVERAGE SUMMARY FOR SOURCE FILE [SourceVersion.java]

nameclass, %method, %block, %line, %
SourceVersion.java0%   (0/1)0%   (0/10)0%   (0/445)0%   (0/45)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class SourceVersion0%   (0/1)0%   (0/10)0%   (0/445)0%   (0/45)
<static initializer> 0%   (0/1)0%   (0/328)0%   (0/16)
SourceVersion (String, int): void 0%   (0/1)0%   (0/5)0%   (0/1)
getLatestSupported (): SourceVersion 0%   (0/1)0%   (0/19)0%   (0/7)
isIdentifier (CharSequence): boolean 0%   (0/1)0%   (0/41)0%   (0/13)
isKeyword (CharSequence): boolean 0%   (0/1)0%   (0/7)0%   (0/2)
isName (CharSequence): boolean 0%   (0/1)0%   (0/32)0%   (0/5)
latest (): SourceVersion 0%   (0/1)0%   (0/2)0%   (0/1)
latestSupported (): SourceVersion 0%   (0/1)0%   (0/2)0%   (0/1)
valueOf (String): SourceVersion 0%   (0/1)0%   (0/5)0%   (0/1)
values (): SourceVersion [] 0%   (0/1)0%   (0/4)0%   (0/1)

1/*
2 * Copyright 2005-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 
26package javax.lang.model;
27 
28import java.util.Collections;
29import java.util.Set;
30import java.util.HashSet;
31 
32/**
33 * Source versions of the Java&trade; programming language.
34 *
35 * See <a
36 * href="http://java.sun.com/docs/books/jls/">http://java.sun.com/docs/books/jls/</a>
37 * for information on editions of <i>The Java&trade; Language
38 * Specification</i>, including updates and clarifications.
39 *
40 * <p>Note that additional source version constants will be added to
41 * model future releases of the language.
42 *
43 * @author Joseph D. Darcy
44 * @author Scott Seligman
45 * @author Peter von der Ah&eacute;
46 * @since 1.6
47 */
48public enum SourceVersion {
49    /*
50     * Summary of language evoluation
51     * 1.1: nested classes
52     * 1.2: strictfp
53     * 1.3: no changes
54     * 1.4: assert
55     * 1.5: annotations, generics, autoboxing, var-args...
56     * 1.6: no changes
57     */
58 
59    /**
60     * The original version.
61     *
62     * The language described in the first edition of <i>The
63     * Java&trade; Language Specification</i>.
64     */
65    RELEASE_0,
66 
67    /**
68     * The version recognized by the Java Platform 1.1.
69     *
70     * The language is {@code RELEASE_0} <a
71     * href="http://java.sun.com/docs/books/jls/first_edition/html/1.1Update.html">augmented</a>
72     * with nested classes.
73     */
74    RELEASE_1,
75 
76    /**
77     * The version recognized by the Java 2 Platform, Standard Edition,
78     * v 1.2.
79     *
80     * The language described in <i>The Java&trade; Language
81     * Specification, Second Edition</i>, which includes the {@code
82     * strictfp} modifier.
83     */
84    RELEASE_2,
85 
86    /**
87     * The version recognized by the Java 2 Platform, Standard Edition,
88     * v 1.3.
89     *
90     * No major changes from {@code RELEASE_2}.
91     */
92    RELEASE_3,
93 
94    /**
95     * The version recognized by the Java 2 Platform, Standard Edition,
96     * v 1.4.
97     *
98     * Added a simple assertion facility.
99     */
100    RELEASE_4,
101 
102    /**
103     * The version recognized by the Java 2 Platform, Standard
104     * Edition 5.0.
105     *
106     * The language described in <i>The Java&trade; Language
107     * Specification, Third Edition</i>.  First release to support
108     * generics, annotations, autoboxing, var-args, enhanced {@code
109     * for} loop, and hexadecimal floating-point literals.
110     */
111    RELEASE_5,
112 
113    /**
114     * The version recognized by the Java Platform, Standard Edition
115     * 6.
116     *
117     * No major changes from {@code RELEASE_5}.
118     */
119    RELEASE_6,
120 
121    /**
122     * The version recognized by the Java Platform, Standard Edition
123     * 7.
124     *
125     * @since 1.7
126     */
127    RELEASE_7;
128 
129    // Note that when adding constants for newer releases, the
130    // behavior of latest() and latestSupported() must be updated too.
131 
132    /**
133     * Returns the latest source version that can be modeled.
134     *
135     * @return the latest source version that can be modeled
136     */
137    public static SourceVersion latest() {
138        return RELEASE_7;
139    }
140 
141    private static final SourceVersion latestSupported = getLatestSupported();
142 
143    private static SourceVersion getLatestSupported() {
144        try {
145            String specVersion = System.getProperty("java.specification.version");
146            if ("1.7".equals(specVersion))
147                return RELEASE_7;
148            else if ("1.6".equals(specVersion))
149                return RELEASE_6;
150        } catch (SecurityException se) {}
151 
152        return RELEASE_5;
153    }
154 
155    /**
156     * Returns the latest source version fully supported by the
157     * current execution environment.  {@code RELEASE_5} or later must
158     * be returned.
159     *
160     * @return the latest source version that is fully supported
161     */
162    public static SourceVersion latestSupported() {
163        return latestSupported;
164    }
165 
166    /**
167     * Returns whether or not {@code name} is a syntactically valid
168     * identifier (simple name) or keyword in the latest source
169     * version.  The method returns {@code true} if the name consists
170     * of an initial character for which {@link
171     * Character#isJavaIdentifierStart(int)} returns {@code true},
172     * followed only by characters for which {@link
173     * Character#isJavaIdentifierPart(int)} returns {@code true}.
174     * This pattern matches regular identifiers, keywords, and the
175     * literals {@code "true"}, {@code "false"}, and {@code "null"}.
176     * The method returns {@code false} for all other strings.
177     *
178     * @param name the string to check
179     * @return {@code true} if this string is a
180     * syntactically valid identifier or keyword, {@code false}
181     * otherwise.
182     */
183    public static boolean isIdentifier(CharSequence name) {
184        String id = name.toString();
185 
186        if (id.length() == 0) {
187            return false;
188        }
189        int cp = id.codePointAt(0);
190        if (!Character.isJavaIdentifierStart(cp)) {
191            return false;
192        }
193        for (int i = Character.charCount(cp);
194                i < id.length();
195                i += Character.charCount(cp)) {
196            cp = id.codePointAt(i);
197            if (!Character.isJavaIdentifierPart(cp)) {
198                return false;
199            }
200        }
201        return true;
202    }
203 
204    /**
205     *  Returns whether or not {@code name} is a syntactically valid
206     *  qualified name in the latest source version.  Unlike {@link
207     *  #isIdentifier isIdentifier}, this method returns {@code false}
208     *  for keywords and literals.
209     *
210     * @param name the string to check
211     * @return {@code true} if this string is a
212     * syntactically valid name, {@code false} otherwise.
213     * @jls3 6.2 Names and Identifiers
214     */
215    public static boolean isName(CharSequence name) {
216        String id = name.toString();
217 
218        for(String s : id.split("\\.", -1)) {
219            if (!isIdentifier(s) || isKeyword(s))
220                return false;
221        }
222        return true;
223    }
224 
225    private final static Set<String> keywords;
226    static {
227        Set<String> s = new HashSet<String>();
228        String [] kws = {
229            "abstract", "continue",     "for",          "new",          "switch",
230            "assert",   "default",      "if",           "package",      "synchronized",
231            "boolean",  "do",           "goto",         "private",      "this",
232            "break",    "double",       "implements",   "protected",    "throw",
233            "byte",     "else",         "import",       "public",       "throws",
234            "case",     "enum",         "instanceof",   "return",       "transient",
235            "catch",    "extends",      "int",          "short",        "try",
236            "char",     "final",        "interface",    "static",       "void",
237            "class",    "finally",      "long",         "strictfp",     "volatile",
238            "const",    "float",        "native",       "super",        "while",
239            // literals
240            "null",     "true",         "false"
241        };
242        for(String kw : kws)
243            s.add(kw);
244        keywords = Collections.unmodifiableSet(s);
245    }
246 
247    /**
248     *  Returns whether or not {@code s} is a keyword or literal in the
249     *  latest source version.
250     *
251     * @param s the string to check
252     * @return {@code true} if {@code s} is a keyword or literal, {@code false} otherwise.
253     */
254    public static boolean isKeyword(CharSequence s) {
255        String keywordOrLiteral = s.toString();
256        return keywords.contains(keywordOrLiteral);
257    }
258}

[all classes][javax.lang.model]
EMMA 2.0.5312 (C) Vladimir Roubtsov