summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2024-01-11 20:02:57 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-01-11 20:02:57 +0000
commit32f9cdb9971251d47711f7ab92535034f211042c (patch)
treebbdc3210bd87cfd074ad8101197caa632644e2d0
parent7fd87366e2590f4d262ecb8929719a081d006352 (diff)
parent70ed3f7c3aca8d262ea9ab7f26095cf7b44a8a19 (diff)
downloadjarjar-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.java54
-rw-r--r--src/test/com/tonicsystems/jarjar/ServiceProcessorTest.java45
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);
+ }
+}