Add Delegator support to the Java backend

This Delegator can be used as a wrapper around an interface of the same
type.
The Java Delegator class is gated behind the @JavaDelegator annotation.
The code is only generated when the annotation is present. This saves
code size for all of the interfaces that don't use this.

Test: atest aidl_integration_test aidl_unittests
Bug:198785815

Change-Id: I5231afd6f32c99e3af34a58eca5ad4a643ea04da
diff --git a/aidl_language.h b/aidl_language.h
index 226d8e3..9b16920 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -234,6 +234,7 @@
     JAVA_PASSTHROUGH,
     JAVA_DERIVE,
     JAVA_DEFAULT,
+    JAVA_DELEGATOR,
     JAVA_ONLY_IMMUTABLE,
     JAVA_SUPPRESS_LINT,
     FIXED_SIZE,
@@ -356,6 +357,7 @@
   bool IsHide() const;
   bool JavaDerive(const std::string& method) const;
   bool IsJavaDefault() const;
+  bool IsJavaDelegator() const;
   std::string GetDescriptor() const;
 
   const AidlAnnotation* UnsupportedAppUsage() const;