Fix coverage when transitive jars are enabled

Coverage instrumentation is performed on the combined jar contaning
all the transitive dependencies, replace the exported list of
transitive dependencies with the instrumented jar.

This relands I1f417f5b4dc8e895eb1800da39121e0aefc754d9 with a fix
to prevent using the instrumented jar as a dependency.

Bug: 368161965
Test: TestCoverage
Flag: EXEMPT bugfix
Change-Id: I73ba60bcda241e6b4522310a9c65f717869638a6
diff --git a/java/base.go b/java/base.go
index ef299b2..3d42f46 100644
--- a/java/base.go
+++ b/java/base.go
@@ -1735,8 +1735,12 @@
 		return
 	}
 
+	completeStaticLibsImplementationJarsToCombine := completeStaticLibsImplementationJars
+
 	if j.shouldInstrument(ctx) {
-		outputFile = j.instrument(ctx, flags, outputFile, jarName, specs)
+		instrumentedOutputFile := j.instrument(ctx, flags, outputFile, jarName, specs)
+		completeStaticLibsImplementationJarsToCombine = android.NewDepSet(android.PREORDER, android.Paths{instrumentedOutputFile}, nil)
+		outputFile = instrumentedOutputFile
 	}
 
 	// merge implementation jar with resources if necessary
@@ -1744,7 +1748,7 @@
 	if ctx.Config().UseTransitiveJarsInClasspath() {
 		resourceJars := completeStaticLibsResourceJars.ToList()
 		if len(resourceJars) > 0 {
-			implementationAndResourcesJarsToCombine = append(resourceJars, completeStaticLibsImplementationJars.ToList()...)
+			implementationAndResourcesJarsToCombine = append(resourceJars, completeStaticLibsImplementationJarsToCombine.ToList()...)
 			implementationAndResourcesJarsToCombine = append(implementationAndResourcesJarsToCombine, extraDepCombinedJars...)
 		}
 	} else {