Replace native AndroidStudioInfoAspect with an error message.

BUG=33295755

--
PiperOrigin-RevId: 150633735
MOS_MIGRATED_REVID=150633735
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 658285b..7e31c37 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -77,7 +77,6 @@
 import com.google.devtools.build.lib.bazel.rules.workspace.NewHttpArchiveRule;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.ideinfo.AndroidStudioInfoAspect;
-import com.google.devtools.build.lib.ideinfo.BazelAndroidStudioInfoSemantics;
 import com.google.devtools.build.lib.packages.Attribute;
 import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
 import com.google.devtools.build.lib.packages.PackageGroup;
@@ -729,9 +728,7 @@
       new RuleSet() {
         @Override
         public void init(Builder builder) {
-          String toolsRepository = checkNotNull(builder.getToolsRepository());
-          AndroidStudioInfoAspect androidStudioInfoAspect =
-              new AndroidStudioInfoAspect(toolsRepository, new BazelAndroidStudioInfoSemantics());
+          AndroidStudioInfoAspect androidStudioInfoAspect = new AndroidStudioInfoAspect();
           builder.addNativeAspectClass(androidStudioInfoAspect);
         }
 
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index a29dead..59c0fbf 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -14,952 +14,39 @@
 
 package com.google.devtools.build.lib.ideinfo;
 
-import static com.google.common.collect.Iterables.transform;
-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.BuildType.LABEL;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.io.ByteSource;
-import com.google.devtools.build.lib.actions.Action;
-import com.google.devtools.build.lib.actions.ActionOwner;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType;
-import com.google.devtools.build.lib.actions.Root;
-import com.google.devtools.build.lib.analysis.AnalysisUtils;
 import com.google.devtools.build.lib.analysis.ConfiguredAspect;
 import com.google.devtools.build.lib.analysis.ConfiguredAspect.Builder;
 import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.OutputGroupProvider;
-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.analysis.actions.BinaryFileWriteAction;
-import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
-import com.google.devtools.build.lib.analysis.actions.SpawnAction;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.packages.AspectDefinition;
 import com.google.devtools.build.lib.packages.AspectParameters;
-import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.NativeAspectClass;
-import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
-import com.google.devtools.build.lib.packages.Package;
-import com.google.devtools.build.lib.packages.TargetUtils;
-import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider;
-import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider.SourceDirectory;
-import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
-import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
-import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
-import com.google.devtools.build.lib.rules.java.JavaExportsProvider;
-import com.google.devtools.build.lib.rules.java.JavaGenJarsProvider;
-import com.google.devtools.build.lib.rules.java.JavaProvider;
-import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
-import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
-import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider;
-import com.google.devtools.build.lib.rules.java.JavaToolchainProvider;
-import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.build.lib.vfs.PathFragment;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.AndroidIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.ArtifactLocation;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.CIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.CToolchainIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.JavaIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.JavaToolchainIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.LibraryArtifact;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.PyIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.TargetIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.TestInfo;
-import com.google.protobuf.MessageLite;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.List;
-import javax.annotation.Nullable;
 
 /** Generates ide-build information for Android Studio. */
 public class AndroidStudioInfoAspect extends NativeAspectClass implements ConfiguredAspectFactory {
   public static final String NAME = "AndroidStudioInfoAspect";
 
-  // Output groups.
-
-  static final String IDE_INFO = "ide-info";
-  static final String IDE_INFO_TEXT = "ide-info-text";
-  static final String IDE_RESOLVE = "ide-resolve";
-  static final String IDE_COMPILE = "ide-compile";
-
-  private final String toolsRepository;
-  private final AndroidStudioInfoSemantics androidStudioInfoSemantics;
-  private final ImmutableList<PrerequisiteAttr> prerequisiteAttrs;
-
-  public AndroidStudioInfoAspect(
-      String toolsRepository, AndroidStudioInfoSemantics androidStudioInfoSemantics) {
-    this.toolsRepository = toolsRepository;
-    this.androidStudioInfoSemantics = androidStudioInfoSemantics;
-    this.prerequisiteAttrs = buildPrerequisiteAttrs();
-  }
-
   @Override
   public String getName() {
     return NAME;
   }
 
-  /** Attribute to propagate dependencies along. */
-  public static class PrerequisiteAttr {
-    public final String name;
-    public final Type<?> type;
-
-    public PrerequisiteAttr(String name, Type<?> type) {
-      this.name = name;
-      this.type = type;
-    }
-  }
-
-  private ImmutableList<PrerequisiteAttr> buildPrerequisiteAttrs() {
-    ImmutableList.Builder<PrerequisiteAttr> builder = ImmutableList.builder();
-    builder.add(new PrerequisiteAttr("deps", BuildType.LABEL_LIST));
-    builder.add(new PrerequisiteAttr("exports", BuildType.LABEL_LIST));
-    // From android_test
-    builder.add(new PrerequisiteAttr("binary_under_test", BuildType.LABEL));
-    // from java_* rules
-    builder.add(new PrerequisiteAttr(":java_toolchain", BuildType.LABEL));
-    // from cc_* rules
-    builder.add(new PrerequisiteAttr(":cc_toolchain", BuildType.LABEL));
-
-    androidStudioInfoSemantics.augmentPrerequisiteAttrs(builder);
-
-    return builder.build();
-  }
-
-  // File suffixes.
-  public static final String ASWB_BUILD_SUFFIX = ".aswb-build";
-  public static final String ASWB_BUILD_TEXT_SUFFIX = ".aswb-build.txt";
-  public static final Function<Label, String> LABEL_TO_STRING =
-      new Function<Label, String>() {
-        @Nullable
-        @Override
-        public String apply(Label label) {
-          return label.toString();
-        }
-      };
-
   @Override
   public AspectDefinition getDefinition(AspectParameters aspectParameters) {
-    AspectDefinition.Builder builder =
-        new AspectDefinition.Builder(this)
-            .propagateAlongAttribute("runtime_deps")
-            .propagateAlongAttribute("resources")
-            .add(
-                attr("$packageParser", LABEL)
-                    .cfg(HOST)
-                    .exec()
-                    .value(
-                        Label.parseAbsoluteUnchecked(
-                            toolsRepository + "//tools/android:PackageParser")))
-            .add(
-                attr("$jarFilter", LABEL)
-                    .cfg(HOST)
-                    .exec()
-                    .value(
-                        Label.parseAbsoluteUnchecked(
-                            toolsRepository + "//tools/android:JarFilter")));
-
-    for (PrerequisiteAttr prerequisiteAttr : prerequisiteAttrs) {
-      builder.propagateAlongAttribute(prerequisiteAttr.name);
-    }
-
-    return builder.build();
+    return new AspectDefinition.Builder(this).build();
   }
 
   @Override
   public ConfiguredAspect create(
       ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) {
+    // Deprecated for bazel > 0.45
+    // Can be completely removed after a version or two
+    ruleContext.ruleError(
+        "AndroidStudioInfoAspect is deprecated. "
+            + "If you are using an IntelliJ bazel plugin, "
+            + "please update to the latest plugin version from the Jetbrains plugin repository.");
     ConfiguredAspect.Builder builder = new Builder(this, parameters, ruleContext);
-
-    AndroidStudioInfoFilesProvider.Builder providerBuilder =
-        new AndroidStudioInfoFilesProvider.Builder();
-
-    DependenciesResult dependenciesResult = processDependencies(base, ruleContext, providerBuilder);
-
-    AndroidStudioInfoFilesProvider provider =
-        createIdeBuildArtifact(base, ruleContext, dependenciesResult, providerBuilder);
-
-    NestedSetBuilder<Artifact> ideCompileArtifacts = NestedSetBuilder.stableOrder();
-    // Add artifacts required for compilation
-    OutputGroupProvider outputGroupProvider = base.getProvider(OutputGroupProvider.class);
-    if (outputGroupProvider != null) {
-      ideCompileArtifacts.addTransitive(
-          outputGroupProvider.getOutputGroup(OutputGroupProvider.FILES_TO_COMPILE));
-    }
-
-    builder
-        .addOutputGroup(IDE_INFO, provider.getIdeInfoFiles())
-        .addOutputGroup(IDE_INFO_TEXT, provider.getIdeInfoTextFiles())
-        .addOutputGroup(IDE_RESOLVE, provider.getIdeResolveFiles())
-        .addOutputGroup(IDE_COMPILE, ideCompileArtifacts.build())
-        .addProvider(provider);
-
     return builder.build();
   }
-
-  private static class DependenciesResult {
-    private DependenciesResult(
-        Iterable<Label> deps, Iterable<Label> runtimeDeps, @Nullable Label resources) {
-      this.deps = deps;
-      this.runtimeDeps = runtimeDeps;
-      this.resources = resources;
-    }
-
-    final Iterable<Label> deps;
-    final Iterable<Label> runtimeDeps;
-    @Nullable final Label resources;
-  }
-
-  private DependenciesResult processDependencies(
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      AndroidStudioInfoFilesProvider.Builder providerBuilder) {
-
-    // Calculate direct dependencies
-    ImmutableList.Builder<TransitiveInfoCollection> directDepsBuilder = ImmutableList.builder();
-    for (PrerequisiteAttr prerequisiteAttr : prerequisiteAttrs) {
-      if (ruleContext.attributes().has(prerequisiteAttr.name, prerequisiteAttr.type)) {
-        Mode mode = ruleContext.getAttributeMode(prerequisiteAttr.name);
-        if (mode == Mode.TARGET || mode == Mode.SPLIT) {
-          directDepsBuilder.addAll(
-              ruleContext.getPrerequisites(prerequisiteAttr.name, Mode.TARGET));
-        }
-      }
-    }
-    List<TransitiveInfoCollection> directDeps = directDepsBuilder.build();
-
-    // Add exports from direct dependencies
-    NestedSetBuilder<Label> dependenciesBuilder = NestedSetBuilder.stableOrder();
-    for (AndroidStudioInfoFilesProvider depProvider :
-        AnalysisUtils.getProviders(directDeps, AndroidStudioInfoFilesProvider.class)) {
-      dependenciesBuilder.addTransitive(depProvider.getExportedDeps());
-    }
-    for (TransitiveInfoCollection dep : directDeps) {
-      dependenciesBuilder.add(dep.getLabel());
-    }
-    NestedSet<Label> dependencies = dependenciesBuilder.build();
-
-    // Propagate my own exports
-    JavaExportsProvider javaExportsProvider = base.getProvider(JavaExportsProvider.class);
-    if (javaExportsProvider != null) {
-      providerBuilder
-          .exportedDepsBuilder()
-          .addTransitive(javaExportsProvider.getTransitiveExports());
-    }
-    // android_library without sources exports all its deps
-    if (ruleContext.getRule().getRuleClass().equals("android_library")) {
-      JavaSourceInfoProvider sourceInfoProvider = base.getProvider(JavaSourceInfoProvider.class);
-      boolean hasSources =
-          sourceInfoProvider != null && !sourceInfoProvider.getSourceFiles().isEmpty();
-      if (!hasSources) {
-        for (TransitiveInfoCollection dep : directDeps) {
-          providerBuilder.exportedDepsBuilder().add(dep.getLabel());
-        }
-      }
-    }
-
-    // runtime_deps
-    List<? extends TransitiveInfoCollection> runtimeDeps = ImmutableList.of();
-    NestedSetBuilder<Label> runtimeDepsBuilder = NestedSetBuilder.stableOrder();
-    if (ruleContext.attributes().has("runtime_deps", BuildType.LABEL_LIST)) {
-      runtimeDeps = ruleContext.getPrerequisites("runtime_deps", Mode.TARGET);
-      for (TransitiveInfoCollection dep : runtimeDeps) {
-        runtimeDepsBuilder.add(dep.getLabel());
-      }
-    }
-
-    // resources
-    @Nullable
-    TransitiveInfoCollection resources =
-        ruleContext.attributes().has("resources", BuildType.LABEL)
-            ? ruleContext.getPrerequisite("resources", Mode.TARGET)
-            : null;
-
-    // Propagate providers from all prerequisites (deps + runtime_deps)
-    ImmutableList.Builder<TransitiveInfoCollection> prerequisitesBuilder = ImmutableList.builder();
-    prerequisitesBuilder.addAll(directDeps);
-    prerequisitesBuilder.addAll(runtimeDeps);
-    if (resources != null) {
-      prerequisitesBuilder.add(resources);
-    }
-
-    List<TransitiveInfoCollection> prerequisites = prerequisitesBuilder.build();
-
-    for (AndroidStudioInfoFilesProvider depProvider :
-        AnalysisUtils.getProviders(prerequisites, AndroidStudioInfoFilesProvider.class)) {
-      providerBuilder.ideInfoFilesBuilder().addTransitive(depProvider.getIdeInfoFiles());
-      providerBuilder.ideInfoTextFilesBuilder().addTransitive(depProvider.getIdeInfoTextFiles());
-      providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
-    }
-
-    return new DependenciesResult(
-        dependencies, runtimeDepsBuilder.build(), resources != null ? resources.getLabel() : null);
-  }
-
-  private AndroidStudioInfoFilesProvider createIdeBuildArtifact(
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      DependenciesResult dependenciesResult,
-      AndroidStudioInfoFilesProvider.Builder providerBuilder) {
-
-    Artifact ideInfoFile = derivedArtifact(base, ruleContext, ASWB_BUILD_SUFFIX);
-    Artifact ideInfoTextFile = derivedArtifact(base, ruleContext, ASWB_BUILD_TEXT_SUFFIX);
-    providerBuilder.ideInfoFilesBuilder().add(ideInfoFile);
-    providerBuilder.ideInfoTextFilesBuilder().add(ideInfoTextFile);
-    NestedSetBuilder<Artifact> ideResolveArtifacts = providerBuilder.ideResolveFilesBuilder();
-
-    TargetIdeInfo.Builder outputBuilder = TargetIdeInfo.newBuilder();
-
-    outputBuilder.setLabel(base.getLabel().toString());
-
-    outputBuilder.setBuildFileArtifactLocation(
-        makeArtifactLocation(ruleContext.getRule().getPackage(), ruleContext.getLabel()));
-
-    outputBuilder.setKindString(ruleContext.getRule().getRuleClass());
-
-    // Java rules
-    JavaRuleOutputJarsProvider outputJarsProvider =
-        JavaProvider.getProvider(JavaRuleOutputJarsProvider.class, base);
-    if (outputJarsProvider != null && !androidStudioInfoSemantics.suppressJavaRuleInfo(base)) {
-      JavaIdeInfo javaIdeInfo =
-          makeJavaIdeInfo(base, ruleContext, outputJarsProvider, providerBuilder);
-      outputBuilder.setJavaIdeInfo(javaIdeInfo);
-    }
-
-    // C rules
-    if (isCppRule(base)) {
-      CppCompilationContext cppCompilationContext = base.getProvider(CppCompilationContext.class);
-      if (cppCompilationContext != null) {
-        CIdeInfo cIdeInfo =
-            makeCIdeInfo(base, ruleContext, cppCompilationContext, ideResolveArtifacts);
-        outputBuilder.setCIdeInfo(cIdeInfo);
-      }
-    }
-
-    // CCToolchain rule
-    CcToolchainProvider ccToolchainProvider = base.getProvider(CcToolchainProvider.class);
-    if (ccToolchainProvider != null) {
-      CppConfiguration cppConfiguration = ccToolchainProvider.getCppConfiguration();
-      if (cppConfiguration != null) {
-        CToolchainIdeInfo cToolchainIdeInfo = makeCToolchainIdeInfo(ruleContext, cppConfiguration);
-        if (cToolchainIdeInfo != null) {
-          outputBuilder.setCToolchainIdeInfo(cToolchainIdeInfo);
-        }
-      }
-    }
-
-    // Android rules
-    AndroidIdeInfoProvider androidIdeInfoProvider = base.getProvider(AndroidIdeInfoProvider.class);
-    if (androidIdeInfoProvider != null) {
-      outputBuilder.setAndroidIdeInfo(
-          makeAndroidIdeInfo(androidIdeInfoProvider, dependenciesResult, ideResolveArtifacts));
-    }
-
-    // Python rules
-    if (isPythonRule(base)) {
-      outputBuilder.setPyIdeInfo(makePyIdeInfo(base, ruleContext, ideResolveArtifacts));
-    }
-
-    // Test rules
-    if (TargetUtils.isTestRule(base.getTarget())) {
-      TestInfo.Builder builder = TestInfo.newBuilder();
-      String attr =
-          NonconfigurableAttributeMapper.of(base.getTarget().getAssociatedRule())
-              .get("size", Type.STRING);
-      if (attr != null) {
-        builder.setSize(attr);
-      }
-      outputBuilder.setTestInfo(builder);
-    }
-
-    // Java toolchain rule
-    JavaToolchainProvider javaToolchainProvider = base.getProvider(JavaToolchainProvider.class);
-    if (javaToolchainProvider != null) {
-      outputBuilder.setJavaToolchainIdeInfo(
-          JavaToolchainIdeInfo.newBuilder()
-              .setSourceVersion(javaToolchainProvider.getSourceVersion())
-              .setTargetVersion(javaToolchainProvider.getTargetVersion()));
-    }
-
-    androidStudioInfoSemantics.augmentRuleInfo(
-        outputBuilder, base, ruleContext, ideResolveArtifacts);
-
-    AndroidStudioInfoFilesProvider provider = providerBuilder.build();
-
-    outputBuilder.addAllDependencies(transform(dependenciesResult.deps, LABEL_TO_STRING));
-    outputBuilder.addAllRuntimeDeps(transform(dependenciesResult.runtimeDeps, LABEL_TO_STRING));
-    outputBuilder.addAllTags(base.getTarget().getAssociatedRule().getRuleTags());
-
-    final TargetIdeInfo targetIdeInfo = outputBuilder.build();
-
-    ruleContext.registerAction(
-        makeProtoWriteAction(ruleContext.getActionOwner(), targetIdeInfo, ideInfoFile));
-    ruleContext.registerAction(
-        makeProtoTextWriteAction(ruleContext.getActionOwner(), targetIdeInfo, ideInfoTextFile));
-
-    return provider;
-  }
-
-  private boolean isCppRule(ConfiguredTarget base) {
-    String ruleClass = base.getTarget().getAssociatedRule().getRuleClass();
-    switch (ruleClass) {
-      case "cc_library":
-      case "cc_binary":
-      case "cc_test":
-      case "cc_inc_library:":
-        return true;
-      default:
-        // Fall through
-    }
-    return androidStudioInfoSemantics.checkForAdditionalCppRules(ruleClass);
-  }
-
-  private boolean isPythonRule(ConfiguredTarget base) {
-    String ruleClass = base.getTarget().getAssociatedRule().getRuleClass();
-    switch (ruleClass) {
-      case "py_library":
-      case "py_binary":
-      case "py_test":
-        return true;
-      default:
-        // Fall through
-    }
-    return androidStudioInfoSemantics.checkForAdditionalPythonRules(ruleClass);
-  }
-
-  private static Action[] makePackageManifestAction(
-      RuleContext ruleContext, Artifact packageManifest, Collection<Artifact> sourceFiles) {
-
-    return new SpawnAction.Builder()
-        .addInputs(sourceFiles)
-        .addOutput(packageManifest)
-        .setExecutable(ruleContext.getExecutablePrerequisite("$packageParser", Mode.HOST))
-        .setCommandLine(
-            CustomCommandLine.builder()
-                .addExecPath("--output_manifest", packageManifest)
-                .addJoinStrings("--sources", ":", toSerializedArtifactLocations(sourceFiles))
-                .build())
-        .useParameterFile(ParameterFileType.SHELL_QUOTED)
-        .setProgressMessage("Parsing java package strings for " + ruleContext.getRule())
-        .setMnemonic("JavaPackageManifest")
-        .build(ruleContext);
-  }
-
-  private static Iterable<String> toSerializedArtifactLocations(Iterable<Artifact> artifacts) {
-    return Iterables.transform(
-        Iterables.filter(artifacts, Artifact.MIDDLEMAN_FILTER), PACKAGE_PARSER_SERIALIZER);
-  }
-
-  private static final Function<Artifact, String> PACKAGE_PARSER_SERIALIZER =
-      new Function<Artifact, String>() {
-        @Override
-        public String apply(Artifact artifact) {
-          Root root = artifact.getRoot();
-          return Joiner.on(",")
-              .join(root.getExecPath().toString(), artifact.getRootRelativePath().toString());
-        }
-      };
-
-  private static Action[] makeFilteredJarAction(
-      RuleContext ruleContext,
-      List<Artifact> filterJars,
-      List<Artifact> filterSourceJars,
-      List<Artifact> keepJavaFiles,
-      List<Artifact> keepSourceJars,
-      Artifact filteredJar,
-      Artifact filteredSrcJar) {
-
-    CustomCommandLine.Builder commandLine =
-        CustomCommandLine.builder()
-            .addJoinExecPaths("--filter_jars", File.pathSeparator, filterJars)
-            .addJoinExecPaths("--filter_source_jars", File.pathSeparator, filterSourceJars)
-            .addExecPath("--filtered_jar", filteredJar)
-            .addExecPath("--filtered_source_jar", filteredSrcJar);
-
-    if (!keepJavaFiles.isEmpty()) {
-      commandLine.addJoinExecPaths("--keep_java_files", File.pathSeparator, keepJavaFiles);
-    }
-    if (!keepSourceJars.isEmpty()) {
-      commandLine.addJoinExecPaths("--keep_source_jars", File.pathSeparator, keepSourceJars);
-    }
-
-    return new SpawnAction.Builder()
-        .addInputs(filterJars)
-        .addInputs(filterSourceJars)
-        .addInputs(keepJavaFiles)
-        .addInputs(keepSourceJars)
-        .addOutput(filteredJar)
-        .addOutput(filteredSrcJar)
-        .setExecutable(ruleContext.getExecutablePrerequisite("$jarFilter", Mode.HOST))
-        .setCommandLine(commandLine.build())
-        .useParameterFile(ParameterFileType.SHELL_QUOTED)
-        .setProgressMessage("Filtering generated code for " + ruleContext.getRule())
-        .setMnemonic("JarFilter")
-        .build(ruleContext);
-  }
-
-  private static Artifact derivedArtifact(
-      ConfiguredTarget base, RuleContext ruleContext, String suffix) {
-    BuildConfiguration configuration = ruleContext.getConfiguration();
-    assert configuration != null;
-    Root binDirectory = configuration.getBinDirectory(ruleContext.getRule().getRepository());
-
-    PathFragment derivedFilePath = getOutputFilePath(base, ruleContext, suffix);
-
-    return ruleContext.getAnalysisEnvironment().getDerivedArtifact(derivedFilePath, binDirectory);
-  }
-
-  private static AndroidIdeInfo makeAndroidIdeInfo(
-      AndroidIdeInfoProvider androidIdeInfoProvider,
-      DependenciesResult dependenciesResult,
-      NestedSetBuilder<Artifact> ideResolveArtifacts) {
-    AndroidIdeInfo.Builder builder = AndroidIdeInfo.newBuilder();
-    if (androidIdeInfoProvider.getSignedApk() != null) {
-      builder.setApk(makeArtifactLocation(androidIdeInfoProvider.getSignedApk()));
-    }
-
-    Artifact manifest = androidIdeInfoProvider.getManifest();
-    if (manifest != null) {
-      builder.setManifest(makeArtifactLocation(manifest));
-      addResolveArtifact(ideResolveArtifacts, manifest);
-    }
-
-    for (Artifact artifact : androidIdeInfoProvider.getApksUnderTest()) {
-      builder.addDependencyApk(makeArtifactLocation(artifact));
-    }
-    for (SourceDirectory resourceDir : androidIdeInfoProvider.getResourceDirs()) {
-      ArtifactLocation artifactLocation = makeArtifactLocation(resourceDir);
-      builder.addResources(artifactLocation);
-    }
-
-    if (androidIdeInfoProvider.getJavaPackage() != null) {
-      builder.setJavaPackage(androidIdeInfoProvider.getJavaPackage());
-    }
-
-    String idlImportRoot = androidIdeInfoProvider.getIdlImportRoot();
-    if (idlImportRoot != null) {
-      builder.setIdlImportRoot(idlImportRoot);
-    }
-    boolean hasIdlSources = !androidIdeInfoProvider.getIdlSrcs().isEmpty();
-    builder.setHasIdlSources(hasIdlSources);
-    if (hasIdlSources) {
-      LibraryArtifact idlLibraryArtifact =
-          makeLibraryArtifact(
-              ideResolveArtifacts,
-              androidIdeInfoProvider.getIdlClassJar(),
-              null,
-              androidIdeInfoProvider.getIdlSourceJar());
-      if (idlLibraryArtifact != null) {
-        builder.setIdlJar(idlLibraryArtifact);
-      }
-    }
-
-    builder.setGenerateResourceClass(androidIdeInfoProvider.definesAndroidResources());
-
-    if (dependenciesResult.resources != null) {
-      builder.setLegacyResources(dependenciesResult.resources.toString());
-    }
-
-    OutputJar resourceJar = androidIdeInfoProvider.getResourceJar();
-    if (resourceJar != null) {
-      LibraryArtifact resourceLibraryArtifact =
-          makeLibraryArtifact(
-              ideResolveArtifacts,
-              resourceJar.getClassJar(),
-              resourceJar.getIJar(),
-              resourceJar.getSrcJar());
-      if (resourceLibraryArtifact != null) {
-        builder.setResourceJar(resourceLibraryArtifact);
-      }
-    }
-
-    return builder.build();
-  }
-
-  private static BinaryFileWriteAction makeProtoWriteAction(
-      ActionOwner actionOwner, final MessageLite message, Artifact artifact) {
-    return new BinaryFileWriteAction(
-        actionOwner,
-        artifact,
-        new ByteSource() {
-          @Override
-          public InputStream openStream() throws IOException {
-            return message.toByteString().newInput();
-          }
-        },
-        /*makeExecutable =*/ false);
-  }
-
-  private static BinaryFileWriteAction makeProtoTextWriteAction(
-      ActionOwner actionOwner, final MessageLite message, Artifact artifact) {
-    return new BinaryFileWriteAction(
-        actionOwner,
-        artifact,
-        new ByteSource() {
-          @Override
-          public InputStream openStream() throws IOException {
-            return new ByteArrayInputStream(message.toString().getBytes(StandardCharsets.UTF_8));
-          }
-        },
-        /*makeExecutable =*/ false);
-  }
-
-  public static ArtifactLocation makeArtifactLocation(Artifact artifact) {
-    return makeArtifactLocation(
-        artifact.getRoot(), artifact.getRootRelativePath(), isExternal(artifact.getOwner()));
-  }
-
-  private static ArtifactLocation makeArtifactLocation(Package pkg, Label label) {
-    Root root =
-        Root.asSourceRoot(pkg.getSourceRoot(), pkg.getPackageIdentifier().getRepository().isMain());
-    PathFragment relativePath = pkg.getBuildFile().getPath().relativeTo(root.getPath());
-    return makeArtifactLocation(root, relativePath, isExternal(label));
-  }
-
-  @VisibleForTesting
-  static ArtifactLocation makeArtifactLocation(
-      Root root, PathFragment relativePath, boolean isExternal) {
-    return ArtifactLocation.newBuilder()
-        .setRootExecutionPathFragment(root.getExecPath().toString())
-        .setRelativePath(relativePath.toString())
-        .setIsSource(root.isSourceRoot())
-        .setIsExternal(isExternal)
-        .build();
-  }
-
-  private static ArtifactLocation makeArtifactLocation(SourceDirectory resourceDir) {
-    return ArtifactLocation.newBuilder()
-        .setRootExecutionPathFragment(resourceDir.getRootExecutionPathFragment().toString())
-        .setRelativePath(resourceDir.getRelativePath().toString())
-        .setIsSource(resourceDir.isSource())
-        .setIsExternal(false)
-        .build();
-  }
-
-  /** Returns whether this {@link Label} refers to an external repository. */
-  private static boolean isExternal(Label label) {
-    return label.getWorkspaceRoot().startsWith("external");
-  }
-
-  private JavaIdeInfo makeJavaIdeInfo(
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      JavaRuleOutputJarsProvider outputJarsProvider,
-      AndroidStudioInfoFilesProvider.Builder providerBuilder) {
-    NestedSetBuilder<Artifact> ideResolveArtifacts = providerBuilder.ideResolveFilesBuilder();
-    JavaIdeInfo.Builder builder = JavaIdeInfo.newBuilder();
-
-    List<Artifact> javaSources = Lists.newArrayList();
-    List<Artifact> generatedJavaSources = Lists.newArrayList();
-    List<Artifact> srcjars = Lists.newArrayList();
-    divideJavaSources(ruleContext, javaSources, generatedJavaSources, srcjars);
-
-    if (!javaSources.isEmpty()) {
-      Artifact packageManifest = derivedArtifact(base, ruleContext, ".manifest");
-      providerBuilder.ideInfoFilesBuilder().add(packageManifest);
-      ruleContext.registerAction(
-          makePackageManifestAction(ruleContext, packageManifest, javaSources));
-      builder.setPackageManifest(makeArtifactLocation(packageManifest));
-    }
-
-    // HACK -- android_library rules with the resources attribute do not support srcjar inputs
-    // to the filtered gen jar generation, because we don't want all resource classes in this jar.
-    // This can be removed once android_resources is deleted
-    if (ruleContext.attributes().has("resources", BuildType.LABEL)
-        && ruleContext.getRule().getRuleClass().startsWith("android_")) {
-      srcjars = ImmutableList.of();
-    }
-
-    if (!javaSources.isEmpty() && (!generatedJavaSources.isEmpty() || !srcjars.isEmpty())) {
-      Artifact filteredGenJar = derivedArtifact(base, ruleContext, "-filtered-gen.jar");
-      Artifact filteredGenSrcJar = derivedArtifact(base, ruleContext, "-filtered-gen-src.jar");
-      List<Artifact> jars = Lists.newArrayList();
-      List<Artifact> sourceJars = Lists.newArrayList();
-      for (OutputJar outputJar : outputJarsProvider.getOutputJars()) {
-        Artifact jar = outputJar.getIJar();
-        if (jar == null) {
-          jar = outputJar.getClassJar();
-        }
-        if (jar != null) {
-          jars.add(jar);
-        }
-        if (outputJar.getSrcJar() != null) {
-          sourceJars.add(outputJar.getSrcJar());
-        }
-      }
-      ruleContext.registerAction(
-          makeFilteredJarAction(
-              ruleContext,
-              jars,
-              sourceJars,
-              generatedJavaSources,
-              srcjars,
-              filteredGenJar,
-              filteredGenSrcJar));
-      ideResolveArtifacts.add(filteredGenJar);
-      ideResolveArtifacts.add(filteredGenSrcJar);
-      builder.setFilteredGenJar(
-          makeLibraryArtifact(ideResolveArtifacts, filteredGenJar, null, filteredGenSrcJar));
-    }
-
-    collectJarsFromOutputJarsProvider(builder, ideResolveArtifacts, outputJarsProvider);
-
-    Artifact jdeps = outputJarsProvider.getJdeps();
-    if (jdeps != null) {
-      builder.setJdeps(makeArtifactLocation(jdeps));
-    }
-
-    JavaGenJarsProvider genJarsProvider = base.getProvider(JavaGenJarsProvider.class);
-    if (genJarsProvider != null) {
-      collectGenJars(builder, ideResolveArtifacts, genJarsProvider);
-    }
-
-    Collection<Artifact> sourceFiles = getSources(ruleContext);
-
-    for (Artifact sourceFile : sourceFiles) {
-      builder.addSources(makeArtifactLocation(sourceFile));
-    }
-
-    return builder.build();
-  }
-
-  private CIdeInfo makeCIdeInfo(
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      CppCompilationContext cppCompilationContext,
-      NestedSetBuilder<Artifact> ideResolveArtifacts) {
-    CIdeInfo.Builder builder = CIdeInfo.newBuilder();
-
-    Collection<Artifact> sourceFiles = getSources(ruleContext);
-    for (Artifact sourceFile : sourceFiles) {
-      builder.addSource(makeArtifactLocation(sourceFile));
-    }
-
-    ideResolveArtifacts.addTransitive(cppCompilationContext.getDeclaredIncludeSrcs());
-
-    builder.addAllTargetInclude(getIncludes(ruleContext));
-    builder.addAllTargetDefine(getDefines(ruleContext));
-    builder.addAllTargetCopt(getCopts(ruleContext));
-
-    // Get information about from the transitive closure
-    ImmutableList<PathFragment> transitiveIncludeDirectories =
-        cppCompilationContext.getIncludeDirs();
-    for (PathFragment pathFragment : transitiveIncludeDirectories) {
-      builder.addTransitiveIncludeDirectory(pathFragment.getSafePathString());
-    }
-    ImmutableList<PathFragment> transitiveQuoteIncludeDirectories =
-        cppCompilationContext.getQuoteIncludeDirs();
-    for (PathFragment pathFragment : transitiveQuoteIncludeDirectories) {
-      builder.addTransitiveQuoteIncludeDirectory(pathFragment.getSafePathString());
-    }
-    ImmutableList<String> transitiveDefines = cppCompilationContext.getDefines();
-    for (String transitiveDefine : transitiveDefines) {
-      builder.addTransitiveDefine(transitiveDefine);
-    }
-    ImmutableList<PathFragment> transitiveSystemIncludeDirectories =
-        cppCompilationContext.getSystemIncludeDirs();
-    for (PathFragment pathFragment : transitiveSystemIncludeDirectories) {
-      builder.addTransitiveSystemIncludeDirectory(pathFragment.getSafePathString());
-    }
-
-    androidStudioInfoSemantics.augmentCppRuleInfo(
-        builder, base, ruleContext, cppCompilationContext, ideResolveArtifacts);
-
-    return builder.build();
-  }
-
-  private static CToolchainIdeInfo makeCToolchainIdeInfo(
-      RuleContext ruleContext, CppConfiguration cppConfiguration) {
-    CToolchainIdeInfo.Builder builder = CToolchainIdeInfo.newBuilder();
-    ImmutableSet<String> features = ruleContext.getFeatures();
-    builder.setTargetName(cppConfiguration.getTargetGnuSystemName());
-
-    builder.addAllBaseCompilerOption(cppConfiguration.getCompilerOptions(features));
-    builder.addAllCOption(cppConfiguration.getCOptions());
-    builder.addAllCppOption(cppConfiguration.getCxxOptions(features));
-    builder.addAllLinkOption(cppConfiguration.getLinkOptions());
-
-    // This includes options such as system includes from toolchains.
-    builder.addAllUnfilteredCompilerOption(cppConfiguration.getUnfilteredCompilerOptions(features));
-
-    builder.setPreprocessorExecutable(
-        cppConfiguration.getCpreprocessorExecutable().getSafePathString());
-    builder.setCppExecutable(cppConfiguration.getCppExecutable().getSafePathString());
-
-    List<PathFragment> builtInIncludeDirectories = cppConfiguration.getBuiltInIncludeDirectories();
-    for (PathFragment builtInIncludeDirectory : builtInIncludeDirectories) {
-      builder.addBuiltInIncludeDirectory(builtInIncludeDirectory.getSafePathString());
-    }
-    return builder.build();
-  }
-
-  private static PyIdeInfo makePyIdeInfo(
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      NestedSetBuilder<Artifact> ideResolveArtifacts) {
-    PyIdeInfo.Builder builder = PyIdeInfo.newBuilder();
-
-    Collection<Artifact> sourceFiles = getSources(ruleContext);
-    for (Artifact sourceFile : sourceFiles) {
-      builder.addSources(makeArtifactLocation(sourceFile));
-    }
-
-    // Ensure we add all generated sources to the ide-resolve output group.
-    // See {@link PyCommon#collectTransitivePythonSources}.
-    OutputGroupProvider outputGroupProvider = base.getProvider(OutputGroupProvider.class);
-    if (outputGroupProvider != null) {
-      ideResolveArtifacts.addTransitive(
-          outputGroupProvider.getOutputGroup(OutputGroupProvider.FILES_TO_COMPILE));
-    }
-    return builder.build();
-  }
-
-  private static void collectJarsFromOutputJarsProvider(
-      JavaIdeInfo.Builder builder,
-      NestedSetBuilder<Artifact> ideResolveArtifacts,
-      JavaRuleOutputJarsProvider outputJarsProvider) {
-    for (OutputJar outputJar : outputJarsProvider.getOutputJars()) {
-      LibraryArtifact libraryArtifact =
-          makeLibraryArtifact(
-              ideResolveArtifacts,
-              outputJar.getClassJar(),
-              outputJar.getIJar(),
-              outputJar.getSrcJar());
-
-      if (libraryArtifact != null) {
-        builder.addJars(libraryArtifact);
-      }
-    }
-  }
-
-  @Nullable
-  private static LibraryArtifact makeLibraryArtifact(
-      NestedSetBuilder<Artifact> ideResolveArtifacts,
-      @Nullable Artifact classJar,
-      @Nullable Artifact iJar,
-      @Nullable Artifact sourceJar) {
-    // We don't want to add anything that doesn't have a class jar
-    if (classJar == null) {
-      return null;
-    }
-    LibraryArtifact.Builder jarsBuilder = LibraryArtifact.newBuilder();
-    jarsBuilder.setJar(makeArtifactLocation(classJar));
-    addResolveArtifact(ideResolveArtifacts, classJar);
-
-    if (iJar != null) {
-      jarsBuilder.setInterfaceJar(makeArtifactLocation(iJar));
-      addResolveArtifact(ideResolveArtifacts, iJar);
-    }
-    if (sourceJar != null) {
-      jarsBuilder.setSourceJar(makeArtifactLocation(sourceJar));
-      addResolveArtifact(ideResolveArtifacts, sourceJar);
-    }
-
-    return jarsBuilder.build();
-  }
-
-  private static void collectGenJars(
-      JavaIdeInfo.Builder builder,
-      NestedSetBuilder<Artifact> ideResolveArtifacts,
-      JavaGenJarsProvider genJarsProvider) {
-    LibraryArtifact.Builder genjarsBuilder = LibraryArtifact.newBuilder();
-
-    if (genJarsProvider.usesAnnotationProcessing()) {
-      Artifact genClassJar = genJarsProvider.getGenClassJar();
-      if (genClassJar != null) {
-        genjarsBuilder.setJar(makeArtifactLocation(genClassJar));
-        addResolveArtifact(ideResolveArtifacts, genClassJar);
-      }
-      Artifact gensrcJar = genJarsProvider.getGenSourceJar();
-      if (gensrcJar != null) {
-        genjarsBuilder.setSourceJar(makeArtifactLocation(gensrcJar));
-        addResolveArtifact(ideResolveArtifacts, gensrcJar);
-      }
-      if (genjarsBuilder.hasJar()) {
-        builder.addGeneratedJars(genjarsBuilder.build());
-      }
-    }
-  }
-
-  private static void divideJavaSources(
-      RuleContext ruleContext,
-      List<Artifact> javaSources,
-      List<Artifact> generatedSources,
-      List<Artifact> srcjars) {
-    Collection<Artifact> srcs = getSources(ruleContext);
-    for (Artifact src : srcs) {
-      if (src.getRootRelativePathString().endsWith(".java")) {
-        if (src.isSourceArtifact()) {
-          javaSources.add(src);
-        } else {
-          generatedSources.add(src);
-        }
-      } else if (src.getRootRelativePathString().endsWith(".srcjar")) {
-        srcjars.add(src);
-      }
-    }
-  }
-
-  private static Collection<Artifact> getSources(RuleContext ruleContext) {
-    return getTargetListAttribute(ruleContext, "srcs");
-  }
-
-  private static Collection<String> getIncludes(RuleContext ruleContext) {
-    return getStringListAttribute(ruleContext, "includes");
-  }
-
-  private static Collection<String> getDefines(RuleContext ruleContext) {
-    return getStringListAttribute(ruleContext, "defines");
-  }
-
-  private static Collection<String> getCopts(RuleContext ruleContext) {
-    return getStringListAttribute(ruleContext, "copts");
-  }
-
-  private static Collection<Artifact> getTargetListAttribute(
-      RuleContext ruleContext, String attributeName) {
-    return (ruleContext.attributes().has(attributeName, BuildType.LABEL_LIST)
-            && ruleContext.getAttributeMode(attributeName) == Mode.TARGET)
-        ? ruleContext.getPrerequisiteArtifacts(attributeName, Mode.TARGET).list()
-        : ImmutableList.<Artifact>of();
-  }
-
-  private static Collection<String> getStringListAttribute(
-      RuleContext ruleContext, String attributeName) {
-    return ruleContext.attributes().has(attributeName, Type.STRING_LIST)
-        ? ruleContext.attributes().get(attributeName, Type.STRING_LIST)
-        : ImmutableList.<String>of();
-  }
-
-  private static PathFragment getOutputFilePath(
-      ConfiguredTarget base, RuleContext ruleContext, String suffix) {
-    PathFragment packagePathFragment =
-        ruleContext.getLabel().getPackageIdentifier().getSourceRoot();
-    String name = base.getLabel().getName();
-    return new PathFragment(packagePathFragment, new PathFragment(name + suffix));
-  }
-
-  private static void addResolveArtifact(
-      NestedSetBuilder<Artifact> ideResolveArtifacts, Artifact artifact) {
-    if (!artifact.isSourceArtifact()) {
-      ideResolveArtifacts.add(artifact);
-    }
-  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
deleted file mode 100644
index 8f57d96..0000000
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2014 The Bazel Authors. 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.ideinfo;
-
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
-import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-
-/**
- * File provider for Android Studio ide build files.
- */
-@Immutable
-public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvider {
-  private final NestedSet<Artifact> ideInfoFiles;
-  private final NestedSet<Artifact> ideInfoTextFiles;
-  private final NestedSet<Artifact> ideResolveFiles;
-  private final NestedSet<Label> exportedDeps;
-
-  /**
-   * Builder class for {@link AndroidStudioInfoFilesProvider}
-   */
-  public static class Builder {
-    private final NestedSetBuilder<Artifact> ideInfoFilesBuilder;
-    private final NestedSetBuilder<Artifact> ideInfoTextFilesBuilder;
-    private final NestedSetBuilder<Artifact> ideResolveFilesBuilder;
-    private NestedSetBuilder<Label> exportedDepsBuilder;
-
-    public Builder() {
-      ideInfoFilesBuilder = NestedSetBuilder.stableOrder();
-      ideInfoTextFilesBuilder = NestedSetBuilder.stableOrder();
-      ideResolveFilesBuilder = NestedSetBuilder.stableOrder();
-      exportedDepsBuilder = NestedSetBuilder.stableOrder();
-    }
-
-    public NestedSetBuilder<Artifact> ideInfoFilesBuilder() {
-      return ideInfoFilesBuilder;
-    }
-
-    public NestedSetBuilder<Artifact> ideInfoTextFilesBuilder() {
-      return ideInfoTextFilesBuilder;
-    }
-
-    public NestedSetBuilder<Artifact> ideResolveFilesBuilder() {
-      return ideResolveFilesBuilder;
-    }
-
-    public NestedSetBuilder<Label> exportedDepsBuilder() {
-      return exportedDepsBuilder;
-    }
-
-    public AndroidStudioInfoFilesProvider build() {
-      return new AndroidStudioInfoFilesProvider(
-          ideInfoFilesBuilder.build(),
-          ideInfoTextFilesBuilder.build(),
-          ideResolveFilesBuilder.build(),
-          exportedDepsBuilder.build()
-      );
-    }
-  }
-
-  private AndroidStudioInfoFilesProvider(
-      NestedSet<Artifact> ideInfoFiles,
-      NestedSet<Artifact> ideInfoTextFiles,
-      NestedSet<Artifact> ideResolveFiles,
-      NestedSet<Label> exportedDeps) {
-    this.ideInfoFiles = ideInfoFiles;
-    this.ideInfoTextFiles = ideInfoTextFiles;
-    this.ideResolveFiles = ideResolveFiles;
-    this.exportedDeps = exportedDeps;
-  }
-
-  public NestedSet<Artifact> getIdeInfoFiles() {
-    return ideInfoFiles;
-  }
-
-  public NestedSet<Artifact> getIdeInfoTextFiles() {
-    return ideInfoTextFiles;
-  }
-
-  public NestedSet<Artifact> getIdeResolveFiles() {
-    return ideResolveFiles;
-  }
-
-  public NestedSet<Label> getExportedDeps() {
-    return exportedDeps;
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java
deleted file mode 100644
index b40254c..0000000
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2016 The Bazel Authors. 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.ideinfo;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.ideinfo.AndroidStudioInfoAspect.PrerequisiteAttr;
-import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.CIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.TargetIdeInfo;
-
-/**
- * Methods to handle differences between blaze and bazel in the {@link AndroidStudioInfoAspect}.
- */
-public interface AndroidStudioInfoSemantics {
-
-  void augmentPrerequisiteAttrs(ImmutableList.Builder<PrerequisiteAttr> builder);
-
-  void augmentRuleInfo(
-      TargetIdeInfo.Builder builder,
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      NestedSetBuilder<Artifact> ideResolveArtifacts);
-
-  boolean suppressJavaRuleInfo(ConfiguredTarget base);
-
-  void augmentCppRuleInfo(
-      CIdeInfo.Builder builder,
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      CppCompilationContext cppCompilationContext,
-      NestedSetBuilder<Artifact> ideResolveArtifacts);
-
-  boolean checkForAdditionalCppRules(String ruleClass);
-
-  boolean checkForAdditionalPythonRules(String ruleClass);
-}
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java b/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java
deleted file mode 100644
index 4c851ad..0000000
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2016 The Bazel Authors. 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.ideinfo;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.ideinfo.AndroidStudioInfoAspect.PrerequisiteAttr;
-import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.CIdeInfo.Builder;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.TargetIdeInfo;
-
-/**
- * Bazel specific semantics for the {@link AndroidStudioInfoAspect} aspect.
- */
-public class BazelAndroidStudioInfoSemantics implements AndroidStudioInfoSemantics {
-
-  @Override
-  public void augmentCppRuleInfo(
-      Builder builder,
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      CppCompilationContext cppCompilationContext,
-      NestedSetBuilder<Artifact> ideResolveArtifacts) {
-  }
-
-  @Override
-  public void augmentPrerequisiteAttrs(ImmutableList.Builder<PrerequisiteAttr> builder) {
-  }
-
-  @Override
-  public void augmentRuleInfo(
-      TargetIdeInfo.Builder builder,
-      ConfiguredTarget base,
-      RuleContext ruleContext,
-      NestedSetBuilder<Artifact> ideResolveArtifacts) {}
-
-  @Override
-  public boolean suppressJavaRuleInfo(ConfiguredTarget base) {
-    return false;
-  }
-
-  @Override
-  public boolean checkForAdditionalCppRules(String ruleClass) {
-    return false;
-  }
-
-
-  @Override
-  public boolean checkForAdditionalPythonRules(String ruleClass) {
-    return false;
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/android/BUILD b/src/test/java/com/google/devtools/build/android/BUILD
index 2a638e1..411d0f3 100644
--- a/src/test/java/com/google/devtools/build/android/BUILD
+++ b/src/test/java/com/google/devtools/build/android/BUILD
@@ -1,7 +1,6 @@
 filegroup(
     name = "srcs",
     srcs = glob(["**"]) + [
-        "//src/test/java/com/google/devtools/build/android/ideinfo:srcs",
         "//src/test/java/com/google/devtools/build/android/idlclass:srcs",
         "//src/test/java/com/google/devtools/build/android/resources:srcs",
         "//src/test/java/com/google/devtools/build/android/ziputils:srcs",
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/ArtifactLocationConverterTest.java b/src/test/java/com/google/devtools/build/android/ideinfo/ArtifactLocationConverterTest.java
deleted file mode 100644
index 9fac92c..0000000
--- a/src/test/java/com/google/devtools/build/android/ideinfo/ArtifactLocationConverterTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2016 The Bazel Authors. 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.android.ideinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.fail;
-
-import com.google.common.base.Joiner;
-import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation;
-import com.google.devtools.common.options.OptionsParsingException;
-import java.nio.file.Paths;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Tests {@link ArtifactLocationConverter}.
- */
-@RunWith(JUnit4.class)
-public class ArtifactLocationConverterTest {
-
-  private ArtifactLocationConverter converter;
-
-  @Before
-  public final void init() throws Exception  {
-    converter = new ArtifactLocationConverter();
-  }
-
-  @Test
-  public void testConverterSourceArtifact() throws Exception {
-    ArtifactLocation parsed = converter.convert(
-        Joiner.on(',').join("", "test.java")
-    );
-    assertThat(parsed)
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRelativePath(Paths.get("test.java").toString())
-                .setIsSource(true)
-                .build());
-  }
-
-  @Test
-  public void testConverterDerivedArtifact() throws Exception {
-    ArtifactLocation parsed = converter.convert(
-        Joiner.on(',').join("bin", "java/com/test.java")
-    );
-    assertThat(parsed)
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRootExecutionPathFragment(Paths.get("bin").toString())
-                .setRelativePath(Paths.get("java/com/test.java").toString())
-                .setIsSource(false)
-                .build());
-  }
-
-  @Test
-  public void testConverterExternal() throws Exception {
-    ArtifactLocation externalArtifact =
-        converter.convert(Joiner.on(',').join("", "test.java", "1"));
-    assertThat(externalArtifact)
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRelativePath(Paths.get("test.java").toString())
-                .setIsSource(true)
-                .setIsExternal(true)
-                .build());
-    ArtifactLocation nonExternalArtifact =
-        converter.convert(Joiner.on(',').join("", "test.java", "0"));
-    assertThat(nonExternalArtifact)
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRelativePath(Paths.get("test.java").toString())
-                .setIsSource(true)
-                .setIsExternal(false)
-                .build());
-  }
-
-  @Test
-  public void testInvalidFormatFails() throws Exception {
-    assertFails("/root", ArtifactLocationConverter.INVALID_FORMAT);
-    assertFails("/root,exec,rel,extra", ArtifactLocationConverter.INVALID_FORMAT);
-  }
-
-  private void assertFails(String input, String expectedError) {
-    try {
-      new ArtifactLocationConverter().convert(input);
-      fail();
-    } catch (OptionsParsingException e) {
-      assertThat(e).hasMessage(expectedError);
-    }
-  }
-}
-
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/BUILD b/src/test/java/com/google/devtools/build/android/ideinfo/BUILD
deleted file mode 100644
index 924ec5f..0000000
--- a/src/test/java/com/google/devtools/build/android/ideinfo/BUILD
+++ /dev/null
@@ -1,52 +0,0 @@
-filegroup(
-    name = "srcs",
-    srcs = glob(["**"]),
-    visibility = ["//src/test/java/com/google/devtools/build/android:__pkg__"],
-)
-
-java_test(
-    name = "JarFilterTest",
-    size = "small",
-    srcs = ["JarFilterTest.java"],
-    deps = [
-        "//src/main/java/com/google/devtools/common/options",
-        "//src/main/protobuf:package_manifest_java_proto",
-        "//src/tools/android/java/com/google/devtools/build/android/ideinfo:jar_filter_lib",
-        "//third_party:guava",
-        "//third_party:jsr305",
-        "//third_party:junit4",
-        "//third_party:truth",
-        "//third_party/protobuf:protobuf_java",
-    ],
-)
-
-java_test(
-    name = "PackageParserTest",
-    size = "small",
-    srcs = ["PackageParserTest.java"],
-    deps = [
-        "//src/main/java/com/google/devtools/common/options",
-        "//src/main/protobuf:package_manifest_java_proto",
-        "//src/tools/android/java/com/google/devtools/build/android/ideinfo:package_parser_lib",
-        "//third_party:guava",
-        "//third_party:jsr305",
-        "//third_party:junit4",
-        "//third_party:truth",
-        "//third_party/protobuf:protobuf_java",
-    ],
-)
-
-java_test(
-    name = "ArtifactLocationConverterTest",
-    size = "small",
-    srcs = ["ArtifactLocationConverterTest.java"],
-    deps = [
-        "//src/main/java/com/google/devtools/common/options",
-        "//src/main/protobuf:package_manifest_java_proto",
-        "//src/tools/android/java/com/google/devtools/build/android/ideinfo:package_parser_lib",
-        "//third_party:guava",
-        "//third_party:junit4",
-        "//third_party:truth",
-        "//third_party/protobuf:protobuf_java",
-    ],
-)
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java b/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java
deleted file mode 100644
index a17048d..0000000
--- a/src/test/java/com/google/devtools/build/android/ideinfo/JarFilterTest.java
+++ /dev/null
@@ -1,252 +0,0 @@
-// Copyright 2015 The Bazel Authors. 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.android.ideinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.google.common.io.Files;
-import com.google.devtools.build.android.ideinfo.JarFilter.JarFilterOptions;
-import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation;
-import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.JavaSourcePackage;
-import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.PackageManifest;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Unit tests for {@link JarFilter} */
-@RunWith(JUnit4.class)
-public class JarFilterTest {
-
-  @Rule public TemporaryFolder folder = new TemporaryFolder();
-
-  @Test
-  public void testFilterMethod() throws Exception {
-    List<String> prefixes =
-        ImmutableList.of("com/google/foo/Foo", "com/google/bar/Bar", "com/google/baz/Baz");
-    assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/foo/Foo.class")).isTrue();
-    assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/foo/Foo$Inner.class")).isTrue();
-    assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/bar/Bar.class")).isTrue();
-    assertThat(JarFilter.shouldKeepClass(prefixes, "com/google/foo/Foo/NotFoo.class")).isFalse();
-    assertThat(JarFilter.shouldKeepClass(prefixes, "wrong/com/google/foo/Foo.class")).isFalse();
-  }
-
-  @Test
-  public void legacyIntegrationTest() throws Exception {
-    PackageManifest packageManifest =
-        PackageManifest.newBuilder()
-            .addSources(
-                JavaSourcePackage.newBuilder()
-                    .setArtifactLocation(
-                        ArtifactLocation.newBuilder()
-                            .setIsSource(true)
-                            .setRelativePath("com/google/foo/Foo.java"))
-                    .setPackageString("com.google.foo"))
-            .addSources(
-                JavaSourcePackage.newBuilder()
-                    .setArtifactLocation(
-                        ArtifactLocation.newBuilder()
-                            .setIsSource(true)
-                            .setRelativePath("com/google/bar/Bar.java"))
-                    .setPackageString("com.google.bar"))
-            .addSources(
-                JavaSourcePackage.newBuilder()
-                    .setArtifactLocation(
-                        ArtifactLocation.newBuilder()
-                            .setIsSource(true)
-                            .setRelativePath("some/path/Test.java"))
-                    .setPackageString("com.google.test"))
-            .build();
-    assertThat(JarFilter.parsePackageManifest(packageManifest))
-        .containsExactly("com/google/foo/Foo", "com/google/bar/Bar", "com/google/test/Test");
-    File manifest = folder.newFile("foo.manifest");
-    try (FileOutputStream outputStream = new FileOutputStream(manifest)) {
-      packageManifest.writeTo(outputStream);
-    }
-
-    File filterJar = folder.newFile("foo.jar");
-    try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(filterJar))) {
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo$Inner.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/bar/Bar.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/test/Test.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo2.class"));
-      zo.closeEntry();
-    }
-
-    File outputJar = folder.newFile("foo-filtered-gen.jar");
-
-    String[] args =
-        new String[] {
-          "--jars",
-          filterJar.getPath(),
-          "--output",
-          outputJar.getPath(),
-          "--manifest",
-          manifest.getPath()
-        };
-    JarFilter.JarFilterOptions options = JarFilter.parseArgs(args);
-    JarFilter.main(options);
-
-    List<String> filteredJarNames = Lists.newArrayList();
-    try (ZipFile zipFile = new ZipFile(outputJar)) {
-      Enumeration<? extends ZipEntry> entries = zipFile.entries();
-      while (entries.hasMoreElements()) {
-        ZipEntry zipEntry = entries.nextElement();
-        filteredJarNames.add(zipEntry.getName());
-      }
-    }
-
-    assertThat(filteredJarNames)
-        .containsExactly(
-            "com/google/foo/Foo.class",
-            "com/google/foo/Foo$Inner.class",
-            "com/google/bar/Bar.class",
-            "com/google/test/Test.class");
-  }
-
-  @Test
-  public void fullIntegrationTest() throws Exception {
-    File fooJava = folder.newFile("Foo.java");
-    Files.write("package com.google.foo; class Foo { class Inner {} }".getBytes(UTF_8), fooJava);
-
-    File barJava = folder.newFile("Bar.java");
-    Files.write("package com.google.foo.bar; class Bar {}".getBytes(UTF_8), barJava);
-
-    File srcJar = folder.newFile("gen.srcjar");
-    try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(srcJar))) {
-      zo.putNextEntry(new ZipEntry("com/google/foo/gen/Gen.java"));
-      zo.write("package gen; class Gen {}".getBytes(UTF_8));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/gen/Gen2.java"));
-      zo.write("package gen; class Gen2 {}".getBytes(UTF_8));
-      zo.closeEntry();
-    }
-
-    File src3Jar = folder.newFile("gen3.srcjar");
-    try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(src3Jar))) {
-      zo.putNextEntry(new ZipEntry("com/google/foo/gen/Gen3.java"));
-      zo.write("package gen; class Gen3 {}".getBytes(UTF_8));
-      zo.closeEntry();
-    }
-
-    File filterJar = folder.newFile("foo.jar");
-    try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(filterJar))) {
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo$Inner.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/bar/Bar.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("gen/Gen.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("gen/Gen2.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("gen/Gen3.class"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo2.class"));
-      zo.closeEntry();
-    }
-    File filterSrcJar = folder.newFile("foo-src.jar");
-    try (ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(filterSrcJar))) {
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo.java"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/bar/Bar.java"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("gen/Gen.java"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("gen/Gen2.java"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("gen/Gen3.java"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/Foo2.java"));
-      zo.closeEntry();
-      zo.putNextEntry(new ZipEntry("com/google/foo/bar/Bar2.java"));
-      zo.closeEntry();
-    }
-
-    File filteredJar = folder.newFile("foo-filtered-gen.jar");
-    File filteredSourceJar = folder.newFile("foo-filtered-gen-src.jar");
-
-    String[] args =
-        new String[] {
-          "--keep_java_files",
-          fooJava.getPath() + File.pathSeparator + barJava.getPath(),
-          "--keep_source_jars",
-          Joiner.on(File.pathSeparator).join(srcJar.getPath(), src3Jar.getPath()),
-          "--filter_jars",
-          filterJar.getPath(),
-          "--filter_source_jars",
-          filterSrcJar.getPath(),
-          "--filtered_jar",
-          filteredJar.getPath(),
-          "--filtered_source_jar",
-          filteredSourceJar.getPath()
-        };
-    JarFilterOptions options = JarFilter.parseArgs(args);
-    JarFilter.main(options);
-
-    List<String> filteredJarNames = Lists.newArrayList();
-    try (ZipFile zipFile = new ZipFile(filteredJar)) {
-      Enumeration<? extends ZipEntry> entries = zipFile.entries();
-      while (entries.hasMoreElements()) {
-        ZipEntry zipEntry = entries.nextElement();
-        filteredJarNames.add(zipEntry.getName());
-      }
-    }
-
-    List<String> filteredSourceJarNames = Lists.newArrayList();
-    try (ZipFile zipFile = new ZipFile(filteredSourceJar)) {
-      Enumeration<? extends ZipEntry> entries = zipFile.entries();
-      while (entries.hasMoreElements()) {
-        ZipEntry zipEntry = entries.nextElement();
-        filteredSourceJarNames.add(zipEntry.getName());
-      }
-    }
-
-    assertThat(filteredJarNames)
-        .containsExactly(
-            "com/google/foo/Foo.class",
-            "com/google/foo/Foo$Inner.class",
-            "com/google/foo/bar/Bar.class",
-            "gen/Gen.class",
-            "gen/Gen2.class",
-            "gen/Gen3.class");
-
-    assertThat(filteredSourceJarNames)
-        .containsExactly(
-            "com/google/foo/Foo.java",
-            "com/google/foo/bar/Bar.java",
-            "gen/Gen.java",
-            "gen/Gen2.java",
-            "gen/Gen3.java");
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/PackageParserTest.java b/src/test/java/com/google/devtools/build/android/ideinfo/PackageParserTest.java
deleted file mode 100644
index cfb8096..0000000
--- a/src/test/java/com/google/devtools/build/android/ideinfo/PackageParserTest.java
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright 2015 The Bazel Authors. 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.android.ideinfo;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.fail;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation;
-import com.google.protobuf.MessageLite;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.InvalidPathException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Nonnull;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * Unit tests for {@link PackageParser}
- */
-@RunWith(JUnit4.class)
-public class PackageParserTest {
-
-  private static class MockPackageParserIoProvider extends PackageParserIoProvider {
-    private final Map<Path, InputStream> sources = Maps.newHashMap();
-    private final List<ArtifactLocation> sourceLocations = Lists.newArrayList();
-    private StringWriter writer = new StringWriter();
-
-    public MockPackageParserIoProvider addSource(ArtifactLocation source, String javaSrc) {
-      try {
-        Path path = Paths.get(source.getRootExecutionPathFragment(), source.getRelativePath());
-        sources.put(path, new ByteArrayInputStream(javaSrc.getBytes("UTF-8")));
-        sourceLocations.add(source);
-
-      } catch (UnsupportedEncodingException | InvalidPathException e) {
-        fail(e.getMessage());
-      }
-      return this;
-    }
-
-    public void reset() {
-      sources.clear();
-      sourceLocations.clear();
-      writer = new StringWriter();
-    }
-
-    public List<ArtifactLocation> getSourceLocations() {
-      return Lists.newArrayList(sourceLocations);
-    }
-
-    @Nonnull
-    @Override
-    public BufferedReader getReader(Path file) throws IOException {
-      InputStream input = sources.get(file);
-      return new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
-    }
-
-    @Override
-    public void writeProto(@Nonnull MessageLite message, @Nonnull Path file) throws IOException {
-      writer.write(message.toString());
-    }
-  }
-
-  private static final ArtifactLocation DUMMY_SOURCE_ARTIFACT =
-      ArtifactLocation.newBuilder()
-          .setRelativePath("java/com/google/Foo.java")
-          .setIsSource(true)
-          .build();
-
-  private static final ArtifactLocation DUMMY_DERIVED_ARTIFACT =
-      ArtifactLocation.newBuilder()
-          .setRootExecutionPathFragment("bin")
-          .setRelativePath("java/com/google/Bla.java")
-          .setIsSource(false)
-          .build();
-
-  private MockPackageParserIoProvider mockIoProvider;
-  private PackageParser parser;
-
-  @Before
-  public void setUp() {
-    mockIoProvider = new MockPackageParserIoProvider();
-    parser = new PackageParser(mockIoProvider);
-  }
-
-  private Map<ArtifactLocation, String> parsePackageStrings() throws Exception {
-    List<ArtifactLocation> sources = mockIoProvider.getSourceLocations();
-    return parser.parsePackageStrings(sources);
-  }
-
-  @Test
-  public void testParseCommandLineArguments() throws Exception {
-    String[] args = new String[] {
-        "--output_manifest",
-        "/tmp/out.manifest",
-        "--sources",
-        Joiner.on(':').join(
-          ",java/com/google/Foo.java",
-          "bin/out,java/com/google/Bla.java")
-    };
-    PackageParser.PackageParserOptions options = PackageParser.parseArgs(args);
-    assertThat(options.outputManifest.toString())
-        .isEqualTo(Paths.get("/tmp/out.manifest").toString());
-    assertThat(options.sources).hasSize(2);
-    assertThat(options.sources.get(0))
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRelativePath(Paths.get("java/com/google/Foo.java").toString())
-                .setIsSource(true)
-                .build());
-    assertThat(options.sources.get(1))
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRootExecutionPathFragment(Paths.get("bin/out").toString())
-                .setRelativePath(Paths.get("java/com/google/Bla.java").toString())
-                .setIsSource(false)
-                .build());
-  }
-
-  @Test
-  public void testReadNoSources() throws Exception {
-    Map<ArtifactLocation, String> map = parsePackageStrings();
-    assertThat(map).isEmpty();
-  }
-
-  @Test
-  public void testSingleRead() throws Exception {
-    mockIoProvider
-        .addSource(
-            DUMMY_SOURCE_ARTIFACT,
-            "package com.google;\n public class Bla {}\"");
-    Map<ArtifactLocation, String> map = parsePackageStrings();
-    assertThat(map).hasSize(1);
-    assertThat(map).containsEntry(
-        DUMMY_SOURCE_ARTIFACT,
-        "com.google");
-  }
-
-  @Test
-  public void testMultiRead() throws Exception {
-    mockIoProvider
-        .addSource(
-            DUMMY_SOURCE_ARTIFACT,
-            "package com.test;\n public class Bla {}\"")
-        .addSource(
-            DUMMY_DERIVED_ARTIFACT,
-            "package com.other;\n public class Foo {}\"");
-    Map<ArtifactLocation, String> map = parsePackageStrings();
-    assertThat(map).hasSize(2);
-    assertThat(map).containsEntry(
-        DUMMY_SOURCE_ARTIFACT,
-        "com.test");
-    assertThat(map).containsEntry(
-        DUMMY_DERIVED_ARTIFACT,
-        "com.other");
-  }
-
-  @Test
-  public void testReadSomeInvalid() throws Exception {
-    mockIoProvider
-        .addSource(
-            DUMMY_SOURCE_ARTIFACT,
-            "package %com.test;\n public class Bla {}\"")
-        .addSource(
-            DUMMY_DERIVED_ARTIFACT,
-            "package com.other;\n public class Foo {}\"");
-    Map<ArtifactLocation, String> map = parsePackageStrings();
-    assertThat(map).hasSize(1);
-    assertThat(map).containsEntry(
-        DUMMY_DERIVED_ARTIFACT,
-        "com.other");
-  }
-
-  @Test
-  public void testReadAllInvalid() throws Exception {
-    mockIoProvider
-        .addSource(
-            DUMMY_SOURCE_ARTIFACT,
-            "#package com.test;\n public class Bla {}\"")
-        .addSource(
-            DUMMY_DERIVED_ARTIFACT,
-            "package com.other\n public class Foo {}\"");
-    Map<ArtifactLocation, String> map = parsePackageStrings();
-    assertThat(map).isEmpty();
-  }
-
-  @Test
-  public void testWriteEmptyMap() throws Exception {
-    parser.writeManifest(
-        Maps.<ArtifactLocation, String> newHashMap(),
-        Paths.get("/java/com/google/test.manifest"));
-    assertThat(mockIoProvider.writer.toString()).isEmpty();
-  }
-
-  @Test
-  public void testWriteMap() throws Exception {
-    Map<ArtifactLocation, String> map = ImmutableMap.of(
-        DUMMY_SOURCE_ARTIFACT,
-        "com.google",
-        DUMMY_DERIVED_ARTIFACT,
-        "com.other"
-    );
-    parser.writeManifest(map, Paths.get("/java/com/google/test.manifest"));
-
-    String writtenString = mockIoProvider.writer.toString();
-    assertThat(writtenString).contains(String.format(
-        "relative_path: \"%s\"",
-        DUMMY_SOURCE_ARTIFACT.getRelativePath()));
-    assertThat(writtenString).contains("package_string: \"com.google\"");
-
-    assertThat(writtenString).contains(String.format(
-        "root_execution_path_fragment: \"%s\"",
-        DUMMY_DERIVED_ARTIFACT.getRootExecutionPathFragment()));
-    assertThat(writtenString).contains(String.format(
-        "relative_path: \"%s\"",
-        DUMMY_DERIVED_ARTIFACT.getRelativePath()));
-    assertThat(writtenString).contains("package_string: \"com.other\"");
-  }
-
-  @Test
-  public void testHandlesOldFormat() throws Exception {
-    String[] args = new String[] {
-        "--output_manifest",
-        "/tmp/out.manifest",
-        "--sources",
-        Joiner.on(':').join(
-            ",java/com/google/Foo.java,/usr/local/google/code",
-            "bin,java/com/google/Bla.java,/usr/local/_tmp/code/bin"
-        )};
-    PackageParser.PackageParserOptions options = PackageParser.parseArgs(args);
-    assertThat(options.outputManifest.toString())
-        .isEqualTo(Paths.get("/tmp/out.manifest").toString());
-    assertThat(options.sources).hasSize(2);
-    assertThat(options.sources.get(0))
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRelativePath(Paths.get("java/com/google/Foo.java").toString())
-                .setIsSource(true)
-                .build());
-    assertThat(options.sources.get(1))
-        .isEqualTo(
-            ArtifactLocation.newBuilder()
-                .setRootExecutionPathFragment(Paths.get("bin").toString())
-                .setRelativePath(Paths.get("java/com/google/Bla.java").toString())
-                .setIsSource(false)
-                .build());
-  }
-
-}
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 2aa95f5..f3c03d1 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -666,38 +666,6 @@
     ],
 )
 
