summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Miller-Cushon <cushon@google.com>2018-02-09 12:02:17 -0800
committerLiam Miller-Cushon <cushon@google.com>2018-02-09 13:10:48 -0800
commit38ff702d10baec78f30d5f57485ae452f0fe33b5 (patch)
tree2c0fcd3091901da9a5eb819065ef0b5f4344f048
parentf271ac33748b682d312678d2f1c5c302edea5816 (diff)
downloadjarjar-38ff702d10baec78f30d5f57485ae452f0fe33b5.tar.gz
Work around lack of support for multi-version archives
-rw-r--r--src/main/com/tonicsystems/jarjar/ResourceProcessor.java2
-rw-r--r--src/main/com/tonicsystems/jarjar/ZapProcessor.java2
-rw-r--r--src/main/com/tonicsystems/jarjar/util/EntryStruct.java12
-rw-r--r--src/main/com/tonicsystems/jarjar/util/JarTransformer.java2
4 files changed, 15 insertions, 3 deletions
diff --git a/src/main/com/tonicsystems/jarjar/ResourceProcessor.java b/src/main/com/tonicsystems/jarjar/ResourceProcessor.java
index 40eb520..76f9189 100644
--- a/src/main/com/tonicsystems/jarjar/ResourceProcessor.java
+++ b/src/main/com/tonicsystems/jarjar/ResourceProcessor.java
@@ -28,7 +28,7 @@ class ResourceProcessor implements JarProcessor {
}
public boolean process(EntryStruct struct) throws IOException {
- if (!struct.name.endsWith(".class")) {
+ if (!struct.isClass()) {
struct.name = pr.mapPath(struct.name);
}
return true;
diff --git a/src/main/com/tonicsystems/jarjar/ZapProcessor.java b/src/main/com/tonicsystems/jarjar/ZapProcessor.java
index 76f8298..7431ec3 100644
--- a/src/main/com/tonicsystems/jarjar/ZapProcessor.java
+++ b/src/main/com/tonicsystems/jarjar/ZapProcessor.java
@@ -29,7 +29,7 @@ class ZapProcessor implements JarProcessor {
public boolean process(EntryStruct struct) throws IOException {
String name = struct.name;
- if (name.endsWith(".class")) {
+ if (struct.isClass()) {
return !zap(name.substring(0, name.length() - 6));
}
return true;
diff --git a/src/main/com/tonicsystems/jarjar/util/EntryStruct.java b/src/main/com/tonicsystems/jarjar/util/EntryStruct.java
index 2ebf512..bf72ab5 100644
--- a/src/main/com/tonicsystems/jarjar/util/EntryStruct.java
+++ b/src/main/com/tonicsystems/jarjar/util/EntryStruct.java
@@ -20,4 +20,16 @@ public class EntryStruct {
public byte[] data;
public String name;
public long time;
+
+ /** Returns true if the entry is a class file. */
+ public boolean isClass() {
+ if (!name.endsWith(".class")) {
+ return false;
+ }
+ if (name.startsWith("META-INF/version")) {
+ // TODO(b/69678527): handle multi-release jar files
+ return false;
+ }
+ return true;
+ }
}
diff --git a/src/main/com/tonicsystems/jarjar/util/JarTransformer.java b/src/main/com/tonicsystems/jarjar/util/JarTransformer.java
index a88bcf7..2b07a88 100644
--- a/src/main/com/tonicsystems/jarjar/util/JarTransformer.java
+++ b/src/main/com/tonicsystems/jarjar/util/JarTransformer.java
@@ -23,7 +23,7 @@ import org.objectweb.asm.ClassWriter;
public abstract class JarTransformer implements JarProcessor {
public boolean process(EntryStruct struct) throws IOException {
- if (struct.name.endsWith(".class")) {
+ if (struct.isClass()) {
ClassReader reader;
try {
reader = new ClassReader(struct.data);