diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-11-11 21:31:44 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-11-11 21:31:44 +0000 |
commit | 1dfcc2e00372ec728a3ef2719a7990ff8ffc239b (patch) | |
tree | d9ae40ce9d818f4819076a5e75cb4b9099bd49d3 | |
parent | 6eb082df470c38b44fb8915cf1b9278fee7a9cc5 (diff) | |
parent | 027115fdabeb51606ac835d21b98a371c0c54eff (diff) | |
download | xsdc-android10-mainline-resolv-release.tar.gz |
Snap for 6001391 from 027115fdabeb51606ac835d21b98a371c0c54eff to qt-aml-resolv-releaseandroid-mainline-10.0.0_r8android10-mainline-resolv-release
Change-Id: Ic9eef5cfb8312b4a6b1726a25b16c153b340597a
-rw-r--r-- | build/xsdc.go | 6 | ||||
-rw-r--r-- | src/com/android/xsdc/Main.java | 3 | ||||
-rw-r--r-- | src/com/android/xsdc/cpp/CppCodeGenerator.java | 35 | ||||
-rw-r--r-- | src/com/android/xsdc/cpp/Utils.java | 2 |
4 files changed, 27 insertions, 19 deletions
diff --git a/build/xsdc.go b/build/xsdc.go index d336b53..f66476b 100644 --- a/build/xsdc.go +++ b/build/xsdc.go @@ -143,9 +143,9 @@ func (module *xsdConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) }, }) - pkgName = strings.Replace(pkgName, ".", "_", -1) - module.genOutputs_c = android.PathForModuleGen(ctx, "cpp", pkgName+".cpp") - module.genOutputs_h = android.PathForModuleGen(ctx, "cpp", "include/"+pkgName+".h") + filenameStem := strings.Replace(pkgName, ".", "_", -1) + module.genOutputs_c = android.PathForModuleGen(ctx, "cpp", filenameStem+".cpp") + module.genOutputs_h = android.PathForModuleGen(ctx, "cpp", "include/"+filenameStem+".h") module.genOutputDir = android.PathForModuleGen(ctx, "cpp", "include") ctx.Build(pctx, android.BuildParams{ diff --git a/src/com/android/xsdc/Main.java b/src/com/android/xsdc/Main.java index b0fe084..b8f6dd3 100644 --- a/src/com/android/xsdc/Main.java +++ b/src/com/android/xsdc/Main.java @@ -105,8 +105,7 @@ public class Main { File includeDir = new File(Paths.get(outDir, "include").toString()); includeDir.mkdirs(); FileSystem fs = new FileSystem(new File(outDir)); - CppCodeGenerator cppCodeGenerator = new CppCodeGenerator(xmlSchema, - packageName.replace(".", "_")); + CppCodeGenerator cppCodeGenerator = new CppCodeGenerator(xmlSchema, packageName); cppCodeGenerator.print(fs); } } diff --git a/src/com/android/xsdc/cpp/CppCodeGenerator.java b/src/com/android/xsdc/cpp/CppCodeGenerator.java index 7a2ca5a..9f9ef7f 100644 --- a/src/com/android/xsdc/cpp/CppCodeGenerator.java +++ b/src/com/android/xsdc/cpp/CppCodeGenerator.java @@ -35,16 +35,16 @@ import javax.xml.namespace.QName; public class CppCodeGenerator { private XmlSchema xmlSchema; - private String fileName; + private String pkgName; private Map<String, CppSimpleType> cppSimpleTypeMap; private CodeWriter cppFile; private CodeWriter headerFile; private boolean hasAttr; - public CppCodeGenerator(XmlSchema xmlSchema, String fileName) + public CppCodeGenerator(XmlSchema xmlSchema, String pkgName) throws CppCodeGeneratorException { this.xmlSchema = xmlSchema; - this.fileName = fileName; + this.pkgName = pkgName; // class naming validation { @@ -92,11 +92,14 @@ public class CppCodeGenerator { public void print(FileSystem fs) throws CppCodeGeneratorException, IOException { // cpp file, headr file init - cppFile = new CodeWriter(fs.getPrintWriter(fileName + ".cpp")); - headerFile = new CodeWriter(fs.getPrintWriter("include/" + fileName + ".h")); - - headerFile.printf("#ifndef %s_H\n", fileName.toUpperCase()); - headerFile.printf("#define %s_H\n\n", fileName.toUpperCase()); + String cppFileName = pkgName.replace(".", "_") + ".cpp"; + String hFileName = pkgName.replace(".", "_") + ".h"; + cppFile = new CodeWriter(fs.getPrintWriter(cppFileName)); + headerFile = new CodeWriter(fs.getPrintWriter("include/" + hFileName)); + + String headerMacro = hFileName.toUpperCase().replace(".", "_"); + headerFile.printf("#ifndef %s\n", headerMacro); + headerFile.printf("#define %s\n\n", headerMacro); headerFile.printf("#include <libxml/parser.h>\n"); headerFile.printf("#include <libxml/xinclude.h>\n\n"); headerFile.printf("#include <map>\n"); @@ -104,15 +107,21 @@ public class CppCodeGenerator { headerFile.printf("#include <string>\n"); headerFile.printf("#include <vector>\n\n"); - cppFile.printf("#define LOG_TAG \"%s\"\n\n", fileName); + cppFile.printf("#define LOG_TAG \"%s\"\n\n", pkgName); cppFile.printf("#include <android/log.h>\n"); cppFile.printf("#include <android-base/strings.h>\n\n"); cppFile.printf("#include <libxml/parser.h>\n"); cppFile.printf("#include <libxml/xinclude.h>\n\n"); - cppFile.printf("#include \"%s.h\"\n\n",fileName); + cppFile.printf("#include \"%s\"\n\n", hFileName); List<String> namespace = new java.util.ArrayList<>(); - for (String token : fileName.split("_")) { + for (String token : pkgName.split("\\.")) { + if (token.isEmpty()) { + continue; + } + if (Character.isDigit(token.charAt(0))) { + token = "_" + token; + } namespace.add(token); headerFile.printf("namespace %s {\n", token); cppFile.printf("namespace %s {\n", token); @@ -148,7 +157,7 @@ public class CppCodeGenerator { cppFile.printf("} // %s\n", token); } - headerFile.printf("#endif // %s_H\n",fileName.toUpperCase().replace(".", "_")); + headerFile.printf("#endif // %s\n", headerMacro); cppFile.close(); headerFile.close(); } @@ -436,7 +445,7 @@ public class CppCodeGenerator { + "}\n\n"); } - String className = Utils.toClassName(fileName); + String className = Utils.toClassName(pkgName); boolean isMultiRootElement = xmlSchema.getElementMap().values().size() > 1; for (XsdElement element : xmlSchema.getElementMap().values()) { diff --git a/src/com/android/xsdc/cpp/Utils.java b/src/com/android/xsdc/cpp/Utils.java index b76a835..d225114 100644 --- a/src/com/android/xsdc/cpp/Utils.java +++ b/src/com/android/xsdc/cpp/Utils.java @@ -66,7 +66,7 @@ class Utils { static String toClassName(String name) throws CppCodeGeneratorException { String trimmed = toCamelCase( - name.replaceAll("[^A-Za-z0-9_-]", "").replaceAll("-","_").split("_")); + name.replaceAll("[^A-Za-z0-9_-]", "").replaceAll("[\\.-]", "_").split("_")); if (trimmed.isEmpty() || Character.isDigit(trimmed.charAt(0))) { throw new CppCodeGeneratorException( String.format("cannot convert to a class name : %s", name)); |