-java_test(
-    name = "ideinfo_test",
-    srcs = glob([
-        "ideinfo/*.java",
-    ]),
-    tags = ["ideinfo"],
-    test_class = "com.google.devtools.build.lib.AllTests",
-    deps = [
-        ":analysis_testutil",
-        ":foundations_testutil",
-        ":test_runner",
-        ":testutil",
-        "//src/main/java/com/google/devtools/build/lib:bazel-main",
-        "//src/main/java/com/google/devtools/build/lib:bazel-rules",
-        "//src/main/java/com/google/devtools/build/lib:build-base",
-        "//src/main/java/com/google/devtools/build/lib:collect",
-        "//src/main/java/com/google/devtools/build/lib:events",
-        "//src/main/java/com/google/devtools/build/lib:ideinfo",
-        "//src/main/java/com/google/devtools/build/lib:packages",
-        "//src/main/java/com/google/devtools/build/lib:vfs",
-        "//src/main/java/com/google/devtools/build/lib/actions",
-        "//src/main/protobuf:intellij_ide_info_java_proto",
-        "//third_party:guava",
-        "//third_party:guava-testlib",
-        "//third_party:jsr305",
-        "//third_party:junit4",
-        "//third_party:mockito",
-        "//third_party:truth",
-        "//third_party/protobuf:protobuf_java",
-    ],
-)
-
 cc_binary(
     name = "shell/killmyself",
     srcs = ["shell/killmyself.cc"],
@@ -1281,7 +1249,6 @@
     "shell",
     "server",
     "skyframe",
-    "ideinfo",
     "exec",
 ]
 
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
deleted file mode 100644
index 4a80886..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ /dev/null
@@ -1,1865 +0,0 @@
-// Copyright 2014 The Bazel Authors. 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.ideinfo;
-
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import com.google.common.collect.Iterables;
-import com.google.common.collect.ObjectArrays;
-import com.google.devtools.build.lib.actions.Root;
-import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.vfs.PathFragment;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.ArtifactLocation;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.CIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.CToolchainIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.JavaIdeInfo;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.TargetIdeInfo;
-import com.google.protobuf.ByteString;
-import com.google.protobuf.ProtocolStringList;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Tests for {@link AndroidStudioInfoAspect} validating proto's contents. */
-@RunWith(JUnit4.class)
-public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase {
-
-  @Override
-  protected final void useConfiguration(String... args) throws Exception {
-    super.useConfiguration(ObjectArrays.concat(args, "--java_header_compilation=true"));
-  }
-
-  @Test
-  public void testSimpleJavaLibrary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(location.getIsSource()).isTrue();
-    assertThat(location.getIsExternal()).isFalse();
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("java_library");
-    assertThat(relativePathsForJavaSourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/Simple.java");
-    assertThat(transform(targetIdeInfo.getJavaIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString(
-                "com/google/example", "libsimple.jar", "libsimple-hjar.jar", "libsimple-src.jar"));
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/libsimple.jar",
-            "com/google/example/libsimple-hjar.jar",
-            "com/google/example/libsimple-src.jar");
-    assertThat(targetIdeInfo.getJavaIdeInfo().getJdeps().getRelativePath())
-        .isEqualTo("com/google/example/libsimple.jdeps");
-  }
-
-  @Test
-  public void testPackageManifestCreated() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-
-    ArtifactLocation packageManifest = targetIdeInfo.getJavaIdeInfo().getPackageManifest();
-    assertNotNull(packageManifest);
-
-    assertEquals(packageManifest.getRelativePath(), "com/google/example/simple.manifest");
-  }
-
-  @Test
-  public void testPackageManifestNotCreatedForOnlyGeneratedSources() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "genrule(",
-        "   name = 'gen_sources',",
-        "   outs = ['Gen.java'],",
-        "   cmd = '',",
-        ")",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = [':gen_sources']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    assertThat(targetIdeInfo.getJavaIdeInfo().hasPackageManifest()).isFalse();
-  }
-
-  @Test
-  public void testFilteredGenJarNotCreatedForSourceOnlyRule() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['Test.java']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    assertThat(targetIdeInfo.getJavaIdeInfo().hasFilteredGenJar()).isFalse();
-  }
-
-  @Test
-  public void testFilteredGenJarNotCreatedForOnlyGenRule() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "genrule(",
-        "   name = 'gen_sources',",
-        "   outs = ['Gen.java'],",
-        "   cmd = '',",
-        ")",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = [':gen_sources']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    assertThat(targetIdeInfo.getJavaIdeInfo().hasFilteredGenJar()).isFalse();
-  }
-
-  @Test
-  public void testFilteredGenJar() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "genrule(",
-        "   name = 'gen_sources',",
-        "   outs = ['Gen.java'],",
-        "   cmd = '',",
-        ")",
-        "genrule(",
-        "   name = 'gen_srcjar',",
-        "   outs = ['gen.srcjar'],",
-        "   cmd = '',",
-        ")",
-        "java_library(",
-        "    name = 'lib',",
-        "    srcs = [':gen_sources', ':gen_srcjar', 'Test.java']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    assertThat(targetIdeInfo.getJavaIdeInfo().hasFilteredGenJar()).isTrue();
-    assertThat(targetIdeInfo.getJavaIdeInfo().getFilteredGenJar().getJar().getRelativePath())
-        .isEqualTo("com/google/example/lib-filtered-gen.jar");
-    assertThat(targetIdeInfo.getJavaIdeInfo().getFilteredGenJar().getSourceJar().getRelativePath())
-        .isEqualTo("com/google/example/lib-filtered-gen-src.jar");
-  }
-
-  @Test
-  public void testJavaLibraryWithDependencies() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")",
-        "java_library(",
-        "    name = 'complex',",
-        "    srcs = ['complex/Complex.java'],",
-        "    deps = [':simple']",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:complex");
-
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    TargetIdeInfo complexTarget =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:complex", targetIdeInfos);
-
-    assertThat(relativePathsForJavaSourcesOf(complexTarget))
-        .containsExactly("com/google/example/complex/Complex.java");
-    assertThat(complexTarget.getDependenciesList()).contains("//com/google/example:simple");
-  }
-
-  @Test
-  public void testJavaLibraryWithTransitiveDependencies() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")",
-        "java_library(",
-        "    name = 'complex',",
-        "    srcs = ['complex/Complex.java'],",
-        "    deps = [':simple']",
-        ")",
-        "java_library(",
-        "    name = 'extracomplex',",
-        "    srcs = ['extracomplex/ExtraComplex.java'],",
-        "    deps = [':complex']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:extracomplex");
-
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:complex", targetIdeInfos);
-
-    TargetIdeInfo extraComplexTarget =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:extracomplex", targetIdeInfos);
-
-    assertThat(relativePathsForJavaSourcesOf(extraComplexTarget))
-        .containsExactly("com/google/example/extracomplex/ExtraComplex.java");
-    assertThat(extraComplexTarget.getDependenciesList()).contains("//com/google/example:complex");
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/libextracomplex.jar",
-            "com/google/example/libextracomplex-hjar.jar",
-            "com/google/example/libextracomplex-src.jar",
-            "com/google/example/libcomplex.jar",
-            "com/google/example/libcomplex-hjar.jar",
-            "com/google/example/libcomplex-src.jar",
-            "com/google/example/libsimple.jar",
-            "com/google/example/libsimple-hjar.jar",
-            "com/google/example/libsimple-src.jar");
-  }
-
-  @Test
-  public void testJavaLibraryWithDiamondDependencies() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")",
-        "java_library(",
-        "    name = 'complex',",
-        "    srcs = ['complex/Complex.java'],",
-        "    deps = [':simple']",
-        ")",
-        "java_library(",
-        "    name = 'complex1',",
-        "    srcs = ['complex1/Complex.java'],",
-        "    deps = [':simple']",
-        ")",
-        "java_library(",
-        "    name = 'extracomplex',",
-        "    srcs = ['extracomplex/ExtraComplex.java'],",
-        "    deps = [':complex', ':complex1']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:extracomplex");
-
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:complex", targetIdeInfos);
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:complex1", targetIdeInfos);
-
-    TargetIdeInfo extraComplexTarget =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:extracomplex", targetIdeInfos);
-
-    assertThat(relativePathsForJavaSourcesOf(extraComplexTarget))
-        .containsExactly("com/google/example/extracomplex/ExtraComplex.java");
-    assertThat(extraComplexTarget.getDependenciesList())
-        .containsAllOf("//com/google/example:complex", "//com/google/example:complex1");
-  }
-
-  @Test
-  public void testJavaLibraryWithExports() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")",
-        "java_library(",
-        "    name = 'complex',",
-        "    srcs = ['complex/Complex.java'],",
-        "    exports = [':simple'],",
-        ")",
-        "java_library(",
-        "    name = 'extracomplex',",
-        "    srcs = ['extracomplex/ExtraComplex.java'],",
-        "    deps = [':complex']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:extracomplex");
-
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:complex", targetIdeInfos);
-
-    TargetIdeInfo complexTarget =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:complex", targetIdeInfos);
-    TargetIdeInfo extraComplexTarget =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:extracomplex", targetIdeInfos);
-
-    assertThat(complexTarget.getDependenciesList()).contains("//com/google/example:simple");
-
-    assertThat(extraComplexTarget.getDependenciesList())
-        .containsAllOf("//com/google/example:simple", "//com/google/example:complex");
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/libextracomplex.jar",
-            "com/google/example/libextracomplex-hjar.jar",
-            "com/google/example/libextracomplex-src.jar",
-            "com/google/example/libcomplex.jar",
-            "com/google/example/libcomplex-hjar.jar",
-            "com/google/example/libcomplex-src.jar",
-            "com/google/example/libsimple.jar",
-            "com/google/example/libsimple-hjar.jar",
-            "com/google/example/libsimple-src.jar");
-  }
-
-  @Test
-  public void testJavaLibraryWithTransitiveExports() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")",
-        "java_library(",
-        "    name = 'complex',",
-        "    srcs = ['complex/Complex.java'],",
-        "    exports = [':simple'],",
-        ")",
-        "java_library(",
-        "    name = 'extracomplex',",
-        "    srcs = ['extracomplex/ExtraComplex.java'],",
-        "    exports = [':complex'],",
-        ")",
-        "java_library(",
-        "    name = 'megacomplex',",
-        "    srcs = ['megacomplex/MegaComplex.java'],",
-        "    deps = [':extracomplex'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:megacomplex");
-
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:complex", targetIdeInfos);
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:extracomplex", targetIdeInfos);
-
-    TargetIdeInfo megaComplexTarget =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:megacomplex", targetIdeInfos);
-
-    assertThat(relativePathsForJavaSourcesOf(megaComplexTarget))
-        .containsExactly("com/google/example/megacomplex/MegaComplex.java");
-    assertThat(megaComplexTarget.getDependenciesList())
-        .containsAllOf(
-            "//com/google/example:simple",
-            "//com/google/example:complex",
-            "//com/google/example:extracomplex");
-  }
-
-  @Test
-  public void testJavaImport() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_import(",
-        "   name = 'imp',",
-        "   jars = ['a.jar', 'b.jar'],",
-        "   srcjar = 'impsrc.jar',",
-        ")",
-        "java_library(",
-        "   name = 'lib',",
-        "   srcs = ['Lib.java'],",
-        "   deps = [':imp'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    final TargetIdeInfo libInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    TargetIdeInfo impInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:imp", targetIdeInfos);
-
-    assertThat(impInfo.getKindString()).isEqualTo("java_import");
-    assertThat(libInfo.getDependenciesList()).contains("//com/google/example:imp");
-
-    JavaIdeInfo javaIdeInfo = impInfo.getJavaIdeInfo();
-    assertThat(javaIdeInfo).isNotNull();
-    assertThat(transform(javaIdeInfo.getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString(
-                "com/google/example",
-                "a.jar",
-                "_ijar/imp/com/google/example/a-ijar.jar",
-                "impsrc.jar"),
-            jarString(
-                "com/google/example",
-                "b.jar",
-                "_ijar/imp/com/google/example/b-ijar.jar",
-                "impsrc.jar"))
-        .inOrder();
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/_ijar/imp/com/google/example/a-ijar.jar",
-            "com/google/example/_ijar/imp/com/google/example/b-ijar.jar",
-            "com/google/example/liblib.jar",
-            "com/google/example/liblib-hjar.jar",
-            "com/google/example/liblib-src.jar");
-  }
-
-  @Test
-  public void testJavaImportWithExports() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_import(",
-        "   name = 'imp',",
-        "   jars = ['a.jar', 'b.jar'],",
-        "   deps = [':foobar'],",
-        "   exports = [':foobar'],",
-        ")",
-        "java_library(",
-        "   name = 'lib',",
-        "   srcs = ['Lib.java'],",
-        "   deps = [':imp'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    TargetIdeInfo libInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    TargetIdeInfo impInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:imp", targetIdeInfos);
-
-    assertThat(impInfo.getKindString()).isEqualTo("java_import");
-    assertThat(impInfo.getDependenciesList()).contains("//com/google/example:foobar");
-    assertThat(libInfo.getDependenciesList())
-        .containsAllOf("//com/google/example:foobar", "//com/google/example:imp");
-  }
-
-  @Test
-  public void testNoPackageManifestForExports() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_import(",
-        "   name = 'imp',",
-        "   jars = ['a.jar', 'b.jar'],",
-        "   deps = [':foobar'],",
-        "   exports = [':foobar'],",
-        ")",
-        "java_library(",
-        "   name = 'lib',",
-        "   srcs = ['Lib.java'],",
-        "   deps = [':imp'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    TargetIdeInfo libInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    TargetIdeInfo impInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:imp", targetIdeInfos);
-
-    assertThat(!impInfo.getJavaIdeInfo().hasPackageManifest()).isTrue();
-    assertThat(libInfo.getJavaIdeInfo().hasPackageManifest()).isTrue();
-  }
-
-  @Test
-  public void testGeneratedJavaImportFilesAreAddedToOutputGroup() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_import(",
-        "   name = 'imp',",
-        "   jars = [':gen_jar'],",
-        "   srcjar = ':gen_srcjar',",
-        ")",
-        "genrule(",
-        "   name = 'gen_jar',",
-        "   outs = ['gen_jar.jar'],",
-        "   cmd = '',",
-        ")",
-        "genrule(",
-        "   name = 'gen_srcjar',",
-        "   outs = ['gen_srcjar.jar'],",
-        "   cmd = '',",
-        ")");
-    buildIdeInfo("//com/google/example:imp");
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/_ijar/imp/com/google/example/gen_jar-ijar.jar",
-            "com/google/example/gen_jar.jar",
-            "com/google/example/gen_srcjar.jar");
-  }
-
-  @Test
-  public void testAspectIsPropagatedAcrossExports() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_library(",
-        "   name = 'lib',",
-        "   srcs = ['Lib.java'],",
-        "   exports = [':foobar'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:foobar", targetIdeInfos);
-  }
-
-  @Test
-  public void testJavaTest() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_test(",
-        "   name = 'FooBarTest',",
-        "   srcs = ['FooBarTest.java'],",
-        "   size = 'large',",
-        "   deps = [':foobar'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos =
-        buildIdeInfo("//java/com/google/example:FooBarTest");
-    TargetIdeInfo testInfo =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:FooBarTest", targetIdeInfos);
-    assertThat(testInfo.getKindString()).isEqualTo("java_test");
-    assertThat(relativePathsForJavaSourcesOf(testInfo))
-        .containsExactly("java/com/google/example/FooBarTest.java");
-    assertThat(testInfo.getDependenciesList()).contains("//java/com/google/example:foobar");
-    assertThat(transform(testInfo.getJavaIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString("java/com/google/example", "FooBarTest.jar", null, "FooBarTest-src.jar"));
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "java/com/google/example/libfoobar.jar",
-            "java/com/google/example/libfoobar-hjar.jar",
-            "java/com/google/example/libfoobar-src.jar",
-            "java/com/google/example/FooBarTest.jar",
-            "java/com/google/example/FooBarTest-src.jar");
-    assertThat(testInfo.getJavaIdeInfo().getJdeps().getRelativePath())
-        .isEqualTo("java/com/google/example/FooBarTest.jdeps");
-
-    assertThat(testInfo.getTestInfo().getSize()).isEqualTo("large");
-  }
-
-  @Test
-  public void testJavaBinary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_binary(",
-        "   name = 'foobar-exe',",
-        "   main_class = 'MyMainClass',",
-        "   srcs = ['FooBarMain.java'],",
-        "   deps = [':foobar'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:foobar-exe");
-    TargetIdeInfo binaryInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:foobar-exe", targetIdeInfos);
-
-    assertThat(binaryInfo.getKindString()).isEqualTo("java_binary");
-    assertThat(relativePathsForJavaSourcesOf(binaryInfo))
-        .containsExactly("com/google/example/FooBarMain.java");
-    assertThat(binaryInfo.getDependenciesList()).contains("//com/google/example:foobar");
-
-    assertThat(transform(binaryInfo.getJavaIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString("com/google/example", "foobar-exe.jar", null, "foobar-exe-src.jar"));
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/libfoobar.jar",
-            "com/google/example/libfoobar-hjar.jar",
-            "com/google/example/libfoobar-src.jar",
-            "com/google/example/foobar-exe.jar",
-            "com/google/example/foobar-exe-src.jar");
-    assertThat(binaryInfo.getJavaIdeInfo().getJdeps().getRelativePath())
-        .isEqualTo("com/google/example/foobar-exe.jdeps");
-  }
-
-  @Test
-  public void testJavaToolchain() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'a',",
-        "    srcs = ['A.java'],",
-        "    deps = [':b'],",
-        ")",
-        "java_library(",
-        "    name = 'b',",
-        "    srcs = ['B.java'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:a");
-
-    List<TargetIdeInfo> javaToolChainInfos = findJavaToolchain(targetIdeInfos);
-    assertThat(javaToolChainInfos).hasSize(1); // Ensure we don't get one instance per java_library
-    TargetIdeInfo toolChainInfo = Iterables.getOnlyElement(javaToolChainInfos);
-    assertThat(toolChainInfo.getJavaToolchainIdeInfo().getSourceVersion()).isNotEmpty();
-    assertThat(toolChainInfo.getJavaToolchainIdeInfo().getTargetVersion()).isNotEmpty();
-
-    TargetIdeInfo a = targetIdeInfos.get("//com/google/example:a");
-    assertThat(a.getDependenciesList())
-        .containsAllOf("//com/google/example:b", toolChainInfo.getLabel());
-  }
-
-  @Test
-  public void testJavaToolchainForAndroid() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "android_library(",
-        "    name = 'a',",
-        "    srcs = ['A.java'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:a");
-    assertThat(targetIdeInfos).hasSize(2);
-
-    List<TargetIdeInfo> javaToolChainInfos = findJavaToolchain(targetIdeInfos);
-    assertThat(javaToolChainInfos).hasSize(1);
-  }
-
-  @Test
-  public void testAndroidLibrary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "android_library(",
-        "  name = 'l1',",
-        "  manifest = 'AndroidManifest.xml',",
-        "  custom_package = 'com.google.example',",
-        "  resource_files = ['r1/values/a.xml'],",
-        ")",
-        "android_library(",
-        "  name = 'l',",
-        "  srcs = ['Main.java'],",
-        "  deps = [':l1'],",
-        "  manifest = 'AndroidManifest.xml',",
-        "  custom_package = 'com.google.example',",
-        "  resource_files = ['res/drawable/a.png', 'res/drawable/b.png'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:l");
-    TargetIdeInfo target = getTargetIdeInfoAndVerifyLabel("//com/google/example:l", targetIdeInfos);
-    assertThat(target.getKindString()).isEqualTo("android_library");
-    assertThat(relativePathsForJavaSourcesOf(target))
-        .containsExactly("com/google/example/Main.java");
-    assertThat(transform(target.getJavaIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString("com/google/example", "libl.jar", "libl-hjar.jar", "libl-src.jar"),
-            jarString("com/google/example", "l_resources.jar", null, "l_resources-src.jar"));
-    assertThat(transform(target.getAndroidIdeInfo().getResourcesList(), ARTIFACT_TO_RELATIVE_PATH))
-        .containsExactly("com/google/example/res");
-    assertThat(target.getAndroidIdeInfo().getManifest().getRelativePath())
-        .isEqualTo("com/google/example/AndroidManifest.xml");
-    assertThat(target.getAndroidIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
-    assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(target.getAndroidIdeInfo().getResourceJar()))
-        .isEqualTo(jarString("com/google/example", "l_resources.jar", null, "l_resources-src.jar"));
-
-    assertThat(target.getDependenciesList()).contains("//com/google/example:l1");
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/libl.jar",
-            "com/google/example/libl-hjar.jar",
-            "com/google/example/libl-src.jar",
-            "com/google/example/l_resources.jar",
-            "com/google/example/l_resources-src.jar",
-            "com/google/example/libl1.jar",
-            "com/google/example/libl1-src.jar",
-            "com/google/example/l1_resources.jar",
-            "com/google/example/l1_resources-src.jar");
-    assertThat(target.getJavaIdeInfo().getJdeps().getRelativePath())
-        .isEqualTo("com/google/example/libl.jdeps");
-  }
-
-  @Test
-  public void testAndroidBinary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "android_library(",
-        "  name = 'l1',",
-        "  manifest = 'AndroidManifest.xml',",
-        "  custom_package = 'com.google.example',",
-        "  resource_files = ['r1/values/a.xml'],",
-        ")",
-        "android_binary(",
-        "  name = 'b',",
-        "  srcs = ['Main.java'],",
-        "  deps = [':l1'],",
-        "  manifest = 'AndroidManifest.xml',",
-        "  custom_package = 'com.google.example',",
-        "  resource_files = ['res/drawable/a.png', 'res/drawable/b.png'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:b");
-    TargetIdeInfo target = getTargetIdeInfoAndVerifyLabel("//com/google/example:b", targetIdeInfos);
-
-    assertThat(target.getKindString()).isEqualTo("android_binary");
-    assertThat(relativePathsForJavaSourcesOf(target))
-        .containsExactly("com/google/example/Main.java");
-    assertThat(transform(target.getJavaIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString("com/google/example", "libb.jar", "libb-hjar.jar", "libb-src.jar"),
-            jarString("com/google/example", "b_resources.jar", null, "b_resources-src.jar"));
-
-    assertThat(transform(target.getAndroidIdeInfo().getResourcesList(), ARTIFACT_TO_RELATIVE_PATH))
-        .containsExactly("com/google/example/res");
-    assertThat(target.getAndroidIdeInfo().getManifest().getRelativePath())
-        .isEqualTo("com/google/example/AndroidManifest.xml");
-    assertThat(target.getAndroidIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
-    assertThat(target.getAndroidIdeInfo().getApk().getRelativePath())
-        .isEqualTo("com/google/example/b.apk");
-
-    assertThat(target.getDependenciesList()).contains("//com/google/example:l1");
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/libb.jar",
-            "com/google/example/libb-hjar.jar",
-            "com/google/example/libb-src.jar",
-            "com/google/example/b_resources.jar",
-            "com/google/example/b_resources-src.jar",
-            "com/google/example/libl1.jar",
-            "com/google/example/libl1-src.jar",
-            "com/google/example/l1_resources.jar",
-            "com/google/example/l1_resources-src.jar");
-    assertThat(target.getJavaIdeInfo().getJdeps().getRelativePath())
-        .isEqualTo("com/google/example/libb.jdeps");
-  }
-
-  @Test
-  public void testAndroidInferredPackage() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "  name = 'l',",
-        "  manifest = 'AndroidManifest.xml',",
-        ")",
-        "android_binary(",
-        "  name = 'b',",
-        "  srcs = ['Main.java'],",
-        "  deps = [':l'],",
-        "  manifest = 'AndroidManifest.xml',",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:b");
-    TargetIdeInfo lTarget =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:l", targetIdeInfos);
-    TargetIdeInfo bTarget =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:b", targetIdeInfos);
-
-    assertThat(bTarget.getAndroidIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
-    assertThat(lTarget.getAndroidIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
-  }
-
-  @Test
-  public void testAndroidLibraryWithoutAidlHasNoIdlJars() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "  name = 'no_idl',",
-        "  srcs = ['Test.java'],",
-        ")");
-    String noIdlTarget = "//java/com/google/example:no_idl";
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo(noIdlTarget);
-    TargetIdeInfo noIdlTargetIdeInfo = getTargetIdeInfoAndVerifyLabel(noIdlTarget, targetIdeInfos);
-
-    assertThat(noIdlTargetIdeInfo.getAndroidIdeInfo().getHasIdlSources()).isFalse();
-  }
-
-  @Test
-  public void testAndroidLibraryWithAidlHasIdlJars() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "  name = 'has_idl',",
-        "  idl_srcs = ['a.aidl'],",
-        ")");
-    String idlTarget = "//java/com/google/example:has_idl";
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo(idlTarget);
-    TargetIdeInfo idlTargetIdeInfo = getTargetIdeInfoAndVerifyLabel(idlTarget, targetIdeInfos);
-
-    assertThat(idlTargetIdeInfo.getAndroidIdeInfo().getHasIdlSources()).isTrue();
-    assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(idlTargetIdeInfo.getAndroidIdeInfo().getIdlJar()))
-        .isEqualTo(
-            jarString(
-                "java/com/google/example", "libhas_idl-idl.jar", null, "libhas_idl-idl.srcjar"));
-    assertThat(relativePathsForJavaSourcesOf(idlTargetIdeInfo)).isEmpty();
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "java/com/google/example/libhas_idl.jar",
-            "java/com/google/example/libhas_idl-hjar.jar",
-            "java/com/google/example/libhas_idl-src.jar",
-            "java/com/google/example/libhas_idl-idl.jar",
-            "java/com/google/example/libhas_idl-idl.srcjar");
-  }
-
-  @Test
-  public void testAndroidLibraryWithAidlWithoutImportRoot() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "  name = 'no_idl_import_root',",
-        "  idl_srcs = ['a.aidl'],",
-        ")");
-    String idlTarget = "//java/com/google/example:no_idl_import_root";
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo(idlTarget);
-    TargetIdeInfo idlTargetIdeInfo = getTargetIdeInfoAndVerifyLabel(idlTarget, targetIdeInfos);
-    assertThat(idlTargetIdeInfo.getAndroidIdeInfo().getIdlImportRoot()).isEmpty();
-  }
-
-  @Test
-  public void testAndroidLibraryWithAidlWithImportRoot() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "  name = 'has_idl_import_root',",
-        "  idl_import_root = 'idl',",
-        "  idl_srcs = ['idl/com/google/example/a.aidl'],",
-        ")");
-    String idlTarget = "//java/com/google/example:has_idl_import_root";
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo(idlTarget);
-    TargetIdeInfo idlTargetIdeInfo = getTargetIdeInfoAndVerifyLabel(idlTarget, targetIdeInfos);
-    assertThat(idlTargetIdeInfo.getAndroidIdeInfo().getIdlImportRoot()).isEqualTo("idl");
-  }
-
-  @Test
-  public void testAndroidLibraryGeneratedManifestIsAddedToOutputGroup() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "android_library(",
-        "  name = 'lib',",
-        "  manifest = ':manifest',",
-        "  custom_package = 'com.google.example',",
-        ")",
-        "genrule(",
-        "  name = 'manifest',",
-        "  outs = ['AndroidManifest.xml'],",
-        "  cmd = '',",
-        ")");
-    buildIdeInfo("//com/google/example:lib");
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "com/google/example/liblib.jar",
-            "com/google/example/liblib-src.jar",
-            "com/google/example/lib_resources.jar",
-            "com/google/example/lib_resources-src.jar",
-            "com/google/example/AndroidManifest.xml");
-  }
-
-  @Test
-  public void testJavaLibraryWithoutGeneratedSourcesHasNoGenJars() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "java_library(",
-        "  name = 'no_plugin',",
-        "  srcs = ['Test.java'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:no_plugin");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:no_plugin", targetIdeInfos);
-
-    assertThat(targetIdeInfo.getJavaIdeInfo().getGeneratedJarsList()).isEmpty();
-  }
-
-  @Test
-  public void testJavaLibraryWithGeneratedSourcesHasGenJars() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "java_library(",
-        "  name = 'test',",
-        "  srcs = ['Test.java'],",
-        "  plugins = [':plugin']",
-        ")",
-        "java_plugin(",
-        "  name = 'plugin',",
-        "  processor_class = 'com.google.example.Plugin',",
-        "  deps = ['plugin_lib'],",
-        ")",
-        "java_library(",
-        "  name = 'plugin_lib',",
-        "  srcs = ['Plugin.java'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:test");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:test", targetIdeInfos);
-
-    assertThat(
-            transform(
-                targetIdeInfo.getJavaIdeInfo().getGeneratedJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString("java/com/google/example", "libtest-gen.jar", null, "libtest-gensrc.jar"));
-    assertThat(getIdeResolveFiles())
-        .containsExactly(
-            "java/com/google/example/libtest.jar",
-            "java/com/google/example/libtest-hjar.jar",
-            "java/com/google/example/libtest-src.jar",
-            "java/com/google/example/libtest-gen.jar",
-            "java/com/google/example/libtest-gensrc.jar");
-  }
-
-  @Test
-  public void testTags() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'lib',",
-        "    srcs = ['Test.java'],",
-        "    tags = ['d', 'b', 'c', 'a'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    assertThat(targetIdeInfo.getTagsList()).containsExactly("a", "b", "c", "d");
-  }
-
-  @Test
-  public void testAndroidLibraryWithoutSourcesExportsDependencies() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "  name = 'lib',",
-        "  srcs = ['Test.java']",
-        ")",
-        "android_library(",
-        "  name = 'forward',",
-        "  deps = [':lib'],",
-        ")",
-        "android_library(",
-        "  name = 'super',",
-        "  deps = [':forward'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:super");
-    TargetIdeInfo target =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:super", targetIdeInfos);
-
-    assertThat(target.getDependenciesList())
-        .containsAllOf("//java/com/google/example:forward", "//java/com/google/example:lib");
-  }
-
-  @Test
-  public void testAndroidLibraryExportsDoNotOverReport() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "android_library(",
-        "  name = 'lib',",
-        "  deps = [':middle'],",
-        ")",
-        "android_library(",
-        "  name = 'middle',",
-        "  srcs = ['Middle.java'],",
-        "  deps = [':exported'],",
-        ")",
-        "android_library(",
-        "  name = 'exported',",
-        "  srcs = ['Exported.java'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    TargetIdeInfo target =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    TargetIdeInfo javaToolchain = Iterables.getOnlyElement(findJavaToolchain(targetIdeInfos));
-    assertThat(target.getDependenciesList())
-        .containsExactly(javaToolchain.getLabel(), "//com/google/example:middle");
-  }
-
-  @Test
-  public void testSourceFilesAreCorrectlyMarkedAsSourceOrGenerated() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "genrule(",
-        "   name = 'gen',",
-        "   outs = ['gen.java'],",
-        "   cmd = '',",
-        ")",
-        "java_library(",
-        "    name = 'lib',",
-        "    srcs = ['Test.java', ':gen'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    // todo(dslomov): Skylark aspect implementation does not yet return a correct root path.
-    assertThat(targetIdeInfo.getJavaIdeInfo().getSourcesList())
-        .containsExactly(
-            ArtifactLocation.newBuilder()
-                .setRootExecutionPathFragment(
-                    targetConfig.getGenfilesDirectory(RepositoryName.MAIN).getExecPathString())
-                .setRelativePath("com/google/example/gen.java")
-                .setIsSource(false)
-                .build(),
-            ArtifactLocation.newBuilder()
-                .setRelativePath("com/google/example/Test.java")
-                .setIsSource(true)
-                .build());
-  }
-
-  @Test
-  public void testAspectIsPropagatedAcrossRuntimeDeps() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_library(",
-        "   name = 'lib',",
-        "   srcs = ['Lib.java'],",
-        "   runtime_deps = [':foobar'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    // Fails if aspect was not propagated
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:foobar", targetIdeInfos);
-
-    getTargetIdeInfoAndVerifyLabel("//com/google/example:foobar", targetIdeInfos);
-  }
-
-  @Test
-  public void testRuntimeDepsAddedToProto() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "   name = 'foobar',",
-        "   srcs = ['FooBar.java'],",
-        ")",
-        "java_library(",
-        "   name = 'foobar2',",
-        "   srcs = ['FooBar2.java'],",
-        ")",
-        "java_library(",
-        "   name = 'lib',",
-        "   srcs = ['Lib.java'],",
-        "   deps = [':lib2'],",
-        "   runtime_deps = [':foobar'],",
-        ")",
-        "java_library(",
-        "   name = 'lib2',",
-        "   srcs = ['Lib2.java'],",
-        "   runtime_deps = [':foobar2'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib");
-    // Fails if aspect was not propagated
-    TargetIdeInfo lib = getTargetIdeInfoAndVerifyLabel("//com/google/example:lib", targetIdeInfos);
-    TargetIdeInfo lib2 =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib2", targetIdeInfos);
-
-    assertThat(lib.getRuntimeDepsList()).containsExactly("//com/google/example:foobar");
-    assertThat(lib2.getRuntimeDepsList()).containsExactly("//com/google/example:foobar2");
-  }
-
-  @Test
-  public void testAndroidLibraryGeneratesResourceClass() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "android_library(",
-        "   name = 'resource_files',",
-        "   resource_files = ['res/drawable/a.png'],",
-        "   manifest = 'AndroidManifest.xml',",
-        ")",
-        "android_library(",
-        "   name = 'manifest',",
-        "   manifest = 'AndroidManifest.xml',",
-        ")",
-        "android_library(",
-        "   name = 'neither',",
-        "   srcs = ['FooBar.java'],",
-        "   deps = [':resource_files', ':manifest']",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:neither");
-    TargetIdeInfo neither =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:neither", targetIdeInfos);
-    TargetIdeInfo resourceFiles =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:resource_files", targetIdeInfos);
-    TargetIdeInfo manifest =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:manifest", targetIdeInfos);
-
-    assertThat(neither.getAndroidIdeInfo().getGenerateResourceClass()).isFalse();
-    assertThat(resourceFiles.getAndroidIdeInfo().getGenerateResourceClass()).isTrue();
-    assertThat(manifest.getAndroidIdeInfo().getGenerateResourceClass()).isTrue();
-  }
-
-  @Test
-  public void testJavaPlugin() throws Exception {
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "java_plugin(",
-        "  name = 'plugin',",
-        "  srcs = ['Plugin.java'],",
-        "  processor_class = 'com.google.example.Plugin',",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:plugin");
-    TargetIdeInfo plugin =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:plugin", targetIdeInfos);
-
-    assertThat(plugin.getKindString()).isEqualTo("java_plugin");
-    assertThat(transform(plugin.getJavaIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
-        .containsExactly(
-            jarString(
-                "java/com/google/example",
-                "libplugin.jar",
-                "libplugin-hjar.jar",
-                "libplugin-src.jar"));
-  }
-
-  @Test
-  public void testSimpleCCLibraryForCCToolchainExistence() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo target =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    Entry<String, TargetIdeInfo> toolchainEntry =
-        getCcToolchainRuleAndVerifyThereIsOnlyOne(targetIdeInfos);
-    TargetIdeInfo toolchainInfo = toolchainEntry.getValue();
-    ArtifactLocation location = target.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-
-    assertThat(target.hasCIdeInfo()).isTrue();
-    assertThat(target.getDependenciesList()).hasSize(1);
-    assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
-  }
-
-  @Test
-  public void testSimpleCCLibrary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("cc_library");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(1);
-
-    assertThat(relativePathsForCSourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/simple.cc");
-
-    assertThat(targetIdeInfo.hasCIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-    CIdeInfo cTargetIdeInfo = targetIdeInfo.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetCoptList()).isEmpty();
-    assertThat(cTargetIdeInfo.getTargetDefineList()).isEmpty();
-    assertThat(cTargetIdeInfo.getTargetIncludeList()).isEmpty();
-
-    ProtocolStringList transQuoteIncludeDirList =
-        cTargetIdeInfo.getTransitiveQuoteIncludeDirectoryList();
-    assertThat(transQuoteIncludeDirList).contains(".");
-
-    assertThat(targetIdeInfo.getJavaIdeInfo().getJarsList()).isEmpty();
-
-    assertThat(getIdeResolveFiles()).containsExactly("com/google/example/simple/simple.h");
-  }
-
-  @Test
-  public void testSimpleCCLibraryWithIncludes() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        "    includes = ['foo/bar'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-
-    assertThat(targetIdeInfo.hasCIdeInfo()).isTrue();
-    CIdeInfo cTargetIdeInfo = targetIdeInfo.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetIncludeList()).containsExactly("foo/bar");
-
-    // Make sure our understanding of where this attributes show up in other providers is correct.
-    Entry<String, TargetIdeInfo> toolchainEntry =
-        getCcToolchainRuleAndVerifyThereIsOnlyOne(targetIdeInfos);
-    TargetIdeInfo toolchainInfo = toolchainEntry.getValue();
-    assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
-    CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
-    ProtocolStringList builtInIncludeDirectoryList =
-        cToolchainIdeInfo.getBuiltInIncludeDirectoryList();
-    assertThat(builtInIncludeDirectoryList).doesNotContain("foo/bar");
-    assertThat(builtInIncludeDirectoryList).doesNotContain("com/google/example/foo/bar");
-
-    ProtocolStringList transIncludeDirList = cTargetIdeInfo.getTransitiveIncludeDirectoryList();
-    assertThat(transIncludeDirList).doesNotContain("foo/bar");
-    assertThat(transIncludeDirList).doesNotContain("com/google/example/foo/bar");
-
-    ProtocolStringList transQuoteIncludeDirList =
-        cTargetIdeInfo.getTransitiveQuoteIncludeDirectoryList();
-    assertThat(transQuoteIncludeDirList).doesNotContain("foo/bar");
-    assertThat(transQuoteIncludeDirList).doesNotContain("com/google/example/foo/bar");
-
-    ProtocolStringList transSysIncludeDirList =
-        cTargetIdeInfo.getTransitiveSystemIncludeDirectoryList();
-    assertThat(transSysIncludeDirList).doesNotContain("foo/bar");
-    assertThat(transSysIncludeDirList).contains("com/google/example/foo/bar");
-  }
-
-  @Test
-  public void testSimpleCCLibraryWithCompilerFlags() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        "    copts = ['-DGOPT', '-Ifoo/baz/'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-
-    assertThat(targetIdeInfo.hasCIdeInfo()).isTrue();
-    CIdeInfo cTargetIdeInfo = targetIdeInfo.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetCoptList()).containsExactly("-DGOPT", "-Ifoo/baz/");
-
-    // Make sure our understanding of where this attributes show up in other providers is correct.
-    Entry<String, TargetIdeInfo> toolchainEntry =
-        getCcToolchainRuleAndVerifyThereIsOnlyOne(targetIdeInfos);
-    TargetIdeInfo toolchainInfo = toolchainEntry.getValue();
-    assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
-    CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
-    ProtocolStringList baseCompilerOptionList = cToolchainIdeInfo.getBaseCompilerOptionList();
-    assertThat(baseCompilerOptionList).doesNotContain("-DGOPT");
-    assertThat(baseCompilerOptionList).doesNotContain("-Ifoo/baz/");
-
-    ProtocolStringList cOptionList = cToolchainIdeInfo.getCOptionList();
-    assertThat(cOptionList).doesNotContain("-DGOPT");
-    assertThat(cOptionList).doesNotContain("-Ifoo/baz/");
-
-    ProtocolStringList cppOptionList = cToolchainIdeInfo.getCppOptionList();
-    assertThat(cppOptionList).doesNotContain("-DGOPT");
-    assertThat(cppOptionList).doesNotContain("-Ifoo/baz/");
-  }
-
-  @Test
-  public void testSimpleCCLibraryWithDefines() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        "    defines = ['VERSION2'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-
-    assertThat(targetIdeInfo.hasCIdeInfo()).isTrue();
-    CIdeInfo cTargetIdeInfo = targetIdeInfo.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetDefineList()).containsExactly("VERSION2");
-
-    // Make sure our understanding of where this attributes show up in other providers is correct.
-    ProtocolStringList transDefineList = cTargetIdeInfo.getTransitiveDefineList();
-    assertThat(transDefineList).contains("VERSION2");
-  }
-
-  @Test
-  public void testSimpleCCBinary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_binary(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("cc_binary");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(1);
-
-    assertThat(relativePathsForCSourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/simple.cc");
-
-    assertThat(targetIdeInfo.hasCIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-    CIdeInfo cTargetIdeInfo = targetIdeInfo.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetCoptList()).isEmpty();
-    assertThat(cTargetIdeInfo.getTargetDefineList()).isEmpty();
-    assertThat(cTargetIdeInfo.getTargetIncludeList()).isEmpty();
-
-    assertThat(targetIdeInfo.getJavaIdeInfo().getJarsList()).isEmpty();
-
-    assertThat(getIdeResolveFiles()).isEmpty();
-  }
-
-  @Test
-  public void testSimpleCCTest() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_test(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("cc_test");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(1);
-
-    assertThat(relativePathsForCSourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/simple.cc");
-
-    assertThat(targetIdeInfo.hasCIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-    CIdeInfo cTargetIdeInfo = targetIdeInfo.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetCoptList()).isEmpty();
-    assertThat(cTargetIdeInfo.getTargetDefineList()).isEmpty();
-    assertThat(cTargetIdeInfo.getTargetIncludeList()).isEmpty();
-
-    assertThat(targetIdeInfo.getJavaIdeInfo().getJarsList()).isEmpty();
-
-    assertThat(getIdeResolveFiles()).isEmpty();
-  }
-
-  @Test
-  public void testSimpleCCLibraryWithDeps() throws Exception {
-    // Specify '-fPIC' so that compilation output filenames are consistent for mac and linux.
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'lib',",
-        "    srcs = ['lib/lib.cc'],",
-        "    hdrs = ['lib/lib.h'],",
-        ")",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        "    deps = [':lib'],",
-        "    nocopts = '-fPIC',",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(3);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-
-    assertThat(targetIdeInfo.getDependenciesList()).contains("//com/google/example:lib");
-    assertThat(targetIdeInfo.getDependenciesList()).hasSize(2);
-
-    assertThat(getIdeCompileFiles())
-        .containsExactly("com/google/example/_objs/simple/com/google/example/simple/simple.o");
-  }
-
-  @Test
-  public void testSimpleAndroidBinaryThatDependsOnCCLibrary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "android_library(",
-        "    name = 'androidlib',",
-        "    srcs = ['Lib.java'],",
-        "    deps = ['simple'],",
-        ")",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:androidlib");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:androidlib", targetIdeInfos);
-
-    assertThat(targetIdeInfo.getDependenciesList()).contains("//com/google/example:simple");
-  }
-
-  @Test
-  public void testTransitiveCCLibraryWithIncludes() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'lib2',",
-        "    srcs = ['lib2/lib2.cc'],",
-        "    hdrs = ['lib2/lib2.h'],",
-        "    includes = ['baz/lib'],",
-        ")",
-        "cc_library(",
-        "    name = 'lib1',",
-        "    srcs = ['lib1/lib1.cc'],",
-        "    hdrs = ['lib1/lib1.h'],",
-        "    includes = ['foo/bar'],",
-        "    deps = [':lib2'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib1");
-    assertThat(targetIdeInfos).hasSize(3);
-    TargetIdeInfo lib1 =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib1", targetIdeInfos);
-
-    assertThat(lib1.hasCIdeInfo()).isTrue();
-    CIdeInfo cTargetIdeInfo = lib1.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetIncludeList()).containsExactly("foo/bar");
-
-    // Make sure our understanding of where this attributes show up in other providers is correct.
-    Entry<String, TargetIdeInfo> toolchainEntry =
-        getCcToolchainRuleAndVerifyThereIsOnlyOne(targetIdeInfos);
-    TargetIdeInfo toolchainInfo = toolchainEntry.getValue();
-    assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
-    CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
-    ProtocolStringList builtInIncludeDirectoryList =
-        cToolchainIdeInfo.getBuiltInIncludeDirectoryList();
-    assertThat(builtInIncludeDirectoryList).doesNotContain("foo/bar");
-    assertThat(builtInIncludeDirectoryList).doesNotContain("baz/lib");
-    assertThat(builtInIncludeDirectoryList).doesNotContain("com/google/example/foo/bar");
-    assertThat(builtInIncludeDirectoryList).doesNotContain("com/google/example/baz/lib");
-
-    ProtocolStringList transIncludeDirList = cTargetIdeInfo.getTransitiveIncludeDirectoryList();
-    assertThat(transIncludeDirList).doesNotContain("foo/bar");
-    assertThat(transIncludeDirList).doesNotContain("baz/lib");
-    assertThat(transIncludeDirList).doesNotContain("com/google/example/foo/bar");
-    assertThat(transIncludeDirList).doesNotContain("com/google/example/baz/lib");
-
-    ProtocolStringList transQuoteIncludeDirList =
-        cTargetIdeInfo.getTransitiveQuoteIncludeDirectoryList();
-    assertThat(transQuoteIncludeDirList).doesNotContain("foo/bar");
-    assertThat(transQuoteIncludeDirList).doesNotContain("baz/lib");
-    assertThat(transQuoteIncludeDirList).doesNotContain("com/google/example/foo/bar");
-    assertThat(transQuoteIncludeDirList).doesNotContain("com/google/example/baz/lib");
-
-    ProtocolStringList transSysIncludeDirList =
-        cTargetIdeInfo.getTransitiveSystemIncludeDirectoryList();
-    assertThat(transSysIncludeDirList).doesNotContain("foo/bar");
-    assertThat(transSysIncludeDirList).doesNotContain("baz/lib");
-    assertThat(transSysIncludeDirList).contains("com/google/example/foo/bar");
-    assertThat(transSysIncludeDirList).contains("com/google/example/baz/lib");
-  }
-
-  @Test
-  public void testTransitiveCLibraryWithCompilerFlags() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'lib2',",
-        "    srcs = ['lib2/lib2.cc'],",
-        "    hdrs = ['lib2/lib2.h'],",
-        "    copts = ['-v23', '-DDEV'],",
-        ")",
-        "cc_library(",
-        "    name = 'lib1',",
-        "    srcs = ['lib1/lib1.cc'],",
-        "    hdrs = ['lib1/lib1.h'],",
-        "    copts = ['-DGOPT', '-Ifoo/baz/'],",
-        "    deps = [':lib2'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib1");
-    assertThat(targetIdeInfos).hasSize(3);
-    TargetIdeInfo lib1 =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib1", targetIdeInfos);
-
-    assertThat(lib1.hasCIdeInfo()).isTrue();
-    CIdeInfo cTargetIdeInfo = lib1.getCIdeInfo();
-
-    assertThat(cTargetIdeInfo.getTargetCoptList()).containsExactly("-DGOPT", "-Ifoo/baz/");
-
-    // Make sure our understanding of where this attributes show up in other providers is correct.
-    Entry<String, TargetIdeInfo> toolchainEntry =
-        getCcToolchainRuleAndVerifyThereIsOnlyOne(targetIdeInfos);
-    TargetIdeInfo toolchainInfo = toolchainEntry.getValue();
-    assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
-    CToolchainIdeInfo cToolchainIdeInfo = toolchainInfo.getCToolchainIdeInfo();
-    ProtocolStringList baseCompilerOptionList = cToolchainIdeInfo.getBaseCompilerOptionList();
-    assertThat(baseCompilerOptionList).doesNotContain("-DGOPT");
-    assertThat(baseCompilerOptionList).doesNotContain("-Ifoo/baz/");
-    assertThat(baseCompilerOptionList).doesNotContain("-v23");
-    assertThat(baseCompilerOptionList).doesNotContain("-DDEV");
-
-    ProtocolStringList cOptionList = cToolchainIdeInfo.getCOptionList();
-    assertThat(cOptionList).doesNotContain("-DGOPT");
-    assertThat(cOptionList).doesNotContain("-Ifoo/baz/");
-    assertThat(cOptionList).doesNotContain("-v23");
-    assertThat(cOptionList).doesNotContain("-DDEV");
-
-    ProtocolStringList cppOptionList = cToolchainIdeInfo.getCppOptionList();
-    assertThat(cppOptionList).doesNotContain("-DGOPT");
-    assertThat(cppOptionList).doesNotContain("-Ifoo/baz/");
-    assertThat(cppOptionList).doesNotContain("-v23");
-    assertThat(cppOptionList).doesNotContain("-DDEV");
-  }
-
-  @Test
-  public void testTransitiveCCLibraryWithDefines() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'lib2',",
-        "    srcs = ['lib2/lib2.cc'],",
-        "    hdrs = ['lib2/lib2.h'],",
-        "    defines = ['COMPLEX_IMPL'],",
-        ")",
-        "cc_library(",
-        "    name = 'lib1',",
-        "    srcs = ['lib1/lib1.cc'],",
-        "    hdrs = ['lib1/lib1.h'],",
-        "    defines = ['VERSION2'],",
-        "    deps = [':lib2'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:lib1");
-    assertThat(targetIdeInfos).hasSize(3);
-    TargetIdeInfo lib1 =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:lib1", targetIdeInfos);
-
-    assertThat(lib1.hasCIdeInfo()).isTrue();
-    CIdeInfo cIdeInfo = lib1.getCIdeInfo();
-
-    assertThat(cIdeInfo.getTargetDefineList()).containsExactly("VERSION2");
-
-    // Make sure our understanding of where this attributes show up in other providers is correct.
-    ProtocolStringList transDefineList = cIdeInfo.getTransitiveDefineList();
-    assertThat(transDefineList).contains("VERSION2");
-    assertThat(transDefineList).contains("COMPLEX_IMPL");
-  }
-
-  @Test
-  public void testMacroDoesntAffectRuleClass() throws Exception {
-    scratch.file(
-        "java/com/google/example/build_defs.bzl",
-        "def my_macro(name):",
-        "  native.android_binary(",
-        "    name = name,",
-        "    srcs = ['simple/Simple.java'],",
-        "    manifest = 'AndroidManifest.xml',",
-        ")");
-    scratch.file(
-        "java/com/google/example/BUILD",
-        "load('//java/com/google/example:build_defs.bzl', 'my_macro')",
-        "my_macro(",
-        "    name = 'simple',",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//java/com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//java/com/google/example:simple", targetIdeInfos);
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("android_binary");
-  }
-
-  @Test
-  public void testAndroidBinaryIsSerialized() throws Exception {
-    TargetIdeInfo.Builder builder = TargetIdeInfo.newBuilder();
-    builder.setKindString("android_binary");
-    ByteString byteString = builder.build().toByteString();
-    TargetIdeInfo result = TargetIdeInfo.parseFrom(byteString);
-    assertThat(result.getKindString()).isEqualTo("android_binary");
-  }
-
-  @Test
-  public void testCcToolchainInfoIsOnlyPresentForToolchainRules() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "cc_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.cc'],",
-        "    hdrs = ['simple/simple.h'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    Entry<String, TargetIdeInfo> toolchainEntry =
-        getCcToolchainRuleAndVerifyThereIsOnlyOne(targetIdeInfos);
-    TargetIdeInfo toolchainInfo = toolchainEntry.getValue();
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-
-    assertThat(targetIdeInfo.hasCToolchainIdeInfo()).isFalse();
-    assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue();
-  }
-
-  @Test
-  public void testJavaLibraryDoesNotHaveCInfo() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/Simple.java']",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    assertThat(targetIdeInfo.hasCIdeInfo()).isFalse();
-  }
-
-  @Test
-  public void testSimplePyBinary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "py_binary(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.py'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("py_binary");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(1);
-
-    assertThat(relativePathsForPySourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/simple.py");
-
-    assertThat(targetIdeInfo.hasPyIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasCIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-
-    assertThat(getIdeResolveFiles()).containsExactly("com/google/example/simple/simple.py");
-  }
-
-  @Test
-  public void testSimplePyLibrary() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "py_library(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.py'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(1);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("py_library");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(0);
-
-    assertThat(relativePathsForPySourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/simple.py");
-
-    assertThat(targetIdeInfo.hasPyIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasCIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-
-    assertThat(getIdeResolveFiles()).containsExactly("com/google/example/simple/simple.py");
-  }
-
-  @Test
-  public void testSimplePyTest() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "py_test(",
-        "    name = 'simple',",
-        "    srcs = ['simple/simple.py'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:simple");
-    assertThat(targetIdeInfos).hasSize(2);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:simple", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("py_test");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(1);
-
-    assertThat(relativePathsForPySourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/simple/simple.py");
-
-    assertThat(targetIdeInfo.hasPyIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasCIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-
-    assertThat(getIdeResolveFiles()).containsExactly("com/google/example/simple/simple.py");
-  }
-
-  @Test
-  public void testPyTestWithDeps() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "py_library(",
-        "    name = 'lib',",
-        "    srcs = ['lib.py'],",
-        ")",
-        "py_test(",
-        "    name = 'test',",
-        "    srcs = ['test.py'],",
-        "    deps = [':lib'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:test");
-    assertThat(targetIdeInfos).hasSize(3);
-    TargetIdeInfo targetIdeInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:test", targetIdeInfos);
-    ArtifactLocation location = targetIdeInfo.getBuildFileArtifactLocation();
-    assertThat(Paths.get(location.getRelativePath()).toString())
-        .isEqualTo(Paths.get("com/google/example/BUILD").toString());
-    assertThat(targetIdeInfo.getKindString()).isEqualTo("py_test");
-
-    assertThat(targetIdeInfo.getDependenciesList()).contains("//com/google/example:lib");
-    assertThat(targetIdeInfo.getDependenciesCount()).isEqualTo(2);
-
-    assertThat(relativePathsForPySourcesOf(targetIdeInfo))
-        .containsExactly("com/google/example/test.py");
-
-    assertThat(targetIdeInfo.hasPyIdeInfo()).isTrue();
-    assertThat(targetIdeInfo.hasJavaIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasCIdeInfo()).isFalse();
-    assertThat(targetIdeInfo.hasAndroidIdeInfo()).isFalse();
-
-    assertThat(getIdeResolveFiles())
-        .containsExactly("com/google/example/test.py", "com/google/example/lib.py");
-  }
-
-  @Test
-  public void testAlias() throws Exception {
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'test',",
-        "    srcs = ['Test.java'],",
-        "    deps = [':alias']",
-        ")",
-        "alias(",
-        "    name = 'alias',",
-        "    actual = ':alias2',",
-        ")",
-        "alias(",
-        "    name = 'alias2',",
-        "    actual = ':real',",
-        ")",
-        "java_library(",
-        "    name = 'real',",
-        "    srcs = ['Real.java'],",
-        ")");
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:test");
-    TargetIdeInfo testInfo =
-        getTargetIdeInfoAndVerifyLabel("//com/google/example:test", targetIdeInfos);
-    assertThat(testInfo.getDependenciesList()).contains("//com/google/example:real");
-    assertThat(getTargetIdeInfoAndVerifyLabel("//com/google/example:real", targetIdeInfos))
-        .isNotNull();
-  }
-
-  @Test
-  public void testDataModeDepsAttributeDoesNotCrashAspect() throws Exception {
-    scratch.file(
-        "com/google/example/foo.bzl",
-        "def impl(ctx):",
-        "  return struct()",
-        "",
-        "foo = rule(",
-        "  implementation=impl,",
-        "  attrs={'deps': attr.label_list(cfg='data')},",
-        ")");
-    scratch.file(
-        "com/google/example/BUILD",
-        "load('//com/google/example:foo.bzl', 'foo')",
-        "foo(",
-        "  name='foo',",
-        ")");
-    buildIdeInfo("//com/google/example:foo");
-  }
-
-  @Test
-  public void testExternalRootCorrectlyIdentified() throws Exception {
-    ArtifactLocation location =
-        AndroidStudioInfoAspect.makeArtifactLocation(
-            Root.asSourceRoot(outputBase, false), new PathFragment("external/foo/bar.jar"), true);
-    assertThat(location.getIsExternal()).isTrue();
-  }
-
-  @Test
-  public void testNonExternalRootCorrectlyIdentified() throws Exception {
-    ArtifactLocation location =
-        AndroidStudioInfoAspect.makeArtifactLocation(
-            Root.asSourceRoot(rootDirectory, true), new PathFragment("foo/bar.jar"), false);
-    assertThat(location.getIsExternal()).isFalse();
-  }
-
-  @Test
-  public void testExternalTarget() throws Exception {
-    scratch.file(
-        "/r/BUILD", "java_import(", "    name = 'junit',", "    jars = ['junit.jar'],", ")");
-    scratch.file("/r/junit.jar");
-
-    // AnalysisMock adds required toolchains, etc. to WORKSPACE, so retain the previous contents.
-    String oldContents = scratch.readFile("WORKSPACE");
-    scratch.overwriteFile("WORKSPACE", oldContents + "\nlocal_repository(name='r', path='/r')");
-    invalidatePackages();
-
-    scratch.file(
-        "com/google/example/BUILD",
-        "java_library(",
-        "    name = 'junit',",
-        "    exports = ['@r//:junit'],",
-        ")");
-
-    Map<String, TargetIdeInfo> targetIdeInfos = buildIdeInfo("//com/google/example:junit");
-    assertThat(
-            getTargetIdeInfoAndVerifyLabel("//com/google/example:junit", targetIdeInfos)
-                .getBuildFileArtifactLocation()
-                .getIsExternal())
-        .isFalse();
-
-    TargetIdeInfo targetInfo = getTargetIdeInfoAndVerifyLabel("@r//:junit", targetIdeInfos);
-    assertThat(targetInfo.getBuildFileArtifactLocation().getIsExternal()).isTrue();
-    assertThat(targetInfo.getBuildFileArtifactLocation().getRelativePath()).startsWith("external");
-
-    JavaIdeInfo javaInfo = targetInfo.getJavaIdeInfo();
-    assertThat(javaInfo.getJarsList()).hasSize(1);
-    ArtifactLocation jar = javaInfo.getJars(0).getJar();
-    assertThat(jar.getIsSource()).isTrue();
-    assertThat(jar.getIsExternal()).isTrue();
-    assertThat(jar.getRelativePath()).isEqualTo("external/r/junit.jar");
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java
deleted file mode 100644
index 97e76f0..0000000
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2014 The Bazel Authors. 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.ideinfo;
-
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth.assertWithMessage;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-import com.google.common.eventbus.EventBus;
-import com.google.devtools.build.lib.actions.Action;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult;
-import com.google.devtools.build.lib.analysis.ConfiguredAspect;
-import com.google.devtools.build.lib.analysis.OutputGroupProvider;
-import com.google.devtools.build.lib.analysis.actions.BinaryFileWriteAction;
-import com.google.devtools.build.lib.analysis.actions.SpawnAction;
-import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.skyframe.AspectValue;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.ArtifactLocation;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.LibraryArtifact;
-import com.google.devtools.intellij.ideinfo.IntellijIdeInfo.TargetIdeInfo;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import javax.annotation.Nullable;
-
-/**
- * Provides utils for AndroidStudioInfoAspectTest.
- */
-abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase {
-
-  protected static final Function<ArtifactLocation, String> ARTIFACT_TO_RELATIVE_PATH =
-      new Function<ArtifactLocation, String>() {
-        @Nullable
-        @Override
-        public String apply(ArtifactLocation artifactLocation) {
-          return artifactLocation.getRelativePath();
-        }
-      };
-  protected static final Function<LibraryArtifact, String> LIBRARY_ARTIFACT_TO_STRING =
-      new Function<LibraryArtifact, String>() {
-        @Override
-        public String apply(LibraryArtifact libraryArtifact) {
-          StringBuilder stringBuilder = new StringBuilder();
-          if (libraryArtifact.hasJar()) {
-            stringBuilder.append("<jar:");
-            stringBuilder.append(artifactLocationPath(libraryArtifact.getJar()));
-            stringBuilder.append(">");
-          }
-          if (libraryArtifact.hasInterfaceJar()) {
-            stringBuilder.append("<ijar:");
-            stringBuilder.append(artifactLocationPath(libraryArtifact.getInterfaceJar()));
-            stringBuilder.append(">");
-          }
-          if (libraryArtifact.hasSourceJar()) {
-            stringBuilder.append("<source:");
-            stringBuilder.append(artifactLocationPath(libraryArtifact.getSourceJar()));
-            stringBuilder.append(">");
-          }
-
-          return stringBuilder.toString();
-        }
-
-        private String artifactLocationPath(ArtifactLocation artifact) {
-          String relativePath = artifact.getRelativePath();
-          return artifact.getIsExternal() ? relativePath + "[external]" : relativePath;
-        }
-      };
-
-  protected ConfiguredAspect configuredAspect;
-
-  /**
-   * Constructs a string that matches OutputJar#toString for comparison testing.
-   */
-  protected static String jarString(String base, String jar, String iJar, String sourceJar) {
-    StringBuilder sb = new StringBuilder();
-    if (jar != null) {
-      sb.append("<jar:" + base + "/" + jar + ">");
-    }
-    if (iJar != null) {
-      sb.append("<ijar:" + base + "/" + iJar + ">");
-    }
-    if (sourceJar != null) {
-      sb.append("<source:" + base + "/" + sourceJar + ">");
-    }
-    return sb.toString();
-  }
-
-  protected static Iterable<String> relativePathsForJavaSourcesOf(TargetIdeInfo ruleIdeInfo) {
-    return relativePathsForSources(ruleIdeInfo.getJavaIdeInfo().getSourcesList());
-  }
-
-  protected static Iterable<String> relativePathsForCSourcesOf(TargetIdeInfo ruleIdeInfo) {
-    return relativePathsForSources(ruleIdeInfo.getCIdeInfo().getSourceList());
-  }
-
-  protected static Iterable<String> relativePathsForPySourcesOf(TargetIdeInfo ruleIdeInfo) {
-    return relativePathsForSources(ruleIdeInfo.getPyIdeInfo().getSourcesList());
-  }
-
-  private static Iterable<String> relativePathsForSources(List<ArtifactLocation> sourcesList) {
-    return transform(sourcesList, ARTIFACT_TO_RELATIVE_PATH);
-  }
-
-  protected TargetIdeInfo getTargetIdeInfoAndVerifyLabel(
-      String target, Map<String, TargetIdeInfo> ruleIdeInfos) {
-    TargetIdeInfo ruleIdeInfo = ruleIdeInfos.get(target);
-    assertThat(ruleIdeInfo).named(target).isNotNull();
-    assertThat(ruleIdeInfo.getLabel()).isEqualTo(target);
-    return ruleIdeInfo;
-  }
-
-  protected Entry<String, TargetIdeInfo> getCcToolchainRuleAndVerifyThereIsOnlyOne(
-      Map<String, TargetIdeInfo> ruleIdeInfos) {
-    Entry<String, TargetIdeInfo> toolchainInfo = null;
-    for (Entry<String, TargetIdeInfo> entry : ruleIdeInfos.entrySet()) {
-      if (entry.getValue().getKindString().equals("cc_toolchain")) {
-        // Make sure we only have 1.
-        assertThat(toolchainInfo).isNull();
-        assertThat(entry.getValue().hasCToolchainIdeInfo()).isTrue();
-        toolchainInfo = entry;
-      }
-    }
-    assertThat(toolchainInfo).isNotNull();
-    return toolchainInfo;
-  }
-
-  private void buildTarget(String target) throws Exception {
-    AnalysisResult analysisResult =
-        update(
-            ImmutableList.of(target),
-            ImmutableList.of(AndroidStudioInfoAspect.NAME),
-            false,
-            LOADING_PHASE_THREADS,
-            true,
-            new EventBus());
-    Collection<AspectValue> aspects = analysisResult.getAspects();
-    assertThat(aspects.size()).isEqualTo(1);
-    AspectValue value = aspects.iterator().next();
-    this.configuredAspect = value.getConfiguredAspect();
-    assertThat(configuredAspect.getName()).isEqualTo(AndroidStudioInfoAspect.NAME);
-  }
-
-  /**
-   * Returns a map of (label as string) -> TargetIdeInfo for each rule in the transitive closure of
-   * the passed target.
-   */
-  protected Map<String, TargetIdeInfo> buildIdeInfo(String target) throws Exception {
-    buildTarget(target);
-    AndroidStudioInfoFilesProvider provider =
-        configuredAspect.getProvider(AndroidStudioInfoFilesProvider.class);
-    Iterable<Artifact> artifacts = provider.getIdeInfoFiles();
-    Map<String, TargetIdeInfo> ruleIdeInfos = new HashMap<>();
-    for (Artifact artifact : artifacts) {
-      Action generatingAction = getGeneratingAction(artifact);
-      if (generatingAction instanceof BinaryFileWriteAction) {
-        BinaryFileWriteAction writeAction = (BinaryFileWriteAction) generatingAction;
-        TargetIdeInfo ruleIdeInfo = TargetIdeInfo.parseFrom(writeAction.getSource().openStream());
-        ruleIdeInfos.put(ruleIdeInfo.getLabel(), ruleIdeInfo);
-      } else {
-        verifyPackageManifestSpawnAction(generatingAction);
-      }
-    }
-    return ruleIdeInfos;
-  }
-  
-  protected final void verifyPackageManifestSpawnAction(Action genAction) {
-    assertEquals(genAction.getMnemonic(), "JavaPackageManifest");
-    SpawnAction action = (SpawnAction) genAction;
-    assertFalse(action.isShellCommand());
-  }
-  
-  protected List<String> getOutputGroupResult(String outputGroup) {
-    OutputGroupProvider outputGroupProvider =
-        this.configuredAspect.getProvider(OutputGroupProvider.class);
-    assert outputGroupProvider != null;
-    NestedSet<Artifact> artifacts = outputGroupProvider.getOutputGroup(outputGroup);
-
-    for (Artifact artifact : artifacts) {
-      if (artifact.isSourceArtifact()) {
-        continue;
-      }
-      assertWithMessage("Artifact %s has no generating action", artifact)
-          .that(getGeneratingAction(artifact))
-          .isNotNull();
-    }
-
-    List<String> artifactRelativePaths = Lists.newArrayList();
-    for (Artifact artifact : artifacts) {
-      artifactRelativePaths.add(artifact.getRootRelativePathString());
-    }
-    return artifactRelativePaths;
-  }
-
-  protected List<String> getIdeResolveFiles() {
-    return getOutputGroupResult(AndroidStudioInfoAspect.IDE_RESOLVE);
-  }
-
-  protected List<String> getIdeCompileFiles() {
-    return getOutputGroupResult(AndroidStudioInfoAspect.IDE_COMPILE);
-  }
-
-  protected static List<TargetIdeInfo> findJavaToolchain(Map<String, TargetIdeInfo> ruleIdeInfos) {
-    List<TargetIdeInfo> result = Lists.newArrayList();
-    for (TargetIdeInfo ruleIdeInfo : ruleIdeInfos.values()) {
-      if (ruleIdeInfo.getKindString().equals("java_toolchain")) {
-        result.add(ruleIdeInfo);
-      }
-    }
-    return result;
-  }
-}
diff --git a/src/test/shell/integration/BUILD b/src/test/shell/integration/BUILD
index a2f7fe9..8cfbff7 100644
--- a/src/test/shell/integration/BUILD
+++ b/src/test/shell/integration/BUILD
@@ -156,24 +156,6 @@
 )
 
 sh_test(
-    name = "ide_info_generation_native",
-    size = "large",
-    srcs = ["ide_info_generation.sh"],
-    args = [
-        "AndroidStudioInfoAspect",
-        "ide-info",
-        "aswb-build",
-        "ide-info-text",
-        "aswb-build.txt",
-        "ide-resolve",
-    ],
-    data = [
-        ":test-deps",
-        "//src/tools/android/java/com/google/devtools/build/android/ideinfo:PackageParser",
-    ],
-)
-
-sh_test(
     name = "ide_info_generation_skylark",
     size = "large",
     srcs = ["ide_info_generation.sh"],