Inject the TOOLS_REPOSITORY constant in the RuleClassProvider instead of using Constants.java

It also includes one example on how to use the new mechanism in BazelCppRuleClasses.

This is the first phase for the removal of the TOOLS_REPOSITORY constant.

--
MOS_MIGRATED_REVID=113244399
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 ab0a534..746eb9e 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
@@ -85,6 +85,7 @@
     private final StringBuilder defaultWorkspaceFile = new StringBuilder();
     private Label preludeLabel;
     private String runfilesPrefix;
+    private String toolsRepository;
     private final List<ConfigurationFragmentFactory> configurationFragments = new ArrayList<>();
     private final List<BuildInfoFactory> buildInfoFactories = new ArrayList<>();
     private final List<Class<? extends FragmentOptions>> configurationOptions = new ArrayList<>();
@@ -129,6 +130,11 @@
       this.runfilesPrefix = runfilesPrefix;
       return this;
     }
+    
+    public Builder setToolsRepository(String toolsRepository) {
+      this.toolsRepository = toolsRepository;
+      return this;
+    }
 
     public Builder setPrerequisiteValidator(PrerequisiteValidator prerequisiteValidator) {
       this.prerequisiteValidator = prerequisiteValidator;
@@ -246,6 +252,7 @@
       return new ConfiguredRuleClassProvider(
           preludeLabel,
           runfilesPrefix,
+          toolsRepository,
           ImmutableMap.copyOf(ruleClassMap),
           ImmutableMap.copyOf(ruleDefinitionMap),
           ImmutableMap.copyOf(aspectFactoryMap),
@@ -264,6 +271,11 @@
     public Label getLabel(String labelValue) {
       return LABELS.getUnchecked(labelValue);
     }
+    
+    @Override
+    public String getToolsRepository() {
+      return toolsRepository;
+    }
   }
 
   /**
@@ -297,6 +309,11 @@
    * The default runfiles prefix.
    */
   private final String runfilesPrefix;
+  
+  /**
+   * The path to the tools repository.
+   */
+  private final String toolsRepository;
 
   /**
    * Maps rule class name to the metaclass instance for that rule.
@@ -345,6 +362,7 @@
   private ConfiguredRuleClassProvider(
       Label preludeLabel,
       String runfilesPrefix,
+      String toolsRepository,
       ImmutableMap<String, RuleClass> ruleClassMap,
       ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap,
       ImmutableMap<String, Class<? extends NativeAspectFactory>> aspectFactoryMap,
@@ -359,6 +377,7 @@
       List<Class<? extends FragmentOptions>> buildOptions) {
     this.preludeLabel = preludeLabel;
     this.runfilesPrefix = runfilesPrefix;
+    this.toolsRepository = toolsRepository;
     this.ruleClassMap = ruleClassMap;
     this.ruleDefinitionMap = ruleDefinitionMap;
     this.aspectFactoryMap = aspectFactoryMap;
@@ -386,6 +405,11 @@
   public String getRunfilesPrefix() {
     return runfilesPrefix;
   }
+  
+  @Override
+  public String getToolsRepository() {
+    return toolsRepository;
+  }
 
   @Override
   public Map<String, RuleClass> getRuleClassMap() {