< prev index next >

src/java.compiler/share/classes/javax/lang/model/SourceVersion.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 53,63 **** * 1.4: assert * 1.5: annotations, generics, autoboxing, var-args... * 1.6: no changes * 1.7: diamond syntax, try-with-resources, etc. * 1.8: lambda expressions and default methods ! * 9: To be determined */ /** * The original version. * --- 53,63 ---- * 1.4: assert * 1.5: annotations, generics, autoboxing, var-args... * 1.6: no changes * 1.7: diamond syntax, try-with-resources, etc. * 1.8: lambda expressions and default methods ! * 9: modules, small cleanups to 1.7 and 1.8 changes */ /** * The original version. *
*** 143,152 **** --- 143,155 ---- /** * The version recognized by the Java Platform, Standard Edition * 9. * + * Additions in this release include modules and removal of a + * single underscore from the set of legal identifier names. + * * @since 9 */ RELEASE_9; // Note that when adding constants for newer releases, the
*** 242,288 **** * @return {@code true} if this string is a * syntactically valid name, {@code false} otherwise. * @jls 6.2 Names and Identifiers */ public static boolean isName(CharSequence name) { String id = name.toString(); for(String s : id.split("\\.", -1)) { ! if (!isIdentifier(s) || isKeyword(s)) return false; } return true; } - private final static Set<String> keywords; - static { - Set<String> s = new HashSet<>(); - String [] kws = { - "abstract", "continue", "for", "new", "switch", - "assert", "default", "if", "package", "synchronized", - "boolean", "do", "goto", "private", "this", - "break", "double", "implements", "protected", "throw", - "byte", "else", "import", "public", "throws", - "case", "enum", "instanceof", "return", "transient", - "catch", "extends", "int", "short", "try", - "char", "final", "interface", "static", "void", - "class", "finally", "long", "strictfp", "volatile", - "const", "float", "native", "super", "while", - // literals - "null", "true", "false" - }; - for(String kw : kws) - s.add(kw); - keywords = Collections.unmodifiableSet(s); - } - /** * Returns whether or not {@code s} is a keyword or literal in the * latest source version. * * @param s the string to check * @return {@code true} if {@code s} is a keyword or literal, {@code false} otherwise. */ public static boolean isKeyword(CharSequence s) { ! return keywords.contains(s.toString()); } } --- 245,353 ---- * @return {@code true} if this string is a * syntactically valid name, {@code false} otherwise. * @jls 6.2 Names and Identifiers */ public static boolean isName(CharSequence name) { + return isName(name, latest()); + } + + /** + * Returns whether or not {@code name} is a syntactically valid + * qualified name in the given source version. Unlike {@link + * #isIdentifier isIdentifier}, this method returns {@code false} + * for keywords and literals. + * + * @param name the string to check + * @param version the version to use + * @return {@code true} if this string is a + * syntactically valid name, {@code false} otherwise. + * @jls 6.2 Names and Identifiers + * @since 9 + */ + public static boolean isName(CharSequence name, SourceVersion version) { String id = name.toString(); for(String s : id.split("\\.", -1)) { ! if (!isIdentifier(s) || isKeyword(s, version)) return false; } return true; } /** * Returns whether or not {@code s} is a keyword or literal in the * latest source version. * * @param s the string to check * @return {@code true} if {@code s} is a keyword or literal, {@code false} otherwise. */ public static boolean isKeyword(CharSequence s) { ! return isKeyword(s, latest()); ! } ! ! /** ! * Returns whether or not {@code s} is a keyword or literal in the ! * given source version. ! * ! * @param s the string to check ! * @param version the version to use ! * @return {@code true} if {@code s} is a keyword or literal, {@code false} otherwise. ! * @since 9 ! */ ! public static boolean isKeyword(CharSequence s, SourceVersion version) { ! String id = s.toString(); ! switch(id) { ! // A trip through history ! case "strictfp": ! return version.compareTo(RELEASE_2) >= 0; ! ! case "assert": ! return version.compareTo(RELEASE_4) >= 0; ! ! case "enum": ! return version.compareTo(RELEASE_5) >= 0; ! ! case "_": ! return version.compareTo(RELEASE_9) >= 0; ! ! // Keywords common across versions ! ! // Modifiers ! case "public": case "protected": case "private": ! case "abstract": case "static": case "final": ! case "transient": case "volatile": case "synchronized": ! case "native": ! ! // Declarations ! case "class": case "interface": case "extends": ! case "package": case "throws": case "implements": ! ! // Primitive types and void ! case "boolean": case "byte": case "char": ! case "short": case "int": case "long": ! case "float": case "double": ! case "void": ! ! // Control flow ! case "if": case "else": ! case "try": case "catch": case "finally": ! case "do": case "while": ! case "for": case "continue": ! case "switch": case "case": case "default": ! case "break": case "throw": case "return": ! ! // Other keywords ! case "this": case "new": case "super": ! case "import": case "instanceof": ! ! // Forbidden! ! case "goto": case "const": ! ! // literals ! case "null": case "true": case "false": ! return true; ! ! default: ! return false; ! } } }
< prev index next >