Delete the interface NativeAspectFactory and make native aspects extend from NativeAspectClass.
This a large refactoring of the aspects, currently we have the following:
- AspectClasses: The interface AspectClass is a implemented by either
SkylarkAspectClass or NativeAspectClass<NativeAspectFactory>.
They are wrappers for the AspectFactories and they hold the information about
the Class<> of the factory.
- AspectFactories (FooAspect.java): Represented by the interfaces
ConfiguredAspectFactory and NativeAspectFactory, also by
the interface ConfiguredNativeAspectFactory which is the union of the two
aforementioned interfaces.
All aspects implement ConfiguredNativeAspectFactory except Skylark aspects
which implement only ConfiguredAspectFactory.
After this CL the distinction between NativeAspectFactories and NativeAspectClasses
dissappear, namely aspect that extends NativeAspectClass is considered native
and if it implements ConfiguredAspectFactory it is configured.
Therefore the interfaces NativeAspectFactory and ConfiguredNativeAspectFactory
both disappear.
With this refactoring the aspectFactoryMap in the ConfiguredRuleClassProvider
changes its type from (String -> Class<? extends NativeAspectClass>)
to (String -> NativeAspectClass) which means it is now able to have an instance
of the aspect instead of its Class only.
By doing this, it is now possible to pass parameters when creating an
aspect in the ConfiguredRuleClassProvider.
--
MOS_MIGRATED_REVID=120819647
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
index ee5b3b6..bdb273e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
@@ -45,15 +45,11 @@
* A dummy aspect factory. Is there to demonstrate how to define aspects and so that we can test
* {@code attributeAspect}.
*/
- public static final class TestAspectFactory implements ConfiguredNativeAspectFactory {
- private final AspectDefinition definition;
+ public static final class TestAspectClass extends NativeAspectClass
+ implements ConfiguredAspectFactory {
+ private AspectDefinition definition;
- /**
- * Normal aspects will have an argumentless constructor and their definition will be hard-wired
- * as a static member. This one is different so that we can create the definition in a test
- * method.
- */
- private TestAspectFactory(AspectDefinition definition) {
+ public void setAspectDefinition(AspectDefinition definition) {
this.definition = definition;
}
@@ -69,6 +65,8 @@
}
}
+ public static final TestAspectClass TEST_ASPECT_CLASS = new TestAspectClass();
+
@Test
public void testAspectWithImplicitOrLateboundAttribute_AddsToAttributeMap() throws Exception {
Attribute implicit = attr("$runtime", BuildType.LABEL)
@@ -120,13 +118,11 @@
@Test
public void testAttributeAspect_WrapsAndAddsToMap() throws Exception {
AspectDefinition withAspects = new AspectDefinition.Builder("attribute_aspect")
- .attributeAspect("srcs", TestAspectFactory.class)
- .attributeAspect("deps", new NativeAspectClass<TestAspectFactory>(TestAspectFactory.class))
+ .attributeAspect("srcs", TEST_ASPECT_CLASS)
+ .attributeAspect("deps", TEST_ASPECT_CLASS)
.build();
- assertThat(withAspects.getAttributeAspects())
- .containsEntry("srcs", new NativeAspectClass<TestAspectFactory>(TestAspectFactory.class));
- assertThat(withAspects.getAttributeAspects())
- .containsEntry("deps", new NativeAspectClass<TestAspectFactory>(TestAspectFactory.class));
+ assertThat(withAspects.getAttributeAspects()).containsEntry("srcs", TEST_ASPECT_CLASS);
+ assertThat(withAspects.getAttributeAspects()).containsEntry("deps", TEST_ASPECT_CLASS);
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
index 253ac66..8a518bf 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java
@@ -38,6 +38,7 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.AspectDefinition;
import com.google.devtools.build.lib.packages.AspectParameters;
+import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
@@ -234,7 +235,7 @@
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
return builder
.add(attr("foo", LABEL_LIST).legacyAllowAnyFileType()
- .aspect(AspectWithEmptyLateBoundAttribute.class))
+ .aspect(ASPECT_WITH_EMPTY_LATE_BOUND_ATTRIBUTE))
.build();
}
@@ -245,7 +246,8 @@
}
}
- public static class AspectWithEmptyLateBoundAttribute implements ConfiguredNativeAspectFactory {
+ public static class AspectWithEmptyLateBoundAttribute extends NativeAspectClass
+ implements ConfiguredAspectFactory {
@Override
public AspectDefinition getDefinition(AspectParameters params) {
return new AspectDefinition.Builder("testaspect")
@@ -266,6 +268,8 @@
.build();
}
}
+ public static final AspectWithEmptyLateBoundAttribute ASPECT_WITH_EMPTY_LATE_BOUND_ATTRIBUTE =
+ new AspectWithEmptyLateBoundAttribute();
}
/**
@@ -293,8 +297,8 @@
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
return builder
- .add(attr("foo", LABEL_LIST).legacyAllowAnyFileType().aspect(
- AspectThatRegistersAction.class))
+ .add(attr("foo", LABEL_LIST).legacyAllowAnyFileType()
+ .aspect(ASPECT_THAT_REGISTERS_ACTION))
.add(attr(":action_listener", LABEL_LIST).cfg(HOST).value(ACTION_LISTENER))
.build();
}
@@ -306,7 +310,8 @@
}
}
- public static class AspectThatRegistersAction implements ConfiguredNativeAspectFactory {
+ public static class AspectThatRegistersAction extends NativeAspectClass
+ implements ConfiguredAspectFactory {
@Override
public AspectDefinition getDefinition(AspectParameters params) {
return new AspectDefinition.Builder("testaspect").build();
@@ -320,6 +325,8 @@
return new ConfiguredAspect.Builder("testaspect", ruleContext).build();
}
}
+ private static final AspectThatRegistersAction ASPECT_THAT_REGISTERS_ACTION =
+ new AspectThatRegistersAction();
}
/**
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java
index 882b483..bcdb951 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java
@@ -16,11 +16,11 @@
import com.google.common.testing.EqualsTester;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
+import com.google.devtools.build.lib.analysis.util.TestAspects;
import com.google.devtools.build.lib.analysis.util.TestAspects.AttributeAspect;
import com.google.devtools.build.lib.analysis.util.TestAspects.ExtraAttributeAspect;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.AspectParameters;
-import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.skyframe.AspectValue;
import org.junit.Test;
@@ -50,12 +50,9 @@
AspectParameters i2 = new AspectParameters.Builder()
.addAttribute("foo", "baz")
.build();
- NativeAspectClass<AttributeAspect> a1 =
- new NativeAspectClass<AttributeAspect>(AttributeAspect.class);
- NativeAspectClass<AttributeAspect> a1b =
- new NativeAspectClass<AttributeAspect>(AttributeAspect.class);
- NativeAspectClass<ExtraAttributeAspect> a2 =
- new NativeAspectClass<ExtraAttributeAspect>(ExtraAttributeAspect.class);
+ AttributeAspect a1 = TestAspects.ATTRIBUTE_ASPECT;
+ AttributeAspect a1b = TestAspects.ATTRIBUTE_ASPECT;
+ ExtraAttributeAspect a2 = TestAspects.EXTRA_ATTRIBUTE_ASPECT;
// label: //a:l1 or //a:l2
// aspectConfiguration: target or host
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
index 13d31cc..c534f69 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
@@ -101,14 +101,13 @@
update();
}
- private <T extends ConfiguredNativeAspectFactory>
- ListMultimap<Attribute, Dependency> dependentNodeMap(
- String targetName, Class<T> aspect) throws Exception {
+ private ListMultimap<Attribute, Dependency> dependentNodeMap(
+ String targetName, NativeAspectClass aspect) throws Exception {
Target target = packageManager.getTarget(reporter, Label.parseAbsolute(targetName));
return dependencyResolver.dependentNodeMap(
new TargetAndConfiguration(target, getTargetConfiguration()),
getHostConfiguration(),
- aspect != null ? Aspect.forNative(new NativeAspectClass<T>(aspect)) : null,
+ aspect != null ? Aspect.forNative(aspect) : null,
ImmutableSet.<ConfigMatchingProvider>of());
}
@@ -148,7 +147,7 @@
ListMultimap<Attribute, Dependency> map = dependentNodeMap("//a:a", null);
assertDep(
map, "foo", "//a:b",
- new AspectDescriptor(new NativeAspectClass<>(TestAspects.SimpleAspect.class)));
+ new AspectDescriptor(TestAspects.SIMPLE_ASPECT));
}
@Test
@@ -158,10 +157,10 @@
"simple(name='a', foo=[':b'])",
"simple(name='b', foo=[])");
ListMultimap<Attribute, Dependency> map =
- dependentNodeMap("//a:a", TestAspects.AttributeAspect.class);
+ dependentNodeMap("//a:a", TestAspects.ATTRIBUTE_ASPECT);
assertDep(
map, "foo", "//a:b",
- new AspectDescriptor(new NativeAspectClass<>(TestAspects.AttributeAspect.class)));
+ new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT));
}
@Test
@@ -170,7 +169,7 @@
pkg("a", "base(name='a')");
pkg("extra", "base(name='extra')");
ListMultimap<Attribute, Dependency> map =
- dependentNodeMap("//a:a", TestAspects.ExtraAttributeAspect.class);
+ dependentNodeMap("//a:a", TestAspects.EXTRA_ATTRIBUTE_ASPECT);
assertDep(map, "$dep", "//extra:extra");
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java
index 0e4908d..e2b0fa7 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyTest.java
@@ -23,12 +23,8 @@
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
import com.google.devtools.build.lib.analysis.util.TestAspects;
-import com.google.devtools.build.lib.analysis.util.TestAspects.AttributeAspect;
-import com.google.devtools.build.lib.analysis.util.TestAspects.SimpleAspect;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
-import com.google.devtools.build.lib.packages.NativeAspectClass;
-
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -84,10 +80,8 @@
@Test
public void withConfigurationAndAspects_BasicAccessors() throws Exception {
update();
- AspectDescriptor simpleAspect = new AspectDescriptor(
- new NativeAspectClass<SimpleAspect>(SimpleAspect.class));
- AspectDescriptor attributeAspect = new AspectDescriptor(
- new NativeAspectClass<AttributeAspect>(AttributeAspect.class));
+ AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT);
+ AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT);
ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect);
Dependency targetDep =
Dependency.withConfigurationAndAspects(
@@ -130,10 +124,8 @@
public void withConfigurationAndAspects_RejectsNullConfigWithNPE() throws Exception {
// Although the NullPointerTester should check this, this test invokes a different code path,
// because it includes aspects (which the NPT test will not).
- AspectDescriptor simpleAspect = new AspectDescriptor(
- new NativeAspectClass<SimpleAspect>(SimpleAspect.class));
- AspectDescriptor attributeAspect = new AspectDescriptor(
- new NativeAspectClass<AttributeAspect>(AttributeAspect.class));
+ AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT);
+ AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT);
ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect);
try {
@@ -160,10 +152,8 @@
@Test
public void withConfiguredAspects_BasicAccessors() throws Exception {
update();
- AspectDescriptor simpleAspect = new AspectDescriptor(
- new NativeAspectClass<TestAspects.SimpleAspect>(TestAspects.SimpleAspect.class));
- AspectDescriptor attributeAspect = new AspectDescriptor(
- new NativeAspectClass<AttributeAspect>(AttributeAspect.class));
+ AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT);
+ AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT);
ImmutableMap<AspectDescriptor, BuildConfiguration> twoAspectMap = ImmutableMap.of(
simpleAspect, getTargetConfiguration(), attributeAspect, getHostConfiguration());
Dependency targetDep =
@@ -200,10 +190,8 @@
@Test
public void withTransitionAndAspects_BasicAccessors() throws Exception {
- AspectDescriptor simpleAspect = new AspectDescriptor(
- new NativeAspectClass<>(SimpleAspect.class));
- AspectDescriptor attributeAspect = new AspectDescriptor(
- new NativeAspectClass<>(AttributeAspect.class));
+ AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT);
+ AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT);
ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect);
Dependency hostDep =
Dependency.withTransitionAndAspects(
@@ -262,12 +250,9 @@
BuildConfiguration host = getHostConfiguration();
BuildConfiguration target = getTargetConfiguration();
- AspectDescriptor simpleAspect = new AspectDescriptor(
- new NativeAspectClass<>(TestAspects.SimpleAspect.class));
- AspectDescriptor attributeAspect = new AspectDescriptor(
- new NativeAspectClass<>(TestAspects.AttributeAspect.class));
- AspectDescriptor errorAspect = new AspectDescriptor(
- new NativeAspectClass<>(TestAspects.ErrorAspect.class));
+ AspectDescriptor simpleAspect = new AspectDescriptor(TestAspects.SIMPLE_ASPECT);
+ AspectDescriptor attributeAspect = new AspectDescriptor(TestAspects.ATTRIBUTE_ASPECT);
+ AspectDescriptor errorAspect = new AspectDescriptor(TestAspects.ERROR_ASPECT);
ImmutableSet<AspectDescriptor> twoAspects = ImmutableSet.of(simpleAspect, attributeAspect);
ImmutableSet<AspectDescriptor> inverseAspects = ImmutableSet.of(attributeAspect, simpleAspect);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index 994ab41..3376a21 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -52,7 +52,6 @@
import com.google.devtools.build.lib.analysis.BuildView;
import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult;
import com.google.devtools.build.lib.analysis.CachingAnalysisEnvironment;
-import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.ConfiguredAttributeMapper;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -548,7 +547,7 @@
return getGeneratingSpawnAction(
Iterables.find(getFilesToBuild(target), artifactNamed(outputName)));
}
-
+
protected void simulateLoadingPhase() {
try {
ensureTargetsVisited(targetConfig.getAllLabels().values());
@@ -922,7 +921,7 @@
* is creating an Artifact.
*/
protected Artifact getBinArtifact(String packageRelativePath, ConfiguredTarget owner,
- Class<? extends ConfiguredAspectFactory> creatingAspectFactory) {
+ NativeAspectClass creatingAspectFactory) {
return getPackageRelativeDerivedArtifact(
packageRelativePath,
owner.getConfiguration().getBinDirectory(),
@@ -931,7 +930,7 @@
owner.getLabel(),
owner.getConfiguration(),
owner.getConfiguration(),
- new NativeAspectClass(creatingAspectFactory),
+ creatingAspectFactory,
AspectParameters.EMPTY)
.argument());
}
@@ -988,7 +987,7 @@
* is creating an Artifact.
*/
protected Artifact getGenfilesArtifact(String packageRelativePath, ConfiguredTarget owner,
- Class<? extends ConfiguredAspectFactory> creatingAspectFactory) {
+ NativeAspectClass creatingAspectFactory) {
return getGenfilesArtifact(
packageRelativePath, owner, creatingAspectFactory, AspectParameters.EMPTY);
}
@@ -996,7 +995,7 @@
protected Artifact getGenfilesArtifact(
String packageRelativePath,
ConfiguredTarget owner,
- Class<? extends ConfiguredAspectFactory> creatingAspectFactory,
+ NativeAspectClass creatingAspectFactory,
AspectParameters params) {
return getPackageRelativeDerivedArtifact(
packageRelativePath,
@@ -1006,7 +1005,7 @@
owner.getLabel(),
owner.getConfiguration(),
owner.getConfiguration(),
- new NativeAspectClass(creatingAspectFactory),
+ creatingAspectFactory,
params)
.argument());
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
index 7d1a959..dc5a02a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java
@@ -27,7 +27,7 @@
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.ConfiguredAspect;
-import com.google.devtools.build.lib.analysis.ConfiguredNativeAspectFactory;
+import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
@@ -48,6 +48,7 @@
import com.google.devtools.build.lib.packages.AspectParameters;
import com.google.devtools.build.lib.packages.Attribute.LateBoundLabel;
import com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.packages.NativeAspectClass;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder;
@@ -148,7 +149,8 @@
/**
* A base class for mock aspects to reduce boilerplate.
*/
- public abstract static class BaseAspect implements ConfiguredNativeAspectFactory {
+ public abstract static class BaseAspect extends NativeAspectClass
+ implements ConfiguredAspectFactory {
@Override
public ConfiguredAspect create(
ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
@@ -164,7 +166,8 @@
}
}
- private static final AspectDefinition SIMPLE_ASPECT =
+ public static final SimpleAspect SIMPLE_ASPECT = new SimpleAspect();
+ private static final AspectDefinition SIMPLE_ASPECT_DEFINITION =
new AspectDefinition.Builder("simple").build();
/**
@@ -173,16 +176,19 @@
public static class SimpleAspect extends BaseAspect {
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- return SIMPLE_ASPECT;
+ return SIMPLE_ASPECT_DEFINITION;
}
}
- private static final AspectDefinition EXTRA_ATTRIBUTE_ASPECT =
+ public static final ExtraAttributeAspect EXTRA_ATTRIBUTE_ASPECT = new ExtraAttributeAspect();
+ private static final AspectDefinition EXTRA_ATTRIBUTE_ASPECT_DEFINITION =
new AspectDefinition.Builder("extra_attribute")
.add(attr("$dep", LABEL).value(Label.parseAbsoluteUnchecked("//extra:extra")))
.build();
- private static final AspectDefinition EXTRA_ATTRIBUTE_ASPECT_REQUIRING_PROVIDER =
+ private static final ExtraAttributeAspectRequiringProvider
+ EXTRA_ATTRIBUTE_ASPECT_REQUIRING_PROVIDER = new ExtraAttributeAspectRequiringProvider();
+ private static final AspectDefinition EXTRA_ATTRIBUTE_ASPECT_REQUIRING_PROVIDER_DEFINITION =
new AspectDefinition.Builder("extra_attribute_with_provider")
.add(attr("$dep", LABEL).value(Label.parseAbsoluteUnchecked("//extra:extra")))
.requireProvider(RequiredProvider.class)
@@ -194,12 +200,14 @@
public static class ExtraAttributeAspect extends BaseAspect {
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- return EXTRA_ATTRIBUTE_ASPECT;
+ return EXTRA_ATTRIBUTE_ASPECT_DEFINITION;
}
}
- private static final AspectDefinition ATTRIBUTE_ASPECT = new AspectDefinition.Builder("attribute")
- .attributeAspect("foo", AttributeAspect.class)
+ public static final AttributeAspect ATTRIBUTE_ASPECT = new AttributeAspect();
+ private static final AspectDefinition ATTRIBUTE_ASPECT_DEFINITION =
+ new AspectDefinition.Builder("attribute")
+ .attributeAspect("foo", ATTRIBUTE_ASPECT)
.build();
/**
@@ -208,7 +216,7 @@
public static class AttributeAspect extends BaseAspect {
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- return ATTRIBUTE_ASPECT;
+ return ATTRIBUTE_ASPECT_DEFINITION;
}
}
@@ -218,27 +226,28 @@
public static class ExtraAttributeAspectRequiringProvider extends BaseAspect {
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- return EXTRA_ATTRIBUTE_ASPECT_REQUIRING_PROVIDER;
+ return EXTRA_ATTRIBUTE_ASPECT_REQUIRING_PROVIDER_DEFINITION;
}
}
public static class AspectRequiringProvider extends BaseAspect {
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- return ASPECT_REQUIRING_PROVIDER;
+ return ASPECT_REQUIRING_PROVIDER_DEFINITION;
}
}
/**
* An aspect that has a definition depending on parameters provided by originating rule.
*/
- public static class ParametrizedDefinitionAspect implements ConfiguredNativeAspectFactory {
+ public static class ParametrizedDefinitionAspect extends NativeAspectClass
+ implements ConfiguredAspectFactory {
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
AspectDefinition.Builder builder =
new AspectDefinition.Builder("parametrized_definition_aspect")
- .attributeAspect("foo", ParametrizedDefinitionAspect.class);
+ .attributeAspect("foo", this);
ImmutableCollection<String> baz = aspectParameters.getAttribute("baz");
if (baz != null) {
try {
@@ -274,8 +283,12 @@
}
}
+ private static final ParametrizedDefinitionAspect PARAMETRIZED_DEFINITION_ASPECT =
+ new ParametrizedDefinitionAspect();
- private static final AspectDefinition ASPECT_REQUIRING_PROVIDER =
+ private static final AspectRequiringProvider ASPECT_REQUIRING_PROVIDER =
+ new AspectRequiringProvider();
+ private static final AspectDefinition ASPECT_REQUIRING_PROVIDER_DEFINITION =
new AspectDefinition.Builder("requiring_provider")
.requireProvider(RequiredProvider.class)
.build();
@@ -283,7 +296,9 @@
/**
* An aspect that raises an error.
*/
- public static class ErrorAspect implements ConfiguredNativeAspectFactory {
+ public static class ErrorAspect extends NativeAspectClass
+ implements ConfiguredAspectFactory {
+
@Override
public ConfiguredAspect create(
ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
@@ -293,12 +308,14 @@
@Override
public AspectDefinition getDefinition(AspectParameters aspectParameters) {
- return ERROR_ASPECT;
+ return ERROR_ASPECT_DEFINITION;
}
}
- private static final AspectDefinition ERROR_ASPECT = new AspectDefinition.Builder("error")
- .attributeAspect("bar", ErrorAspect.class)
+ public static final ErrorAspect ERROR_ASPECT = new ErrorAspect();
+ private static final AspectDefinition ERROR_ASPECT_DEFINITION =
+ new AspectDefinition.Builder("error")
+ .attributeAspect("bar", ERROR_ASPECT)
.build();
/**
@@ -341,9 +358,9 @@
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
.add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)
- .aspect(SimpleAspect.class))
+ .aspect(SIMPLE_ASPECT))
.add(attr("bar", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)
- .aspect(SimpleAspect.class))
+ .aspect(SIMPLE_ASPECT))
.build();
}
@@ -363,7 +380,7 @@
*/
public static class AspectRequiringProviderRule implements RuleDefinition {
- private static final class TestAspectParametersExtractor implements
+ private static final class TestAspectParametersExtractor implements
Function<Rule, AspectParameters> {
@Override
public AspectParameters apply(Rule rule) {
@@ -381,7 +398,7 @@
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
.add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)
- .aspect(AspectRequiringProvider.class, new TestAspectParametersExtractor()))
+ .aspect(ASPECT_REQUIRING_PROVIDER, new TestAspectParametersExtractor()))
.add(attr("baz", STRING))
.build();
@@ -422,7 +439,7 @@
.add(
attr("foo", LABEL_LIST)
.allowedFileTypes(FileTypeSet.ANY_FILE)
- .aspect(ParametrizedDefinitionAspect.class, new TestAspectParametersExtractor()))
+ .aspect(PARAMETRIZED_DEFINITION_ASPECT, new TestAspectParametersExtractor()))
.add(attr("baz", STRING))
.build();
}
@@ -445,7 +462,7 @@
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
.add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)
- .aspect(ExtraAttributeAspectRequiringProvider.class))
+ .aspect(EXTRA_ATTRIBUTE_ASPECT_REQUIRING_PROVIDER))
.build();
}
@@ -468,7 +485,7 @@
public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
return builder
.add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)
- .aspect(ErrorAspect.class))
+ .aspect(ERROR_ASPECT))
.add(attr("bar", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE))
.build();
}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
index 07d5a28..c6d7ce2 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
@@ -219,7 +219,7 @@
attr("x", LABEL_LIST)
.allowedFileTypes(txtFiles)
.mandatory()
- .aspect(TestAspects.SimpleAspect.class)
+ .aspect(TestAspects.SIMPLE_ASPECT)
.build();
{
@@ -238,7 +238,7 @@
.cloneBuilder()
.nonEmpty()
.allowedRuleClasses(ruleClasses)
- .aspect(TestAspects.ErrorAspect.class)
+ .aspect(TestAspects.ERROR_ASPECT)
.build();
assertEquals("x", childAttr2.getName());
assertEquals(txtFiles, childAttr2.getAllowedFileTypesPredicate());