Replace @BlazeRule with a getMetadata() method. This lets us avoid Java Reflection, and saves ~15% of initialization time in []RuleClassProvider.create().

Before change:
Over 14 samples,
average = 976
median = 969.9

After change:
Over 14 samples,
average = 811.5
median = 813.9

--
MOS_MIGRATED_REVID=89036261
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
index 769c010..0d6f5d6 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
@@ -16,7 +16,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.analysis.BlazeRule;
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.TriState;
@@ -204,13 +203,16 @@
       Class<? extends RuleDefinition> usingClass,
       Map<Class<? extends RuleDefinition>, Integer> visited,
       LinkedList<Class<? extends RuleDefinition>> toVisit) {
-    BlazeRule ann = usingClass.getAnnotation(BlazeRule.class);
-    if (ann != null) {
-      for (Class<? extends RuleDefinition> ancestor : ann.ancestors()) {
-        if (!visited.containsKey(ancestor)) {
-          toVisit.addLast(ancestor);
-          visited.put(ancestor, visited.get(usingClass) + 1);
-        }
+    RuleDefinition instance;
+    try {
+      instance = usingClass.newInstance();
+    } catch (IllegalAccessException | InstantiationException e) {
+      throw new IllegalStateException(e);
+    }
+    for (Class<? extends RuleDefinition> ancestor : instance.getMetadata().ancestors()) {
+      if (!visited.containsKey(ancestor)) {
+        toVisit.addLast(ancestor);
+        visited.put(ancestor, visited.get(usingClass) + 1);
       }
     }
   }