Add allowSignatureAttributeRemoval to keep info

Bug: 170077516
Change-Id: Id141c5945a1a2785d4fdf4204e068b5742e4d6e5
diff --git a/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java b/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
index 624ee95..765fe31 100644
--- a/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
+++ b/src/main/java/com/android/tools/r8/shaking/GlobalKeepInfoConfiguration.java
@@ -13,4 +13,8 @@
   boolean isAccessModificationEnabled();
 
   boolean isRepackagingEnabled();
+
+  boolean isForceProguardCompatibilityEnabled();
+
+  boolean isKeepAttributesSignatureEnabled();
 }
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
index 4cb677f..7d75f05 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepInfo.java
@@ -82,6 +82,12 @@
     return allowAccessModification;
   }
 
+  public boolean isAllowSignatureAttributeRemovalAllowed(
+      GlobalKeepInfoConfiguration configuration) {
+    return !configuration.isKeepAttributesSignatureEnabled()
+        || !(isPinned() || configuration.isForceProguardCompatibilityEnabled());
+  }
+
   public abstract boolean isTop();
 
   public abstract boolean isBottom();
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index ae54b24..c1fe00e 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -550,6 +550,16 @@
         && (isShrinking() || isMinifying());
   }
 
+  @Override
+  public boolean isForceProguardCompatibilityEnabled() {
+    return forceProguardCompatibility;
+  }
+
+  @Override
+  public boolean isKeepAttributesSignatureEnabled() {
+    return proguardConfiguration.getKeepAttributes().signature;
+  }
+
   /**
    * If any non-static class merging is enabled, information about types referred to by instanceOf
    * and check cast instructions needs to be collected.