Merge changes from topics "errProne_bp2build_manually_enabled", "error_prone_config" into main am: 2a779ea829 am: 77a01c4809

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2631710

Change-Id: I25b942822243d33a98ac43540bea3453a0fe39be
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Alix Espino
2023-07-17 15:00:32 +00:00
committed by Automerger Merge Worker
4 changed files with 74 additions and 35 deletions

View File

@@ -74,6 +74,8 @@ const (
InApex = "in_apex" InApex = "in_apex"
NonApex = "non_apex" NonApex = "non_apex"
ErrorproneDisabled = "errorprone_disabled"
) )
func PowerSetWithoutEmptySet[T any](items []T) [][]T { func PowerSetWithoutEmptySet[T any](items []T) [][]T {
@@ -216,6 +218,11 @@ var (
NonApex: "//build/bazel/rules/apex:non_apex", NonApex: "//build/bazel/rules/apex:non_apex",
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey, ConditionsDefaultConfigKey: ConditionsDefaultSelectKey,
} }
errorProneMap = map[string]string{
ErrorproneDisabled: "//build/bazel/rules/java/errorprone:errorprone_globally_disabled",
ConditionsDefaultConfigKey: ConditionsDefaultSelectKey,
}
) )
// basic configuration types // basic configuration types
@@ -229,6 +236,7 @@ const (
productVariables productVariables
osAndInApex osAndInApex
inApex inApex
errorProneDisabled
) )
func osArchString(os string, arch string) string { func osArchString(os string, arch string) string {
@@ -237,13 +245,14 @@ func osArchString(os string, arch string) string {
func (ct configurationType) String() string { func (ct configurationType) String() string {
return map[configurationType]string{ return map[configurationType]string{
noConfig: "no_config", noConfig: "no_config",
arch: "arch", arch: "arch",
os: "os", os: "os",
osArch: "arch_os", osArch: "arch_os",
productVariables: "product_variables", productVariables: "product_variables",
osAndInApex: "os_in_apex", osAndInApex: "os_in_apex",
inApex: "in_apex", inApex: "in_apex",
errorProneDisabled: "errorprone_disabled",
}[ct] }[ct]
} }
@@ -274,6 +283,10 @@ func (ct configurationType) validateConfig(config string) {
if _, ok := inApexMap[config]; !ok { if _, ok := inApexMap[config]; !ok {
panic(fmt.Errorf("Unknown in_apex config: %s", config)) panic(fmt.Errorf("Unknown in_apex config: %s", config))
} }
case errorProneDisabled:
if _, ok := errorProneMap[config]; !ok {
panic(fmt.Errorf("Unknown errorprone config: %s", config))
}
default: default:
panic(fmt.Errorf("Unrecognized ConfigurationType %d", ct)) panic(fmt.Errorf("Unrecognized ConfigurationType %d", ct))
} }
@@ -303,6 +316,8 @@ func (ca ConfigurationAxis) SelectKey(config string) string {
return config return config
case inApex: case inApex:
return inApexMap[config] return inApexMap[config]
case errorProneDisabled:
return errorProneMap[config]
default: default:
panic(fmt.Errorf("Unrecognized ConfigurationType %d", ca.configurationType)) panic(fmt.Errorf("Unrecognized ConfigurationType %d", ca.configurationType))
} }
@@ -321,6 +336,8 @@ var (
OsAndInApexAxis = ConfigurationAxis{configurationType: osAndInApex} OsAndInApexAxis = ConfigurationAxis{configurationType: osAndInApex}
// An axis for in_apex-specific configurations // An axis for in_apex-specific configurations
InApexAxis = ConfigurationAxis{configurationType: inApex} InApexAxis = ConfigurationAxis{configurationType: inApex}
ErrorProneAxis = ConfigurationAxis{configurationType: errorProneDisabled}
) )
// ProductVariableConfigurationAxis returns an axis for the given product variable // ProductVariableConfigurationAxis returns an axis for the given product variable

View File

