Add generationFunctionForFileOrPackage
This removes a ton of duplicated code that has been bothering me.
Test: hidl_hash_test
Test: mma -j64 (runs hidl-gen targets)
Change-Id: Ib9918ce9b34c396862415448900b786179673e9b
diff --git a/main.cpp b/main.cpp
index 0118ece..03ae26e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -45,11 +45,15 @@
PASS_FULL
};
const std::string& name() { return mKey; }
- ValRes (*validate)(const FQName &, const std::string &language);
- status_t (*generate)(const FQName &fqName,
- const char *hidl_gen,
- Coordinator *coordinator,
- const std::string &outputDir);
+
+ using ValidationFunction = std::function<ValRes(const FQName &, const std::string &language)>;
+ using GenerationFunction = std::function<status_t(const FQName &fqName,
+ const char *hidl_gen,
+ Coordinator *coordinator,
+ const std::string &outputDir)>;
+
+ ValidationFunction validate;
+ GenerationFunction generate;
};
static status_t generateSourcesForFile(
@@ -138,6 +142,26 @@
return OK;
}
+OutputHandler::GenerationFunction generationFunctionForFileOrPackage(const std::string &language) {
+ return [language](const FQName &fqName,
+ const char *hidl_gen, Coordinator *coordinator,
+ const std::string &outputDir) -> status_t {
+ if (fqName.isFullyQualified()) {
+ return generateSourcesForFile(fqName,
+ hidl_gen,
+ coordinator,
+ outputDir,
+ language);
+ } else {
+ return generateSourcesForPackage(fqName,
+ hidl_gen,
+ coordinator,
+ outputDir,
+ language);
+ }
+ };
+}
+
static std::string makeLibraryName(const FQName &packageFQName) {
return packageFQName.string();
}
@@ -1132,45 +1156,13 @@
{"check",
OutputHandler::NOT_NEEDED /* mOutputMode */,
validateForSource,
- [](const FQName &fqName,
- const char *hidl_gen, Coordinator *coordinator,
- const std::string &outputDir) -> status_t {
- if (fqName.isFullyQualified()) {
- return generateSourcesForFile(fqName,
- hidl_gen,
- coordinator,
- outputDir,
- "check");
- } else {
- return generateSourcesForPackage(fqName,
- hidl_gen,
- coordinator,
- outputDir,
- "check");
- }
- }
+ generationFunctionForFileOrPackage("check")
},
{"c++",
OutputHandler::NEEDS_DIR /* mOutputMode */,
validateForSource,
- [](const FQName &fqName,
- const char *hidl_gen, Coordinator *coordinator,
- const std::string &outputDir) -> status_t {
- if (fqName.isFullyQualified()) {
- return generateSourcesForFile(fqName,
- hidl_gen,
- coordinator,
- outputDir,
- "c++");
- } else {
- return generateSourcesForPackage(fqName,
- hidl_gen,
- coordinator,
- outputDir,
- "c++");
- }
- }
+ generationFunctionForFileOrPackage("c++")
},
{"c++-headers",
@@ -1206,45 +1198,14 @@
{"c++-impl",
OutputHandler::NEEDS_DIR /* mOutputMode */,
validateForSource,
- [](const FQName &fqName,
- const char *hidl_gen, Coordinator *coordinator,
- const std::string &outputDir) -> status_t {
- if (fqName.isFullyQualified()) {
- return generateSourcesForFile(fqName,
- hidl_gen,
- coordinator,
- outputDir, "c++-impl");
- } else {
- return generateSourcesForPackage(fqName,
- hidl_gen,
- coordinator,
- outputDir, "c++-impl");
- }
- }
+ generationFunctionForFileOrPackage("c++-impl")
},
{"java",
OutputHandler::NEEDS_DIR /* mOutputMode */,
validateForSource,
- [](const FQName &fqName,
- const char *hidl_gen, Coordinator *coordinator,
- const std::string &outputDir) -> status_t {
- if (fqName.isFullyQualified()) {
- return generateSourcesForFile(fqName,
- hidl_gen,
- coordinator,
- outputDir,
- "java");
- }
- else {
- return generateSourcesForPackage(fqName,
- hidl_gen,
- coordinator,
- outputDir,
- "java");
- }
- }
+ generationFunctionForFileOrPackage("java")
},
{"java-constants",
@@ -1266,22 +1227,7 @@
{"vts",
OutputHandler::NEEDS_DIR /* mOutputMode */,
validateForSource,
- [](const FQName &fqName,
- const char * hidl_gen,
- Coordinator *coordinator,
- const std::string &outputDir) -> status_t {
- if (fqName.isFullyQualified()) {
- return generateSourcesForFile(fqName,
- hidl_gen,
- coordinator,
- outputDir, "vts");
- } else {
- return generateSourcesForPackage(fqName,
- hidl_gen,
- coordinator,
- outputDir, "vts");
- }
- }
+ generationFunctionForFileOrPackage("vts")
},
{"makefile",