summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2015-01-13 16:40:25 +0100
committerYohann Roussel <yroussel@google.com>2015-01-16 09:39:59 +0100
commit1f0061a3fa5a7281240db61802cb55c509e0ecc9 (patch)
treef5ff7ab322b4b496f75190f3f986b69de354c951
parent206485ee1f596637186a5af99da5ed0788d32551 (diff)
downloadtoolchain_jack-1f0061a3fa5a7281240db61802cb55c509e0ecc9.zip
toolchain_jack-1f0061a3fa5a7281240db61802cb55c509e0ecc9.tar.gz
toolchain_jack-1f0061a3fa5a7281240db61802cb55c509e0ecc9.tar.bz2
Add support for negate NAME in proguard files
The proguard flags allow negating name of classes with '!'. This is allowed for the name of a class, the name of annotations and the name of extended/implemented classes. Bug: 18994882 Change-Id: Ibc7f7970f50f93efcfdcf0058dac2993276e90d4
-rw-r--r--jack-tests/tests/com/android/jack/shrob/AbstractTest.java18
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/proguard.flags0041
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/proguard.flags0053
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-004.txt2
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-005.txt3
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-004.txt2
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-005.txt3
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-004.txt2
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-005.txt3
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-004.txt2
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-005.txt3
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-004.txt1
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-005.txt2
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-004.txt2
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-005.txt3
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/proguard.flags0024
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/refsFlattenPackage/expected-002.txt5
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithMapping/expected-002.txt5
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithoutMapping/expected-002.txt5
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/refsRepackageClasses/expected-002.txt5
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/refsSeed/expected-002.txt3
-rw-r--r--jack-tests/tests/com/android/jack/shrob/test018/refsShrinking/expected-002.txt5
-rw-r--r--jack/src/com/android/jack/shrob/proguard/GrammarActions.java14
-rw-r--r--jack/src/com/android/jack/shrob/proguard/Proguard.g13
-rw-r--r--jack/src/com/android/jack/shrob/spec/NameSpecification.java9
25 files changed, 109 insertions, 9 deletions
diff --git a/jack-tests/tests/com/android/jack/shrob/AbstractTest.java b/jack-tests/tests/com/android/jack/shrob/AbstractTest.java
index 07185c4..a6b0db3 100644
--- a/jack-tests/tests/com/android/jack/shrob/AbstractTest.java
+++ b/jack-tests/tests/com/android/jack/shrob/AbstractTest.java
@@ -228,6 +228,18 @@ public abstract class AbstractTest {
}
@Test
+ @Category(SlowTests.class)
+ public void test2_004() throws Exception {
+ runTest("002", "004", "");
+ }
+
+ @Test
+ @Category(SlowTests.class)
+ public void test2_005() throws Exception {
+ runTest("002", "005", "");
+ }
+
+ @Test
public void test4_001() throws Exception {
runTest("004", "001", "");
}
@@ -452,6 +464,12 @@ public abstract class AbstractTest {
}
@Test
+ @Category(SlowTests.class)
+ public void test18_002() throws Exception {
+ runTest("018", "002", "");
+ }
+
+ @Test
public void test19_001() throws Exception {
runTest("019", "001", "");
}
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/proguard.flags004 b/jack-tests/tests/com/android/jack/shrob/test002/proguard.flags004
new file mode 100644
index 0000000..9df9ae7
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/proguard.flags004
@@ -0,0 +1 @@
+-keep class !com.android.jack.shrob.test002.jack.A \ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/proguard.flags005 b/jack-tests/tests/com/android/jack/shrob/test002/proguard.flags005
new file mode 100644
index 0000000..7b4eb3e
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/proguard.flags005
@@ -0,0 +1,3 @@
+-keepclasseswithmembers class * {
+ @!*.NotOverride java.lang.String toString();
+} \ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-004.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-004.txt
new file mode 100644
index 0000000..401c6ee
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-004.txt
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test002.jack.B -> com.android.jack.shrob.test002.jack.B:
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-005.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-005.txt
new file mode 100644
index 0000000..8dfebe7
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsFlattenPackage/expected-005.txt
@@ -0,0 +1,3 @@
+com.android.jack.shrob.test002.jack.A -> com.android.jack.shrob.test002.jack.A:
+ void <init>() -> <init>
+ java.lang.String toString() -> toString
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-004.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-004.txt
new file mode 100644
index 0000000..401c6ee
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-004.txt
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test002.jack.B -> com.android.jack.shrob.test002.jack.B:
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-005.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-005.txt
new file mode 100644
index 0000000..8dfebe7
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithMapping/expected-005.txt
@@ -0,0 +1,3 @@
+com.android.jack.shrob.test002.jack.A -> com.android.jack.shrob.test002.jack.A:
+ void <init>() -> <init>
+ java.lang.String toString() -> toString
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-004.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-004.txt
new file mode 100644
index 0000000..401c6ee
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-004.txt
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test002.jack.B -> com.android.jack.shrob.test002.jack.B:
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-005.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-005.txt
new file mode 100644
index 0000000..8dfebe7
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsObfuscationWithoutMapping/expected-005.txt
@@ -0,0 +1,3 @@
+com.android.jack.shrob.test002.jack.A -> com.android.jack.shrob.test002.jack.A:
+ void <init>() -> <init>
+ java.lang.String toString() -> toString
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-004.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-004.txt
new file mode 100644
index 0000000..401c6ee
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-004.txt
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test002.jack.B -> com.android.jack.shrob.test002.jack.B:
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-005.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-005.txt
new file mode 100644
index 0000000..8dfebe7
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsRepackageClasses/expected-005.txt
@@ -0,0 +1,3 @@
+com.android.jack.shrob.test002.jack.A -> com.android.jack.shrob.test002.jack.A:
+ void <init>() -> <init>
+ java.lang.String toString() -> toString
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-004.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-004.txt
new file mode 100644
index 0000000..3c2dea2
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-004.txt
@@ -0,0 +1 @@
+com.android.jack.shrob.test002.jack.B
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-005.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-005.txt
new file mode 100644
index 0000000..8f6fee9
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsSeed/expected-005.txt
@@ -0,0 +1,2 @@
+com.android.jack.shrob.test002.jack.A
+com.android.jack.shrob.test002.jack.A: java.lang.String toString()
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-004.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-004.txt
new file mode 100644
index 0000000..6164464
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-004.txt
@@ -0,0 +1,2 @@
+Lcom/android/jack/shrob/test002/jack/B;:
+<init>()V
diff --git a/jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-005.txt b/jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-005.txt
new file mode 100644
index 0000000..0ebb156
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test002/refsShrinking/expected-005.txt
@@ -0,0 +1,3 @@
+Lcom/android/jack/shrob/test002/jack/A;:
+<init>()V
+toString()Ljava/lang/String;
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/proguard.flags002 b/jack-tests/tests/com/android/jack/shrob/test018/proguard.flags002
new file mode 100644
index 0000000..8a20627
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/proguard.flags002
@@ -0,0 +1,4 @@
+-keep class * extends !java.io.DoesNotExist {
+ static final long serialVersionUID;
+ java.lang.Object o;
+} \ No newline at end of file
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/refsFlattenPackage/expected-002.txt b/jack-tests/tests/com/android/jack/shrob/test018/refsFlattenPackage/expected-002.txt
new file mode 100644
index 0000000..fc808f3
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/refsFlattenPackage/expected-002.txt
@@ -0,0 +1,5 @@
+com.android.jack.shrob.test018.jack.B -> com.android.jack.shrob.test018.jack.B:
+ void <init>() -> <init>
+com.android.jack.shrob.test018.jack.A -> com.android.jack.shrob.test018.jack.A:
+ long serialVersionUID -> serialVersionUID
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithMapping/expected-002.txt b/jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithMapping/expected-002.txt
new file mode 100644
index 0000000..fc808f3
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithMapping/expected-002.txt
@@ -0,0 +1,5 @@
+com.android.jack.shrob.test018.jack.B -> com.android.jack.shrob.test018.jack.B:
+ void <init>() -> <init>
+com.android.jack.shrob.test018.jack.A -> com.android.jack.shrob.test018.jack.A:
+ long serialVersionUID -> serialVersionUID
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithoutMapping/expected-002.txt b/jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithoutMapping/expected-002.txt
new file mode 100644
index 0000000..fc808f3
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/refsObfuscationWithoutMapping/expected-002.txt
@@ -0,0 +1,5 @@
+com.android.jack.shrob.test018.jack.B -> com.android.jack.shrob.test018.jack.B:
+ void <init>() -> <init>
+com.android.jack.shrob.test018.jack.A -> com.android.jack.shrob.test018.jack.A:
+ long serialVersionUID -> serialVersionUID
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/refsRepackageClasses/expected-002.txt b/jack-tests/tests/com/android/jack/shrob/test018/refsRepackageClasses/expected-002.txt
new file mode 100644
index 0000000..df4ffca
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/refsRepackageClasses/expected-002.txt
@@ -0,0 +1,5 @@
+com.android.jack.shrob.test018.jack.A -> com.android.jack.shrob.test018.jack.A:
+ long serialVersionUID -> serialVersionUID
+ void <init>() -> <init>
+com.android.jack.shrob.test018.jack.B -> com.android.jack.shrob.test018.jack.B:
+ void <init>() -> <init>
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/refsSeed/expected-002.txt b/jack-tests/tests/com/android/jack/shrob/test018/refsSeed/expected-002.txt
new file mode 100644
index 0000000..0241b23
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/refsSeed/expected-002.txt
@@ -0,0 +1,3 @@
+com.android.jack.shrob.test018.jack.A
+com.android.jack.shrob.test018.jack.A: long serialVersionUID
+com.android.jack.shrob.test018.jack.B
diff --git a/jack-tests/tests/com/android/jack/shrob/test018/refsShrinking/expected-002.txt b/jack-tests/tests/com/android/jack/shrob/test018/refsShrinking/expected-002.txt
new file mode 100644
index 0000000..857ce62
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/shrob/test018/refsShrinking/expected-002.txt
@@ -0,0 +1,5 @@
+Lcom/android/jack/shrob/test018/jack/A;:
+J serialVersionUID
+<init>()V
+Lcom/android/jack/shrob/test018/jack/B;:
+<init>()V
diff --git a/jack/src/com/android/jack/shrob/proguard/GrammarActions.java b/jack/src/com/android/jack/shrob/proguard/GrammarActions.java
index ea42d1b..50fa5a6 100644
--- a/jack/src/com/android/jack/shrob/proguard/GrammarActions.java
+++ b/jack/src/com/android/jack/shrob/proguard/GrammarActions.java
@@ -232,19 +232,24 @@ public class GrammarActions {
@Nonnull
static InheritanceSpecification createInheritance(
- /*@Nonnull*/ String className, @CheckForNull AnnotationSpecification annotationType) {
+ /*@Nonnull*/ String className, boolean hasNameNegator,
+ @CheckForNull AnnotationSpecification annotationType) {
NameSpecification nameSpec = name(className);
+ nameSpec.setNegator(hasNameNegator);
return new InheritanceSpecification(nameSpec, annotationType);
}
@Nonnull
- static AnnotationSpecification annotation(/*@Nonnull*/ String annotationName) {
- return new AnnotationSpecification(name(annotationName));
+ static AnnotationSpecification annotation(/*@Nonnull*/ String annotationName,
+ boolean hasNameNegator) {
+ NameSpecification name = name(annotationName);
+ name.setNegator(hasNameNegator);
+ return new AnnotationSpecification(name);
}
@Nonnull
static ClassSpecification classSpec(/* @Nonnull */
- String name, @Nonnull ClassTypeSpecification classType, /* @Nonnull */
+ String name, boolean hasNameNegator, @Nonnull ClassTypeSpecification classType, /* @Nonnull */
AnnotationSpecification annotation, @Nonnull ModifierSpecification modifier) {
NameSpecification nameSpec;
if (name.equals("*")) {
@@ -252,6 +257,7 @@ public class GrammarActions {
} else {
nameSpec = name(name);
}
+ nameSpec.setNegator(hasNameNegator);
ClassSpecification classSpec = new ClassSpecification(nameSpec, classType, annotation);
classSpec.setModifier(modifier);
return classSpec;
diff --git a/jack/src/com/android/jack/shrob/proguard/Proguard.g b/jack/src/com/android/jack/shrob/proguard/Proguard.g
index a021b68..bf8d374 100644
--- a/jack/src/com/android/jack/shrob/proguard/Proguard.g
+++ b/jack/src/com/android/jack/shrob/proguard/Proguard.g
@@ -139,11 +139,12 @@ private nonEmptytFilter [FilterSpecification filter]
private classSpecification returns [ClassSpecification classSpec]
@init{
ModifierSpecification modifier = new ModifierSpecification();
+ boolean hasNameNegator = false;
}
:
(annotation)?
cType=classModifierAndType[modifier]
- NAME {classSpec = GrammarActions.classSpec($NAME.text, cType, $annotation.annotSpec, modifier);}
+ (NEGATOR {hasNameNegator = true;})? NAME {classSpec = GrammarActions.classSpec($NAME.text, hasNameNegator, cType, $annotation.annotSpec, modifier);}
(inheritanceSpec=inheritance {classSpec.setInheritance(inheritanceSpec);})?
members[classSpec]?
;
@@ -190,7 +191,10 @@ private member [ClassSpecification classSpec]
;
private annotation returns [AnnotationSpecification annotSpec]
- : '@' NAME {$annotSpec = GrammarActions.annotation($NAME.text);};
+@init{
+ boolean hasNameNegator = false;
+}
+ : '@' (NEGATOR {hasNameNegator = true;})? NAME {$annotSpec = GrammarActions.annotation($NAME.text, hasNameNegator);};
private modifiers returns [ModifierSpecification modifiers]
@init{
@@ -224,9 +228,12 @@ private modifier [ModifierSpecification modifiers]
;
private inheritance returns [InheritanceSpecification inheritanceSpec]
+@init{
+ boolean hasNameNegator = false;
+}
:
('extends' | 'implements')
- annotation? NAME {inheritanceSpec = GrammarActions.createInheritance($NAME.text, $annotation.annotSpec);};
+ annotation? (NEGATOR {hasNameNegator = true;})? NAME {inheritanceSpec = GrammarActions.createInheritance($NAME.text, hasNameNegator, $annotation.annotSpec);};
private arguments returns [String signature]
:
diff --git a/jack/src/com/android/jack/shrob/spec/NameSpecification.java b/jack/src/com/android/jack/shrob/spec/NameSpecification.java
index d33c464..e6293f9 100644
--- a/jack/src/com/android/jack/shrob/spec/NameSpecification.java
+++ b/jack/src/com/android/jack/shrob/spec/NameSpecification.java
@@ -24,7 +24,7 @@ import javax.annotation.Nonnull;
/**
* Class representing the name of a field, method or class in a {@code class specification}.
*/
-public class NameSpecification implements Specification<String> {
+public class NameSpecification extends SpecificationWithNegator<String> {
@Nonnull
private final Pattern name;
@@ -32,8 +32,13 @@ public class NameSpecification implements Specification<String> {
this.name = name;
}
+ public NameSpecification(@Nonnull Pattern name, boolean negator) {
+ this.name = name;
+ setNegator(negator);
+ }
+
@Override
- public boolean matches(@Nonnull String t) {
+ protected boolean matchesWithoutNegator(@Nonnull String t) {
Matcher matcher = name.matcher(t);
return matcher.find();
}