@@ -766,7 +766,7 @@ func (lla *LabelListAttribute) SetSelectValue(axis ConfigurationAxis, config str
switch axis.configurationType { switch axis.configurationType {
case noConfig: case noConfig:
lla.Value = list lla.Value = list
case arch, os, osArch, productVariables, osAndInApex, inApex: case arch, os, osArch, productVariables, osAndInApex, inApex, errorProneDisabled:
if lla.ConfigurableValues == nil { if lla.ConfigurableValues == nil {
lla.ConfigurableValues = make(configurableLabelLists) lla.ConfigurableValues = make(configurableLabelLists)
} }
@@ -782,7 +782,7 @@ func (lla *LabelListAttribute) SelectValue(axis ConfigurationAxis, config string
switch axis.configurationType { switch axis.configurationType {
case noConfig: case noConfig:
return lla.Value return lla.Value
case arch, os, osArch, productVariables, osAndInApex, inApex: case arch, os, osArch, productVariables, osAndInApex, inApex, errorProneDisabled:
return lla.ConfigurableValues[axis][config] return lla.ConfigurableValues[axis][config]
default: default:
panic(fmt.Errorf("Unrecognized ConfigurationAxis %s", axis)) panic(fmt.Errorf("Unrecognized ConfigurationAxis %s", axis))
@@ -1346,7 +1346,7 @@ func (sla *StringListAttribute) SetSelectValue(axis ConfigurationAxis, config st
switch axis.configurationType { switch axis.configurationType {
case noConfig: case noConfig:
sla.Value = list sla.Value = list
case arch, os, osArch, productVariables, osAndInApex: case arch, os, osArch, productVariables, osAndInApex, errorProneDisabled:
if sla.ConfigurableValues == nil { if sla.ConfigurableValues == nil {
sla.ConfigurableValues = make(configurableStringLists) sla.ConfigurableValues = make(configurableStringLists)
} }
@@ -1362,7 +1362,7 @@ func (sla *StringListAttribute) SelectValue(axis ConfigurationAxis, config strin
switch axis.configurationType { switch axis.configurationType {
case noConfig: case noConfig:
return sla.Value return sla.Value
case arch, os, osArch, productVariables, osAndInApex: case arch, os, osArch, productVariables, osAndInApex, errorProneDisabled:
return sla.ConfigurableValues[axis][config] return sla.ConfigurableValues[axis][config]
default: default:
panic(fmt.Errorf("Unrecognized ConfigurationAxis %s", axis)) panic(fmt.Errorf("Unrecognized ConfigurationAxis %s", axis))

View File

@@ -183,8 +183,8 @@ func TestJavaLibraryJavaVersion(t *testing.T) {
}) })
} }
func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) { func TestJavaLibraryErrorproneEnabledManually(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{ runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
Blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
@@ -192,7 +192,13 @@ func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
errorprone: { errorprone: {
enabled: true, enabled: true,
javacflags: ["-Xep:SpeedLimit:OFF"], javacflags: ["-Xep:SpeedLimit:OFF"],
extra_check_modules: ["plugin2"],
}, },
}
java_plugin {
name: "plugin2",
srcs: ["a.java"],
bazel_module: { bp2build_available: false },
}`, }`,
ExpectedBazelTargets: []string{ ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
@@ -200,10 +206,14 @@ func TestJavaLibraryErrorproneJavacflagsEnabledManually(t *testing.T) {
"-Xsuper-fast", "-Xsuper-fast",
"-Xep:SpeedLimit:OFF", "-Xep:SpeedLimit:OFF",
]`, ]`,
"srcs": `["a.java"]`, "plugins": `[":plugin2"]`,
"srcs": `["a.java"]`,
"errorprone_force_enable": `True`,
}), }),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"), MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
}, },
}, func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("java_plugin", java.PluginFactory)
}) })
} }
@@ -227,21 +237,23 @@ func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledByDefault(t *testing.T
}) })
} }
func TestJavaLibraryErrorproneJavacflagsErrorproneDisabledManually(t *testing.T) { func TestJavaLibraryErrorproneDisabledManually(t *testing.T) {
runJavaLibraryTestCase(t, Bp2buildTestCase{ runJavaLibraryTestCase(t, Bp2buildTestCase{
Blueprint: `java_library { Blueprint: `java_library {
name: "java-lib-1", name: "java-lib-1",
srcs: ["a.java"], srcs: ["a.java"],
javacflags: ["-Xsuper-fast"], javacflags: ["-Xsuper-fast"],
errorprone: { errorprone: {
enabled: false, enabled: false,
javacflags: ["-Xep:SpeedLimit:OFF"],
}, },
}`, }`,
ExpectedBazelTargets: []string{ ExpectedBazelTargets: []string{
MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{ MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
"javacopts": `["-Xsuper-fast"]`, "javacopts": `[
"srcs": `["a.java"]`, "-Xsuper-fast",
"-XepDisableAllChecks",
]`,
"srcs": `["a.java"]`,
}), }),
MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"), MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
}, },

View File

@@ -2767,11 +2767,12 @@ func (m *Library) convertJavaResourcesAttributes(ctx android.TopDownMutatorConte
type javaCommonAttributes struct { type javaCommonAttributes struct {
*javaResourcesAttributes *javaResourcesAttributes
*kotlinAttributes *kotlinAttributes
Srcs bazel.LabelListAttribute Srcs bazel.LabelListAttribute
Plugins bazel.LabelListAttribute Plugins bazel.LabelListAttribute
Javacopts bazel.StringListAttribute Javacopts bazel.StringListAttribute
Sdk_version bazel.StringAttribute Sdk_version bazel.StringAttribute
Java_version bazel.StringAttribute Java_version bazel.StringAttribute
Errorprone_force_enable bazel.BoolAttribute
} }
type javaDependencyLabels struct { type javaDependencyLabels struct {
@@ -2913,26 +2914,35 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
staticDeps.Add(&bazel.Label{Label: ":" + javaAidlLibName}) staticDeps.Add(&bazel.Label{Label: ":" + javaAidlLibName})
} }
var javacopts []string var javacopts bazel.StringListAttribute //[]string
plugins := bazel.MakeLabelListAttribute(
android.BazelLabelForModuleDeps(ctx, m.properties.Plugins),
)
if m.properties.Javacflags != nil { if m.properties.Javacflags != nil {
javacopts = append(javacopts, m.properties.Javacflags...) javacopts = bazel.MakeStringListAttribute(m.properties.Javacflags)
} }
epEnabled := m.properties.Errorprone.Enabled epEnabled := m.properties.Errorprone.Enabled
//TODO(b/227504307) add configuration that depends on RUN_ERROR_PRONE environment variable epJavacflags := m.properties.Errorprone.Javacflags
if Bool(epEnabled) { var errorproneForceEnable bazel.BoolAttribute
javacopts = append(javacopts, m.properties.Errorprone.Javacflags...) if epEnabled == nil {
//TODO(b/227504307) add configuration that depends on RUN_ERROR_PRONE environment variable
} else if *epEnabled {
plugins.Append(bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, m.properties.Errorprone.Extra_check_modules)))
javacopts.Append(bazel.MakeStringListAttribute(epJavacflags))
errorproneForceEnable.Value = epEnabled
} else {
javacopts.Append(bazel.MakeStringListAttribute([]string{"-XepDisableAllChecks"}))
} }
commonAttrs := &javaCommonAttributes{ commonAttrs := &javaCommonAttributes{
Srcs: javaSrcs, Srcs: javaSrcs,
javaResourcesAttributes: m.convertJavaResourcesAttributes(ctx), javaResourcesAttributes: m.convertJavaResourcesAttributes(ctx),
Plugins: bazel.MakeLabelListAttribute( Plugins: plugins,
android.BazelLabelForModuleDeps(ctx, m.properties.Plugins), Javacopts: javacopts,
), Java_version: bazel.StringAttribute{Value: m.properties.Java_version},
Javacopts: bazel.MakeStringListAttribute(javacopts), Sdk_version: bazel.StringAttribute{Value: m.deviceProperties.Sdk_version},
Java_version: bazel.StringAttribute{Value: m.properties.Java_version}, Errorprone_force_enable: errorproneForceEnable,
Sdk_version: bazel.StringAttribute{Value: m.deviceProperties.Sdk_version},
} }
for axis, configToProps := range archVariantProps { for axis, configToProps := range archVariantProps {