diff --git a/java/lint.go b/java/lint.go
index 7c06312..c79f6e7 100644
--- a/java/lint.go
+++ b/java/lint.go
@@ -62,10 +62,6 @@
 		// If true, baselining updatability lint checks (e.g. NewApi) is prohibited. Defaults to false.
 		Strict_updatability_linting *bool
 
-		// The reverse dependency that had strict_updatability_linting set that caused this module to
-		// have it enabled, for use in error messages.
-		Strict_updatability_parents []string
-
 		// Treat the code in this module as test code for @VisibleForTesting enforcement.
 		// This will be true by default for test module types, false otherwise.
 		// If soong gets support for testonly, this flag should be replaced with that.
@@ -121,8 +117,8 @@
 	LintDepSets() LintDepSets
 
 	// Methods used to propagate strict_updatability_linting values.
-	GetStrictUpdatabilityLinting(ctx android.BaseModuleContext) []string
-	SetStrictUpdatabilityLinting([]string)
+	GetStrictUpdatabilityLinting() bool
+	SetStrictUpdatabilityLinting(bool)
 }
 
 type LintDepSets struct {
@@ -217,22 +213,12 @@
 	return l.outputs.depSets
 }
 
-// GetStrictUpdatabilityLinting returns a list of names of modules
-// that set strict_updatability_linting: true and affect the current module.
-// Strict updatability linting should be enabled if the result is non-empty.
-func (l *linter) GetStrictUpdatabilityLinting(ctx android.BaseModuleContext) []string {
-	result := l.properties.Lint.Strict_updatability_parents
-	if proptools.Bool(l.properties.Lint.Strict_updatability_linting) {
-		result = append(result, ctx.ModuleName())
-	}
-	return result
+func (l *linter) GetStrictUpdatabilityLinting() bool {
+	return BoolDefault(l.properties.Lint.Strict_updatability_linting, false)
 }
 
-// SetStrictUpdatabilityLinting adds the given list of modules to this module's
-// list of "strict updatable parent" modules. If then given list is non-empty,
-// it causes strict updatability linting to be enabled on this module.
-func (l *linter) SetStrictUpdatabilityLinting(parents []string) {
-	l.properties.Lint.Strict_updatability_parents = android.SortedUniqueStrings(append(l.properties.Lint.Strict_updatability_parents, parents...))
+func (l *linter) SetStrictUpdatabilityLinting(strictLinting bool) {
+	l.properties.Lint.Strict_updatability_linting = &strictLinting
 }
 
 var _ LintDepSetsIntf = (*linter)(nil)
@@ -339,10 +325,9 @@
 	cmd.FlagForEachArg("--error_check ", l.properties.Lint.Error_checks)
 	cmd.FlagForEachArg("--fatal_check ", l.properties.Lint.Fatal_checks)
 
-	if strict_mods := l.GetStrictUpdatabilityLinting(ctx); len(strict_mods) > 0 {
+	if l.GetStrictUpdatabilityLinting() {
 		// Verify the module does not baseline issues that endanger safe updatability.
 		if l.properties.Lint.Baseline_filename != nil {
-			cmd.FlagWithArg("--strict_updatability_parents ", proptools.ShellEscape(strings.Join(strict_mods, ",")))
 			cmd.FlagWithInput("--baseline ", android.PathForModuleSrc(ctx, *l.properties.Lint.Baseline_filename))
 			cmd.FlagForEachArg("--disallowed_issues ", updatabilityChecks)
 		}
@@ -748,13 +733,11 @@
 // Enforce the strict updatability linting to all applicable transitive dependencies.
 func enforceStrictUpdatabilityLintingMutator(ctx android.TopDownMutatorContext) {
 	m := ctx.Module()
-	if d, ok := m.(LintDepSetsIntf); ok {
-		if strict_mods := d.GetStrictUpdatabilityLinting(ctx); len(strict_mods) > 0 {
-			ctx.VisitDirectDepsWithTag(staticLibTag, func(d android.Module) {
-				if a, ok := d.(LintDepSetsIntf); ok {
-					a.SetStrictUpdatabilityLinting(strict_mods)
-				}
-			})
-		}
+	if d, ok := m.(LintDepSetsIntf); ok && d.GetStrictUpdatabilityLinting() {
+		ctx.VisitDirectDepsWithTag(staticLibTag, func(d android.Module) {
+			if a, ok := d.(LintDepSetsIntf); ok {
+				a.SetStrictUpdatabilityLinting(true)
+			}
+		})
 	}
 }
diff --git a/java/lint_test.go b/java/lint_test.go
index 6b24daa..b51753f 100644
--- a/java/lint_test.go
+++ b/java/lint_test.go
@@ -202,71 +202,6 @@
 	}
 }
 
-func TestJavaLintStrictUpdatabilityLintingMultipleParents(t *testing.T) {
-	bp := `
-		java_library {
-			name: "a",
-			srcs: ["a.java"],
-			static_libs: ["b"],
-			min_sdk_version: "29",
-			sdk_version: "current",
-			lint: {
-				strict_updatability_linting: true,
-				baseline_filename: "lint-baseline.xml",
-			},
-		}
-
-		java_library {
-			name: "b",
-			srcs: ["b.java"],
-			static_libs: ["c"],
-			min_sdk_version: "29",
-			sdk_version: "current",
-			lint: {
-				strict_updatability_linting: true,
-			},
-		}
-
-		java_library {
-			name: "d",
-			srcs: ["d.java"],
-			static_libs: ["c"],
-			min_sdk_version: "29",
-			sdk_version: "current",
-			lint: {
-				strict_updatability_linting: true,
-			},
-		}
-
-		java_library {
-			name: "c",
-			srcs: ["c.java"],
-			min_sdk_version: "29",
-			sdk_version: "current",
-			lint: {
-				baseline_filename: "lint-baseline.xml",
-			}
-		}
-	`
-	fs := android.MockFS{
-		"lint-baseline.xml": nil,
-	}
-
-	result := android.GroupFixturePreparers(PrepareForTestWithJavaDefaultModules, fs.AddToFixture()).
-		RunTestWithBp(t, bp)
-
-	c := result.ModuleForTests("c", "android_common")
-	sboxProto := android.RuleBuilderSboxProtoForTests(t, result.TestContext, c.Output("lint.sbox.textproto"))
-	if !strings.Contains(*sboxProto.Commands[0].Command,
-		"--baseline lint-baseline.xml --disallowed_issues NewApi") {
-		t.Error("did not restrict baselining NewApi")
-	}
-	if !strings.Contains(*sboxProto.Commands[0].Command,
-		"--strict_updatability_parents a,b,d") {
-		t.Errorf("Did not find correct strict_updatability_parents in command %q", *sboxProto.Commands[0].Command)
-	}
-}
-
 func TestJavaLintDatabaseSelectionFull(t *testing.T) {
 	testCases := []struct {
 		sdk_version   string
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 570248e..49e6727 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -2968,17 +2968,17 @@
 	}
 }
 
-func (module *SdkLibraryImport) GetStrictUpdatabilityLinting(ctx android.BaseModuleContext) []string {
+func (module *SdkLibraryImport) GetStrictUpdatabilityLinting() bool {
 	if module.implLibraryModule == nil {
-		return nil
+		return false
 	} else {
-		return module.implLibraryModule.GetStrictUpdatabilityLinting(ctx)
+		return module.implLibraryModule.GetStrictUpdatabilityLinting()
 	}
 }
 
-func (module *SdkLibraryImport) SetStrictUpdatabilityLinting(parents []string) {
+func (module *SdkLibraryImport) SetStrictUpdatabilityLinting(strictLinting bool) {
 	if module.implLibraryModule != nil {
-		module.implLibraryModule.SetStrictUpdatabilityLinting(parents)
+		module.implLibraryModule.SetStrictUpdatabilityLinting(strictLinting)
 	}
 }
 
