summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp4
-rw-r--r--src/android/com/android/jarjar/RemoveAndroidCompatAnnotationsJarTransformer.java6
-rw-r--r--src/main/com/tonicsystems/jarjar/EmptyClassVisitor.java8
-rw-r--r--src/main/com/tonicsystems/jarjar/PackageRemapper.java7
-rw-r--r--src/main/com/tonicsystems/jarjar/PatternElement.java4
-rw-r--r--src/main/com/tonicsystems/jarjar/StringReader.java8
-rw-r--r--src/main/com/tonicsystems/jarjar/Wildcard.java21
-rw-r--r--src/main/com/tonicsystems/jarjar/WildcardTrie.java91
-rw-r--r--src/main/com/tonicsystems/jarjar/util/GetNameClassWriter.java2
9 files changed, 20 insertions, 131 deletions
diff --git a/Android.bp b/Android.bp
index be83e4b..be68c5c 100644
--- a/Android.bp
+++ b/Android.bp
@@ -47,8 +47,8 @@ java_library_host {
java_resource_dirs: ["res"],
static_libs: [
- "asm-9.2",
- "asm-commons-9.2",
+ "asm-6.0",
+ "asm-commons-6.0",
],
libs: [
diff --git a/src/android/com/android/jarjar/RemoveAndroidCompatAnnotationsJarTransformer.java b/src/android/com/android/jarjar/RemoveAndroidCompatAnnotationsJarTransformer.java
index f9e5e14..990e048 100644
--- a/src/android/com/android/jarjar/RemoveAndroidCompatAnnotationsJarTransformer.java
+++ b/src/android/com/android/jarjar/RemoveAndroidCompatAnnotationsJarTransformer.java
@@ -51,7 +51,7 @@ public final class RemoveAndroidCompatAnnotationsJarTransformer extends JarTrans
private boolean isClassRemapped;
AnnotationRemover(ClassVisitor cv) {
- super(Opcodes.ASM7, cv);
+ super(Opcodes.ASM6, cv);
}
@Override
@@ -74,7 +74,7 @@ public final class RemoveAndroidCompatAnnotationsJarTransformer extends JarTrans
Object value) {
FieldVisitor superVisitor =
super.visitField(access, name, descriptor, signature, value);
- return new FieldVisitor(Opcodes.ASM7, superVisitor) {
+ return new FieldVisitor(Opcodes.ASM6, superVisitor) {
@Override
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {
return visitAnnotationCommon(descriptor,
@@ -89,7 +89,7 @@ public final class RemoveAndroidCompatAnnotationsJarTransformer extends JarTrans
String signature, String[] exceptions) {
MethodVisitor superVisitor =
super.visitMethod(access, name, descriptor, signature, exceptions);
- return new MethodVisitor(Opcodes.ASM7, superVisitor) {
+ return new MethodVisitor(Opcodes.ASM6, superVisitor) {
@Override
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {
return visitAnnotationCommon(descriptor,
diff --git a/src/main/com/tonicsystems/jarjar/EmptyClassVisitor.java b/src/main/com/tonicsystems/jarjar/EmptyClassVisitor.java
index c7614a1..7a758fe 100644
--- a/src/main/com/tonicsystems/jarjar/EmptyClassVisitor.java
+++ b/src/main/com/tonicsystems/jarjar/EmptyClassVisitor.java
@@ -28,23 +28,23 @@ import org.objectweb.asm.Opcodes;
public class EmptyClassVisitor extends ClassVisitor {
public EmptyClassVisitor() {
- super(Opcodes.ASM7);
+ super(Opcodes.ASM6);
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
- return new MethodVisitor(Opcodes.ASM7) {};
+ return new MethodVisitor(Opcodes.ASM6) {};
}
@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- return new AnnotationVisitor(Opcodes.ASM7) {};
+ return new AnnotationVisitor(Opcodes.ASM6) {};
}
@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
- return new FieldVisitor(Opcodes.ASM7) {};
+ return new FieldVisitor(Opcodes.ASM6) {};
}
}
diff --git a/src/main/com/tonicsystems/jarjar/PackageRemapper.java b/src/main/com/tonicsystems/jarjar/PackageRemapper.java
index e281f24..4d102be 100644
--- a/src/main/com/tonicsystems/jarjar/PackageRemapper.java
+++ b/src/main/com/tonicsystems/jarjar/PackageRemapper.java
@@ -16,6 +16,7 @@
package com.tonicsystems.jarjar;
+import org.objectweb.asm.*;
import org.objectweb.asm.commons.*;
import java.util.*;
import java.util.regex.Pattern;
@@ -27,7 +28,7 @@ class PackageRemapper extends Remapper
private static final Pattern ARRAY_FOR_NAME_PATTERN
= Pattern.compile("\\[L[\\p{javaJavaIdentifierPart}\\.]+?;");
- private final WildcardTrie wildcards;
+ private final List<Wildcard> wildcards;
private final Map<String, String> typeCache = new HashMap<String, String>();
private final Map<String, String> pathCache = new HashMap<String, String>();
private final Map<Object, String> valueCache = new HashMap<Object, String>();
@@ -35,7 +36,7 @@ class PackageRemapper extends Remapper
public PackageRemapper(List<Rule> ruleList, boolean verbose) {
this.verbose = verbose;
- wildcards = new WildcardTrie(PatternElement.createWildcards(ruleList));
+ wildcards = PatternElement.createWildcards(ruleList);
}
// also used by KeepProcessor
@@ -117,7 +118,7 @@ class PackageRemapper extends Remapper
}
private String replaceHelper(String value) {
- for (Wildcard wildcard : wildcards.getPossibleMatches(value)) {
+ for (Wildcard wildcard : wildcards) {
String test = wildcard.replace(value);
if (test != null)
return test;
diff --git a/src/main/com/tonicsystems/jarjar/PatternElement.java b/src/main/com/tonicsystems/jarjar/PatternElement.java
index 6b852d7..6ccd9ea 100644
--- a/src/main/com/tonicsystems/jarjar/PatternElement.java
+++ b/src/main/com/tonicsystems/jarjar/PatternElement.java
@@ -32,14 +32,12 @@ abstract public class PatternElement
static List<Wildcard> createWildcards(List<? extends PatternElement> patterns) {
List<Wildcard> wildcards = new ArrayList<Wildcard>();
- int ruleIndex = 0;
for (PatternElement pattern : patterns) {
String result = (pattern instanceof Rule) ? ((Rule)pattern).getResult() : "";
String expr = pattern.getPattern();
if (expr.indexOf('/') >= 0)
throw new IllegalArgumentException("Patterns cannot contain slashes");
- wildcards.add(new Wildcard(expr.replace('.', '/'), result, ruleIndex));
- ruleIndex++;
+ wildcards.add(new Wildcard(expr.replace('.', '/'), result));
}
return wildcards;
}
diff --git a/src/main/com/tonicsystems/jarjar/StringReader.java b/src/main/com/tonicsystems/jarjar/StringReader.java
index 164b0a2..5bb719c 100644
--- a/src/main/com/tonicsystems/jarjar/StringReader.java
+++ b/src/main/com/tonicsystems/jarjar/StringReader.java
@@ -24,7 +24,7 @@ abstract class StringReader extends ClassVisitor
private String className;
public StringReader() {
- super(Opcodes.ASM7);
+ super(Opcodes.ASM6);
}
abstract public void visitString(String className, String value, int line);
@@ -42,7 +42,7 @@ abstract class StringReader extends ClassVisitor
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
handleObject(value);
- return new FieldVisitor(Opcodes.ASM7){
+ return new FieldVisitor(Opcodes.ASM6){
@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
return StringReader.this.visitAnnotation(desc, visible);
@@ -52,7 +52,7 @@ abstract class StringReader extends ClassVisitor
@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- return new AnnotationVisitor(Opcodes.ASM7) {
+ return new AnnotationVisitor(Opcodes.ASM6) {
@Override
public void visit(String name, Object value) {
handleObject(value);
@@ -71,7 +71,7 @@ abstract class StringReader extends ClassVisitor
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
- MethodVisitor mv = new MethodVisitor(Opcodes.ASM7){
+ MethodVisitor mv = new MethodVisitor(Opcodes.ASM6){
@Override
public void visitLdcInsn(Object cst) {
handleObject(cst);
diff --git a/src/main/com/tonicsystems/jarjar/Wildcard.java b/src/main/com/tonicsystems/jarjar/Wildcard.java
index c92e0fb..5cc486f 100644
--- a/src/main/com/tonicsystems/jarjar/Wildcard.java
+++ b/src/main/com/tonicsystems/jarjar/Wildcard.java
@@ -27,18 +27,14 @@ class Wildcard
private static Pattern star = Pattern.compile("\\*");
private static Pattern estar = Pattern.compile("\\+\\??\\)\\Z");
private static Pattern dollar = Pattern.compile("\\$");
- // Apart from stars and dollar signs, wildcards are plain-text full matches
- private static Pattern plainTextPrefixPattern = Pattern.compile("^[^*$]*");
private final Pattern pattern;
- private final String plainTextPrefix;
- private final int ruleIndex;
private final int count;
private final ArrayList<Object> parts = new ArrayList<Object>(16); // kept for debugging
private final String[] strings;
private final int[] refs;
- public Wildcard(String pattern, String result, int ruleIndex) {
+ public Wildcard(String pattern, String result) {
if (pattern.equals("**"))
throw new IllegalArgumentException("'**' is not a valid pattern");
if (!checkIdentifierChars(pattern, "/*"))
@@ -51,13 +47,6 @@ class Wildcard
regex = replaceAllLiteral(star, regex, "([^/]+)");
regex = replaceAllLiteral(estar, regex, "*)");
regex = replaceAllLiteral(dollar, regex, "\\$");
- Matcher prefixMatcher = plainTextPrefixPattern.matcher(pattern);
- // prefixMatcher will always match, but may match an empty string
- if (!prefixMatcher.find()) {
- throw new IllegalArgumentException(plainTextPrefixPattern + " not found in " + pattern);
- }
- this.plainTextPrefix = prefixMatcher.group();
- this.ruleIndex = ruleIndex;
this.pattern = Pattern.compile("\\A" + regex + "\\Z");
this.count = this.pattern.matcher("foo").groupCount();
@@ -106,14 +95,6 @@ class Wildcard
// System.err.println(this);
}
- public String getPlainTextPrefix() {
- return plainTextPrefix;
- }
-
- public int getRuleIndex() {
- return ruleIndex;
- }
-
public boolean matches(String value) {
return getMatcher(value) != null;
}
diff --git a/src/main/com/tonicsystems/jarjar/WildcardTrie.java b/src/main/com/tonicsystems/jarjar/WildcardTrie.java
deleted file mode 100644
index e80dbc9..0000000
--- a/src/main/com/tonicsystems/jarjar/WildcardTrie.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * 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 java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.TreeMap;
-
-/**
- * A prefix trie of {@link Wildcard}, where the prefix is obtained from
- * {@link Wildcard#getPlainTextPrefix()}.
- *
- * This allows quick lookup of applicable wildcards in the common case where wildcards have a
- * non-empty plain-text prefix.
- */
-public class WildcardTrie {
- private final TreeMap<String, WildcardTrie> subTries = new TreeMap<>();
- private final List<Wildcard> wildcards = new ArrayList<>();
- private final String prefix;
-
- public WildcardTrie(List<Wildcard> wildcards) {
- this("");
- final ArrayList<Wildcard> lst = new ArrayList<>(wildcards);
- // Sort values to ensure that wildcards that prefix others are added first
- lst.sort(Comparator.comparing(Wildcard::getPlainTextPrefix));
- for (Wildcard w : lst) {
- final String prefix = w.getPlainTextPrefix();
- final WildcardTrie prefixTrie = findSubTrieWhichPrefixes(prefix, this);
- if (prefixTrie.prefix.equals(prefix)) {
- prefixTrie.wildcards.add(w);
- } else {
- final WildcardTrie newTrie = new WildcardTrie(prefix);
- newTrie.wildcards.add(w);
- prefixTrie.subTries.put(prefix, newTrie);
- }
- }
- }
-
- private WildcardTrie(String prefix) {
- this.prefix = prefix;
- }
-
- private static WildcardTrie findSubTrieWhichPrefixes(String value, WildcardTrie baseTrie) {
- final String possiblePrefix = baseTrie.subTries.floorKey(value);
- // Because each level of the trie does not contain keys that are prefixes of each other,
- // there can be at most one prefix of the value at that level, and that prefix will be the
- // highest key ordered before the value (any non-prefix key would have a character
- // difference with the prefix and so be ordered before the prefix or after the value).
- if (possiblePrefix != null && value.startsWith(possiblePrefix)) {
- return findSubTrieWhichPrefixes(value, baseTrie.subTries.get(possiblePrefix));
- }
- return baseTrie;
- }
-
- public List<Wildcard> getPossibleMatches(String value) {
- WildcardTrie baseTrie = this;
- List<Wildcard> prefixMatches = wildcards.isEmpty()
- // If there's no match, don't even allocate a list and use the singleton emptyList
- ? Collections.emptyList() : new ArrayList<>(wildcards);
- while (true) {
- final String possiblePrefix = baseTrie.subTries.floorKey(value);
- if (possiblePrefix != null && value.startsWith(possiblePrefix)) {
- baseTrie = baseTrie.subTries.get(possiblePrefix);
- if (prefixMatches.isEmpty()) {
- prefixMatches = new ArrayList<>(baseTrie.wildcards);
- } else {
- prefixMatches.addAll(baseTrie.wildcards);
- }
- } else {
- prefixMatches.sort(Comparator.comparing(Wildcard::getRuleIndex));
- return prefixMatches;
- }
- }
- }
-}
diff --git a/src/main/com/tonicsystems/jarjar/util/GetNameClassWriter.java b/src/main/com/tonicsystems/jarjar/util/GetNameClassWriter.java
index db6ec4f..966ac82 100644
--- a/src/main/com/tonicsystems/jarjar/util/GetNameClassWriter.java
+++ b/src/main/com/tonicsystems/jarjar/util/GetNameClassWriter.java
@@ -25,7 +25,7 @@ public class GetNameClassWriter extends ClassVisitor
private String className;
public GetNameClassWriter(int flags) {
- super(Opcodes.ASM7,new ClassWriter(flags));
+ super(Opcodes.ASM6,new ClassWriter(flags));
}
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {