All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tscfg.generators.java.javaUtil.scala Maven / Gradle / Ivy

The newest version!
package tscfg.generators.java

import tscfg.util

object javaUtil {

  /**
    * Returns a valid Java identifier from the given symbol:
    *
    * - appends a '_' in case the symbol is a java keyword or special literal ("null", "true", "false");
    * - otherwise, prepends a '_' in case the symbol is numerical literal;
    * - otherwise, returns the given symbol if already a valid java identifier;
    * - otherwise, prefixes the symbol with '_' if first character is valid but not at first position, and
    *   replaces any character that cannot be part of a java identifier with '_'.
    */
  def javaIdentifier(symbol: String): String = {
    if (javaKeywords.contains(symbol))
      symbol + "_"
    else if (isJavaIdentifier(symbol))
      symbol
    else {
      val c0 = symbol.charAt(0)
      if (Character.isDigit(c0))
        "_" + symbol
      else {
        val first: String = if (Character.isJavaIdentifierStart(c0)) String.valueOf(c0)
        else if (Character.isJavaIdentifierPart(c0)) "_" + c0 else "_"
        val rest = symbol.substring(1) map { c =>
          if (Character.isJavaIdentifierPart(c)) c else '_'
        }
        first + rest
      }
    }
  }

  def isJavaIdentifier(symbol: String): Boolean = {
    Character.isJavaIdentifierStart(symbol.charAt(0)) &&
      symbol.substring(1).forall(Character.isJavaIdentifierPart)
  }

  def getClassName(symbol:String): String = util.upperFirst(javaIdentifier(symbol))

  /**
    * Set of java keywords plus the literals "null", "true", "false".
    * (from Sect 3.9 of the Java Language Spec, Java SE 8 Edition)
    */
  val javaKeywords: List[String] = List(
    "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",

    "null",     "true",     "false"
  )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy