Description redacted.
--
MOS_MIGRATED_REVID=96384950
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
index 92eae73..e1ebaec 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaImportRule.java
@@ -25,7 +25,6 @@
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.packages.RuleClass.Builder;
 import com.google.devtools.build.lib.rules.java.JavaImportBaseRule;
-import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
 
 /**
  * Rule definition for the java_import rule.
@@ -44,7 +43,6 @@
                 "java_library", "java_import", "cc_library", "cc_binary"))
             .allowedFileTypes()  // none allowed
             .validityPredicate(ANY_EDGE))
-        .advertiseProvider(JavaSourceInfoProvider.class)
         .build();
 
   }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java
index 6e7f85a..a7a7453 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java
@@ -29,7 +29,6 @@
 import com.google.devtools.build.lib.rules.java.J2ObjcConfiguration;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration;
-import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
 
 /**
  * Common attributes for Java rules.
@@ -149,7 +148,6 @@
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("exported_plugins", LABEL_LIST).cfg(HOST).allowedRuleClasses("java_plugin")
             .legacyAllowAnyFileType())
-        .advertiseProvider(JavaSourceInfoProvider.class)
         .advertiseProvider(JavaCompilationArgsProvider.class)
         .build();
   }
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 1addcc9..925dd39 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
@@ -43,136 +43,122 @@
     return builder
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(srcs) -->
          The list of source files that are processed to create the target.
-         ${SYNOPSIS}
-         <p><code>srcs</code> files of type <code>.java</code> are compiled.
-         <em>For readability's sake</em>, it is not good to put the name of a
-         generated <code>.java</code> source file into the <code>srcs</code>.
-         Instead, put the depended-on rule name in the <code>srcs</code>, as
-         described below.
-         </p>
-         <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
-         compiled. (This is useful if you need to generate a set of .java files with
-         a genrule or build extension.)
-         </p>
-         <p>This rule currently forces source and class compatibility with Java 7,
-         although try with resources is not supported.
-         </p>
-         <p><code>srcs</code> files of type <code>.jar</code> are linked in.
-         (This is useful if you have third-party <code>.jar</code> files
-         with no source.)
-         </p>
-         <p>If <code>srcs</code> is omitted, then any dependency specified in
-         <code>deps</code> is exported from this rule (see
-         <a href="#java_library.exports">java_library's exports</a> for more
-         information about exporting dependencies). However, this behavior will be
-         deprecated soon; try not to rely on it.
-         </p>
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-        .add(
-            attr("srcs", LABEL_LIST)
-                .direct_compile_time_input()
-                .allowedFileTypes(
-                    JavaSemantics.JAVA_SOURCE, JavaSemantics.JAR, JavaSemantics.SOURCE_JAR))
+        ${SYNOPSIS}
+        <p><code>srcs</code> files of type <code>.java</code> are compiled.
+        <em>For readability's sake</em>, it is not good to put the name of a
+        generated <code>.java</code> source file into the <code>srcs</code>.
+        Instead, put the depended-on rule name in the <code>srcs</code>, as
+        described below.
+        </p>
+        <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
+        compiled. (This is useful if you need to generate a set of .java files with
+        a genrule or build extension.)
+        </p>
+        <p>This rule currently forces source and class compatibility with Java 7,
+        although try with resources is not supported.
+        </p>
+        <p><code>srcs</code> files of type <code>.jar</code> are linked in.
+        (This is useful if you have third-party <code>.jar</code> files
+        with no source.)
+        </p>
+        <p>If <code>srcs</code> is omitted, then any dependency specified in
+        <code>deps</code> is exported from this rule (see
+        <a href="#java_library.exports">java_library's exports</a> for more
+        information about exporting dependencies). However, this behavior will be
+        deprecated soon; try not to rely on it.
+        </p>
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        .add(attr("srcs", LABEL_LIST)
+            .direct_compile_time_input()
+            .allowedFileTypes(JavaSemantics.JAVA_SOURCE, JavaSemantics.JAR,
+                JavaSemantics.SOURCE_JAR))
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(deps) -->
-         The list of other libraries to link against.
-         ${SYNOPSIS}
-         Permitted library types are: <code>android_library</code>,
-         <code>java_library</code> with <code>android</code> constraint and
-         <code>cc_library</code> wrapping or producing <code>.so</code> native libraries
-         for the Android target platform.
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-        .override(
-            builder
-                .copy("deps")
-                .allowedRuleClasses(AndroidRuleClasses.ALLOWED_DEPENDENCIES)
-                .allowedFileTypes()
-                .aspect(AndroidNeverlinkAspect.class)
-                .aspect(JackAspect.class))
+        The list of other libraries to link against.
+        ${SYNOPSIS}
+        Permitted library types are: <code>android_library</code>,
+        <code>java_library</code> with <code>android</code> constraint and
+        <code>cc_library</code> wrapping or producing <code>.so</code> native libraries
+        for the Android target platform.
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        .override(builder.copy("deps")
+            .allowedRuleClasses(AndroidRuleClasses.ALLOWED_DEPENDENCIES)
+            .allowedFileTypes())
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(resources) -->
-         The <code>android_resources</code> target assigned to this library.
-         ${SYNOPSIS}
-         If specified, the resources will be added to any <code>android_binary</code>
-         depending on this library.
-         <p>Only an <code>android_resource</code> rule with the attribute
-         <code>inline_constants</code> set to 0 can be used in this case.</p>
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-        .add(attr("resources", LABEL).allowedFileTypes().allowedRuleClasses("android_resources"))
+        The <code>android_resources</code> target assigned to this library.
+        ${SYNOPSIS}
+        If specified, the resources will be added to any <code>android_binary</code>
+        depending on this library.
+        <p>Only an <code>android_resource</code> rule with the attribute
+        <code>inline_constants</code> set to 0 can be used in this case.</p>
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        .add(attr("resources", LABEL)
+            .allowedFileTypes()
+            .allowedRuleClasses("android_resources"))
         .add(attr("alwayslink", BOOLEAN).undocumented("purely informational for now"))
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(neverlink) -->
-         Only use this library for compilation and not at runtime.
-         ${SYNOPSIS}
-         The outputs of a rule marked as <code>neverlink</code> will not be used in
-         <code>.apk</code> creation. Useful if the library will be provided by the
-         runtime environment during execution.
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        Only use this library for compilation and not at runtime.
+        ${SYNOPSIS}
+        The outputs of a rule marked as <code>neverlink</code> will not be used in
+        <code>.apk</code> creation. Useful if the library will be provided by the
+        runtime environment during execution.
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("neverlink", BOOLEAN).value(false))
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(idl_import_root) -->
-         Package-relative path to the root of the java package tree containing idl
-         sources included in this library.
-         ${SYNOPSIS}
-         This path will be used as the import root when processing idl sources that
-         depend on this library. (See
-         <a href="#android_library_examples.idl_import_root">examples</a>.)
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        Package-relative path to the root of the java package tree containing idl
+        sources included in this library.
+        ${SYNOPSIS}
+        This path will be used as the import root when processing idl sources that
+        depend on this library. (See
+        <a href="#android_library_examples.idl_import_root">examples</a>.)
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("idl_import_root", STRING))
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(idl_srcs) -->
-         List of Android IDL definitions to translate to Java interfaces.
-         ${SYNOPSIS}
-         After the Java interfaces are generated, they will be compiled together
-         with the contents of <code>srcs</code>.
-         <p>These files will be made available as imports for any
-         <code>android_library</code> target that depends on this library, directly
-         or via its transitive closure.</p>
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-        .add(
-            attr("idl_srcs", LABEL_LIST)
-                .direct_compile_time_input()
-                .allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
+        List of Android IDL definitions to translate to Java interfaces.
+        ${SYNOPSIS}
+        After the Java interfaces are generated, they will be compiled together
+        with the contents of <code>srcs</code>.
+        <p>These files will be made available as imports for any
+        <code>android_library</code> target that depends on this library, directly
+        or via its transitive closure.</p>
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        .add(attr("idl_srcs", LABEL_LIST).direct_compile_time_input()
+            .allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(idl_parcelables) -->
-         List of Android IDL definitions to supply as imports.
-         ${SYNOPSIS}
-         These files will be made available as imports for any
-         <code>android_library</code> target that depends on this library, directly
-         or via its transitive closure, but will not be translated to Java
-         or compiled.
-         <p>Only <code>.aidl</code> files that correspond directly to
-         <code>.java</code> sources in this library should be included (e.g., custom
-         implementations of Parcelable), otherwise <code>idl_srcs</code> should be
-         used.</p>
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-        .add(
-            attr("idl_parcelables", LABEL_LIST)
-                .direct_compile_time_input()
-                .allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
+        List of Android IDL definitions to supply as imports.
+        ${SYNOPSIS}
+        These files will be made available as imports for any
+        <code>android_library</code> target that depends on this library, directly
+        or via its transitive closure, but will not be translated to Java
+        or compiled.
+        <p>Only <code>.aidl</code> files that correspond directly to
+        <code>.java</code> sources in this library should be included (e.g., custom
+        implementations of Parcelable), otherwise <code>idl_srcs</code> should be
+        used.</p>
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        .add(attr("idl_parcelables", LABEL_LIST).direct_compile_time_input()
+            .allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
         /* <!-- #BLAZE_RULE(android_library).ATTRIBUTE(proguard_specs) -->
-         Files to be used as Proguard specification.
-         ${SYNOPSIS}
-         These will describe the set of specifications to be used by Proguard. If specified,
-         they will be added to any <code>android_binary</code> target depending on this library.
+        Files to be used as Proguard specification.
+        ${SYNOPSIS}
+        These will describe the set of specifications to be used by Proguard. If specified,
+        they will be added to any <code>android_binary</code> target depending on this library.
 
-         The files included here must only have idempotent rules, namely -dontnote, -dontwarn,
-         assumenosideeffects, and rules that start with -keep. Other options can only appear in
-         <code>android_binary</code>'s proguard_specs, to ensure non-tautological merges.
-         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+        The files included here must only have idempotent rules, namely -dontnote, -dontwarn,
+        assumenosideeffects, and rules that start with -keep. Other options can only appear in
+        <code>android_binary</code>'s proguard_specs, to ensure non-tautological merges.
+        <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("proguard_specs", LABEL_LIST).legacyAllowAnyFileType())
-        .add(
-            attr("$proguard_whitelister", LABEL)
-                .cfg(HOST)
-                .exec()
-                .value(
-                    new Attribute.ComputedDefault() {
-                      @Override
-                      public Object getDefault(AttributeMap rule) {
-                        return rule.isAttributeValueExplicitlySpecified("proguard_specs")
-                            ? env.getLabel(Constants.ANDROID_DEP_PREFIX + "proguard_whitelister")
-                            : null;
-                      }
-                    }))
-        .add(
-            attr("$android_manifest_merge_tool", LABEL)
-                .cfg(HOST)
-                .exec()
-                .value(env.getLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
+        .add(attr("$proguard_whitelister", LABEL).cfg(HOST).exec().value(
+            new Attribute.ComputedDefault() {
+            @Override
+            public Object getDefault(AttributeMap rule) {
+              return rule.isAttributeValueExplicitlySpecified("proguard_specs")
+                  ? env.getLabel(Constants.ANDROID_DEP_PREFIX + "proguard_whitelister")
+                  : null;
+            }
+        }))
+        .add(attr("$android_manifest_merge_tool", LABEL).cfg(HOST).exec().value(env.getLabel(
+            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 9f71940..abeaec4 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
@@ -573,167 +573,138 @@
     public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) {
       return builder
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(srcs) -->
-           The list of source files that are processed to create the target.
-           ${SYNOPSIS}
-           <p><code>srcs</code> files of type <code>.java</code> are compiled.
-           <em>For readability's sake</em>, it is not good to put the name of a
-           generated <code>.java</code> source file into the <code>srcs</code>.
-           Instead, put the depended-on rule name in the <code>srcs</code>, as
-           described below.
-           </p>
-           <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
-           compiled. (This is useful if you need to generate a set of .java files with
-           a genrule or build extension.)
-           </p>
-           <p>This rule currently forces source and class compatibility with Java 6.
-           </p>
-           <p><code>srcs</code> files of type <code>.jar</code> are linked in.
-           (This is useful if you have third-party <code>.jar</code> files
-           with no source.)
-           </p>
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-          .add(
-              attr("srcs", LABEL_LIST)
-                  .direct_compile_time_input()
-                  .allowedFileTypes(
-                      JavaSemantics.JAVA_SOURCE, JavaSemantics.JAR, JavaSemantics.SOURCE_JAR))
+          The list of source files that are processed to create the target.
+          ${SYNOPSIS}
+          <p><code>srcs</code> files of type <code>.java</code> are compiled.
+          <em>For readability's sake</em>, it is not good to put the name of a
+          generated <code>.java</code> source file into the <code>srcs</code>.
+          Instead, put the depended-on rule name in the <code>srcs</code>, as
+          described below.
+          </p>
+          <p><code>srcs</code> files of type <code>.srcjar</code> are unpacked and
+          compiled. (This is useful if you need to generate a set of .java files with
+          a genrule or build extension.)
+          </p>
+          <p>This rule currently forces source and class compatibility with Java 6.
+          </p>
+          <p><code>srcs</code> files of type <code>.jar</code> are linked in.
+          (This is useful if you have third-party <code>.jar</code> files
+          with no source.)
+          </p>
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          .add(attr("srcs", LABEL_LIST)
+              .direct_compile_time_input()
+              .allowedFileTypes(JavaSemantics.JAVA_SOURCE, JavaSemantics.JAR,
+                  JavaSemantics.SOURCE_JAR))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(deps) -->
-           The list of other libraries to be linked in to the binary target.
-           ${SYNOPSIS}
-           Permitted library types are: <code>android_library</code>,
-           <code>java_library</code> with <code>android</code> constraint and
-           <code>cc_library</code> wrapping or producing <code>.so</code> native libraries for the
-           Android target platform.
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-          .override(
-              builder
-                  .copy("deps")
-                  .cfg(ANDROID_SPLIT_TRANSITION)
-                  .allowedRuleClasses(ALLOWED_DEPENDENCIES)
-                  .allowedFileTypes()
-                  .aspect(AndroidNeverlinkAspect.class)
-                  .aspect(JackAspect.class))
+          The list of other libraries to be linked in to the binary target.
+          ${SYNOPSIS}
+          Permitted library types are: <code>android_library</code>,
+          <code>java_library</code> with <code>android</code> constraint and
+          <code>cc_library</code> wrapping or producing <code>.so</code> native libraries for the
+          Android target platform.
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          .override(builder.copy("deps")
+              .cfg(ANDROID_SPLIT_TRANSITION)
+              .allowedRuleClasses(ALLOWED_DEPENDENCIES)
+              .allowedFileTypes()
+              .aspect(AndroidNeverlinkAspect.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(AndroidRuleClasses.BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
-          .add(
-              attr("$stubify_manifest", LABEL)
-                  .cfg(HOST)
-                  .exec()
-                  .value(env.getLabel(AndroidRuleClasses.STUBIFY_MANIFEST_LABEL)))
-          .add(
-              attr("$shuffle_jars", LABEL)
-                  .cfg(HOST)
-                  .exec()
-                  .value(env.getLabel(Constants.ANDROID_DEP_PREFIX + "shuffle_jars")))
-          .add(
-              attr("$merge_dexzips", LABEL)
-                  .cfg(HOST)
-                  .exec()
-                  .value(env.getLabel(Constants.ANDROID_DEP_PREFIX + "merge_dexzips")))
-          .add(
-              attr("$incremental_install", LABEL)
-                  .cfg(HOST)
-                  .exec()
-                  .value(env.getLabel(INCREMENTAL_INSTALL_LABEL)))
-          .add(
-              attr("$build_split_manifest", LABEL)
-                  .cfg(HOST)
-                  .exec()
-                  .value(env.getLabel(BUILD_SPLIT_MANIFEST_LABEL)))
-          .add(
-              attr("$strip_resources", LABEL)
-                  .cfg(HOST)
-                  .exec()
-                  .value(env.getLabel(AndroidRuleClasses.STRIP_RESOURCES_LABEL)))
-          .add(
-              attr(":incremental_stub_application", LABEL)
-                  .value(AndroidRuleClasses.INCREMENTAL_STUB_APPLICATION))
-          .add(
-              attr(":incremental_split_stub_application", LABEL)
-                  .value(AndroidRuleClasses.INCREMENTAL_SPLIT_STUB_APPLICATION))
+          .add(attr("$build_incremental_dexmanifest", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(AndroidRuleClasses.BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
+          .add(attr("$stubify_manifest", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(AndroidRuleClasses.STUBIFY_MANIFEST_LABEL)))
+          .add(attr("$shuffle_jars", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(Constants.ANDROID_DEP_PREFIX + "shuffle_jars")))
+          .add(attr("$merge_dexzips", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(Constants.ANDROID_DEP_PREFIX + "merge_dexzips")))
+          .add(attr("$incremental_install", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(INCREMENTAL_INSTALL_LABEL)))
+          .add(attr("$build_split_manifest", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(BUILD_SPLIT_MANIFEST_LABEL)))
+          .add(attr("$strip_resources", LABEL).cfg(HOST).exec()
+              .value(env.getLabel(AndroidRuleClasses.STRIP_RESOURCES_LABEL)))
+          .add(attr(":incremental_stub_application", LABEL)
+              .value(AndroidRuleClasses.INCREMENTAL_STUB_APPLICATION))
+          .add(attr(":incremental_split_stub_application", LABEL)
+              .value(AndroidRuleClasses.INCREMENTAL_SPLIT_STUB_APPLICATION))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(dexopts) -->
-           Additional command-line flags for the dx tool when generating classes.dex.
-           ${SYNOPSIS}
-           Subject to <a href="#make_variables">"Make variable"</a> substitution and
-           <a href="#sh-tokenization">Bourne shell tokenization</a>.
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          Additional command-line flags for the dx tool when generating classes.dex.
+          ${SYNOPSIS}
+          Subject to <a href="#make_variables">"Make variable"</a> substitution and
+          <a href="#sh-tokenization">Bourne shell tokenization</a>.
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
           .add(attr("dexopts", STRING_LIST))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(dex_shards) -->
-           Number of shards dexing should be decomposed into.
-           ${SYNOPSIS}
-           This is makes dexing much faster at the expense of app installation and startup time. The
-           larger the binary, the more shards should be used. 25 is a good value to start
-           experimenting with.
-           <p>
-           Note that each shard will result in at least one dex in the final app. For this reason,
-           setting this to more than 1 is not recommended for release binaries.
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          Number of shards dexing should be decomposed into.
+          ${SYNOPSIS}
+          This is makes dexing much faster at the expense of app installation and startup time. The
+          larger the binary, the more shards should be used. 25 is a good value to start
+          experimenting with.
+          <p>
+          Note that each shard will result in at least one dex in the final app. For this reason,
+          setting this to more than 1 is not recommended for release binaries.
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
           .add(attr("dex_shards", INTEGER).value(1))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(main_dex_list_opts) -->
-           Command line options to pass to the main dex list builder.
-           ${SYNOPSIS}
-           Use this option to affect the classes included in the main dex list.
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          Command line options to pass to the main dex list builder.
+          ${SYNOPSIS}
+          Use this option to affect the classes included in the main dex list.
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
           .add(attr("main_dex_list_opts", STRING_LIST))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(main_dex_list) -->
 
-           A text file contains a list of class file names. Classes defined by those class files are
-           put in the primary classes.dex. e.g.:<pre class="code">
-           android/support/multidex/MultiDex$V19.class
-           android/support/multidex/MultiDex.class
-           android/support/multidex/MultiDexApplication.class
-           com/google/common/base/Objects.class
-           </pre>
-           ${SYNOPSIS}
-           Must be used with <code>multidex="manual_main_dex"</code>.
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          A text file contains a list of class file names. Classes defined by those class files are
+          put in the primary classes.dex. e.g.:<pre class="code">
+android/support/multidex/MultiDex$V19.class
+android/support/multidex/MultiDex.class
+android/support/multidex/MultiDexApplication.class
+com/google/common/base/Objects.class
+          </pre>
+          ${SYNOPSIS}
+          Must be used with <code>multidex="manual_main_dex"</code>.
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
           .add(attr("main_dex_list", LABEL).legacyAllowAnyFileType())
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(proguard_specs) -->
-           Files to be used as Proguard specification.
-           ${SYNOPSIS}
-           This file will describe the set of specifications to be used by Proguard.
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          Files to be used as Proguard specification.
+          ${SYNOPSIS}
+          This file will describe the set of specifications to be used by Proguard.
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
           .add(attr("proguard_specs", LABEL_LIST).legacyAllowAnyFileType())
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(proguard_generate_mapping) -->
-           Whether to generate Proguard mapping file.
-           ${SYNOPSIS}
-           The mapping file will be generated only if <code>proguard_specs</code> is
-           specified. This file will list the mapping between the original and
-           obfuscated class, method, and field names.
-           <p><em class="harmful">WARNING: If you use this attribute, your Proguard specification
-           should contain neither <code>-dontobfuscate</code> nor <code>-printmapping</code>.
-           </em>.</p>
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
-          .add(
-              attr("proguard_generate_mapping", BOOLEAN)
-                  .value(false)
-                  .nonconfigurable("value is referenced in an ImplicitOutputsFunction"))
+          Whether to generate Proguard mapping file.
+          ${SYNOPSIS}
+          The mapping file will be generated only if <code>proguard_specs</code> is
+          specified. This file will list the mapping between the original and
+          obfuscated class, method, and field names.
+          <p><em class="harmful">WARNING: If you use this attribute, your Proguard specification
+          should contain neither <code>-dontobfuscate</code> nor <code>-printmapping</code>.
+          </em>.</p>
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          .add(attr("proguard_generate_mapping", BOOLEAN).value(false)
+              .nonconfigurable("value is referenced in an ImplicitOutputsFunction"))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(legacy_native_support) -->
-           Enables legacy native support, where pre-compiled native libraries are copied
-           directly into the APK.
-           ${SYNOPSIS}
-           Possible values:
-           <ul>
-           <li><code>legacy_native_support = 1</code>: Pre-built .so files found in the
-           dependencies of cc_libraries in the transitive closure will be copied into
-           the APK without being modified in any way. All cc_libraries in the transitive
-           closure of this rule must wrap .so files. (<em class="harmful">deprecated</em> -
-           legacy_native_support = 0 will become the default and this attribute will be
-           removed in a future Blaze release.)</li>
-           <li><code>legacy_native_support = 0</code>: Native dependencies in the transitive
-           closure will be linked together into a single lib[ruleName].so
-           before being placed in the APK. This ensures that, e.g., only one copy of
-           //base will be loaded into memory. This lib[ruleName].so can be loaded
-           via System.loadLibrary as normal.</li>
-           <li><code>legacy_native_support = -1</code>: Linking is controlled by the
-           <a href="blaze-user-manual.html#flag--legacy_android_native_support">
-           --[no]legacy_android_native_support</a> Blaze flag.</li>
-           </ul>
-           <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
+          Enables legacy native support, where pre-compiled native libraries are copied
+          directly into the APK.
+          ${SYNOPSIS}
+          Possible values:
+          <ul>
+              <li><code>legacy_native_support = 1</code>: Pre-built .so files found in the
+                dependencies of cc_libraries in the transitive closure will be copied into
+                the APK without being modified in any way. All cc_libraries in the transitive
+                closure of this rule must wrap .so files. (<em class="harmful">deprecated</em> -
+                legacy_native_support = 0 will become the default and this attribute will be
+                removed in a future Blaze release.)</li>
+              <li><code>legacy_native_support = 0</code>: Native dependencies in the transitive
+                closure will be linked together into a single lib[ruleName].so
+                before being placed in the APK. This ensures that, e.g., only one copy of
+                //base will be loaded into memory. This lib[ruleName].so can be loaded
+                via System.loadLibrary as normal.</li>
+              <li><code>legacy_native_support = -1</code>: Linking is controlled by the
+                <a href="blaze-user-manual.html#flag--legacy_android_native_support">
+                --[no]legacy_android_native_support</a> Blaze flag.</li>
+            </ul>
+          <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
           .add(attr("legacy_native_support", TRISTATE).value(TriState.AUTO))
           .advertiseProvider(JavaCompilationArgsProvider.class)
           .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java b/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
deleted file mode 100644
index 61f9fb5..0000000
--- a/src/main/java/com/google/devtools/build/lib/rules/android/JackAspect.java
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2015 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.rules.android;
-
-import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
-import static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.packages.Type.LABEL;
-import static com.google.devtools.build.lib.packages.Type.LABEL_LIST;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.Aspect;
-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.RuleContext;
-import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.packages.AspectDefinition;
-import com.google.devtools.build.lib.rules.java.JavaCommon;
-import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
-import com.google.devtools.build.lib.syntax.Label;
-import com.google.devtools.build.lib.syntax.Label.SyntaxException;
-import com.google.devtools.build.lib.vfs.PathFragment;
-
-import java.util.List;
-
-/** Aspect to provide Jack support to rules which have java sources. */
-public final class JackAspect implements ConfiguredAspectFactory {
-  private Label getLabel(String path) {
-    try {
-      return Label.parseAbsolute(path);
-    } catch (SyntaxException ex) {
-      throw new IllegalArgumentException(ex);
-    }
-  }
-
-  @Override
-  public AspectDefinition getDefinition() {
-    return new AspectDefinition.Builder("JackAspect")
-        .requireProvider(JavaSourceInfoProvider.class)
-        .add(attr("$jack", LABEL).cfg(HOST).exec().value(getLabel("//tools/android/jack:jack")))
-        .add(attr("$jill", LABEL).cfg(HOST).exec().value(getLabel("//tools/android/jack:jill")))
-        .add(
-            attr("$resource_extractor", LABEL)
-                .cfg(HOST)
-                .exec()
-                .value(getLabel("//tools/android/jack:resource_extractor")))
-        .add(
-            attr("$java_jack", LABEL)
-                .cfg(HOST)
-                .value(getLabel("//tools/android/jack:android_jack")))
-        .attributeAspect("deps", JackAspect.class)
-        .attributeAspect("exports", JackAspect.class)
-        .attributeAspect("runtime_deps", JackAspect.class)
-        .build();
-  }
-
-  @Override
-  public Aspect create(ConfiguredTarget base, RuleContext ruleContext) {
-    JavaSourceInfoProvider sourceProvider = base.getProvider(JavaSourceInfoProvider.class);
-
-    PathFragment rulePath = ruleContext.getLabel().toPathFragment();
-
-    PathFragment jackLibraryPath = rulePath.replaceName("lib" + rulePath.getBaseName() + ".jack");
-
-    Artifact jackLibraryOutput =
-        ruleContext
-            .getAnalysisEnvironment()
-            .getDerivedArtifact(jackLibraryPath, ruleContext.getBinOrGenfilesDirectory());
-
-    JackCompilationHelper jackHelper =
-        new JackCompilationHelper.Builder()
-            // blaze infrastructure
-            .setRuleContext(ruleContext)
-            // configuration
-            .setOutputArtifact(jackLibraryOutput)
-            // tools
-            .setAndroidBaseLibraryForJack(ruleContext.getHostPrerequisiteArtifact("$java_jack"))
-            // sources
-            .addJavaSources(sourceProvider.getSourceFiles())
-            .addSourceJars(sourceProvider.getSourceJars())
-            .addCompiledJars(sourceProvider.getJarFiles())
-            .addResources(sourceProvider.getResources())
-            .addProcessorNames(sourceProvider.getProcessorNames())
-            .addProcessorClasspathJars(sourceProvider.getProcessorPath())
-            // dependencies
-            .addExports(getPotentialDependency(ruleContext, "exports"))
-            .addDeps(getPotentialDependency(ruleContext, "deps"))
-            .addRuntimeDeps(getPotentialDependency(ruleContext, "runtime_deps"))
-            .build();
-    if (jackHelper == null) {
-      return null;
-    }
-
-    JackLibraryProvider result =
-        JavaCommon.isNeverLink(ruleContext)
-            ? jackHelper.compileAsNeverlinkLibrary()
-            : jackHelper.compileAsLibrary();
-
-    return new Aspect.Builder().addProvider(JackLibraryProvider.class, result).build();
-  }
-
-  /** Gets a list of targets on the given LABEL_LIST attribute if it exists, else an empty list. */
-  private static List<? extends TransitiveInfoCollection> getPotentialDependency(
-      RuleContext context, String attribute) {
-    if (!context.getRule().getRuleClassObject().hasAttr(attribute, LABEL_LIST)) {
-      return ImmutableList.of();
-    }
-    return context.getPrerequisites(attribute, Mode.TARGET);
-  }
-}