Description redacted.
--
MOS_MIGRATED_REVID=137669164
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java
index e5e8226..8523afa 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/DependencyModule.java
@@ -35,6 +35,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 
 /**
  * Wrapper class for managing dependencies on top of
@@ -81,6 +82,7 @@
   Set<String> requiredClasspath;
   private final FixMessage fixMessage;
   private final Set<String> exemptGenerators;
+  private final Set<String> packages;
 
   DependencyModule(
       StrictJavaDeps strictJavaDeps,
@@ -106,6 +108,7 @@
     this.usedClasspath = new HashSet<>();
     this.fixMessage = fixMessage;
     this.exemptGenerators = exemptGenerators;
+    this.packages = new TreeSet<>();
   }
 
   /**
@@ -118,9 +121,8 @@
   /**
    * Writes dependency information to the deps file in proto format, if specified.
    *
-   * This is a replacement for {@link #emitUsedClasspath} above, which only outputs the used
-   * classpath. We collect more precise dependency information to allow Blaze to analyze both
-   * strict and unused dependencies based on the new deps.proto.
+   * <p>We collect precise dependency information to allow Blaze to analyze both strict and unused
+   * dependencies, as well as packages contained by the output jar.
    */
   public void emitDependencyInformation(String classpath, boolean successful) throws IOException {
     if (outputDepsProtoFile == null) {
@@ -142,6 +144,7 @@
       deps.setRuleLabel(targetLabel);
     }
     deps.setSuccess(successful);
+    deps.addAllContainedPackage(packages);
     // Filter using the original classpath, to preserve ordering.
     for (String entry : classpath.split(":")) {
       if (explicitDependenciesMap.containsKey(entry)) {
@@ -197,6 +200,11 @@
     return implicitDependenciesMap;
   }
 
+  /** Adds a package to the set of packages built by this target. */
+  public boolean addPackage(String packge) {
+    return packages.add(packge);
+  }
+
   /**
    * Returns the type (rule kind) of the originating target.
    */
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java
index a219232..5e0b354 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/plugins/dependency/StrictJavaDepsPlugin.java
@@ -73,7 +73,6 @@
   private final Set<JCTree.JCCompilationUnit> toplevels;
   /** Marks seen ASTs */
   private final Set<JCTree> trees;
-
   /** Computed missing dependencies */
   private final Set<JarOwner> missingTargets;
 
@@ -107,7 +106,7 @@
   public void init(Context context, Log log, JavaCompiler compiler) {
     super.init(context, log, compiler);
     errWriter = log.getWriter(WriterKind.ERROR);
-    this.fileManager = context.get(JavaFileManager.class);
+    fileManager = context.get(JavaFileManager.class);
     implicitDependencyExtractor = new ImplicitDependencyExtractor(
         dependencyModule.getUsedClasspath(), dependencyModule.getImplicitDependenciesMap(),
         fileManager);
@@ -151,6 +150,7 @@
     }
     if (toplevels.add(env.toplevel)) {
       checkingTreeScanner.scan(env.toplevel.getImports());
+      dependencyModule.addPackage(env.toplevel.packge.toString());
     }
     log.useSource(prev);
   }
diff --git a/src/main/protobuf/deps.proto b/src/main/protobuf/deps.proto
index 8c688a7..7e996fa 100644
--- a/src/main/protobuf/deps.proto
+++ b/src/main/protobuf/deps.proto
@@ -60,4 +60,7 @@
   // Whether the action was successful; even when compilation fails, partial
   // dependency information can be useful.
   optional bool success = 3;
+
+  // Packages contained in the output jar, sorted alphabetically.
+  repeated string contained_package = 4;
 }