diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java
index d0d0812..fb2a57f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentation.java
@@ -61,8 +61,7 @@
                 new Runfiles.Builder(ruleContext.getWorkspaceName())
                     .addTransitiveArtifacts(filesToBuild)
                     .build()))
-        .addNativeDeclaredProvider(
-            new AndroidInstrumentationInfoProvider(targetApk, instrumentationApk))
+        .addNativeDeclaredProvider(new AndroidInstrumentationInfo(targetApk, instrumentationApk))
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
similarity index 72%
rename from src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java
rename to src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
index 70659fc..d7e53f7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java
@@ -13,7 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.android;
 
-import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.NativeInfo;
@@ -24,24 +23,24 @@
  * AndroidInstrumentationTest}.
  */
 @Immutable
-public class AndroidInstrumentationInfoProvider extends NativeInfo {
+public class AndroidInstrumentationInfo extends NativeInfo {
 
   private static final String SKYLARK_NAME = "AndroidInstrumentationInfo";
-  static final NativeProvider<AndroidInstrumentationInfoProvider> ANDROID_INSTRUMENTATION_INFO =
-      new NativeProvider<AndroidInstrumentationInfoProvider>(
-          AndroidInstrumentationInfoProvider.class, SKYLARK_NAME) {};
+  static final NativeProvider<AndroidInstrumentationInfo> PROVIDER =
+      new NativeProvider<AndroidInstrumentationInfo>(
+          AndroidInstrumentationInfo.class, SKYLARK_NAME) {};
 
   private final Artifact targetApk;
   private final Artifact instrumentationApk;
 
-  public AndroidInstrumentationInfoProvider(Artifact targetApk, Artifact instrumentationApk) {
-    super(ANDROID_INSTRUMENTATION_INFO, ImmutableMap.<String, Object>of());
+  public AndroidInstrumentationInfo(Artifact targetApk, Artifact instrumentationApk) {
+    super(PROVIDER);
     this.targetApk = targetApk;
     this.instrumentationApk = instrumentationApk;
   }
 
   public Artifact getTargetApk() {
-    return  targetApk;
+    return targetApk;
   }
 
   public Artifact getInstrumentationApk() {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
index 1fb52d2..57a8880 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java
@@ -182,10 +182,8 @@
   private static Iterable<Artifact> getTargetApks(RuleContext ruleContext) {
     return Iterables.transform(
         ruleContext.getPrerequisites(
-            "instrumentations",
-            Mode.TARGET,
-            AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO),
-        AndroidInstrumentationInfoProvider::getTargetApk);
+            "instrumentations", Mode.TARGET, AndroidInstrumentationInfo.PROVIDER),
+        AndroidInstrumentationInfo::getTargetApk);
   }
 
   /**
@@ -195,10 +193,8 @@
   private static Iterable<Artifact> getInstrumentationApks(RuleContext ruleContext) {
     return Iterables.transform(
         ruleContext.getPrerequisites(
-            "instrumentations",
-            Mode.TARGET,
-            AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO),
-        AndroidInstrumentationInfoProvider::getInstrumentationApk);
+            "instrumentations", Mode.TARGET, AndroidInstrumentationInfo.PROVIDER),
+        AndroidInstrumentationInfo::getInstrumentationApk);
   }
 
   /** The support APKs from the {@code support_apks} and {@code fixtures} attributes. */
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java
index 860082c..000057a 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationRuleImplTest.java
@@ -71,8 +71,8 @@
         ")");
     ConfiguredTarget instrumentation = getConfiguredTarget("//javatests/com/app/instrumentation");
     assertThat(instrumentation).isNotNull();
-    AndroidInstrumentationInfoProvider instrumentationProvider =
-        instrumentation.get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO);
+    AndroidInstrumentationInfo instrumentationProvider =
+        instrumentation.get(AndroidInstrumentationInfo.PROVIDER);
     assertThat(instrumentationProvider.getTargetApk()).isNotNull();
     assertThat(instrumentationProvider.getTargetApk().prettyPrint())
         .isEqualTo("javatests/com/app/instrumentation/instrumentation-target.apk");
@@ -95,8 +95,8 @@
         ")");
     ConfiguredTarget instrumentation = getConfiguredTarget("//javatests/com/app/instrumentation");
     assertThat(instrumentation).isNotNull();
-    AndroidInstrumentationInfoProvider instrumentationProvider =
-        instrumentation.get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO);
+    AndroidInstrumentationInfo instrumentationProvider =
+        instrumentation.get(AndroidInstrumentationInfo.PROVIDER);
 
     Artifact targetApk = instrumentationProvider.getTargetApk();
     assertThat(targetApk).isNotNull();
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
index a80a221..647e583 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTestTest.java
@@ -239,14 +239,10 @@
   }
 
   private static Artifact getInstrumentationApk(ConfiguredTarget instrumentation) {
-    return instrumentation
-        .get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO)
-        .getInstrumentationApk();
+    return instrumentation.get(AndroidInstrumentationInfo.PROVIDER).getInstrumentationApk();
   }
 
   private static Artifact getTargetApk(ConfiguredTarget instrumentation) {
-    return instrumentation
-        .get(AndroidInstrumentationInfoProvider.ANDROID_INSTRUMENTATION_INFO)
-        .getTargetApk();
+    return instrumentation.get(AndroidInstrumentationInfo.PROVIDER).getTargetApk();
   }
 }
