branch develop updated (f25440a -> 985c6ca)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository i18n. See https://gitlab.nuiton.org/nuiton/i18n.git from f25440a Improve generateI18nEnumHelper by adding a way to generate also a description i18n key Fixes #4010 new 985c6ca Be able to generate enums i18n keys even if enum is not still compiled (Fixes #4011) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 985c6ca6605728847b1a869cbb4b5af1aae3ff8d Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 1 17:40:58 2016 +0200 Be able to generate enums i18n keys even if enum is not still compiled (Fixes #4011) Summary of changes: .../i18n/plugin/GenerateI18nEnumHelperMojo.java | 118 +++++++++++++++++---- 1 file changed, 100 insertions(+), 18 deletions(-) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository i18n. See https://gitlab.nuiton.org/nuiton/i18n.git commit 985c6ca6605728847b1a869cbb4b5af1aae3ff8d Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Sep 1 17:40:58 2016 +0200 Be able to generate enums i18n keys even if enum is not still compiled (Fixes #4011) --- .../i18n/plugin/GenerateI18nEnumHelperMojo.java | 118 +++++++++++++++++---- 1 file changed, 100 insertions(+), 18 deletions(-) diff --git a/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java b/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java index cd4d793..7930345 100644 --- a/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java +++ b/i18n-maven-plugin/src/main/java/org/nuiton/i18n/plugin/GenerateI18nEnumHelperMojo.java @@ -24,15 +24,26 @@ package org.nuiton.i18n.plugin; import com.google.common.base.Charsets; import com.google.common.io.Files; +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.misc.NotNull; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.nuiton.i18n.plugin.parser.java.Java8BaseVisitor; +import org.nuiton.i18n.plugin.parser.java.Java8Lexer; +import org.nuiton.i18n.plugin.parser.java.Java8Parser; import org.nuiton.plugin.PluginHelper; +import org.nuiton.util.FileUtil; import java.io.BufferedWriter; import java.io.File; +import java.io.IOException; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; @@ -79,8 +90,8 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { * * Example with enum {@code enum E { A,B }}, will generate i18n keys: * <ul> - * <li>prefixA</li> - * <li>prefixB</li> + * <li>prefixA</li> + * <li>prefixB</li> * </ul> */ @Parameter(property = "i18n.enumsWithLabel", required = true) @@ -91,10 +102,10 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { * * Example with enum {@code enum E { A,B }}, will generate i18n keys: * <ul> - * <li>prefixA</li> - * <li>prefixA.description</li> - * <li>prefixB</li> - * <li>prefixB.description</li> + * <li>prefixA</li> + * <li>prefixA.description</li> + * <li>prefixB</li> + * <li>prefixB.description</li> * </ul> */ @Parameter(property = "i18n.enumsWithLabelAndDescription", required = true) @@ -105,8 +116,8 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { * * Example with enum {@code enum E { A,B }}, will generate i18n keys: * <ul> - * <li>prefixA.description</li> - * <li>prefixB.description</li> + * <li>prefixA.description</li> + * <li>prefixB.description</li> * </ul> */ @Parameter(property = "i18n.enumsWithLabelAndDescription", required = true) @@ -190,22 +201,15 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { for (String anEnumType : allEnums) { - Class aClass = Class.forName(anEnumType); - getLog().info("Scan enum: " + aClass.getName()); - if (!aClass.isEnum()) { - throw new IllegalStateException("Type " + aClass.getName() + " is not an enum."); - } - boolean generateLabel = allLabelEnums.contains(anEnumType); boolean generateDescription = allDescriptionEnums.contains(anEnumType); - for (Object o : aClass.getEnumConstants()) { - Enum e = (Enum) o; + for (String name : getEnumConstants(anEnumType)) { if (generateLabel) { - writer.write(" n(\"" + prefix + aClass.getName() + "." + e.name() + "\");\n"); + writer.write(" n(\"" + prefix + anEnumType + "." + name + "\");\n"); } if (generateDescription) { - writer.write(" n(\"" + prefix + aClass.getName() + "." + e.name() + ".description\");\n"); + writer.write(" n(\"" + prefix + anEnumType + "." + name + ".description\");\n"); } } writer.write("\n"); @@ -222,4 +226,82 @@ public class GenerateI18nEnumHelperMojo extends AbstractI18nMojo { } + private Set<String> getEnumConstants(String anEnumType) throws ClassNotFoundException, IOException { + + getLog().info("Scan enum: " + anEnumType); + + Set<String> result = new TreeSet<>(); + + try { + Class aClass = Class.forName(anEnumType); + + if (!aClass.isEnum()) { + throw new IllegalStateException("Type " + aClass.getName() + " is not an enum."); + } + + for (Object o : aClass.getEnumConstants()) { + result.add(((Enum) o).name()); + } + + + } catch (ClassNotFoundException e) { + + // try with antlr4 + + File basedir = new File(new File(new File(getProject().getBasedir(), "src"), "main"), "java"); + File file = FileUtil.getFileFromFQN(basedir, anEnumType); + File javaFile = new File(file.getParentFile(), file.getName() + ".java"); + + if (javaFile.exists()) { + + String content = FileUtils.readFileToString(javaFile, "UTF-8"); + TokenStream tokenStream = new CommonTokenStream(new Java8Lexer(new ANTLRInputStream(content))); + Java8Parser parser = new Java8Parser(tokenStream); + + + // see http://stackoverflow.com/a/32918434/2038100 + //parser.setErrorHandler(new BailErrorStrategy()); + //parser.getInterpreter().setPredictionMode(PredictionMode.SLL); + //parser.getInterpreter().tail_call_preserves_sll = false; + parser.getInterpreter().enable_global_context_dfa = true; + + JavaParserVisitor visitor = new JavaParserVisitor(javaFile); + parser.compilationUnit().accept(visitor); + + Set<String> names = visitor.getNames(); + result.addAll(names); + + } + + } + + + return result; + + } + + protected class JavaParserVisitor extends Java8BaseVisitor<Void> { + + protected final Set<String> names; + + protected final File file; + + private JavaParserVisitor(File file) { + this.file = file; + names = new HashSet<String>(); + } + + public Set<String> getNames() { + return names; + } + + @Override + public Void visitEnumConstant(@NotNull Java8Parser.EnumConstantContext ctx) { + String text = ctx.getText(); + names.add(text); + return super.visitEnumConstant(ctx); + } + + } + } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm