Merge "Fix reanalysis after full build" into main
diff --git a/golang/golang.go b/golang/golang.go
index ede2150..618a085 100644
--- a/golang/golang.go
+++ b/golang/golang.go
@@ -96,17 +96,31 @@
 	outputFile := android.PathForArbitraryOutput(ctx, android.Rel(ctx, ctx.Config().OutDir(), g.IntermediateFile())).WithoutRel()
 	g.outputFile = outputFile
 
-	installPath := ctx.InstallFile(android.PathForModuleInstall(ctx, "bin"), ctx.ModuleName(), outputFile)
+	// Don't create install rules for modules used by bootstrap, the install command line will differ from
+	// what was used during bootstrap, which will cause ninja to rebuild the module on the next run,
+	// triggering reanalysis.
+	if !usedByBootstrap(ctx.ModuleName()) {
+		installPath := ctx.InstallFile(android.PathForModuleInstall(ctx, "bin"), ctx.ModuleName(), outputFile)
 
-	if !ctx.Config().KatiEnabled() || g.ExportedToMake() {
 		// Modules in an unexported namespace have no install rule, only add modules in the exported namespaces
 		// to the blueprint_tools phony rules.
-		ctx.Phony("blueprint_tools", installPath)
+		if !ctx.Config().KatiEnabled() || g.ExportedToMake() {
+			ctx.Phony("blueprint_tools", installPath)
+		}
 	}
 
 	ctx.SetOutputFiles(android.Paths{outputFile}, "")
 }
 
+func usedByBootstrap(name string) bool {
+	switch name {
+	case "loadplugins", "soong_build":
+		return true
+	default:
+		return false
+	}
+}
+
 func (g *GoBinary) HostToolPath() android.OptionalPath {
 	return android.OptionalPathForPath(g.outputFile)
 }