Replace getToolsRepository() with getToolsLabel(String labelValue) which prepends the tools repository path to the given string and parses the result as a label.

This is a cleaner way to access the tools repository label.

--
MOS_MIGRATED_REVID=114105929
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 9f592fa..2c340bf 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
@@ -164,7 +164,7 @@
           .add(attr("args", STRING_LIST)
               .nonconfigurable("policy decision: should be consistent across configurations"))
           .add(attr("$test_runtime", LABEL_LIST).cfg(HOST).value(ImmutableList.of(
-              env.getLabel(env.getToolsRepository() + "//tools/test:runtime"))))
+              env.getToolsLabel("//tools/test:runtime"))))
 
           // TODO(bazel-team): TestActions may need to be run with coverage, so all tests
           // implicitly depend on crosstool, which provides gcov.  We could add gcov to
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 746eb9e..62ab8a6 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
@@ -130,7 +130,7 @@
       this.runfilesPrefix = runfilesPrefix;
       return this;
     }
-    
+
     public Builder setToolsRepository(String toolsRepository) {
       this.toolsRepository = toolsRepository;
       return this;
@@ -271,10 +271,10 @@
     public Label getLabel(String labelValue) {
       return LABELS.getUnchecked(labelValue);
     }
-    
+
     @Override
-    public String getToolsRepository() {
-      return toolsRepository;
+    public Label getToolsLabel(String labelValue) {
+      return getLabel(toolsRepository + labelValue);
     }
   }
 
@@ -309,7 +309,7 @@
    * The default runfiles prefix.
    */
   private final String runfilesPrefix;
-  
+
   /**
    * The path to the tools repository.
    */
@@ -405,7 +405,7 @@
   public String getRunfilesPrefix() {
     return runfilesPrefix;
   }
-  
+
   @Override
   public String getToolsRepository() {
     return toolsRepository;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
index 2eab411..45200fb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
@@ -28,7 +28,8 @@
   Label getLabel(String labelValue);
 
   /**
-   * Returns the path to the tools repository. It is different for blaze and bazel.
+   * Prepends the tools repository path to the given string and parses the result
+   * using {@link RuleDefinitionEnvironment#getLabel}
    */
-  String getToolsRepository();
+  Label getToolsLabel(String labelValue);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
index dc35d690..820e3d2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
@@ -42,8 +42,7 @@
         .add(attr("$debug_keystore", BuildType.LABEL)
             .cfg(HOST)
             .singleArtifact()
-            .value(environment.getLabel(
-                environment.getToolsRepository() + "//tools/android:debug_keystore")))
+            .value(environment.getToolsLabel("//tools/android:debug_keystore")))
         .add(attr(":cc_toolchain_split", BuildType.LABEL)
             .cfg(AndroidRuleClasses.ANDROID_SPLIT_TRANSITION)
             .value(BazelCppRuleClasses.CC_TOOLCHAIN))
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 c94b481..8b5171c 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
@@ -262,7 +262,7 @@
           .add(attr("copts", STRING_LIST))
           .add(
               attr("$stl_default", LABEL)
-                  .value(env.getLabel(env.getToolsRepository() + "//tools/cpp:stl")))
+                  .value(env.getToolsLabel("//tools/cpp:stl")))
           .add(attr(":stl", LABEL).value(STL))
           .build();
     }
@@ -541,7 +541,7 @@
                           // sure that the correct headers are used for inclusion.
                           // The only exception is STL itself,
                           // to avoid cycles in the dependency graph.
-                          Label stl = env.getLabel(env.getToolsRepository() + "//tools/cpp:stl");
+                          Label stl = env.getToolsLabel("//tools/cpp:stl");
                           return rule.getLabel().equals(stl) ? null : stl;
                         }
                       }))
