diff options
author | gjoranv <gv@oath.com> | 2017-08-31 15:35:01 +0200 |
---|---|---|
committer | gjoranv <gv@oath.com> | 2017-08-31 16:42:00 +0200 |
commit | f6ec274aab8d1b4d2ac25c104bc5a603dc4156ff (patch) | |
tree | 1bb34e8b61d43516100949def824a28ec3523219 /configgen/src/main | |
parent | b3a4db45c7fae896a2d5e9ae3fbf2b7fd072f7c9 (diff) |
Rewrite ConfigGenerator.createClassName to Java.
- In new class ConfiggenUtil.
- This allows using the function without loading classes from
scala-xml.
Diffstat (limited to 'configgen/src/main')
3 files changed, 48 insertions, 17 deletions
diff --git a/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java b/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java new file mode 100644 index 00000000000..a7a3eb718a3 --- /dev/null +++ b/configgen/src/main/java/com/yahoo/config/codegen/ConfiggenUtil.java @@ -0,0 +1,43 @@ +package com.yahoo.config.codegen; + +import java.util.Arrays; +import java.util.stream.Collectors; + +/** + * @author gjoranv + */ +public class ConfiggenUtil { + + /** + * Create class name from def name + * @param defName The file name without the '.def' suffix + */ + public static String createClassName(String defName) { + String className = Arrays.stream(defName.split("-")) + .map(ConfiggenUtil::capitalize) + .collect(Collectors.joining()) + + "Config"; + + if (! isLegalJavaIdentifier(className)) + throw new CodegenRuntimeException("Illegal config definition file name '" + defName + + "'. Must be a legal Java identifier."); + + return className; + } + + private static String capitalize(String in) { + StringBuilder sb = new StringBuilder(in); + sb.setCharAt(0, Character.toTitleCase(in.charAt(0))); + return sb.toString(); + } + + private static boolean isLegalJavaIdentifier(String name) { + if (name.isEmpty()) return false; + if (! Character.isJavaIdentifierStart(name.charAt(0))) return false; + + for (char c : name.substring(1).toCharArray()) { + if (! Character.isJavaIdentifierPart(c)) return false; + } + return true; + } +} diff --git a/configgen/src/main/scala/com/yahoo/config/codegen/ConfigGenerator.scala b/configgen/src/main/scala/com/yahoo/config/codegen/ConfigGenerator.scala index 7ea07762c01..b4a19ea431d 100644 --- a/configgen/src/main/scala/com/yahoo/config/codegen/ConfigGenerator.scala +++ b/configgen/src/main/scala/com/yahoo/config/codegen/ConfigGenerator.scala @@ -2,11 +2,11 @@ package com.yahoo.config.codegen +import com.yahoo.config.codegen.BuilderGenerator.getBuilder +import com.yahoo.config.codegen.ConfiggenUtil.createClassName +import com.yahoo.config.codegen.JavaClassBuilder.Indentation import com.yahoo.config.codegen.LeafCNode._ import com.yahoo.config.codegen.ReservedWords.{INTERNAL_PREFIX => InternalPrefix} -import JavaClassBuilder.Indentation -import BuilderGenerator.getBuilder -import util.parsing.combinator.JavaTokenParsers /** * @author gjoranv @@ -449,17 +449,4 @@ object ConfigGenerator { } } - /** - * Create class name from def name - * @param defName The file name without the '.def' suffix - */ - def createClassName(defName: String): String = { - val className = defName.split("-").map (_.capitalize).mkString + "Config" - val parser = new JavaTokenParsers {} - parser.parseAll(parser.ident, className) match { - case parser.NoSuccess(msg, _) => - throw new CodegenRuntimeException("Illegal config definition file name '" + defName + "': " + msg) - case success => success.get - } - } } diff --git a/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala b/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala index 518815d5a10..e03a6d3d04b 100644 --- a/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala +++ b/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala @@ -3,7 +3,8 @@ package com.yahoo.config.codegen import java.io.{File, FileNotFoundException, FileOutputStream, PrintStream} -import com.yahoo.config.codegen.ConfigGenerator.{createClassName, indentCode} +import com.yahoo.config.codegen.ConfigGenerator.indentCode +import com.yahoo.config.codegen.ConfiggenUtil.createClassName import com.yahoo.config.codegen.DefParser.DEFAULT_PACKAGE_PREFIX import scala.collection.JavaConverters._ |