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

Commit 9f7b9f4a authored by mrziwang's avatar mrziwang
Browse files

Use OutputFilesProvider on java modules

In the context of incremental soong, the output files
inter-module-communication will be through OutputFilesProvider.
The OutputFileProducer interface will be deprecated.

Test: CI
Bug: 339477385
Change-Id: I3c9f0b766325dd490bc903dc65259c3953d34606
parent 8dfc2bf1
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2491,6 +2491,8 @@ func outputFilesForModule(ctx PathContext, module blueprint.Module, tag string)
	if outputFilesFromProvider != nil || err != OutputFilesProviderNotSet {
		return outputFilesFromProvider, err
	}
	// TODO: add error when outputFilesFromProvider and err are both nil after
	// OutputFileProducer and SourceFileProducer are deprecated.
	if outputFileProducer, ok := module.(OutputFileProducer); ok {
		paths, err := outputFileProducer.OutputFiles(tag)
		if err != nil {
@@ -2505,7 +2507,7 @@ func outputFilesForModule(ctx PathContext, module blueprint.Module, tag string)
		paths := sourceFileProducer.Srcs()
		return paths, nil
	} else {
		return nil, fmt.Errorf("module %q is not an OutputFileProducer or SourceFileProducer", pathContextName(ctx, module))
		return nil, fmt.Errorf("module %q is not an SourceFileProducer or having valid output file for tag %q", pathContextName(ctx, module), tag)
	}
}

+7 −12
Original line number Diff line number Diff line
@@ -798,18 +798,6 @@ type AndroidLibrary struct {
	aarFile android.WritablePath
}

var _ android.OutputFileProducer = (*AndroidLibrary)(nil)

// For OutputFileProducer interface
func (a *AndroidLibrary) OutputFiles(tag string) (android.Paths, error) {
	switch tag {
	case ".aar":
		return []android.Path{a.aarFile}, nil
	default:
		return a.Library.OutputFiles(tag)
	}
}

var _ AndroidLibraryDependency = (*AndroidLibrary)(nil)

func (a *AndroidLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
@@ -911,6 +899,13 @@ func (a *AndroidLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
	android.SetProvider(ctx, FlagsPackagesProvider, FlagsPackages{
		AconfigTextFiles: aconfigTextFilePaths,
	})

	a.setOutputFiles(ctx)
}

func (a *AndroidLibrary) setOutputFiles(ctx android.ModuleContext) {
	ctx.SetOutputFiles([]android.Path{a.aarFile}, ".aar")
	setOutputFiles(ctx, a.Library.Module)
}

func (a *AndroidLibrary) IDEInfo(dpInfo *android.IdeInfo) {
+4 −4
Original line number Diff line number Diff line
@@ -159,19 +159,19 @@ func TestAndroidLibraryOutputFilesRel(t *testing.T) {
	bar := result.ModuleForTests("bar", "android_common")
	baz := result.ModuleForTests("baz", "android_common")

	fooOutputPath := android.OutputFileForModule(android.PathContext(nil), foo.Module(), "")
	fooOutputPaths := foo.OutputFiles(t, "")
	barOutputPaths := bar.OutputFiles(t, "")
	bazOutputPaths := baz.OutputFiles(t, "")

	android.AssertPathRelativeToTopEquals(t, "foo output path",
		"out/soong/.intermediates/foo/android_common/withres/foo.jar", fooOutputPath)
	android.AssertPathsRelativeToTopEquals(t, "foo output path",
		[]string{"out/soong/.intermediates/foo/android_common/withres/foo.jar"}, fooOutputPaths)
	android.AssertPathsRelativeToTopEquals(t, "bar output path",
		[]string{"out/soong/.intermediates/bar/android_common/aar/bar.jar"}, barOutputPaths)
	android.AssertPathsRelativeToTopEquals(t, "baz output path",
		[]string{"out/soong/.intermediates/baz/android_common/withres/baz.jar"}, bazOutputPaths)

	android.AssertStringEquals(t, "foo relative output path",
		"foo.jar", fooOutputPath.Rel())
		"foo.jar", fooOutputPaths[0].Rel())
	android.AssertStringEquals(t, "bar relative output path",
		"bar.jar", barOutputPaths[0].Rel())
	android.AssertStringEquals(t, "baz relative output path",
+16 −25
Original line number Diff line number Diff line
@@ -1017,6 +1017,22 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
			isPrebuilt:     false,
		},
	)

	a.setOutputFiles(ctx)
}

func (a *AndroidApp) setOutputFiles(ctx android.ModuleContext) {
	ctx.SetOutputFiles([]android.Path{a.proguardOptionsFile}, ".aapt.proguardOptionsFile")
	if a.aaptSrcJar != nil {
		ctx.SetOutputFiles([]android.Path{a.aaptSrcJar}, ".aapt.srcjar")
	}
	if a.rJar != nil {
		ctx.SetOutputFiles([]android.Path{a.rJar}, ".aapt.jar")
	}
	ctx.SetOutputFiles([]android.Path{a.outputFile}, ".apk")
	ctx.SetOutputFiles([]android.Path{a.exportPackage}, ".export-package.apk")
	ctx.SetOutputFiles([]android.Path{a.aapt.manifestPath}, ".manifest.xml")
	setOutputFiles(ctx, a.Library.Module)
}

type appDepsInterface interface {
@@ -1207,31 +1223,6 @@ func (a *AndroidApp) DepIsInSameApex(ctx android.BaseModuleContext, dep android.
	return a.Library.DepIsInSameApex(ctx, dep)
}

// For OutputFileProducer interface
func (a *AndroidApp) OutputFiles(tag string) (android.Paths, error) {
	switch tag {
	// In some instances, it can be useful to reference the aapt-generated flags from another
	// target, e.g., system server implements services declared in the framework-res manifest.
	case ".aapt.proguardOptionsFile":
		return []android.Path{a.proguardOptionsFile}, nil
	case ".aapt.srcjar":
		if a.aaptSrcJar != nil {
			return []android.Path{a.aaptSrcJar}, nil
		}
	case ".aapt.jar":
		if a.rJar != nil {
			return []android.Path{a.rJar}, nil
		}
	case ".apk":
		return []android.Path{a.outputFile}, nil
	case ".export-package.apk":
		return []android.Path{a.exportPackage}, nil
	case ".manifest.xml":
		return []android.Path{a.aapt.manifestPath}, nil
	}
	return a.Library.OutputFiles(tag)
}

func (a *AndroidApp) Privileged() bool {
	return Bool(a.appProperties.Privileged)
}
+1 −4
Original line number Diff line number Diff line
@@ -119,10 +119,7 @@ func TestAppSplits(t *testing.T) {
		foo.Output(expectedOutput)
	}

	outputFiles, err := foo.Module().(*AndroidApp).OutputFiles("")
	if err != nil {
		t.Fatal(err)
	}
	outputFiles := foo.OutputFiles(t, "")
	android.AssertPathsRelativeToTopEquals(t, `OutputFiles("")`, expectedOutputs, outputFiles)
}

Loading