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

Commit e69b3218 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add jarjar_rename property to java modules." into main

parents 081aaa95 a5d17177
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ bootstrap_go_package {
        "hiddenapi_singleton_test.go",
        "jacoco_test.go",
        "java_test.go",
        "jarjar_test.go",
        "jdeps_test.go",
        "kotlin_test.go",
        "lint_test.go",
+16 −3
Original line number Diff line number Diff line
@@ -91,6 +91,10 @@ type CommonProperties struct {
	// if not blank, run jarjar using the specified rules file
	Jarjar_rules *string `android:"path,arch_variant"`

	// java class names to rename with jarjar when a reverse dependency has a jarjar_prefix
	// property.
	Jarjar_rename []string

	// if not blank, used as prefix to generate repackage rule
	Jarjar_prefix *string

@@ -2655,8 +2659,7 @@ func (module *Module) collectJarJarRules(ctx android.ModuleContext) *JarJarProvi
	// Gather repackage information from deps
	result := collectDirectDepsProviders(ctx)

	// Update that with entries we've stored for ourself
	for orig, renamed := range module.jarjarRenameRules {
	add := func(orig string, renamed string) {
		if result == nil {
			result = &JarJarProviderData{
				Rename: make(map[string]string),
@@ -2665,12 +2668,22 @@ func (module *Module) collectJarJarRules(ctx android.ModuleContext) *JarJarProvi
		if renamed != "" {
			if preexisting, exists := (*result).Rename[orig]; exists && preexisting != renamed {
				ctx.ModuleErrorf("Conflicting jarjar rules inherited for class: %s (%s and %s)", orig, renamed, preexisting)
				continue
				return
			}
		}
		(*result).Rename[orig] = renamed
	}

	// Update that with entries we've stored for ourself
	for orig, renamed := range module.jarjarRenameRules {
		add(orig, renamed)
	}

	// Update that with entries given in the jarjar_rename property.
	for _, orig := range module.properties.Jarjar_rename {
		add(orig, "")
	}

	// If there are no renamings, then jarjar_prefix does nothing, so skip the extra work.
	if result == nil {
		return nil

java/jarjar_test.go

0 → 100644
+85 −0
Original line number Diff line number Diff line
// Copyright 2018 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package java

import (
	"fmt"
	"testing"

	"android/soong/android"
)

func AssertJarJarRename(t *testing.T, result *android.TestResult, libName, original, expectedRename string) {
	module := result.ModuleForTests(libName, "android_common")

	provider, found := android.OtherModuleProvider(result.OtherModuleProviderAdaptor(), module.Module(), JarJarProvider)
	android.AssertBoolEquals(t, fmt.Sprintf("found provider (%s)", libName), true, found)

	renamed, found := provider.Rename[original]
	android.AssertBoolEquals(t, fmt.Sprintf("found rename (%s)", libName), true, found)
	android.AssertStringEquals(t, fmt.Sprintf("renamed (%s)", libName), expectedRename, renamed)
}

func TestJarJarRenameDifferentModules(t *testing.T) {
	t.Parallel()
	result := android.GroupFixturePreparers(
		prepareForJavaTest,
	).RunTestWithBp(t, `
		java_library {
			name: "their_lib",
			jarjar_rename: ["com.example.a"],
		}

		java_library {
			name: "boundary_lib",
			jarjar_prefix: "RENAME",
			static_libs: ["their_lib"],
		}

		java_library {
			name: "my_lib",
			static_libs: ["boundary_lib"],
		}
	`)

	original := "com.example.a"
	renamed := "RENAME.com.example.a"
	AssertJarJarRename(t, result, "their_lib", original, "")
	AssertJarJarRename(t, result, "boundary_lib", original, renamed)
	AssertJarJarRename(t, result, "my_lib", original, renamed)
}

func TestJarJarRenameSameModule(t *testing.T) {
	t.Parallel()
	result := android.GroupFixturePreparers(
		prepareForJavaTest,
	).RunTestWithBp(t, `
		java_library {
			name: "their_lib",
			jarjar_rename: ["com.example.a"],
			jarjar_prefix: "RENAME",
		}

		java_library {
			name: "my_lib",
			static_libs: ["their_lib"],
		}
	`)

	original := "com.example.a"
	renamed := "RENAME.com.example.a"
	AssertJarJarRename(t, result, "their_lib", original, renamed)
	AssertJarJarRename(t, result, "my_lib", original, renamed)
}