A prototype implementation of top-level aspects.
--
MOS_MIGRATED_REVID=101033236
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 3b40300..543c71e 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
@@ -31,6 +31,7 @@
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.graph.Digraph;
import com.google.devtools.build.lib.graph.Node;
+import com.google.devtools.build.lib.packages.AspectFactory;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClassProvider;
@@ -83,6 +84,8 @@
private final Map<String, RuleClass> ruleClassMap = new HashMap<>();
private final Map<String, Class<? extends RuleDefinition>> ruleDefinitionMap =
new HashMap<>();
+ private final Map<String, Class<? extends AspectFactory<?, ?, ?>>> aspectFactoryMap =
+ new HashMap<>();
private final Map<Class<? extends RuleDefinition>, RuleClass> ruleMap = new HashMap<>();
private final Map<Class<? extends RuleDefinition>, RuleDefinition> ruleDefinitionInstanceCache =
new HashMap<>();
@@ -117,6 +120,13 @@
return this;
}
+ public Builder addAspectFactory(
+ String name, Class<? extends AspectFactory<?, ?, ?>> configuredAspectFactoryClass) {
+ aspectFactoryMap.put(name, configuredAspectFactoryClass);
+
+ return this;
+ }
+
public Builder addConfigurationOptions(Class<? extends FragmentOptions> configurationOptions) {
this.configurationOptions.add(configurationOptions);
return this;
@@ -199,6 +209,7 @@
return new ConfiguredRuleClassProvider(
ImmutableMap.copyOf(ruleClassMap),
ImmutableMap.copyOf(ruleDefinitionMap),
+ ImmutableMap.copyOf(aspectFactoryMap),
defaultWorkspaceFile.toString(),
ImmutableList.copyOf(buildInfoFactories),
ImmutableList.copyOf(configurationOptions),
@@ -247,6 +258,11 @@
private final ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap;
/**
+ * Maps aspect name to the aspect factory meta class.
+ */
+ private final ImmutableMap<String, Class<? extends AspectFactory<?, ?, ?>>> aspectFactoryMap;
+
+ /**
* The configuration options that affect the behavior of the rules.
*/
private final ImmutableList<Class<? extends FragmentOptions>> configurationOptions;
@@ -272,6 +288,7 @@
public ConfiguredRuleClassProvider(
ImmutableMap<String, RuleClass> ruleClassMap,
ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap,
+ ImmutableMap<String, Class<? extends AspectFactory<?, ?, ?>>> aspectFactoryMap,
String defaultWorkspaceFile,
ImmutableList<BuildInfoFactory> buildInfoFactories,
ImmutableList<Class<? extends FragmentOptions>> configurationOptions,
@@ -282,6 +299,7 @@
this.ruleClassMap = ruleClassMap;
this.ruleDefinitionMap = ruleDefinitionMap;
+ this.aspectFactoryMap = aspectFactoryMap;
this.defaultWorkspaceFile = defaultWorkspaceFile;
this.buildInfoFactories = buildInfoFactories;
this.configurationOptions = configurationOptions;
@@ -302,6 +320,11 @@
return ruleClassMap;
}
+ @Override
+ public Map<String, Class<? extends AspectFactory<?, ?, ?>>> getAspectFactoryMap() {
+ return aspectFactoryMap;
+ }
+
/**
* Returns a list of build info factories that are needed for the supported languages.
*/