public void register(Description<?> description) { Preconditions.checkNotNull(description); BuildRuleType type = description.getBuildRuleType(); types.put(type.getName(), type); factories.put(type, new DescribedRuleFactory<>(description)); descriptions.put(type, description); }
public class AndroidBuildConfigDescription implements Description<AndroidBuildConfigDescription.Arg> { public static final BuildRuleType TYPE = new BuildRuleType("android_build_config"); private static final BuildRuleType GEN_JAVA_TYPE = new BuildRuleType("gen_java_android_build_config"); private static final Flavor GEN_JAVA_FLAVOR = new Flavor(GEN_JAVA_TYPE.getName()); @Override public BuildRuleType getBuildRuleType() { return TYPE; } @Override public Arg createUnpopulatedConstructorArg() { return new Arg(); } @Override public <A extends Arg> BuildRule createBuildRule( BuildRuleParams params, BuildRuleResolver resolver, A args) { return createBuildRule( params, args.javaPackage, args.values.get(), args.valuesFile, /* useConstantExpressions */ false); } /** * @param values Collection whose entries identify fields for the generated {@code BuildConfig} * class. The values for fields can be overridden by values from the {@code valuesFile} file, * if present. * @param valuesFile Path to a file with values to override those in {@code values}. */ static AndroidBuildConfigJavaLibrary createBuildRule( BuildRuleParams params, String javaPackage, BuildConfigFields values, Optional<SourcePath> valuesFile, boolean useConstantExpressions) { // Create one build rule to generate BuildConfig.java. BuildRuleParams buildConfigParams = params.copyWithChanges( GEN_JAVA_TYPE, BuildTarget.builder(params.getBuildTarget()).setFlavor(GEN_JAVA_FLAVOR).build(), params.getDeclaredDeps(), params.getExtraDeps()); AndroidBuildConfig androidBuildConfig = new AndroidBuildConfig( buildConfigParams, javaPackage, values, valuesFile, useConstantExpressions); // Create a second build rule to compile BuildConfig.java and expose it as a JavaLibrary. BuildRuleParams javaLibraryParams = params.copyWithChanges( TYPE, params.getBuildTarget(), /* declaredDeps */ ImmutableSortedSet.<BuildRule>of(androidBuildConfig), /* extraDeps */ ImmutableSortedSet.<BuildRule>of()); return new AndroidBuildConfigJavaLibrary(javaLibraryParams, androidBuildConfig); } public static class Arg implements ConstructorArg { @Hint(name = "package") public String javaPackage; /** This will never be absent after this Arg is populated. */ public Optional<BuildConfigFields> values; /** If present, contents of file can override those of {@link #values}. */ public Optional<SourcePath> valuesFile; } }
public Builder register(Description<?> description) { BuildRuleType type = description.getBuildRuleType(); types.put(type.getName(), type); descriptions.put(type, description); return this; }