@@ -575,7 +575,7 @@
           </p>
           <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
           .add(attr("malloc", LABEL)
-              .value(env.getLabel(env.getToolsRepository() + "//tools/cpp:malloc"))
+              .value(env.getToolsLabel("//tools/cpp:malloc"))
               .allowedFileTypes()
               .allowedRuleClasses("cc_library"))
           .add(attr(":default_malloc", LABEL).value(DEFAULT_MALLOC))
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 4667e67..572e3ae 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
@@ -81,8 +81,7 @@
         </p>
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("tools", LABEL_LIST).cfg(HOST).legacyAllowAnyFileType())
-        .add(attr("$genrule_setup", LABEL).cfg(HOST).value(
-            env.getLabel(env.getToolsRepository() + GENRULE_SETUP_LABEL)))
+        .add(attr("$genrule_setup", LABEL).cfg(HOST).value(env.getToolsLabel(GENRULE_SETUP_LABEL)))
 
         /* <!-- #BLAZE_RULE(genrule).ATTRIBUTE(outs) -->
         A list of files generated by this rule.
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 f343844..96cb41c 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
@@ -339,7 +339,7 @@
                 @Override
                 public Object getDefault(AttributeMap rule) {
                   return rule.get("use_testrunner", Type.BOOLEAN)
-                    ? env.getLabel(env.getToolsRepository() + JUNIT_TESTRUNNER)
+                    ? env.getToolsLabel(JUNIT_TESTRUNNER)
                     : null;
                 }
               }))
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java
index c73a22e..36d3a1f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java
@@ -83,7 +83,7 @@
           // do not depend on lib2to3:2to3 rule, because it creates circular dependencies
           // 2to3 is itself written in Python and depends on many libraries.
           .add(attr("$python2to3", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/python:2to3")))
+              .value(env.getToolsLabel("//tools/python:2to3")))
           .setPreferredDependencyPredicate(PyRuleClasses.PYTHON_SOURCE)
           .build();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java
index 18616cd..fc297e5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java
@@ -87,8 +87,7 @@
         .add(attr("$android_manifest_merge_tool", LABEL)
             .cfg(HOST)
             .exec()
-            .value(env.getLabel(env.getToolsRepository()
-                + AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
+            .value(env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
 
         /* <!-- #BLAZE_RULE(android_binary).ATTRIBUTE(multidex) -->
         Whether to split code into multiple dex files.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
index e385c3c..f187716 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
@@ -125,8 +125,8 @@
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("idl_parcelables", LABEL_LIST).direct_compile_time_input()
             .allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
-        .add(attr("$android_manifest_merge_tool", LABEL).cfg(HOST).exec().value(env.getLabel(
-            env.getToolsRepository() + AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
+        .add(attr("$android_manifest_merge_tool", LABEL).cfg(HOST).exec().value(
+            env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
         .advertiseProvider(JavaCompilationArgsProvider.class)
         .build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index ef3a4b3..d4ca2ad 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -317,8 +317,7 @@
                   .allowedFileTypes(ANY_FILE)
                   // TODO(bazel-team): Remove defaults and make mandatory when android_sdk targets
                   // have been updated to include manually specified Jack attributes.
-                  .value(environment.getLabel(
-                      environment.getToolsRepository() + "//tools/android/jack:android_jack")))
+                  .value(environment.getToolsLabel("//tools/android/jack:android_jack")))
           .add(attr("annotations_jar", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE))
           .add(attr("main_dex_classes", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE))
           .add(attr("apkbuilder", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE).exec())
@@ -328,22 +327,19 @@
                   .cfg(HOST)
                   .allowedFileTypes(ANY_FILE)
                   .exec()
-                  .value(environment.getLabel(
-                      environment.getToolsRepository() + "//tools/android/jack:jack")))
+                  .value(environment.getToolsLabel("//tools/android/jack:jack")))
           .add(
               attr("jill", LABEL)
                   .cfg(HOST)
                   .allowedFileTypes(ANY_FILE)
                   .exec()
-                  .value(environment.getLabel(
-                      environment.getToolsRepository() + "//tools/android/jack:jill")))
+                  .value(environment.getToolsLabel("//tools/android/jack:jill")))
           .add(
               attr("resource_extractor", LABEL)
                   .cfg(HOST)
                   .allowedFileTypes(ANY_FILE)
                   .exec()
-                  .value(environment.getLabel(environment.getToolsRepository()
-                      + "//tools/android/jack:resource_extractor")))
+                  .value(environment.getToolsLabel("//tools/android/jack:resource_extractor")))
           .build();
     }
 
@@ -365,9 +361,9 @@
     public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$android_resources_processor", LABEL).cfg(HOST).exec().value(
-              env.getLabel(env.getToolsRepository() + DEFAULT_RESOURCES_PROCESSOR)))
+              env.getToolsLabel(DEFAULT_RESOURCES_PROCESSOR)))
           .add(attr("$android_aar_generator", LABEL).cfg(HOST).exec().value(
-              env.getLabel(env.getToolsRepository() + DEFAULT_AAR_GENERATOR)))
+              env.getToolsLabel(DEFAULT_AAR_GENERATOR)))
           .build();
     }
 
@@ -488,10 +484,9 @@
           // TODO(ahumesky): It would be better to put this dependency in //tools/android somehow
           // like all the rest of android tools.
           .add(attr("$jarjar_bin", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(
-                  env.getToolsRepository() + "//third_party/java/jarjar:jarjar_bin")))
+              .value(env.getToolsLabel("//third_party/java/jarjar:jarjar_bin")))
           .add(attr("$idlclass", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/android:IdlClass")))
+              .value(env.getToolsLabel("//tools/android:IdlClass")))
           .build();
     }
 
@@ -545,25 +540,23 @@
               .aspect(JackAspect.class))
           // Proguard rule specifying master list of classes to keep during legacy multidexing.
           .add(attr("$build_incremental_dexmanifest", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
+              .value(env.getToolsLabel(BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
           .add(attr("$stubify_manifest", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + STUBIFY_MANIFEST_LABEL)))
+              .value(env.getToolsLabel(STUBIFY_MANIFEST_LABEL)))
           .add(attr("$shuffle_jars", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/android:shuffle_jars")))
+              .value(env.getToolsLabel("//tools/android:shuffle_jars")))
           .add(attr("$merge_dexzips", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/android:merge_dexzips")))
+              .value(env.getToolsLabel("//tools/android:merge_dexzips")))
           .add(attr("$incremental_install", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + INCREMENTAL_INSTALL_LABEL)))
+              .value(env.getToolsLabel(INCREMENTAL_INSTALL_LABEL)))
           .add(attr("$build_split_manifest", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + BUILD_SPLIT_MANIFEST_LABEL)))
+              .value(env.getToolsLabel(BUILD_SPLIT_MANIFEST_LABEL)))
           .add(attr("$strip_resources", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + STRIP_RESOURCES_LABEL)))
+              .value(env.getToolsLabel(STRIP_RESOURCES_LABEL)))
           .add(attr("$incremental_stub_application", LABEL)
-              .value(env.getLabel(env.getToolsRepository()
-                  + DEFAULT_INCREMENTAL_STUB_APPLICATION)))
+              .value(env.getToolsLabel(DEFAULT_INCREMENTAL_STUB_APPLICATION)))
           .add(attr("$incremental_split_stub_application", LABEL)
-              .value(env.getLabel(env.getToolsRepository()
-                  + DEFAULT_INCREMENTAL_SPLIT_STUB_APPLICATION)))
+              .value(env.getToolsLabel(DEFAULT_INCREMENTAL_SPLIT_STUB_APPLICATION)))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(dexopts) -->
           Additional command-line flags for the dx tool when generating classes.dex.
           Subject to <a href="make-variables.html">"Make variable"</a> substitution and
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java
index 5a7958b..8147cb8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java
@@ -50,8 +50,7 @@
               @Override
               public Object getDefault(AttributeMap rule) {
                 return rule.isAttributeValueExplicitlySpecified("proguard_specs")
-                    ? environment.getLabel(
-                        environment.getToolsRepository() + "//tools/jdk:proguard_whitelister")
+                    ? environment.getToolsLabel("//tools/jdk:proguard_whitelister")
                     : null;
               }
             }))
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 bc0183d..9438dd5 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
@@ -64,8 +64,7 @@
             .allowedFileTypes()
             .direct_compile_time_input())
         .add(attr("$runner_script_template", LABEL).cfg(HOST)
-            .value(env.getLabel(
-                env.getToolsRepository() + "//tools/objc:ios_runner.sh.mac_template")))
+            .value(env.getToolsLabel("//tools/objc:ios_runner.sh.mac_template")))
         .add(attr("$is_executable", BOOLEAN).value(true)
             .nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
         .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
index d7b29f4..84a9d43 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
@@ -48,7 +48,7 @@
   @Override
   public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) {
     final ImmutableList<Label> gcov =
-        ImmutableList.of(env.getLabel(env.getToolsRepository() + "//tools/objc:gcov"));
+        ImmutableList.of(env.getToolsLabel("//tools/objc:gcov"));
     return builder
         .requiresConfigurationFragments(
             ObjcConfiguration.class, J2ObjcConfiguration.class, AppleConfiguration.class)
@@ -70,7 +70,7 @@
                 .allowedFileTypes()
                 .allowedRuleClasses("ios_device")
                 .value(
-                    env.getLabel(env.getToolsRepository() + "//tools/objc/sim_devices:default")))
+                    env.getToolsLabel("//tools/objc/sim_devices:default")))
         /* <!-- #BLAZE_RULE(ios_test ).ATTRIBUTE(xctest) -->
         Whether this target contains tests using the XCTest testing framework.
         <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
@@ -132,18 +132,16 @@
         .add(attr("plugins", LABEL_LIST).allowedFileTypes(FileType.of("_deploy.jar")))
         .add(
             attr("$test_template", LABEL)
-                .value(
-                    env.getLabel(
-                        env.getToolsRepository() + "//tools/objc:ios_test.sh.bazel_template")))
+                .value(env.getToolsLabel("//tools/objc:ios_test.sh.bazel_template")))
         .add(
             attr("$test_runner", LABEL)
-                .value(env.getLabel(env.getToolsRepository() + "//tools/objc:testrunner")))
+                .value(env.getToolsLabel("//tools/objc:testrunner")))
         .add(
             attr(IosTest.MEMLEAKS_DEP, LABEL)
-                .value(env.getLabel(env.getToolsRepository() + "//tools/objc/memleaks:memleaks")))
+                .value(env.getToolsLabel("//tools/objc/memleaks:memleaks")))
         .add(
             attr(IosTest.MEMLEAKS_PLUGIN, LABEL)
-                .value(env.getLabel(env.getToolsRepository() + "//tools/objc:memleaks_plugin")))
+                .value(env.getToolsLabel("//tools/objc:memleaks_plugin")))
         .override(
             attr(":gcov", LABEL_LIST)
                 .cfg(HOST)
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 34b5b8e..9549ad1 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
@@ -50,8 +50,7 @@
             ImplicitOutputsFunction.fromFunctions(ReleaseBundlingSupport.IPA, XcodeSupport.PBXPROJ))
         // TODO(bazel-team): Remove these when this rule no longer produces a bundle.
         .add(attr("$runner_script_template", LABEL).cfg(HOST)
-            .value(env.getLabel(
-                env.getToolsRepository() + "//tools/objc:ios_runner.sh.mac_template")))
+            .value(env.getToolsLabel("//tools/objc:ios_runner.sh.mac_template")))
         .add(attr("$is_executable", BOOLEAN).value(true)
             .nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
         .build();
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 598edcf..fc5a9e6 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
@@ -76,11 +76,11 @@
             .allowedFileTypes(FileType.of(".py"))
             .cfg(HOST)
             .singleArtifact()
-            .value(env.getLabel(env.getToolsRepository() + "//tools/objc:compile_protos")))
+            .value(env.getToolsLabel("//tools/objc:compile_protos")))
         .add(attr(PROTO_SUPPORT_ATTR, LABEL)
             .legacyAllowAnyFileType()
             .cfg(HOST)
-            .value(env.getLabel(env.getToolsRepository() + "//tools/objc:proto_support")))
+            .value(env.getToolsLabel("//tools/objc:proto_support")))
         .add(attr(USE_OBJC_HEADER_NAMES_ATTR, BOOLEAN).value(false))
         .add(attr(LIBPROTOBUF_ATTR, LABEL).allowedRuleClasses("objc_library")
             .value(new ComputedDefault(OUTPUT_CPP_ATTR) {
@@ -92,7 +92,7 @@
               }
             }))
         .add(attr("$xcodegen", LABEL).cfg(HOST).exec()
-            .value(env.getLabel(env.getToolsRepository() + "//tools/objc:xcodegen")))
+            .value(env.getToolsLabel("//tools/objc:xcodegen")))
         .build();
   }
 
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 c8bbb65..5dca7d8 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
@@ -489,11 +489,11 @@
     public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$plmerge", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:plmerge")))
+              .value(env.getToolsLabel("//tools/objc:plmerge")))
           .add(attr("$actoolwrapper", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:actoolwrapper")))
+              .value(env.getToolsLabel("//tools/objc:actoolwrapper")))
           .add(attr("$ibtoolwrapper", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:ibtoolwrapper")))
+              .value(env.getToolsLabel("//tools/objc:ibtoolwrapper")))
           .build();
     }
     @Override
@@ -513,9 +513,9 @@
     public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$xcodegen", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:xcodegen")))
+              .value(env.getToolsLabel("//tools/objc:xcodegen")))
           .add(attr("$dummy_source", LABEL)
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:dummy.c")))
+              .value(env.getToolsLabel("//tools/objc:dummy.c")))
           .build();
     }
     @Override
@@ -732,16 +732,15 @@
           .add(attr("$dumpsyms", LABEL)
           .cfg(HOST)
           .singleArtifact()
-          .value(env.getLabel(env.getToolsRepository() + "//tools/objc:dump_syms")))
+          .value(env.getToolsLabel("//tools/objc:dump_syms")))
           .add(attr("$j2objc_dead_code_pruner", LABEL)
               .allowedFileTypes(FileType.of(".py"))
               .cfg(HOST)
               .exec()
               .singleArtifact()
-              .value(env.getLabel(
-                  env.getToolsRepository() + "//tools/objc:j2objc_dead_code_pruner")))
+              .value(env.getToolsLabel("//tools/objc:j2objc_dead_code_pruner")))
           .add(attr("$dummy_lib", LABEL)
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:dummy_lib")))
+              .value(env.getToolsLabel("//tools/objc:dummy_lib")))
         .build();
     }
     @Override
@@ -807,14 +806,12 @@
               attr("$momcwrapper", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(env.getLabel(env.getToolsRepository() + "//tools/objc:momcwrapper")))
+                  .value(env.getToolsLabel("//tools/objc:momcwrapper")))
           .add(
               attr("$swiftstdlibtoolwrapper", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(
-                      env.getLabel(
-                          env.getToolsRepository() + "//tools/objc:swiftstdlibtoolwrapper")))
+                  .value(env.getToolsLabel("//tools/objc:swiftstdlibtoolwrapper")))
           .build();
     }
 
@@ -952,13 +949,12 @@
               attr("$bundlemerge", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(env.getLabel(env.getToolsRepository() + "//tools/objc:bundlemerge")))
+                  .value(env.getToolsLabel("//tools/objc:bundlemerge")))
           .add(
               attr("$environment_plist", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(env.getLabel(
-                      env.getToolsRepository() + "//tools/objc:environment_plist")))
+                  .value(env.getToolsLabel("//tools/objc:environment_plist")))
           .build();
     }
     @Override
@@ -980,9 +976,9 @@
       return builder
           // Needed to run the binary in the simulator.
           .add(attr("$iossim", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//third_party/iossim:iossim")))
+              .value(env.getToolsLabel("//third_party/iossim:iossim")))
           .add(attr("$std_redirect_dylib", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:StdRedirect.dylib")))
+              .value(env.getToolsLabel("//tools/objc:StdRedirect.dylib")))
           .build();
     }
     @Override
@@ -1002,7 +998,7 @@
     public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$xcrunwrapper", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:xcrunwrapper")))
+              .value(env.getToolsLabel("//tools/objc:xcrunwrapper")))
           .build();
     }
     @Override
@@ -1015,3 +1011,4 @@
     }
   }
 }
+