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

Commit 5e87f349 authored by Colin Cross's avatar Colin Cross
Browse files

Strip relative paths from java_import output files

androidx.annotation_annotation is used as a test data file, and
converting it from a java_library to a java_library_import causes
the relative path used in the test data path to change. Clear the
relative path in java_import the same way that other java based
modules do.

Bug: 288358614
Test: TestJavaLibraryOutputFileRel
Change-Id: I1f494110da32e916043ca94ac6ebeeafccc06f9a
parent 28ac2ffc
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ package java

import (
	"android/soong/android"
	"reflect"
	"slices"
	"strings"
	"testing"
)
@@ -84,7 +84,7 @@ func TestDeviceForHost(t *testing.T) {
		deviceImportCombined.Output,
	}

	if !reflect.DeepEqual(combined.Inputs, expectedInputs) {
	if !slices.Equal(combined.Inputs.Strings(), expectedInputs.Strings()) {
		t.Errorf("expected host_module combined inputs:\n%q\ngot:\n%q",
			expectedInputs, combined.Inputs)
	}
@@ -95,7 +95,7 @@ func TestDeviceForHost(t *testing.T) {
		deviceRes.Output,
	}

	if !reflect.DeepEqual(resCombined.Inputs, expectedInputs) {
	if !slices.Equal(resCombined.Inputs.Strings(), expectedInputs.Strings()) {
		t.Errorf("expected host_module res combined inputs:\n%q\ngot:\n%q",
			expectedInputs, resCombined.Inputs)
	}
@@ -165,7 +165,7 @@ func TestHostForDevice(t *testing.T) {
		hostImportCombined.Output,
	}

	if !reflect.DeepEqual(combined.Inputs, expectedInputs) {
	if !slices.Equal(combined.Inputs.Strings(), expectedInputs.Strings()) {
		t.Errorf("expected device_module combined inputs:\n%q\ngot:\n%q",
			expectedInputs, combined.Inputs)
	}
@@ -176,7 +176,7 @@ func TestHostForDevice(t *testing.T) {
		hostRes.Output,
	}

	if !reflect.DeepEqual(resCombined.Inputs, expectedInputs) {
	if !slices.Equal(resCombined.Inputs.Strings(), expectedInputs.Strings()) {
		t.Errorf("expected device_module res combined inputs:\n%q\ngot:\n%q",
			expectedInputs, resCombined.Inputs)
	}
+7 −3
Original line number Diff line number Diff line
@@ -2555,7 +2555,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
	// header jar for this module.
	reuseImplementationJarAsHeaderJar := slices.Equal(staticJars, staticHeaderJars)

	var headerOutputFile android.WritablePath
	var headerOutputFile android.ModuleOutPath
	if reuseImplementationJarAsHeaderJar {
		headerOutputFile = outputFile
	} else {
@@ -2578,8 +2578,12 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
			headerOutputFile = outputFile
		}
	}
	j.combinedHeaderFile = headerOutputFile
	j.combinedImplementationFile = outputFile

	// Save the output file with no relative path so that it doesn't end up in a subdirectory when used as a resource.
	// Also strip the relative path from the header output file so that the reuseImplementationJarAsHeaderJar check
	// in a module that depends on this module considers them equal.
	j.combinedHeaderFile = headerOutputFile.WithoutRel()
	j.combinedImplementationFile = outputFile.WithoutRel()

	j.maybeInstall(ctx, jarName, outputFile)

+45 −0
Original line number Diff line number Diff line
@@ -2872,3 +2872,48 @@ func TestJavaLibWithStem(t *testing.T) {
		t.Errorf("Module output does not contain expected jar %s", "foo-new.jar")
	}
}

func TestJavaLibraryOutputFilesRel(t *testing.T) {
	result := android.GroupFixturePreparers(
		PrepareForTestWithJavaDefaultModules,
	).RunTestWithBp(t, `
		java_library {
			name: "foo",
			srcs: ["a.java"],
		}

		java_import {
			name: "bar",
			jars: ["bar.aar"],

		}

		java_import {
			name: "baz",
			jars: ["baz.aar"],
			static_libs: ["bar"],
		}
	`)

	foo := result.ModuleForTests("foo", "android_common")
	bar := result.ModuleForTests("bar", "android_common")
	baz := result.ModuleForTests("baz", "android_common")

	fooOutputPath := android.OutputFileForModule(android.PathContext(nil), foo.Module(), "")
	barOutputPath := android.OutputFileForModule(android.PathContext(nil), bar.Module(), "")
	bazOutputPath := android.OutputFileForModule(android.PathContext(nil), baz.Module(), "")

	android.AssertPathRelativeToTopEquals(t, "foo output path",
		"out/soong/.intermediates/foo/android_common/javac/foo.jar", fooOutputPath)
	android.AssertPathRelativeToTopEquals(t, "bar output path",
		"out/soong/.intermediates/bar/android_common/combined/bar.jar", barOutputPath)
	android.AssertPathRelativeToTopEquals(t, "baz output path",
		"out/soong/.intermediates/baz/android_common/combined/baz.jar", bazOutputPath)

	android.AssertStringEquals(t, "foo relative output path",
		"foo.jar", fooOutputPath.Rel())
	android.AssertStringEquals(t, "bar relative output path",
		"bar.jar", barOutputPath.Rel())
	android.AssertStringEquals(t, "baz relative output path",
		"baz.jar", bazOutputPath.Rel())
}