diff options
author | Colin Cross <ccross@android.com> | 2024-01-11 20:02:57 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2024-01-11 20:02:57 +0000 |
commit | 32f9cdb9971251d47711f7ab92535034f211042c (patch) | |
tree | bbdc3210bd87cfd074ad8101197caa632644e2d0 | |
parent | 7fd87366e2590f4d262ecb8929719a081d006352 (diff) | |
parent | 70ed3f7c3aca8d262ea9ab7f26095cf7b44a8a19 (diff) | |
download | jarjar-32f9cdb9971251d47711f7ab92535034f211042c.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' am: d7dff33e9c am: 78dac087a2 am: 70ed3f7c3a
Original change: https://android-review.googlesource.com/c/platform/external/jarjar/+/2901510
Change-Id: Ieee1158174581abf972a5762a86f46a6a74747f6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | src/main/com/tonicsystems/jarjar/ServiceProcessor.java | 54 | ||||
-rw-r--r-- | src/test/com/tonicsystems/jarjar/ServiceProcessorTest.java | 45 |
2 files changed, 99 insertions, 0 deletions
diff --git a/src/main/com/tonicsystems/jarjar/ServiceProcessor.java b/src/main/com/tonicsystems/jarjar/ServiceProcessor.java new file mode 100644 index 0000000..b59460c --- /dev/null +++ b/src/main/com/tonicsystems/jarjar/ServiceProcessor.java @@ -0,0 +1,54 @@ +/* + * Copyright 2024 Google Inc. + * + * 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 com.tonicsystems.jarjar; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.tonicsystems.jarjar.util.EntryStruct; +import com.tonicsystems.jarjar.util.JarProcessor; +import java.io.IOException; +import java.util.stream.Collectors; + +class ServiceProcessor implements JarProcessor { + private final PackageRemapper pr; + + public ServiceProcessor(PackageRemapper pr) { + this.pr = pr; + } + + private static final String SERVICES_PREFIX = "META-INF/services/"; + + @Override + public boolean process(EntryStruct struct) throws IOException { + if (struct.name.startsWith(SERVICES_PREFIX)) { + String serviceName = struct.name.substring(SERVICES_PREFIX.length()); + struct.name = SERVICES_PREFIX + mapString(serviceName); + + struct.data = + new String(struct.data, UTF_8) + .lines() + .map(this::mapString) + .collect(Collectors.joining("\n", "", "\n")) + .getBytes(UTF_8); + } + return true; + } + + private String mapString(String s) { + return (String) pr.mapValue(s); + } +} diff --git a/src/test/com/tonicsystems/jarjar/ServiceProcessorTest.java b/src/test/com/tonicsystems/jarjar/ServiceProcessorTest.java new file mode 100644 index 0000000..2d6ac69 --- /dev/null +++ b/src/test/com/tonicsystems/jarjar/ServiceProcessorTest.java @@ -0,0 +1,45 @@ +/* + * Copyright 2024 Google Inc. + * + * 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 com.tonicsystems.jarjar; + +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.tonicsystems.jarjar.util.EntryStruct; +import java.util.Arrays; +import junit.framework.TestCase; + +public class ServiceProcessorTest extends TestCase { + public void testProcess() throws Exception { + Rule rule = new Rule(); + rule.setPattern("foo.**"); + rule.setResult("bar.@1"); + PackageRemapper remapper = new PackageRemapper(Arrays.asList(rule), false); + ServiceProcessor serviceProcessor = new ServiceProcessor(remapper); + + EntryStruct struct = new EntryStruct(); + struct.name = "META-INF/services/foo.Service"; + struct.data = "foo.baz.ServiceImplementation\n".getBytes(UTF_8); + + assertTrue(serviceProcessor.process(struct)); + assertEquals("META-INF/services/bar.Service", struct.name); + assertEquals("bar.baz.ServiceImplementation\n", new String(struct.data, UTF_8)); + } + + public ServiceProcessorTest(String name) { + super(name); + } +} |