Auto-generate java libraries for compatible packages.

Change-Id: I753f8bc5ab8ca6b5293c75b548897bbdec16aa65
Bug: 31221188
diff --git a/generateJava.cpp b/generateJava.cpp
index f10ae92..a3c4761 100644
--- a/generateJava.cpp
+++ b/generateJava.cpp
@@ -51,7 +51,8 @@
     arg->type().emitJavaReaderWriter(out, parcelObj, arg->name(), isReader);
 }
 
-status_t AST::generateJavaTypes(const std::string &outputPath) const {
+status_t AST::generateJavaTypes(
+        const std::string &outputPath, const char *limitToType) const {
     // Splits types.hal up into one java file per declared type.
 
     for (size_t i = 0; i < mRootScope->countTypes(); ++i) {
@@ -62,6 +63,10 @@
             continue;
         }
 
+        if ((limitToType != nullptr) && typeName != limitToType) {
+            continue;
+        }
+
         std::string path = outputPath;
         path.append(mCoordinator->convertPackageRootToPath(mPackage));
         path.append(mCoordinator->getPackagePath(mPackage, true /* relative */));
@@ -99,14 +104,9 @@
     return OK;
 }
 
-status_t AST::generateJava(const std::string &outputPath) const {
-    std::string ifaceName;
-    if (!AST::isInterface(&ifaceName)) {
-        return generateJavaTypes(outputPath);
-    }
-
-    const Interface *iface = mRootScope->getInterface();
-    if (!iface->isJavaCompatible()) {
+status_t AST::generateJava(
+        const std::string &outputPath, const char *limitToType) const {
+    if (!isJavaCompatible()) {
         fprintf(stderr,
                 "ERROR: This interface is not Java compatible. The Java backend"
                 " does NOT support union types or native handles.\n");
@@ -114,6 +114,13 @@
         return UNKNOWN_ERROR;
     }
 
+    std::string ifaceName;
+    if (!AST::isInterface(&ifaceName)) {
+        return generateJavaTypes(outputPath, limitToType);
+    }
+
+    const Interface *iface = mRootScope->getInterface();
+
     // cut off the leading 'I'.
     const std::string baseName = ifaceName.substr(1);