Accept @Enforce on interface definition

The @Enforce annotation may be used on interfaces in combination with
annotations at the method level. If both are present, both are verified.
For now, this is only implemented for the Java backend.

Move permission-related golden tests to its own directory.

Bug: 197828948
Test: atest --host aidl_unittests
Change-Id: I57fe072c616ddc2652bff911adbda1a79841742a
diff --git a/aidl_language.cpp b/aidl_language.cpp
index d924433..199689d 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -181,7 +181,7 @@
        {{"value", kStringArrayType, /* required= */ true}}},
       {AidlAnnotation::Type::ENFORCE,
        "Enforce",
-       CONTEXT_METHOD,
+       CONTEXT_TYPE_INTERFACE | CONTEXT_METHOD,
        {{"condition", kStringType, /* required= */ true}}},
   };
   return kSchemas;
@@ -442,14 +442,13 @@
 }
 
 // Parses the @Enforce annotation expression.
-std::unique_ptr<perm::Expression> AidlAnnotatable::EnforceExpression(
-    const AidlNode& context) const {
+std::unique_ptr<perm::Expression> AidlAnnotatable::EnforceExpression() const {
   auto annot = GetAnnotation(annotations_, AidlAnnotation::Type::ENFORCE);
   if (annot) {
     auto perm_expr = annot->EnforceExpression();
     if (!perm_expr.ok()) {
       // This should have been caught during validation.
-      AIDL_FATAL(context) << "Unable to parse @Enforce annotation: " << perm_expr.error();
+      AIDL_FATAL(this) << "Unable to parse @Enforce annotation: " << perm_expr.error();
     }
     return std::move(perm_expr.value());
   }