Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3bab3bd9 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Enable api_lint in java_sdk_library" am: c0320878

Change-Id: I220f6816c84ae4f412442bfd91a3c2f331ac45d7
parents 6e55eb8f c0320878
Loading
Loading
Loading
Loading
+26 −2
Original line number Diff line number Diff line
@@ -222,8 +222,22 @@ type DroidstubsProperties struct {

		Current ApiToCheck

		// do not perform API check against Last_released, in the case that both two specified API
		// files by Last_released are modules which don't exist.
		// The java_sdk_library module generates references to modules (i.e. filegroups)
		// from which information about the latest API version can be obtained. As those
		// modules may not exist (e.g. because a previous version has not been released) it
		// sets ignore_missing_latest_api=true on the droidstubs modules it creates so
		// that droidstubs can ignore those references if the modules do not yet exist.
		//
		// If true then this will ignore module references for modules that do not exist
		// in properties that supply the previous version of the API.
		//
		// There are two sets of those:
		// * Api_file, Removed_api_file in check_api.last_released
		// * New_since in check_api.api_lint.new_since
		//
		// The first two must be set as a pair, so either they should both exist or neither
		// should exist - in which case when this property is true they are ignored. If one
		// exists and the other does not then it is an error.
		Ignore_missing_latest_api *bool `blueprint:"mutated"`

		Api_lint struct {
@@ -1200,8 +1214,18 @@ func (d *Droidstubs) StubsSrcJar() android.Path {
func (d *Droidstubs) DepsMutator(ctx android.BottomUpMutatorContext) {
	d.Javadoc.addDeps(ctx)

	// If requested clear any properties that provide information about the latest version
	// of an API and which reference non-existent modules.
	if Bool(d.properties.Check_api.Ignore_missing_latest_api) {
		ignoreMissingModules(ctx, &d.properties.Check_api.Last_released)

		// If the new_since references a module, e.g. :module-latest-api and the module
		// does not exist then clear it.
		newSinceSrc := d.properties.Check_api.Api_lint.New_since
		newSinceSrcModule := android.SrcIsModule(proptools.String(newSinceSrc))
		if newSinceSrcModule != "" && !ctx.OtherModuleExists(newSinceSrcModule) {
			d.properties.Check_api.Api_lint.New_since = nil
		}
	}

	if len(d.properties.Merge_annotations_dirs) != 0 {
+33 −2
Original line number Diff line number Diff line
@@ -351,6 +351,12 @@ type sdkLibraryProperties struct {
	// disabled by default.
	Module_lib ApiScopeProperties

	// Properties related to api linting.
	Api_lint struct {
		// Enable api linting.
		Enabled *bool
	}

	// TODO: determines whether to create HTML doc or not
	//Html_doc *bool
}
@@ -677,6 +683,12 @@ func (module *SdkLibrary) createStubsSourcesAndApi(mctx android.DefaultableHookC
			Current                   ApiToCheck
			Last_released             ApiToCheck
			Ignore_missing_latest_api *bool

			Api_lint struct {
				Enabled       *bool
				New_since     *string
				Baseline_file *string
			}
		}
		Aidl struct {
			Include_dirs       []string
@@ -759,11 +771,30 @@ func (module *SdkLibrary) createStubsSourcesAndApi(mctx android.DefaultableHookC

	if !apiScope.unstable {
		// check against the latest released API
		props.Check_api.Last_released.Api_file = proptools.StringPtr(
			module.latestApiFilegroupName(apiScope))
		latestApiFilegroupName := proptools.StringPtr(module.latestApiFilegroupName(apiScope))
		props.Check_api.Last_released.Api_file = latestApiFilegroupName
		props.Check_api.Last_released.Removed_api_file = proptools.StringPtr(
			module.latestRemovedApiFilegroupName(apiScope))
		props.Check_api.Ignore_missing_latest_api = proptools.BoolPtr(true)

		if proptools.Bool(module.sdkLibraryProperties.Api_lint.Enabled) {
			// Enable api lint.
			props.Check_api.Api_lint.Enabled = proptools.BoolPtr(true)
			props.Check_api.Api_lint.New_since = latestApiFilegroupName

			// If it exists then pass a lint-baseline.txt through to droidstubs.
			baselinePath := path.Join(apiDir, apiScope.apiFilePrefix+"lint-baseline.txt")
			baselinePathRelativeToRoot := path.Join(mctx.ModuleDir(), baselinePath)
			paths, err := mctx.GlobWithDeps(baselinePathRelativeToRoot, nil)
			if err != nil {
				mctx.ModuleErrorf("error checking for presence of %s: %s", baselinePathRelativeToRoot, err)
			}
			if len(paths) == 1 {
				props.Check_api.Api_lint.Baseline_file = proptools.StringPtr(baselinePath)
			} else if len(paths) != 0 {
				mctx.ModuleErrorf("error checking for presence of %s: expected one path, found: %v", baselinePathRelativeToRoot, paths)
			}
		}
	}

	// Dist the api txt artifact for sdk builds.