aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AutoValueRuleDefinitionMetadata.java180
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BlazeRule.java55
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java67
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleDefinition.java66
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java27
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelBaseRuleClasses.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java151
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelActionListenerRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelExtraActionRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelTestSuiteRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java104
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaPluginRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java54
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShBinaryRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShLibraryRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShRuleClasses.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShTestRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpArchiveRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpJarRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/LocalRepositoryRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/MavenJarRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewHttpArchiveRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewLocalRepositoryRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/WorkspaceBaseRule.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryRule.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionRule.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibraryRule.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleRule.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFrameworkRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImportRule.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptionsRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java181
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcXcodeprojRule.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/workspace/BindRule.java15
54 files changed, 1064 insertions, 504 deletions
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 769c010967..0d6f5d691a 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 @@ package com.google.devtools.build.docgen;
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 RuleDocumentationAttribute implements Comparable<RuleDocumentationAttribut
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);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AutoValueRuleDefinitionMetadata.java b/src/main/java/com/google/devtools/build/lib/analysis/AutoValueRuleDefinitionMetadata.java
new file mode 100644
index 0000000000..53568899fe
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AutoValueRuleDefinitionMetadata.java
@@ -0,0 +1,180 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * TODO(bazel-team): This file has been generated by @AutoValue, and copied here because we do not
+ * support @AutoValue yet. Remove this file and add @AutoValue annotations to RuleDefinition
+ * once possible.
+ */
+package com.google.devtools.build.lib.analysis;
+
+import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
+import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
+
+import java.util.List;
+
+import javax.annotation.Generated;
+
+@Generated("com.google.auto.value.processor.AutoValueProcessor")
+final class AutoValueRuleDefinitionMetadata extends RuleDefinition.Metadata {
+
+ private final String name;
+ private final RuleClassType type;
+ private final Class<? extends RuleConfiguredTargetFactory> factoryClass;
+ private final List<Class<? extends RuleDefinition>> ancestors;
+
+ private AutoValueRuleDefinitionMetadata(
+ String name,
+ RuleClassType type,
+ Class<? extends RuleConfiguredTargetFactory> factoryClass,
+ List<Class<? extends RuleDefinition>> ancestors) {
+ if (name == null) {
+ throw new NullPointerException("Null name");
+ }
+ this.name = name;
+ if (type == null) {
+ throw new NullPointerException("Null type");
+ }
+ this.type = type;
+ if (factoryClass == null) {
+ throw new NullPointerException("Null factoryClass");
+ }
+ this.factoryClass = factoryClass;
+ if (ancestors == null) {
+ throw new NullPointerException("Null ancestors");
+ }
+ this.ancestors = ancestors;
+ }
+
+ @Override
+ public String name() {
+ return name;
+ }
+
+ @Override
+ public RuleClassType type() {
+ return type;
+ }
+
+ @Override
+ public Class<? extends RuleConfiguredTargetFactory> factoryClass() {
+ return factoryClass;
+ }
+
+ @Override
+ public List<Class<? extends RuleDefinition>> ancestors() {
+ return ancestors;
+ }
+
+ @Override
+ public String toString() {
+ return "Metadata{"
+ + "name=" + name + ", "
+ + "type=" + type + ", "
+ + "factoryClass=" + factoryClass + ", "
+ + "ancestors=" + ancestors
+ + "}";
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (o instanceof RuleDefinition.Metadata) {
+ RuleDefinition.Metadata that = (RuleDefinition.Metadata) o;
+ return (this.name.equals(that.name()))
+ && (this.type.equals(that.type()))
+ && (this.factoryClass.equals(that.factoryClass()))
+ && (this.ancestors.equals(that.ancestors()));
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ int h = 1;
+ h *= 1000003;
+ h ^= name.hashCode();
+ h *= 1000003;
+ h ^= type.hashCode();
+ h *= 1000003;
+ h ^= factoryClass.hashCode();
+ h *= 1000003;
+ h ^= ancestors.hashCode();
+ return h;
+ }
+
+ static final class Builder extends RuleDefinition.Metadata.Builder {
+ private String name;
+ private RuleClassType type;
+ private Class<? extends RuleConfiguredTargetFactory> factoryClass;
+ private List<Class<? extends RuleDefinition>> ancestors;
+ Builder() {
+ }
+ Builder(RuleDefinition.Metadata source) {
+ name(source.name());
+ type(source.type());
+ factoryClass(source.factoryClass());
+ ancestors(source.ancestors());
+ }
+ @Override
+ public RuleDefinition.Metadata.Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+ @Override
+ public RuleDefinition.Metadata.Builder type(RuleClassType type) {
+ this.type = type;
+ return this;
+ }
+ @Override
+ public RuleDefinition.Metadata.Builder factoryClass(
+ Class<? extends RuleConfiguredTargetFactory> factoryClass) {
+ this.factoryClass = factoryClass;
+ return this;
+ }
+ @Override
+ public RuleDefinition.Metadata.Builder ancestors(
+ List<Class<? extends RuleDefinition>> ancestors) {
+ this.ancestors = ancestors;
+ return this;
+ }
+ @Override
+ public RuleDefinition.Metadata build() {
+ String missing = "";
+ if (name == null) {
+ missing += " name";
+ }
+ if (type == null) {
+ missing += " type";
+ }
+ if (factoryClass == null) {
+ missing += " factoryClass";
+ }
+ if (ancestors == null) {
+ missing += " ancestors";
+ }
+ if (!missing.isEmpty()) {
+ throw new IllegalStateException("Missing required properties:" + missing);
+ }
+ RuleDefinition.Metadata result = new AutoValueRuleDefinitionMetadata(
+ this.name,
+ this.type,
+ this.factoryClass,
+ this.ancestors);
+ return result;
+ }
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index a14cd5391d..4b7015f648 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -123,8 +123,6 @@ public class BaseRuleClasses {
/**
* A base rule for all test rules.
*/
- @BlazeRule(name = "$test_base_rule",
- type = RuleClassType.ABSTRACT)
public static final class TestBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -169,6 +167,14 @@ public class BaseRuleClasses {
.add(attr(":run_under", LABEL).cfg(DATA).value(RUN_UNDER))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$test_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
@@ -205,8 +211,6 @@ public class BaseRuleClasses {
/**
* Common parts of rules.
*/
- @BlazeRule(name = "$base_rule",
- type = RuleClassType.ABSTRACT)
public static final class BaseRule implements RuleDefinition {
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
@@ -234,14 +238,19 @@ public class BaseRuleClasses {
.add(attr(":action_listener", LABEL_LIST).cfg(HOST).value(ACTION_LISTENER))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Common ancestor class for all rules.
*/
- @BlazeRule(name = "$rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { BaseRule.class })
public static final class RuleBase implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -250,6 +259,14 @@ public class BaseRuleClasses {
.add(attr("data", LABEL_LIST).cfg(DATA).allowedFileTypes(FileTypeSet.ANY_FILE))
.build();
}
- }
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BaseRule.class)
+ .build();
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BlazeRule.java b/src/main/java/com/google/devtools/build/lib/analysis/BlazeRule.java
deleted file mode 100644
index c349e65b02..0000000000
--- a/src/main/java/com/google/devtools/build/lib/analysis/BlazeRule.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2014 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.analysis;
-
-import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
-import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * An annotation for rule classes.
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface BlazeRule {
- /**
- * The name of the rule, as it appears in the BUILD file. If it starts with
- * '$', the rule will be hidden from users and will only be usable from
- * inside Blaze.
- */
- String name();
-
- /**
- * The type of the rule. It can be an abstract rule, a normal rule or a test
- * rule. If the rule type is abstract, the configured class must not be set.
- */
- RuleClassType type() default RuleClassType.NORMAL;
-
- /**
- * The {@link RuleConfiguredTargetFactory} class that implements this rule. If the rule is
- * abstract, this must not be set.
- */
- Class<? extends RuleConfiguredTargetFactory> factoryClass()
- default RuleConfiguredTargetFactory.class;
-
- /**
- * The list of other rule classes this rule inherits from.
- */
- Class<? extends RuleDefinition>[] ancestors() default {};
-}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 26e0617454..ad3cdcd039 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -13,10 +13,11 @@
// limitations under the License.
package com.google.devtools.build.lib.analysis;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType.ABSTRACT;
import static com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType.TEST;
-import com.google.common.base.Preconditions;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@@ -46,7 +47,6 @@ import com.google.devtools.common.options.OptionsClassProvider;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -86,6 +86,8 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private final Map<String, Class<? extends RuleDefinition>> ruleDefinitionMap =
new HashMap<>();
private final Map<Class<? extends RuleDefinition>, RuleClass> ruleMap = new HashMap<>();
+ private final Map<Class<? extends RuleDefinition>, RuleDefinition> ruleDefinitionInstanceCache =
+ new HashMap<>();
private final Digraph<Class<? extends RuleDefinition>> dependencyGraph =
new Digraph<>();
private ConfigurationCollectionFactory configurationCollectionFactory;
@@ -106,11 +108,12 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
return this;
}
- public Builder addRuleDefinition(Class<? extends RuleDefinition> ruleDefinition) {
- dependencyGraph.createNode(ruleDefinition);
- BlazeRule annotation = ruleDefinition.getAnnotation(BlazeRule.class);
- for (Class<? extends RuleDefinition> ancestor : annotation.ancestors()) {
- dependencyGraph.addEdge(ancestor, ruleDefinition);
+ public Builder addRuleDefinition(RuleDefinition ruleDefinition) {
+ Class<? extends RuleDefinition> ruleDefinitionClass = ruleDefinition.getClass();
+ ruleDefinitionInstanceCache.put(ruleDefinitionClass, ruleDefinition);
+ dependencyGraph.createNode(ruleDefinitionClass);
+ for (Class<? extends RuleDefinition> ancestor : ruleDefinition.getMetadata().ancestors()) {
+ dependencyGraph.addEdge(ancestor, ruleDefinitionClass);
}
return this;
@@ -148,40 +151,38 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
}
private RuleClass commitRuleDefinition(Class<? extends RuleDefinition> definitionClass) {
- BlazeRule annotation = definitionClass.getAnnotation(BlazeRule.class);
- Preconditions.checkArgument(ruleClassMap.get(annotation.name()) == null, annotation.name());
-
- Preconditions.checkArgument(
- annotation.type() == ABSTRACT ^
- annotation.factoryClass() != RuleConfiguredTargetFactory.class);
- Preconditions.checkArgument(
- (annotation.type() != TEST) ||
- Arrays.asList(annotation.ancestors()).contains(
- BaseRuleClasses.TestBaseRule.class));
-
- RuleDefinition instance;
- try {
- instance = definitionClass.newInstance();
- } catch (IllegalAccessException | InstantiationException e) {
- throw new IllegalStateException(e);
- }
- RuleClass[] ancestorClasses = new RuleClass[annotation.ancestors().length];
- for (int i = 0; i < annotation.ancestors().length; i++) {
- ancestorClasses[i] = ruleMap.get(annotation.ancestors()[i]);
+ RuleDefinition instance = checkNotNull(ruleDefinitionInstanceCache.get(definitionClass),
+ "addRuleDefinition(new %s()) should be called before build()", definitionClass.getName());
+
+ RuleDefinition.Metadata metadata = instance.getMetadata();
+ checkArgument(ruleClassMap.get(metadata.name()) == null, metadata.name());
+
+ List<Class<? extends RuleDefinition>> ancestors = metadata.ancestors();
+
+ checkArgument(
+ metadata.type() == ABSTRACT ^ metadata.factoryClass()
+ != RuleConfiguredTargetFactory.class);
+ checkArgument(
+ (metadata.type() != TEST)
+ || ancestors.contains(BaseRuleClasses.TestBaseRule.class));
+
+ RuleClass[] ancestorClasses = new RuleClass[ancestors.size()];
+ for (int i = 0; i < ancestorClasses.length; i++) {
+ ancestorClasses[i] = ruleMap.get(ancestors.get(i));
if (ancestorClasses[i] == null) {
// Ancestors should have been initialized by now
- throw new IllegalStateException("Ancestor " + annotation.ancestors()[i] + " of "
- + annotation.name() + " is not initialized");
+ throw new IllegalStateException("Ancestor " + ancestors.get(i) + " of "
+ + metadata.name() + " is not initialized");
}
}
RuleConfiguredTargetFactory factory = null;
- if (annotation.type() != ABSTRACT) {
- factory = createFactory(annotation.factoryClass());
+ if (metadata.type() != ABSTRACT) {
+ factory = createFactory(metadata.factoryClass());
}
RuleClass.Builder builder = new RuleClass.Builder(
- annotation.name(), annotation.type(), false, ancestorClasses);
+ metadata.name(), metadata.type(), false, ancestorClasses);
builder.factory(factory);
RuleClass ruleClass = instance.build(builder, this);
ruleMap.put(definitionClass, ruleClass);
@@ -193,7 +194,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
public ConfiguredRuleClassProvider build() {
for (Node<Class<? extends RuleDefinition>> ruleDefinition :
- dependencyGraph.getTopologicalOrder()) {
+ dependencyGraph.getTopologicalOrder()) {
commitRuleDefinition(ruleDefinition.getLabel());
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinition.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinition.java
index c5e32e3f5c..77670d567a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinition.java
@@ -15,6 +15,12 @@
package com.google.devtools.build.lib.analysis;
import com.google.devtools.build.lib.packages.RuleClass;
+import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
+import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
/**
* This class is a common ancestor for every rule object.
@@ -36,4 +42,64 @@ public interface RuleDefinition {
* @return the {@link RuleClass} representing the rule.
*/
RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment);
+
+ /**
+ * Returns metadata for this rule.
+ */
+ Metadata getMetadata();
+
+ /**
+ * Value class that contains the name, type, ancestors of a rule, as well as a reference to the
+ * configured target factory.
+ */
+ public abstract static class Metadata {
+ /**
+ * The name of the rule, as it appears in the BUILD file. If it starts with
+ * '$', the rule will be hidden from users and will only be usable from
+ * inside Blaze.
+ */
+ public abstract String name();
+
+ /**
+ * The type of the rule. It can be an abstract rule, a normal rule or a test
+ * rule. If the rule type is abstract, the configured class must not be set.
+ */
+ public abstract RuleClassType type();
+
+ /**
+ * The {@link RuleConfiguredTargetFactory} class that implements this rule. If the rule is
+ * abstract, this must not be set.
+ */
+ public abstract Class<? extends RuleConfiguredTargetFactory> factoryClass();
+
+ /**
+ * The list of other rule classes this rule inherits from.
+ */
+ public abstract List<Class<? extends RuleDefinition>> ancestors();
+
+ public static Builder builder() {
+ return new AutoValueRuleDefinitionMetadata.Builder()
+ .type(RuleClassType.NORMAL)
+ .factoryClass(RuleConfiguredTargetFactory.class)
+ .ancestors(Collections.<Class<? extends RuleDefinition>>emptyList());
+ }
+
+ public static Metadata empty() {
+ return builder().build();
+ }
+
+ /**
+ * Builder class for the Metadata class.
+ */
+ public abstract static class Builder {
+ public abstract Builder name(String s);
+ public abstract Builder type(RuleClassType type);
+ public abstract Builder factoryClass(Class<? extends RuleConfiguredTargetFactory> factory);
+ public abstract Builder ancestors(List<Class<? extends RuleDefinition>> ancestors);
+ public Builder ancestors(Class<? extends RuleDefinition>... ancstrs) {
+ return ancestors(Arrays.asList(ancstrs));
+ }
+ public abstract Metadata build();
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java
index dd0ba5b5d9..44bb5e7f47 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigRuleClasses.java
@@ -19,7 +19,6 @@ import static com.google.devtools.build.lib.packages.Type.STRING_DICT;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -40,9 +39,6 @@ public class ConfigRuleClasses {
/**
* Common settings for all configurability rules.
*/
- @BlazeRule(name = "$config_base_rule",
- type = RuleClass.Builder.RuleClassType.ABSTRACT,
- ancestors = { BaseRuleClasses.BaseRule.class })
public static final class ConfigBaseRule implements RuleDefinition {
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
@@ -55,6 +51,15 @@ public class ConfigRuleClasses {
"these rules don't include content that gets built into their dependers")
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$config_base_rule")
+ .type(RuleClass.Builder.RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .build();
+ }
}
/**
@@ -85,10 +90,6 @@ public class ConfigRuleClasses {
* themselves inputs to that map. So Bazel has special logic to read and properly apply
* config_setting instances. See {@link ConfiguredTargetFunction#getConfigConditions} for details.
*/
- @BlazeRule(name = "config_setting",
- type = RuleClass.Builder.RuleClassType.NORMAL,
- ancestors = { ConfigBaseRule.class },
- factoryClass = ConfigSetting.class)
public static final class ConfigSettingRule implements RuleDefinition {
/**
* The name of the attribute that declares flag bindings.
@@ -137,6 +138,16 @@ public class ConfigRuleClasses {
.nonconfigurable(NONCONFIGURABLE_ATTRIBUTE_REASON))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("config_setting")
+ .type(RuleClass.Builder.RuleClassType.NORMAL)
+ .ancestors(ConfigBaseRule.class)
+ .factoryClass(ConfigSetting.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = config_setting, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java
index 58116e8267..8330dba872 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,9 +27,6 @@ import com.google.devtools.build.lib.util.FileTypeSet;
/**
* Rule definition for environment rules (for Bazel's constraint enforcement system).
*/
-@BlazeRule(name = EnvironmentRule.RULE_NAME,
- ancestors = { BaseRuleClasses.BaseRule.class },
- factoryClass = Environment.class)
public final class EnvironmentRule implements RuleDefinition {
public static final String RULE_NAME = "environment";
@@ -67,4 +63,13 @@ public final class EnvironmentRule implements RuleDefinition {
.setUndocumented()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(EnvironmentRule.RULE_NAME)
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .factoryClass(Environment.class)
+ .build();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
index 988afec114..b3f5099cd5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
@@ -19,6 +19,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.BlazeVersionInfo;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.bazel.repository.HttpArchiveFunction;
import com.google.devtools.build.lib.bazel.repository.HttpDownloadFunction;
import com.google.devtools.build.lib.bazel.repository.HttpJarFunction;
@@ -84,7 +85,14 @@ public class BazelRepositoryModule extends BlazeModule {
@Override
public void initializeRuleClasses(ConfiguredRuleClassProvider.Builder builder) {
for (Entry<String, RepositoryFunction> handler : repositoryHandlers.entrySet()) {
- builder.addRuleDefinition(handler.getValue().getRuleDefinition());
+ // TODO(bazel-team): Migrate away from Class<?>
+ RuleDefinition ruleDefinition;
+ try {
+ ruleDefinition = handler.getValue().getRuleDefinition().newInstance();
+ } catch (IllegalAccessException | InstantiationException e) {
+ throw new IllegalStateException(e);
+ }
+ builder.addRuleDefinition(ruleDefinition);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelBaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelBaseRuleClasses.java
index a1b27fee82..669431b068 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelBaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelBaseRuleClasses.java
@@ -21,7 +21,6 @@ import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -41,8 +40,6 @@ public class BazelBaseRuleClasses {
/**
* A base rule for all binary rules.
*/
- @BlazeRule(name = "$binary_base_rule",
- type = RuleClassType.ABSTRACT)
public static final class BinaryBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -54,14 +51,19 @@ public class BazelBaseRuleClasses {
.nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$binary_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Rule class for rules in error.
*/
- @BlazeRule(name = "$error_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { BaseRuleClasses.BaseRule.class })
public static final class ErrorRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -69,5 +71,14 @@ public class BazelBaseRuleClasses {
.publicByDefault()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$error_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .build();
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 0a43d80d6e..909eec8b20 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -54,6 +54,7 @@ import com.google.devtools.build.lib.bazel.rules.workspace.LocalRepositoryRule;
import com.google.devtools.build.lib.bazel.rules.workspace.MavenJarRule;
import com.google.devtools.build.lib.bazel.rules.workspace.NewHttpArchiveRule;
import com.google.devtools.build.lib.bazel.rules.workspace.NewLocalRepositoryRule;
+import com.google.devtools.build.lib.bazel.rules.workspace.WorkspaceBaseRule;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.PackageGroup;
import com.google.devtools.build.lib.packages.Rule;
@@ -193,90 +194,94 @@ public class BazelRuleClassProvider {
builder.addConfigurationOptions(fragmentOptions);
}
- builder.addRuleDefinition(BaseRuleClasses.BaseRule.class);
- builder.addRuleDefinition(BaseRuleClasses.RuleBase.class);
- builder.addRuleDefinition(BazelBaseRuleClasses.BinaryBaseRule.class);
- builder.addRuleDefinition(BaseRuleClasses.TestBaseRule.class);
- builder.addRuleDefinition(BazelBaseRuleClasses.ErrorRule.class);
+ builder.addRuleDefinition(new WorkspaceBaseRule());
- builder.addRuleDefinition(EnvironmentRule.class);
+ builder.addRuleDefinition(new BaseRuleClasses.BaseRule());
+ builder.addRuleDefinition(new BaseRuleClasses.RuleBase());
+ builder.addRuleDefinition(new BazelBaseRuleClasses.BinaryBaseRule());
+ builder.addRuleDefinition(new BaseRuleClasses.TestBaseRule());
+ builder.addRuleDefinition(new BazelBaseRuleClasses.ErrorRule());
- builder.addRuleDefinition(ConfigRuleClasses.ConfigBaseRule.class);
- builder.addRuleDefinition(ConfigRuleClasses.ConfigSettingRule.class);
+ builder.addRuleDefinition(new EnvironmentRule());
- builder.addRuleDefinition(BazelFilegroupRule.class);
- builder.addRuleDefinition(BazelTestSuiteRule.class);
- builder.addRuleDefinition(BazelGenRuleRule.class);
- builder.addRuleDefinition(GenQueryRule.class);
+ builder.addRuleDefinition(new ConfigRuleClasses.ConfigBaseRule());
+ builder.addRuleDefinition(new ConfigRuleClasses.ConfigSettingRule());
- builder.addRuleDefinition(BazelShRuleClasses.ShRule.class);
- builder.addRuleDefinition(BazelShLibraryRule.class);
- builder.addRuleDefinition(BazelShBinaryRule.class);
- builder.addRuleDefinition(BazelShTestRule.class);
+ builder.addRuleDefinition(new BazelFilegroupRule());
+ builder.addRuleDefinition(new BazelTestSuiteRule());
+ builder.addRuleDefinition(new BazelGenRuleRule());
+ builder.addRuleDefinition(new GenQueryRule());
- builder.addRuleDefinition(CcToolchainRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcLinkingRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcDeclRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcBaseRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcBinaryBaseRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcBinaryRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcTestRule.class);
+ builder.addRuleDefinition(new BazelShRuleClasses.ShRule());
+ builder.addRuleDefinition(new BazelShLibraryRule());
+ builder.addRuleDefinition(new BazelShBinaryRule());
+ builder.addRuleDefinition(new BazelShTestRule());
- builder.addRuleDefinition(BazelCppRuleClasses.CcLibraryBaseRule.class);
- builder.addRuleDefinition(BazelCppRuleClasses.CcLibraryRule.class);
+ builder.addRuleDefinition(new CcToolchainRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcLinkingRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcDeclRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcBaseRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcBinaryBaseRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcBinaryRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcTestRule());
+
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcLibraryBaseRule());
+ builder.addRuleDefinition(new BazelCppRuleClasses.CcLibraryRule());
builder.addWorkspaceFile(BazelJavaRuleClasses.getDefaultWorkspace());
- builder.addRuleDefinition(BazelJavaRuleClasses.BaseJavaBinaryRule.class);
- builder.addRuleDefinition(BazelJavaRuleClasses.IjarBaseRule.class);
- builder.addRuleDefinition(BazelJavaRuleClasses.JavaBaseRule.class);
- builder.addRuleDefinition(JavaImportBaseRule.class);
- builder.addRuleDefinition(BazelJavaRuleClasses.JavaRule.class);
- builder.addRuleDefinition(BazelJavaBinaryRule.class);
- builder.addRuleDefinition(BazelJavaLibraryRule.class);
- builder.addRuleDefinition(BazelJavaImportRule.class);
- builder.addRuleDefinition(BazelJavaTestRule.class);
- builder.addRuleDefinition(BazelJavaPluginRule.class);
- builder.addRuleDefinition(JavaToolchainRule.class);
+ builder.addRuleDefinition(new BazelJavaRuleClasses.BaseJavaBinaryRule());
+ builder.addRuleDefinition(new BazelJavaRuleClasses.IjarBaseRule());
+ builder.addRuleDefinition(new BazelJavaRuleClasses.JavaBaseRule());
+ builder.addRuleDefinition(new JavaImportBaseRule());
+ builder.addRuleDefinition(new BazelJavaRuleClasses.JavaRule());
+ builder.addRuleDefinition(new BazelJavaBinaryRule());
+ builder.addRuleDefinition(new BazelJavaLibraryRule());
+ builder.addRuleDefinition(new BazelJavaImportRule());
+ builder.addRuleDefinition(new BazelJavaTestRule());
+ builder.addRuleDefinition(new BazelJavaPluginRule());
+ builder.addRuleDefinition(new JavaToolchainRule());
- builder.addRuleDefinition(BazelIosTestRule.class);
- builder.addRuleDefinition(IosDeviceRule.class);
- builder.addRuleDefinition(ObjcBinaryRule.class);
- builder.addRuleDefinition(ObjcBundleRule.class);
- builder.addRuleDefinition(ObjcBundleLibraryRule.class);
- builder.addRuleDefinition(ObjcFrameworkRule.class);
- builder.addRuleDefinition(ObjcImportRule.class);
- builder.addRuleDefinition(ObjcLibraryRule.class);
- builder.addRuleDefinition(ObjcOptionsRule.class);
- builder.addRuleDefinition(ObjcProtoLibraryRule.class);
- builder.addRuleDefinition(ObjcXcodeprojRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.IosTestBaseRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.BundlingRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.ReleaseBundlingRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.SimulatorRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.CompilingRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.LinkingRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.ResourcesRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.XcodegenRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.AlwaysLinkRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.OptionsRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.SdkFrameworksDependerRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.CompileDependencyRule.class);
- builder.addRuleDefinition(ObjcRuleClasses.ResourceToolsRule.class);
- builder.addRuleDefinition(IosApplicationRule.class);
- builder.addRuleDefinition(IosExtensionBinaryRule.class);
- builder.addRuleDefinition(IosExtensionRule.class);
+ builder.addRuleDefinition(new BazelIosTestRule());
+ builder.addRuleDefinition(new IosDeviceRule());
+ builder.addRuleDefinition(new ObjcBinaryRule());
+ builder.addRuleDefinition(new ObjcBundleRule());
+ builder.addRuleDefinition(new ObjcBundleLibraryRule());
+ builder.addRuleDefinition(new ObjcFrameworkRule());
+ builder.addRuleDefinition(new ObjcImportRule());
+ builder.addRuleDefinition(new ObjcLibraryRule());
+ builder.addRuleDefinition(new ObjcOptionsRule());
+ builder.addRuleDefinition(new ObjcProtoLibraryRule());
+ builder.addRuleDefinition(new ObjcXcodeprojRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.CoptsRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.ObjcProtoRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.IosTestBaseRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.BundlingRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.ReleaseBundlingRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.SimulatorRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.CompilingRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.LinkingRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.ResourcesRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.XcodegenRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.AlwaysLinkRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.OptionsRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.SdkFrameworksDependerRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.CompileDependencyRule());
+ builder.addRuleDefinition(new ObjcRuleClasses.ResourceToolsRule());
+ builder.addRuleDefinition(new IosApplicationRule());
+ builder.addRuleDefinition(new IosExtensionBinaryRule());
+ builder.addRuleDefinition(new IosExtensionRule());
- builder.addRuleDefinition(BazelExtraActionRule.class);
- builder.addRuleDefinition(BazelActionListenerRule.class);
+ builder.addRuleDefinition(new BazelExtraActionRule());
+ builder.addRuleDefinition(new BazelActionListenerRule());
- builder.addRuleDefinition(BindRule.class);
- builder.addRuleDefinition(HttpArchiveRule.class);
- builder.addRuleDefinition(HttpJarRule.class);
- builder.addRuleDefinition(LocalRepositoryRule.class);
- builder.addRuleDefinition(MavenJarRule.class);
- builder.addRuleDefinition(NewHttpArchiveRule.class);
- builder.addRuleDefinition(NewLocalRepositoryRule.class);
+ builder.addRuleDefinition(new BindRule());
+ builder.addRuleDefinition(new HttpArchiveRule());
+ builder.addRuleDefinition(new HttpJarRule());
+ builder.addRuleDefinition(new LocalRepositoryRule());
+ builder.addRuleDefinition(new MavenJarRule());
+ builder.addRuleDefinition(new NewHttpArchiveRule());
+ builder.addRuleDefinition(new NewLocalRepositoryRule());
builder.addConfigurationFragment(new BazelConfiguration.Loader());
builder.addConfigurationFragment(new CppConfigurationLoader(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelActionListenerRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelActionListenerRule.java
index 0865c34bbc..26b3745074 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelActionListenerRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelActionListenerRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,9 +27,6 @@ import com.google.devtools.build.lib.rules.extra.ActionListener;
/**
* Rule definition for action_listener rule.
*/
-@BlazeRule(name = "action_listener",
- ancestors = { BaseRuleClasses.RuleBase.class },
- factoryClass = ActionListener.class)
public final class BazelActionListenerRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -59,6 +55,15 @@ public final class BazelActionListenerRule implements RuleDefinition {
.removeAttribute(":action_listener")
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("action_listener")
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .factoryClass(ActionListener.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = action_listener, TYPE = BINARY, FAMILY = Extra Actions)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelExtraActionRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelExtraActionRule.java
index efc4e4630e..94aac28bd1 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelExtraActionRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelExtraActionRule.java
@@ -21,7 +21,6 @@ import static com.google.devtools.build.lib.packages.Type.STRING;
import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -31,9 +30,6 @@ import com.google.devtools.build.lib.rules.extra.ExtraActionFactory;
/**
* Rule definition for extra_action rule.
*/
-@BlazeRule(name = "extra_action",
- ancestors = { BaseRuleClasses.RuleBase.class },
- factoryClass = ExtraActionFactory.class)
public final class BazelExtraActionRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -122,6 +118,15 @@ public final class BazelExtraActionRule implements RuleDefinition {
.removeAttribute(":action_listener")
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("extra_action")
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .factoryClass(ExtraActionFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = extra_action, TYPE = LIBRARY, FAMILY = Extra Actions)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java
index 23d7c9c437..9884200472 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelFilegroupRule.java
@@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.packages.Type.LICENSE;
import static com.google.devtools.build.lib.packages.Type.STRING;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -31,9 +30,6 @@ import com.google.devtools.build.lib.util.FileTypeSet;
/**
* Rule object implementing "filegroup".
*/
-@BlazeRule(name = "filegroup",
- ancestors = { BaseRuleClasses.BaseRule.class },
- factoryClass = Filegroup.class)
public final class BazelFilegroupRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -76,6 +72,15 @@ public final class BazelFilegroupRule implements RuleDefinition {
.add(attr("path", STRING))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("filegroup")
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .factoryClass(Filegroup.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = filegroup, TYPE = BINARY, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelTestSuiteRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelTestSuiteRule.java
index 9dad80ea17..348eb302e8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelTestSuiteRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/common/BazelTestSuiteRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Type.BOOLEAN;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,9 +27,6 @@ import com.google.devtools.build.lib.rules.test.TestSuite;
/**
* Rule object implementing "test_suite".
*/
-@BlazeRule(name = "test_suite",
- ancestors = { BaseRuleClasses.BaseRule.class },
- factoryClass = TestSuite.class)
public final class BazelTestSuiteRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -103,6 +99,15 @@ public final class BazelTestSuiteRule implements RuleDefinition {
.nonconfigurable("Accessed in TestTargetUtils without config context"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("test_suite")
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .factoryClass(TestSuite.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = test_suite, TYPE = TEST, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
index 7272555292..7e92d2e647 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
@@ -39,7 +39,6 @@ import static com.google.devtools.build.lib.rules.cpp.CppFileTypes.VERSIONED_SHA
import com.google.common.base.Predicates;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -208,8 +207,6 @@ public class BazelCppRuleClasses {
* Common attributes for all rules that create C++ links. This may
* include non-cc_* rules (e.g. py_binary).
*/
- @BlazeRule(name = "$cc_linking_rule",
- type = RuleClassType.ABSTRACT)
public static final class CcLinkingRule implements RuleDefinition {
@Override
@SuppressWarnings("unchecked")
@@ -219,14 +216,19 @@ public class BazelCppRuleClasses {
.setPreferredDependencyPredicate(Predicates.<String>or(CPP_SOURCE, C_SOURCE, CPP_HEADER))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$cc_linking_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Common attributes for C++ rules.
*/
- @BlazeRule(name = "$cc_base_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { CcLinkingRule.class })
public static final class CcBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -246,14 +248,20 @@ public class BazelCppRuleClasses {
.add(attr(":stl", LABEL).value(STL))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$cc_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CcLinkingRule.class)
+ .build();
+ }
}
/**
* Helper rule class.
*/
- @BlazeRule(name = "$cc_decl_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { BaseRuleClasses.RuleBase.class })
public static final class CcDeclRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -355,14 +363,20 @@ public class BazelCppRuleClasses {
.value(LIPO_CONTEXT_COLLECTOR))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$cc_decl_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .build();
+ }
}
/**
* Helper rule class.
*/
- @BlazeRule(name = "$cc_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { CcDeclRule.class, CcBaseRule.class })
public static final class CcRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, final RuleDefinitionEnvironment env) {
@@ -546,14 +560,19 @@ public class BazelCppRuleClasses {
}))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$cc_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CcDeclRule.class, CcBaseRule.class)
+ .build();
+ }
}
/**
* Helper rule class.
*/
- @BlazeRule(name = "$cc_binary_base",
- type = RuleClassType.ABSTRACT,
- ancestors = CcRule.class)
public static final class CcBinaryBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -594,15 +613,19 @@ public class BazelCppRuleClasses {
.add(attr("stamp", TRISTATE).value(TriState.AUTO))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$cc_binary_base")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CcRule.class)
+ .build();
+ }
}
/**
* Rule definition for cc_binary rules.
*/
- @BlazeRule(name = "cc_binary",
- ancestors = { CcBinaryBaseRule.class,
- BazelBaseRuleClasses.BinaryBaseRule.class },
- factoryClass = BazelCcBinary.class)
public static final class CcBinaryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -650,6 +673,14 @@ public class BazelCppRuleClasses {
.cfg(LIPO_ON_DEMAND)
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("cc_binary")
+ .ancestors(CcBinaryBaseRule.class, BazelBaseRuleClasses.BinaryBaseRule.class)
+ .factoryClass(BazelCcBinary.class)
+ .build();
+ }
}
/**
@@ -667,10 +698,6 @@ public class BazelCppRuleClasses {
/**
* Rule definition for cc_test rules.
*/
- @BlazeRule(name = "cc_test",
- type = RuleClassType.TEST,
- ancestors = { CcBinaryBaseRule.class, BaseRuleClasses.TestBaseRule.class },
- factoryClass = BazelCcTest.class)
public static final class CcTestRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -681,14 +708,20 @@ public class BazelCppRuleClasses {
.add(attr(":lipo_context", LABEL).value(LIPO_CONTEXT))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("cc_test")
+ .type(RuleClassType.TEST)
+ .ancestors(CcBinaryBaseRule.class, BaseRuleClasses.TestBaseRule.class)
+ .factoryClass(BazelCcTest.class)
+ .build();
+ }
}
/**
* Helper rule class.
*/
- @BlazeRule(name = "$cc_library",
- type = RuleClassType.ABSTRACT,
- ancestors = { CcRule.class })
public static final class CcLibraryBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -717,14 +750,19 @@ public class BazelCppRuleClasses {
.add(attr("linkstamp", LABEL).allowedFileTypes(CPP_SOURCE, C_SOURCE))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$cc_library")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CcRule.class)
+ .build();
+ }
}
/**
* Rule definition for the cc_library rule.
*/
- @BlazeRule(name = "cc_library",
- ancestors = { CcLibraryBaseRule.class},
- factoryClass = BazelCcLibrary.class)
public static final class CcLibraryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -769,6 +807,14 @@ public class BazelCppRuleClasses {
.nonconfigurable("value is referenced in an ImplicitOutputsFunction"))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("cc_library")
+ .ancestors(CcLibraryBaseRule.class)
+ .factoryClass(BazelCcLibrary.class)
+ .build();
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
index f5ceed6765..193dfb3405 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
@@ -23,7 +23,6 @@ import static com.google.devtools.build.lib.packages.Type.OUTPUT_LIST;
import static com.google.devtools.build.lib.packages.Type.STRING;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.Attribute;
@@ -35,9 +34,6 @@ import com.google.devtools.build.lib.packages.Type;
/**
* Rule definition for the genrule rule.
*/
-@BlazeRule(name = "genrule",
- ancestors = { BaseRuleClasses.RuleBase.class },
- factoryClass = GenRule.class)
public final class BazelGenRuleRule implements RuleDefinition {
public static final String GENRULE_SETUP_LABEL = "//tools/genrule:genrule-setup.sh";
@@ -232,6 +228,15 @@ public final class BazelGenRuleRule implements RuleDefinition {
.removeAttribute("deps")
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("genrule")
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .factoryClass(GenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = genrule, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java
index 63fb47be26..80e3e37f47 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.java;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.BOOLEAN;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.BazelBaseRuleClasses;
@@ -30,10 +29,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for the java_binary rule.
*/
-@BlazeRule(name = "java_binary",
- ancestors = { BaseJavaBinaryRule.class,
- BazelBaseRuleClasses.BinaryBaseRule.class },
- factoryClass = BazelJavaBinary.class)
public final class BazelJavaBinaryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -81,6 +76,15 @@ public final class BazelJavaBinaryRule implements RuleDefinition {
}))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("java_binary")
+ .ancestors(BaseJavaBinaryRule.class, BazelBaseRuleClasses.BinaryBaseRule.class)
+ .factoryClass(BazelJavaBinary.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_binary, TYPE = BINARY, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
index 4f6a585547..e1ebaec46b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
@@ -19,7 +19,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
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.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses.IjarBaseRule;
@@ -30,9 +29,6 @@ import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
/**
* Rule definition for the java_import rule.
*/
-@BlazeRule(name = "java_import",
- ancestors = { JavaImportBaseRule.class, IjarBaseRule.class },
- factoryClass = BazelJavaImport.class)
public final class BazelJavaImportRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -50,6 +46,15 @@ public final class BazelJavaImportRule implements RuleDefinition {
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("java_import")
+ .ancestors(JavaImportBaseRule.class, IjarBaseRule.class)
+ .factoryClass(BazelJavaImport.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_import, TYPE = LIBRARY, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java
index 0c340dee9f..eef56df17d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java
@@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.packages.Type.BOOLEAN;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses.JavaRule;
@@ -30,9 +29,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Common attributes for Java rules.
*/
-@BlazeRule(name = "java_library",
- ancestors = { JavaRule.class },
- factoryClass = BazelJavaLibrary.class)
public final class BazelJavaLibraryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, final RuleDefinitionEnvironment env) {
@@ -148,6 +144,15 @@ public final class BazelJavaLibraryRule implements RuleDefinition {
.legacyAllowAnyFileType())
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("java_library")
+ .ancestors(JavaRule.class)
+ .factoryClass(BazelJavaLibrary.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_library, TYPE = LIBRARY, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaPluginRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaPluginRule.java
index cef463ba9c..834f683e2d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaPluginRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaPluginRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.java;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.Attribute;
@@ -27,9 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for the java_plugin rule.
*/
-@BlazeRule(name = "java_plugin",
- ancestors = { BazelJavaLibraryRule.class },
- factoryClass = BazelJavaPlugin.class)
public final class BazelJavaPluginRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -58,6 +54,15 @@ public final class BazelJavaPluginRule implements RuleDefinition {
.removeAttribute("exported_plugins")
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("java_plugin")
+ .ancestors(BazelJavaLibraryRule.class)
+ .factoryClass(BazelJavaPlugin.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_plugin, TYPE = OTHER, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
index 1f36158ca4..f11a3cac82 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
@@ -26,7 +26,6 @@ import static com.google.devtools.build.lib.packages.Type.TRISTATE;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.cpp.BazelCppRuleClasses;
@@ -62,8 +61,6 @@ public class BazelJavaRuleClasses {
/**
* Common attributes for rules that depend on ijar.
*/
- @BlazeRule(name = "$ijar_base_rule",
- type = RuleClassType.ABSTRACT)
public static final class IjarBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -72,15 +69,20 @@ public class BazelJavaRuleClasses {
.setPreferredDependencyPredicate(JavaSemantics.JAVA_SOURCE)
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$ijar_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Common attributes for Java rules.
*/
- @BlazeRule(name = "$java_base_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { IjarBaseRule.class })
public static final class JavaBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -98,6 +100,15 @@ public class BazelJavaRuleClasses {
.value(env.getLabel(JavaSemantics.SINGLEJAR_LABEL)))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$java_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(IjarBaseRule.class)
+ .build();
+ }
}
static final Set<String> ALLOWED_RULES_IN_DEPS = ImmutableSet.of(
@@ -113,9 +124,6 @@ public class BazelJavaRuleClasses {
/**
* Common attributes for Java rules.
*/
- @BlazeRule(name = "$java_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { BaseRuleClasses.RuleBase.class, JavaBaseRule.class })
public static final class JavaRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -219,18 +227,20 @@ public class BazelJavaRuleClasses {
.add(attr("javacopts", STRING_LIST))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$java_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.RuleBase.class, JavaBaseRule.class)
+ .build();
+ }
}
/**
* Base class for rule definitions producing Java binaries.
*/
- @BlazeRule(name = "$base_java_binary",
- type = RuleClassType.ABSTRACT,
- ancestors = { JavaRule.class,
- // java_binary and java_test require the crosstool C++ runtime
- // libraries (libstdc++.so, libgcc_s.so).
- // TODO(bazel-team): Add tests for Java+dynamic runtime.
- BazelCppRuleClasses.CcLinkingRule.class })
public static final class BaseJavaBinaryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, final RuleDefinitionEnvironment env) {
@@ -312,6 +322,18 @@ public class BazelJavaRuleClasses {
.add(attr(":java_launcher", LABEL).value(JavaSemantics.JAVA_LAUNCHER)) // blaze flag
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$base_java_binary")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(JavaRule.class,
+ // java_binary and java_test require the crosstool C++ runtime
+ // libraries (libstdc++.so, libgcc_s.so).
+ // TODO(bazel-team): Add tests for Java+dynamic runtime.
+ BazelCppRuleClasses.CcLinkingRule.class)
+ .build();
+ }
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
index 24eb6a8d44..1921d18a23 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaTestRule.java
@@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.packages.Type.STRING;
import static com.google.devtools.build.lib.packages.Type.TRISTATE;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.java.BazelJavaRuleClasses.BaseJavaBinaryRule;
@@ -33,11 +32,6 @@ import com.google.devtools.build.lib.rules.java.JavaSemantics;
/**
* Rule definition for the java_test rule.
*/
-@BlazeRule(name = "java_test",
- type = RuleClassType.TEST,
- ancestors = { BaseJavaBinaryRule.class,
- BaseRuleClasses.TestBaseRule.class },
- factoryClass = BazelJavaTest.class)
public final class BazelJavaTestRule implements RuleDefinition {
private static final String JUNIT4_RUNNER = "org.junit.runner.JUnitCore";
@@ -58,6 +52,16 @@ public final class BazelJavaTestRule implements RuleDefinition {
.override(attr(":java_launcher", LABEL).value(JavaSemantics.JAVA_LAUNCHER))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("java_test")
+ .type(RuleClassType.TEST)
+ .ancestors(BaseJavaBinaryRule.class, BaseRuleClasses.TestBaseRule.class)
+ .factoryClass(BazelJavaTest.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_test, TYPE = TEST, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
index d2454a363a..40c254e6b5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/objc/BazelIosTestRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
@@ -31,13 +30,6 @@ import com.google.devtools.build.lib.rules.objc.XcodeSupport;
/**
* Rule definition for the ios_test rule.
*/
-@BlazeRule(name = "ios_test",
- type = RuleClassType.TEST,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- BaseRuleClasses.TestBaseRule.class,
- ObjcRuleClasses.IosTestBaseRule.class, },
- factoryClass = BazelIosTest.class)
public final class BazelIosTestRule implements RuleDefinition {
@Override
public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) {
@@ -56,6 +48,17 @@ public final class BazelIosTestRule implements RuleDefinition {
.value(env.getLabel("//tools/objc:ios_test_on_bazel")).exec())
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("ios_test")
+ .type(RuleClassType.TEST)
+ .ancestors(BaseRuleClasses.BaseRule.class, BaseRuleClasses.TestBaseRule.class,
+ ObjcRuleClasses.IosTestBaseRule.class)
+ .factoryClass(BazelIosTest.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = ios_test, TYPE = TEST, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShBinaryRule.java
index 1a2a23205d..7ea0f0a8aa 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShBinaryRule.java
@@ -13,7 +13,6 @@
// limitations under the License.
package com.google.devtools.build.lib.bazel.rules.sh;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.BazelBaseRuleClasses;
@@ -24,14 +23,20 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for the sh_binary rule.
*/
-@BlazeRule(name = "sh_binary",
- ancestors = { ShRule.class, BazelBaseRuleClasses.BinaryBaseRule.class },
- factoryClass = ShBinary.class)
public final class BazelShBinaryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("sh_binary")
+ .ancestors(ShRule.class, BazelBaseRuleClasses.BinaryBaseRule.class)
+ .factoryClass(ShBinary.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = sh_binary, TYPE = BINARY, FAMILY = Shell) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShLibraryRule.java
index 552d99aaef..6f41efa903 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShLibraryRule.java
@@ -16,7 +16,6 @@ package com.google.devtools.build.lib.bazel.rules.sh;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.sh.BazelShRuleClasses.ShRule;
@@ -26,9 +25,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for the sh_library rule.
*/
-@BlazeRule(name = "sh_library",
- ancestors = { ShRule.class },
- factoryClass = ShLibrary.class)
public final class BazelShLibraryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -45,6 +41,15 @@ public final class BazelShLibraryRule implements RuleDefinition {
.override(attr("srcs", LABEL_LIST).allowedFileTypes(BazelShRuleClasses.SH_FILES))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("sh_library")
+ .ancestors(ShRule.class)
+ .factoryClass(ShLibrary.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = sh_library, TYPE = LIBRARY, FAMILY = Shell) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShRuleClasses.java
index 616ff64842..54145301d3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShRuleClasses.java
@@ -19,9 +19,7 @@ import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet;
@@ -50,9 +48,6 @@ public final class BazelShRuleClasses {
/**
* Common attributes for shell rules.
*/
- @BlazeRule(name = "$sh_target",
- type = RuleClassType.ABSTRACT,
- ancestors = { BaseRuleClasses.RuleBase.class })
public static final class ShRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -87,6 +82,15 @@ public final class BazelShRuleClasses {
.allowedFileTypes())
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$sh_target")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .build();
+ }
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShTestRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShTestRule.java
index 23e2be03e4..580f961e85 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/sh/BazelShTestRule.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.bazel.rules.sh;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.bazel.rules.sh.BazelShRuleClasses.ShRule;
@@ -25,15 +24,21 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Rule definition for the sh_test rule.
*/
-@BlazeRule(name = "sh_test",
- type = RuleClassType.TEST,
- ancestors = { ShRule.class, BaseRuleClasses.TestBaseRule.class },
- factoryClass = ShBinary.class)
public final class BazelShTestRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("sh_test")
+ .type(RuleClassType.TEST)
+ .ancestors(ShRule.class, BaseRuleClasses.TestBaseRule.class)
+ .factoryClass(ShBinary.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = sh_test, TYPE = TEST, FAMILY = Shell) -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpArchiveRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpArchiveRule.java
index 5da1ae9966..2550d8e6c8 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpArchiveRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpArchiveRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.workspace;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,10 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Rule definition for the http_archive rule.
*/
-@BlazeRule(name = HttpArchiveRule.NAME,
- type = RuleClassType.WORKSPACE,
- ancestors = { WorkspaceBaseRule.class },
- factoryClass = WorkspaceConfiguredTargetFactory.class)
public class HttpArchiveRule implements RuleDefinition {
public static final String NAME = "http_archive";
@@ -56,6 +51,16 @@ public class HttpArchiveRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(HttpArchiveRule.NAME)
+ .type(RuleClassType.WORKSPACE)
+ .ancestors(WorkspaceBaseRule.class)
+ .factoryClass(WorkspaceConfiguredTargetFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = http_archive, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpJarRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpJarRule.java
index 8c7d4cedf9..5d5d0e55f4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpJarRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/HttpJarRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.workspace;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,10 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Rule definition for the http_jar rule.
*/
-@BlazeRule(name = HttpJarRule.NAME,
- type = RuleClassType.WORKSPACE,
- ancestors = { WorkspaceBaseRule.class },
- factoryClass = WorkspaceConfiguredTargetFactory.class)
public class HttpJarRule implements RuleDefinition {
public static final String NAME = "http_jar";
@@ -55,6 +50,16 @@ public class HttpJarRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(HttpJarRule.NAME)
+ .type(RuleClassType.WORKSPACE)
+ .ancestors(WorkspaceBaseRule.class)
+ .factoryClass(WorkspaceConfiguredTargetFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = http_jar, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/LocalRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/LocalRepositoryRule.java
index d03ef39298..b283ced6df 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/LocalRepositoryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/LocalRepositoryRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.workspace;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,10 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Rule definition for the local_repository rule.
*/
-@BlazeRule(name = LocalRepositoryRule.NAME,
- type = RuleClassType.WORKSPACE,
- ancestors = { WorkspaceBaseRule.class },
- factoryClass = WorkspaceConfiguredTargetFactory.class)
public class LocalRepositoryRule implements RuleDefinition {
public static final String NAME = "local_repository";
@@ -49,6 +44,16 @@ public class LocalRepositoryRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(LocalRepositoryRule.NAME)
+ .type(RuleClassType.WORKSPACE)
+ .ancestors(WorkspaceBaseRule.class)
+ .factoryClass(WorkspaceConfiguredTargetFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = local_repository, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/MavenJarRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/MavenJarRule.java
index a897e3eba0..056e946329 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/MavenJarRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/MavenJarRule.java
@@ -16,7 +16,6 @@ package com.google.devtools.build.lib.bazel.rules.workspace;
import static com.google.devtools.build.lib.packages.Attribute.attr;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,10 +26,6 @@ import com.google.devtools.build.lib.packages.Type;
/**
* Rule definition for the maven_jar rule.
*/
-@BlazeRule(name = MavenJarRule.NAME,
- type = RuleClassType.WORKSPACE,
- ancestors = { WorkspaceBaseRule.class },
- factoryClass = WorkspaceConfiguredTargetFactory.class)
public class MavenJarRule implements RuleDefinition {
public static final String NAME = "maven_jar";
@@ -81,6 +76,16 @@ public class MavenJarRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(MavenJarRule.NAME)
+ .type(RuleClassType.WORKSPACE)
+ .ancestors(WorkspaceBaseRule.class)
+ .factoryClass(WorkspaceConfiguredTargetFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = maven_jar, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewHttpArchiveRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewHttpArchiveRule.java
index 131bbac910..a0cb2ba327 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewHttpArchiveRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewHttpArchiveRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.workspace;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -25,10 +24,6 @@ import com.google.devtools.build.lib.packages.RuleClass;
/**
* Rule definition for the new_http_archive rule.
*/
-@BlazeRule(name = NewHttpArchiveRule.NAME,
- type = RuleClass.Builder.RuleClassType.WORKSPACE,
- ancestors = { WorkspaceBaseRule.class },
- factoryClass = WorkspaceConfiguredTargetFactory.class)
public class NewHttpArchiveRule implements RuleDefinition {
public static final String NAME = "new_http_archive";
@@ -62,6 +57,16 @@ public class NewHttpArchiveRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(NewHttpArchiveRule.NAME)
+ .type(RuleClass.Builder.RuleClassType.WORKSPACE)
+ .ancestors(WorkspaceBaseRule.class)
+ .factoryClass(WorkspaceConfiguredTargetFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = new_http_archive, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewLocalRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewLocalRepositoryRule.java
index f8f8b85baf..67aa27f5b1 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewLocalRepositoryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/NewLocalRepositoryRule.java
@@ -17,7 +17,6 @@ package com.google.devtools.build.lib.bazel.rules.workspace;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,10 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Rule definition for the new_repository rule.
*/
-@BlazeRule(name = NewLocalRepositoryRule.NAME,
- type = RuleClassType.WORKSPACE,
- ancestors = { WorkspaceBaseRule.class },
- factoryClass = WorkspaceConfiguredTargetFactory.class)
public class NewLocalRepositoryRule implements RuleDefinition {
public static final String NAME = "new_local_repository";
@@ -56,6 +51,16 @@ public class NewLocalRepositoryRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name(NewLocalRepositoryRule.NAME)
+ .type(RuleClassType.WORKSPACE)
+ .ancestors(WorkspaceBaseRule.class)
+ .factoryClass(WorkspaceConfiguredTargetFactory.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = new_local_repository, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/WorkspaceBaseRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/WorkspaceBaseRule.java
index 82a5270a42..d7e099928b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/WorkspaceBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/workspace/WorkspaceBaseRule.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.bazel.rules.workspace;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -24,8 +23,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Base rule for rules in the WORKSPACE file.
*/
-@BlazeRule(name = "$workspace_base_rule",
- type = RuleClassType.ABSTRACT)
public class WorkspaceBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -33,4 +30,12 @@ public class WorkspaceBaseRule implements RuleDefinition {
.exemptFromConstraintChecking("workspace rules aren't built for target environments")
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$workspace_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
index 6c68f00bab..30690379c5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainRule.java
@@ -22,7 +22,6 @@ import static com.google.devtools.build.lib.packages.Type.LICENSE;
import static com.google.devtools.build.lib.packages.Type.STRING;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -35,9 +34,6 @@ import com.google.devtools.build.lib.syntax.Label;
/**
* Rule definition for compiler definition.
*/
-@BlazeRule(name = "cc_toolchain",
- ancestors = { BaseRuleClasses.BaseRule.class },
- factoryClass = CcToolchain.class)
public final class CcToolchainRule implements RuleDefinition {
private static final LateBoundLabel<BuildConfiguration> LIBC_LINK =
new LateBoundLabel<BuildConfiguration>() {
@@ -68,4 +64,13 @@ public final class CcToolchainRule implements RuleDefinition {
.add(attr(":libc_link", LABEL).cfg(HOST).value(LIBC_LINK))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("cc_toolchain")
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .factoryClass(CcToolchain.class)
+ .build();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryRule.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryRule.java
index f3186af197..40647fbeea 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryRule.java
@@ -21,7 +21,6 @@ import static com.google.devtools.build.lib.packages.Type.STRING;
import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -30,9 +29,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for genquery the rule.
*/
-@BlazeRule(name = "genquery",
- ancestors = { BaseRuleClasses.RuleBase.class },
- factoryClass = GenQuery.class)
public final class GenQueryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -66,6 +62,15 @@ public final class GenQueryRule implements RuleDefinition {
.add(attr("opts", STRING_LIST))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("genquery")
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .factoryClass(GenQuery.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = genquery, TYPE = LIBRARY, FAMILY = General)[GENERIC_RULE] -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java
index b153b58af8..676e933acd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImportBaseRule.java
@@ -22,7 +22,6 @@ import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -32,9 +31,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* A base rule for building the java_import rule.
*/
-@BlazeRule(name = "$java_import_base",
- type = RuleClassType.ABSTRACT,
- ancestors = { BaseRuleClasses.RuleBase.class })
public class JavaImportBaseRule implements RuleDefinition {
@Override
@@ -78,6 +74,15 @@ public class JavaImportBaseRule implements RuleDefinition {
.nonconfigurable("used in Attribute.validityPredicate implementations (loading time)"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$java_import_base")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BaseRuleClasses.RuleBase.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_import, TYPE = LIBRARY, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
index 16801eecd2..5da931d20d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainRule.java
@@ -19,7 +19,6 @@ import static com.google.devtools.build.lib.packages.Type.STRING_LIST;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,8 +27,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for {@code java_toolchain}
*/
-@BlazeRule(name = "java_toolchain", ancestors = {BaseRuleClasses.BaseRule.class},
- factoryClass = JavaToolchain.class)
public final class JavaToolchainRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -60,6 +57,15 @@ public final class JavaToolchainRule implements RuleDefinition {
.add(attr("misc", STRING_LIST).value(ImmutableList.<String>of()))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("java_toolchain")
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .factoryClass(JavaToolchain.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = java_toolchain, TYPE = OTHER, FAMILY = Java) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java
index 040a81f77f..898150baa9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java
@@ -21,7 +21,6 @@ import static com.google.devtools.build.lib.packages.Type.LABEL;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
@@ -31,13 +30,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for ios_application.
*/
-@BlazeRule(name = "ios_application",
- factoryClass = IosApplication.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.ReleaseBundlingRule.class,
- ObjcRuleClasses.XcodegenRule.class,
- ObjcRuleClasses.SimulatorRule.class })
public class IosApplicationRule implements RuleDefinition {
@Override
@@ -77,6 +69,16 @@ public class IosApplicationRule implements RuleDefinition {
.nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("ios_application")
+ .factoryClass(IosApplication.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.ReleaseBundlingRule.class,
+ ObjcRuleClasses.XcodegenRule.class, ObjcRuleClasses.SimulatorRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = ios_application, TYPE = BINARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceRule.java
index ca74722199..b467be4998 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.STRING;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,9 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for ios_device.
*/
-@BlazeRule(name = "ios_device",
- factoryClass = IosDevice.class,
- ancestors = { BaseRuleClasses.BaseRule.class })
public final class IosDeviceRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -53,6 +49,15 @@ public final class IosDeviceRule implements RuleDefinition {
.value("en"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("ios_device")
+ .factoryClass(IosDevice.class)
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = ios_device, TYPE = BINARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryRule.java
index 5233f3dd8e..f5bbdeefe8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionBinaryRule.java
@@ -15,7 +15,6 @@
package com.google.devtools.build.lib.rules.objc;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -24,12 +23,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for ios_extension_binary.
*/
-@BlazeRule(name = "ios_extension_binary",
- factoryClass = IosExtensionBinary.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.LinkingRule.class,
- ObjcRuleClasses.XcodegenRule.class })
public class IosExtensionBinaryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -43,6 +36,16 @@ public class IosExtensionBinaryRule implements RuleDefinition {
.setImplicitOutputsFunction(XcodeSupport.PBXPROJ)
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("ios_extension_binary")
+ .factoryClass(IosExtensionBinary.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.LinkingRule.class,
+ ObjcRuleClasses.XcodegenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = ios_extension_binary, TYPE = BINARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionRule.java
index ca35f478ed..eaf0f0a8fd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtensionRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
@@ -28,12 +27,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for ios_extension.
*/
-@BlazeRule(name = "ios_extension",
- factoryClass = IosExtension.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.ReleaseBundlingRule.class,
- ObjcRuleClasses.XcodegenRule.class })
public class IosExtensionRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -60,6 +53,16 @@ public class IosExtensionRule implements RuleDefinition {
.cfg(ReleaseBundlingSupport.SPLIT_ARCH_TRANSITION))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("ios_extension")
+ .factoryClass(IosExtension.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.ReleaseBundlingRule.class,
+ ObjcRuleClasses.XcodegenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = ios_extension, TYPE = BINARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java
index fb887c5d38..23e85ae721 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java
@@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.packages.Type.BOOLEAN;
import static com.google.devtools.build.lib.packages.Type.LABEL;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
@@ -31,14 +30,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
* Rule definition for objc_binary.
*/
// TODO(bazel-team): Remove bundling functionality (dependency on ApplicationRule, IPA output).
-@BlazeRule(name = "objc_binary",
- factoryClass = ObjcBinary.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.LinkingRule.class,
- ObjcRuleClasses.XcodegenRule.class,
- ObjcRuleClasses.ReleaseBundlingRule.class,
- ObjcRuleClasses.SimulatorRule.class })
public class ObjcBinaryRule implements RuleDefinition {
@Override
@@ -61,6 +52,17 @@ public class ObjcBinaryRule implements RuleDefinition {
.nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_binary")
+ .factoryClass(ObjcBinary.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.LinkingRule.class,
+ ObjcRuleClasses.XcodegenRule.class, ObjcRuleClasses.ReleaseBundlingRule.class,
+ ObjcRuleClasses.SimulatorRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_binary, TYPE = BINARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibraryRule.java
index 19180fa6f3..48df49cb29 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibraryRule.java
@@ -15,7 +15,6 @@
package com.google.devtools.build.lib.rules.objc;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -24,13 +23,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for objc_bundle_library.
*/
-@BlazeRule(name = "objc_bundle_library",
- factoryClass = ObjcBundleLibrary.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.ResourcesRule.class,
- ObjcRuleClasses.BundlingRule.class,
- ObjcRuleClasses.XcodegenRule.class })
public class ObjcBundleLibraryRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -44,6 +36,16 @@ public class ObjcBundleLibraryRule implements RuleDefinition {
.setImplicitOutputsFunction(XcodeSupport.PBXPROJ)
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_bundle_library")
+ .factoryClass(ObjcBundleLibrary.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.ResourcesRule.class,
+ ObjcRuleClasses.BundlingRule.class, ObjcRuleClasses.XcodegenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_bundle_library, TYPE = LIBRARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleRule.java
index 9be0d04831..fffa2d87be 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,9 +27,6 @@ import com.google.devtools.build.lib.util.FileTypeSet;
/**
* Rule definition for objc_bundle.
*/
-@BlazeRule(name = "objc_bundle",
- factoryClass = ObjcBundle.class,
- ancestors = { BaseRuleClasses.BaseRule.class })
public class ObjcBundleRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -45,6 +41,15 @@ public class ObjcBundleRule implements RuleDefinition {
.nonEmpty())
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_bundle")
+ .factoryClass(ObjcBundle.class)
+ .ancestors(BaseRuleClasses.BaseRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_bundle, TYPE = LIBRARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFrameworkRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFrameworkRule.java
index d160c1b494..e3bc19a98c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFrameworkRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcFrameworkRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,11 +27,6 @@ import com.google.devtools.build.lib.util.FileTypeSet;
/**
* Rule definition for objc_framework.
*/
-@BlazeRule(name = "objc_framework",
- factoryClass = ObjcFramework.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.SdkFrameworksDependerRule.class })
public class ObjcFrameworkRule implements RuleDefinition {
@Override
@@ -49,6 +43,15 @@ public class ObjcFrameworkRule implements RuleDefinition {
.nonEmpty())
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_framework")
+ .factoryClass(ObjcFramework.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.SdkFrameworksDependerRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_framework, TYPE = LIBRARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImportRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImportRule.java
index 5773a77a71..43cdb234f4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImportRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcImportRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,12 +27,6 @@ import com.google.devtools.build.lib.util.FileType;
/**
* Rule definition for {@code objc_import}.
*/
-@BlazeRule(name = "objc_import",
- factoryClass = ObjcImport.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.AlwaysLinkRule.class,
- ObjcRuleClasses.XcodegenRule.class })
public class ObjcImportRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -56,6 +49,16 @@ public class ObjcImportRule implements RuleDefinition {
.allowedFileTypes(FileType.of(".a")))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_import")
+ .factoryClass(ObjcImport.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.AlwaysLinkRule.class,
+ ObjcRuleClasses.XcodegenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_import, TYPE = LIBRARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java
index 36197aefd9..56f235bd90 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryRule.java
@@ -15,7 +15,6 @@
package com.google.devtools.build.lib.rules.objc;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -24,13 +23,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for objc_library.
*/
-@BlazeRule(name = "objc_library",
- factoryClass = ObjcLibrary.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.CompilingRule.class,
- ObjcRuleClasses.AlwaysLinkRule.class,
- ObjcRuleClasses.XcodegenRule.class })
public class ObjcLibraryRule implements RuleDefinition {
@Override
@@ -45,6 +37,16 @@ public class ObjcLibraryRule implements RuleDefinition {
.setImplicitOutputsFunction(XcodeSupport.PBXPROJ)
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_library")
+ .factoryClass(ObjcLibrary.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.CompilingRule.class,
+ ObjcRuleClasses.AlwaysLinkRule.class, ObjcRuleClasses.XcodegenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_library, TYPE = LIBRARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptionsRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptionsRule.java
index c7d1e18a12..7f7fbb3a04 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptionsRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcOptionsRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PLIST_TYPE;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,11 +27,6 @@ import com.google.devtools.build.lib.packages.Type;
/**
* Rule definition for {@code objc_options}.
*/
-@BlazeRule(name = "objc_options",
- factoryClass = ObjcOptions.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.CoptsRule.class })
public class ObjcOptionsRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -53,6 +47,15 @@ public class ObjcOptionsRule implements RuleDefinition {
.allowedFileTypes(PLIST_TYPE))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_options")
+ .factoryClass(ObjcOptions.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.CoptsRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_options, TYPE = OTHER, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
index 9762b8b02d..95fb906933 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
@@ -21,7 +21,6 @@ import static com.google.devtools.build.lib.packages.Type.LABEL;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -32,11 +31,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
*
* This is a temporary rule until it is better known how to support proto_library rules.
*/
-@BlazeRule(name = "objc_proto_library",
- factoryClass = ObjcProtoLibrary.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.ObjcProtoRule.class })
public class ObjcProtoLibraryRule implements RuleDefinition {
static final String OPTIONS_FILE_ATTR = "options_file";
static final String OUTPUT_CPP_ATTR = "output_cpp";
@@ -70,6 +64,15 @@ public class ObjcProtoLibraryRule implements RuleDefinition {
.value(env.getLabel("//tools/objc:xcodegen")))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_proto_library")
+ .factoryClass(ObjcProtoLibrary.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.ObjcProtoRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_proto_library, TYPE = LIBRARY, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index 4bcaf3a077..c223a73fc9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -29,7 +29,6 @@ import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
@@ -94,8 +93,8 @@ public class ObjcRuleClasses {
/**
* Returns an {@link Iterable} of {@link Artifact}s containing all the j2objc archives from the
* transitive closure of the rule through the "deps" attribute. This is useful for ensuring that
- * the j2objc archives are present for linking.
- *
+ * the j2objc archives are present for linking.
+ *
* @param ruleContext the {@link RuleContext} of the current rule
* @return an {@link Iterable} of j2objc library archive artifacts.
*/
@@ -177,7 +176,6 @@ public class ObjcRuleClasses {
/**
* Attributes for {@code objc_*} rules that have compiler options.
*/
- @BlazeRule(name = "$objc_opts_rule", type = RuleClassType.ABSTRACT)
public static class CoptsRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -193,12 +191,19 @@ public class ObjcRuleClasses {
.add(attr("copts", STRING_LIST))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_opts_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that use plists or copts.
*/
- @BlazeRule(name = "$objc_options_rule", type = RuleClassType.ABSTRACT)
public static class OptionsRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -217,12 +222,19 @@ public class ObjcRuleClasses {
.allowedRuleClasses("objc_options"))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_options_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Attributes for {@code objc_*} rules that can link in SDK frameworks.
*/
- @BlazeRule(name = "$objc_sdk_frameworks_depender_rule", type = RuleClassType.ABSTRACT)
public static class SdkFrameworksDependerRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
@@ -262,6 +274,14 @@ public class ObjcRuleClasses {
.add(attr("sdk_dylibs", STRING_LIST))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_sdk_frameworks_depender_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
@@ -286,9 +306,6 @@ public class ObjcRuleClasses {
* storyboards. These resources are used during compilation of the declaring rule as well as when
* bundling a dependent bundle (application, extension, etc.).
*/
- @BlazeRule(name = "$objc_resources_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { ResourceToolsRule.class, })
public static class ResourcesRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -390,13 +407,20 @@ public class ObjcRuleClasses {
.value(env.getLabel("//tools/objc:momczip_deploy.jar")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_resources_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(ResourceToolsRule.class)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that process resources (by defining or consuming
* them).
*/
- @BlazeRule(name = "$objc_resource_tools_rule", type = RuleClassType.ABSTRACT)
public static class ResourceToolsRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -409,12 +433,18 @@ public class ObjcRuleClasses {
.value(env.getLabel("//tools/objc:ibtoolzip_deploy.jar")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_resource_tools_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that export an xcode project.
*/
- @BlazeRule(name = "$objc_xcodegen_rule", type = RuleClassType.ABSTRACT)
public static class XcodegenRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -425,17 +455,19 @@ public class ObjcRuleClasses {
.value(env.getLabel("//tools/objc:dummy.c")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_xcodegen_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that can be input to compilation (i.e. can be
* dependencies of other compiling rules).
*/
- @BlazeRule(name = "$objc_compile_dependency_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = {
- ResourcesRule.class,
- SdkFrameworksDependerRule.class })
public static class CompileDependencyRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -472,26 +504,27 @@ public class ObjcRuleClasses {
.add(attr("sdk_includes", Type.STRING_LIST))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_compile_dependency_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(ResourcesRule.class, SdkFrameworksDependerRule.class)
+ .build();
+ }
}
-
+
/**
* Common attributes for {@code objc_*} rules that contain compilable content.
*/
- @BlazeRule(name = "$objc_compiling_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = {
- CompileDependencyRule.class,
- OptionsRule.class,
- CoptsRule.class })
public static class CompilingRule implements RuleDefinition {
-
private static final Iterable<String> ALLOWED_DEPS_RULE_CLASSES = ImmutableSet.of(
"objc_library",
"objc_import",
"objc_framework",
"objc_proto_library",
"j2objc_library");
-
+
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
return builder
@@ -558,14 +591,19 @@ public class ObjcRuleClasses {
.add(attr("defines", STRING_LIST))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_compiling_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CompileDependencyRule.class, OptionsRule.class, CoptsRule.class)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that can optionally be set to {@code alwayslink}.
*/
- @BlazeRule(name = "$objc_alwayslink_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { CompileDependencyRule.class, })
public static class AlwaysLinkRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -583,14 +621,19 @@ public class ObjcRuleClasses {
.add(attr("alwayslink", BOOLEAN))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_alwayslink_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CompileDependencyRule.class)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that link sources and dependencies.
*/
- @BlazeRule(name = "$objc_linking_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { CompilingRule.class, })
public static class LinkingRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -599,14 +642,20 @@ public class ObjcRuleClasses {
.value(env.getLabel("//tools/objc:dump_syms")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_linking_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(CompilingRule.class)
+ .build();
+ }
}
/**
* Common attributes for rules that uses ObjC proto compiler.
*/
- @BlazeRule(name = "$objc_proto_rule", type = RuleClassType.ABSTRACT)
public static class ObjcProtoRule implements RuleDefinition {
-
/**
* A Predicate that returns true if the ObjC proto compiler and its support deps are needed by
* the current rule.
@@ -641,18 +690,18 @@ public class ObjcRuleClasses {
.value(env.getLabel("//tools/objc:proto_support")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_proto_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
* Base rule definition for iOS test rules.
*/
- @BlazeRule(name = "$ios_test_base_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = {
- ReleaseBundlingRule.class,
- LinkingRule.class,
- XcodegenRule.class,
- SimulatorRule.class })
public static class IosTestBaseRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, final RuleDefinitionEnvironment env) {
@@ -698,16 +747,20 @@ public class ObjcRuleClasses {
.allowedFileTypes(PLIST_TYPE))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$ios_test_base_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(
+ ReleaseBundlingRule.class, LinkingRule.class, XcodegenRule.class, SimulatorRule.class)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that create a bundle.
*/
- @BlazeRule(name = "$objc_bundling_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = {
- OptionsRule.class,
- ResourceToolsRule.class, })
public static class BundlingRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -729,15 +782,20 @@ public class ObjcRuleClasses {
.allowedFileTypes(PLIST_TYPE))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_bundling_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(OptionsRule.class, ResourceToolsRule.class)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that create a bundle meant for release (e.g.
* application or extension).
*/
- @BlazeRule(name = "$objc_release_bundling_rule",
- type = RuleClassType.ABSTRACT,
- ancestors = { BundlingRule.class, })
public static class ReleaseBundlingRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -823,13 +881,19 @@ public class ObjcRuleClasses {
.value(env.getLabel("//tools/objc:bundlemerge")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_release_bundling_rule")
+ .type(RuleClassType.ABSTRACT)
+ .ancestors(BundlingRule.class)
+ .build();
+ }
}
/**
* Common attributes for {@code objc_*} rules that use the iOS simulator.
*/
- @BlazeRule(name = "$objc_simulator_rule",
- type = RuleClassType.ABSTRACT)
public static class SimulatorRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -839,6 +903,13 @@ public class ObjcRuleClasses {
.value(env.getLabel("//third_party/iossim:iossim")))
.build();
}
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$objc_simulator_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
}
/**
@@ -847,11 +918,11 @@ public class ObjcRuleClasses {
*/
static final class Tools {
private final RuleContext ruleContext;
-
+
Tools(RuleContext ruleContext) {
this.ruleContext = Preconditions.checkNotNull(ruleContext);
}
-
+
Artifact actoolzipDeployJar() {
return ruleContext.getPrerequisiteArtifact("$actoolzip_deploy", Mode.HOST);
}
@@ -859,15 +930,15 @@ public class ObjcRuleClasses {
Artifact ibtoolzipDeployJar() {
return ruleContext.getPrerequisiteArtifact("$ibtoolzip_deploy", Mode.HOST);
}
-
+
Artifact momczipDeployJar() {
return ruleContext.getPrerequisiteArtifact("$momczip_deploy", Mode.HOST);
}
-
+
FilesToRunProvider xcodegen() {
return ruleContext.getExecutablePrerequisite("$xcodegen", Mode.HOST);
}
-
+
FilesToRunProvider plmerge() {
return ruleContext.getExecutablePrerequisite("$plmerge", Mode.HOST);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcXcodeprojRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcXcodeprojRule.java
index c523f3b5b2..8814b23433 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcXcodeprojRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcXcodeprojRule.java
@@ -19,7 +19,6 @@ import static com.google.devtools.build.lib.packages.Type.BOOLEAN;
import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -28,11 +27,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder;
/**
* Rule definition for {@code objc_xcodeproj}.
*/
-@BlazeRule(name = "objc_xcodeproj",
- factoryClass = ObjcXcodeproj.class,
- ancestors = {
- BaseRuleClasses.BaseRule.class,
- ObjcRuleClasses.XcodegenRule.class })
public class ObjcXcodeprojRule implements RuleDefinition {
@Override
public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
@@ -65,6 +59,15 @@ public class ObjcXcodeprojRule implements RuleDefinition {
.value(true))
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("objc_xcodeproj")
+ .factoryClass(ObjcXcodeproj.class)
+ .ancestors(BaseRuleClasses.BaseRule.class, ObjcRuleClasses.XcodegenRule.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = objc_xcodeproj, TYPE = OTHER, FAMILY = Objective-C) -->
diff --git a/src/main/java/com/google/devtools/build/lib/rules/workspace/BindRule.java b/src/main/java/com/google/devtools/build/lib/rules/workspace/BindRule.java
index bfdb632328..e6eb084d0e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/workspace/BindRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/workspace/BindRule.java
@@ -18,7 +18,6 @@ import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL;
import com.google.devtools.build.lib.analysis.BaseRuleClasses.BaseRule;
-import com.google.devtools.build.lib.analysis.BlazeRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -27,10 +26,6 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
/**
* Binds an existing target to a target in the virtual //external package.
*/
-@BlazeRule(name = "bind",
- type = RuleClassType.WORKSPACE,
- ancestors = {BaseRule.class},
- factoryClass = Bind.class)
public final class BindRule implements RuleDefinition {
@Override
@@ -46,6 +41,16 @@ public final class BindRule implements RuleDefinition {
.setWorkspaceOnly()
.build();
}
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("bind")
+ .type(RuleClassType.WORKSPACE)
+ .ancestors(BaseRule.class)
+ .factoryClass(Bind.class)
+ .build();
+ }
}
/*<!-- #BLAZE_RULE (NAME = bind, TYPE = OTHER, FAMILY = General)[GENERIC_RULE] -->