diff options
Diffstat (limited to 'src/main/java/com/android/tools/r8/shaking')
15 files changed, 234 insertions, 73 deletions
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java b/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java new file mode 100644 index 000000000..749ce835c --- /dev/null +++ b/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java @@ -0,0 +1,176 @@ +// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +package com.android.tools.r8.shaking; + +import com.android.tools.r8.dex.Constants; +import com.android.tools.r8.graph.AccessFlags; +import com.google.common.collect.ImmutableList; +import java.util.List; +import java.util.function.BooleanSupplier; + +public class ProguardAccessFlags { + + private int flags = 0; + + // Ordered list of flag names. Must be consistent with getPredicates. + private static final List<String> NAMES = ImmutableList.of( + "public", + "private", + "protected", + "static", + "final", + "abstract", + "volatile", + "transient", + "synchronized", + "native", + "strictfp" + ); + + // Get ordered list of flag predicates. Must be consistent with getNames. + private List<BooleanSupplier> getPredicates() { + return ImmutableList.of( + this::isPublic, + this::isPrivate, + this::isProtected, + this::isStatic, + this::isFinal, + this::isAbstract, + this::isVolatile, + this::isTransient, + this::isSynchronized, + this::isNative, + this::isStrict); + } + + private boolean containsAll(int other) { + return (flags & other) == flags; + } + + private boolean containsNone(int other) { + return (flags & other) == 0; + } + + public boolean containsAll(AccessFlags other) { + return containsAll(other.getAsCfAccessFlags()); + } + + public boolean containsNone(AccessFlags other) { + return containsNone(other.getAsCfAccessFlags()); + } + + public void setPublic() { + set(Constants.ACC_PUBLIC); + } + + public boolean isPublic() { + return isSet(Constants.ACC_PUBLIC); + } + + public void setPrivate() { + set(Constants.ACC_PRIVATE); + } + + public boolean isPrivate() { + return isSet(Constants.ACC_PRIVATE); + } + + public void setProtected() { + set(Constants.ACC_PROTECTED); + } + + public boolean isProtected() { + return isSet(Constants.ACC_PROTECTED); + } + + public void setStatic() { + set(Constants.ACC_STATIC); + } + + public boolean isStatic() { + return isSet(Constants.ACC_STATIC); + } + + public void setFinal() { + set(Constants.ACC_FINAL); + } + + public boolean isFinal() { + return isSet(Constants.ACC_FINAL); + } + + public void setAbstract() { + set(Constants.ACC_ABSTRACT); + } + + public boolean isAbstract() { + return isSet(Constants.ACC_ABSTRACT); + } + + public void setVolatile() { + set(Constants.ACC_VOLATILE); + } + + public boolean isVolatile() { + return isSet(Constants.ACC_VOLATILE); + } + + public void setTransient() { + set(Constants.ACC_TRANSIENT); + } + + public boolean isTransient() { + return isSet(Constants.ACC_TRANSIENT); + } + + public void setSynchronized() { + set(Constants.ACC_SYNCHRONIZED); + } + + public boolean isSynchronized() { + return isSet(Constants.ACC_SYNCHRONIZED); + } + + public void setNative() { + set(Constants.ACC_NATIVE); + } + + public boolean isNative() { + return isSet(Constants.ACC_NATIVE); + } + + public void setStrict() { + set(Constants.ACC_STRICT); + } + + public boolean isStrict() { + return isSet(Constants.ACC_STRICT); + } + + private boolean isSet(int flag) { + return (flags & flag) != 0; + } + + private void set(int flag) { + flags |= flag; + } + + @Override + public String toString() { + List<BooleanSupplier> predicates = getPredicates(); + StringBuilder builder = new StringBuilder(); + boolean space = false; + for (int i = 0; i < NAMES.size(); i++) { + if (predicates.get(i).getAsBoolean()) { + if (space) { + builder.append(' '); + } else { + space = true; + } + builder.append(NAMES.get(i)); + } + } + return builder.toString(); + } +} diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardAlwaysInlineRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardAlwaysInlineRule.java index 524afd200..ab8342df6 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardAlwaysInlineRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardAlwaysInlineRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardAlwaysInlineRule extends ProguardConfigurationRule { @@ -22,8 +21,8 @@ public class ProguardAlwaysInlineRule extends ProguardConfigurationRule { private ProguardAlwaysInlineRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardAssumeNoSideEffectRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardAssumeNoSideEffectRule.java index a01dd897b..736c7789b 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardAssumeNoSideEffectRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardAssumeNoSideEffectRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardAssumeNoSideEffectRule extends ProguardConfigurationRule { @@ -21,8 +20,8 @@ public class ProguardAssumeNoSideEffectRule extends ProguardConfigurationRule { private ProguardAssumeNoSideEffectRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardAssumeValuesRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardAssumeValuesRule.java index 94cf7588f..97cb5c383 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardAssumeValuesRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardAssumeValuesRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardAssumeValuesRule extends ProguardConfigurationRule { @@ -20,8 +19,8 @@ public class ProguardAssumeValuesRule extends ProguardConfigurationRule { private ProguardAssumeValuesRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardCheckDiscardRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardCheckDiscardRule.java index 7f69e18bc..da5bb2653 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardCheckDiscardRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardCheckDiscardRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardCheckDiscardRule extends ProguardConfigurationRule { @@ -22,8 +21,8 @@ public class ProguardCheckDiscardRule extends ProguardConfigurationRule { private ProguardCheckDiscardRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java b/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java index b8006d321..8e981a73e 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.utils.StringUtils; import java.util.Collections; import java.util.LinkedHashSet; @@ -15,8 +14,8 @@ public abstract class ProguardClassSpecification { public static class Builder { protected ProguardTypeMatcher classAnnotation; - protected DexAccessFlags classAccessFlags = new DexAccessFlags(0); - protected DexAccessFlags negatedClassAccessFlags = new DexAccessFlags(0); + protected ProguardAccessFlags classAccessFlags = new ProguardAccessFlags(); + protected ProguardAccessFlags negatedClassAccessFlags = new ProguardAccessFlags(); protected boolean classTypeNegated = false; protected ProguardClassType classType; protected ProguardClassNameList classNames; @@ -88,19 +87,19 @@ public abstract class ProguardClassSpecification { this.classTypeNegated = classTypeNegated; } - public DexAccessFlags getClassAccessFlags() { + public ProguardAccessFlags getClassAccessFlags() { return classAccessFlags; } - public void setClassAccessFlags(DexAccessFlags flags) { + public void setClassAccessFlags(ProguardAccessFlags flags) { classAccessFlags = flags; } - public DexAccessFlags getNegatedClassAccessFlags() { + public ProguardAccessFlags getNegatedClassAccessFlags() { return negatedClassAccessFlags; } - public void setNegatedClassAccessFlags(DexAccessFlags flags) { + public void setNegatedClassAccessFlags(ProguardAccessFlags flags) { negatedClassAccessFlags = flags; } @@ -119,8 +118,8 @@ public abstract class ProguardClassSpecification { } private final ProguardTypeMatcher classAnnotation; - private final DexAccessFlags classAccessFlags; - private final DexAccessFlags negatedClassAccessFlags; + private final ProguardAccessFlags classAccessFlags; + private final ProguardAccessFlags negatedClassAccessFlags; private final boolean classTypeNegated; private final ProguardClassType classType; private final ProguardClassNameList classNames; @@ -131,8 +130,8 @@ public abstract class ProguardClassSpecification { protected ProguardClassSpecification( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, @@ -184,11 +183,11 @@ public abstract class ProguardClassSpecification { return classTypeNegated; } - public DexAccessFlags getClassAccessFlags() { + public ProguardAccessFlags getClassAccessFlags() { return classAccessFlags; } - public DexAccessFlags getNegatedClassAccessFlags() { + public ProguardAccessFlags getNegatedClassAccessFlags() { return negatedClassAccessFlags; } diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java index d24a3578f..7997b4425 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java @@ -6,7 +6,6 @@ package com.android.tools.r8.shaking; import com.android.tools.r8.CompilationException; import com.android.tools.r8.DiagnosticsHandler; import com.android.tools.r8.dex.Constants; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.graph.DexField; import com.android.tools.r8.graph.DexItemFactory; import com.android.tools.r8.graph.DexString; @@ -561,9 +560,10 @@ public class ProguardConfigurationParser { assert builder.getClassAnnotation() == null; builder.setClassAnnotation(annotation); } else { - DexAccessFlags flags = - parseNegation() ? builder.getNegatedClassAccessFlags() : - builder.getClassAccessFlags(); + ProguardAccessFlags flags = + parseNegation() + ? builder.getNegatedClassAccessFlags() + : builder.getClassAccessFlags(); skipWhitespace(); if (acceptString("public")) { flags.setPublic(); @@ -636,7 +636,7 @@ public class ProguardConfigurationParser { boolean found = true; while (found && !eof()) { found = false; - DexAccessFlags flags = + ProguardAccessFlags flags = parseNegation() ? ruleBuilder.getNegatedAccessFlags() : ruleBuilder.getAccessFlags(); skipWhitespace(); switch (peekChar()) { diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java index 1021f6744..223307cfa 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java @@ -3,15 +3,14 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.utils.StringUtils; import java.util.Set; public abstract class ProguardConfigurationRule extends ProguardClassSpecification { ProguardConfigurationRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardIdentifierNameStringRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardIdentifierNameStringRule.java index 6cfd15449..e006bd444 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardIdentifierNameStringRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardIdentifierNameStringRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardIdentifierNameStringRule extends ProguardConfigurationRule { @@ -21,8 +20,8 @@ public class ProguardIdentifierNameStringRule extends ProguardConfigurationRule private ProguardIdentifierNameStringRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardKeepPackageNamesRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardKeepPackageNamesRule.java index f6db32686..c4731c625 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardKeepPackageNamesRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardKeepPackageNamesRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardKeepPackageNamesRule extends ProguardConfigurationRule { @@ -22,8 +21,8 @@ public class ProguardKeepPackageNamesRule extends ProguardConfigurationRule { private ProguardKeepPackageNamesRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardKeepRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardKeepRule.java index 59acd461d..7edceed23 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardKeepRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardKeepRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardKeepRule extends ProguardConfigurationRule { @@ -36,8 +35,8 @@ public class ProguardKeepRule extends ProguardConfigurationRule { private ProguardKeepRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java index 121641b69..5fb5cb2aa 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java @@ -4,7 +4,6 @@ package com.android.tools.r8.shaking; import com.android.tools.r8.errors.Unreachable; -import com.android.tools.r8.graph.DexAccessFlags; import com.android.tools.r8.graph.DexEncodedField; import com.android.tools.r8.graph.DexEncodedMethod; import com.android.tools.r8.graph.DexType; @@ -17,8 +16,8 @@ public class ProguardMemberRule { public static class Builder { private ProguardTypeMatcher annotation; - private DexAccessFlags accessFlags = new DexAccessFlags(0); - private DexAccessFlags negatedAccessFlags = new DexAccessFlags(0); + private ProguardAccessFlags accessFlags = new ProguardAccessFlags(); + private ProguardAccessFlags negatedAccessFlags = new ProguardAccessFlags(); private ProguardMemberType ruleType; private ProguardNameMatcher name; private ProguardTypeMatcher type; @@ -31,19 +30,19 @@ public class ProguardMemberRule { this.annotation = annotation; } - public DexAccessFlags getAccessFlags() { + public ProguardAccessFlags getAccessFlags() { return accessFlags; } - public void setAccessFlags(DexAccessFlags flags) { + public void setAccessFlags(ProguardAccessFlags flags) { accessFlags = flags; } - public DexAccessFlags getNegatedAccessFlags() { + public ProguardAccessFlags getNegatedAccessFlags() { return negatedAccessFlags; } - public void setNegatedAccessFlags(DexAccessFlags flags) { + public void setNegatedAccessFlags(ProguardAccessFlags flags) { negatedAccessFlags = flags; } @@ -83,8 +82,8 @@ public class ProguardMemberRule { } private final ProguardTypeMatcher annotation; - private final DexAccessFlags accessFlags; - private final DexAccessFlags negatedAccessFlags; + private final ProguardAccessFlags accessFlags; + private final ProguardAccessFlags negatedAccessFlags; private final ProguardMemberType ruleType; private final ProguardNameMatcher name; private final ProguardTypeMatcher type; @@ -93,8 +92,8 @@ public class ProguardMemberRule { private ProguardMemberRule( ProguardTypeMatcher annotation, - DexAccessFlags accessFlags, - DexAccessFlags negatedAccessFlags, + ProguardAccessFlags accessFlags, + ProguardAccessFlags negatedAccessFlags, ProguardMemberType ruleType, ProguardNameMatcher name, ProguardTypeMatcher type, @@ -121,11 +120,11 @@ public class ProguardMemberRule { return annotation; } - public DexAccessFlags getAccessFlags() { + public ProguardAccessFlags getAccessFlags() { return accessFlags; } - public DexAccessFlags getNegatedAccessFlags() { + public ProguardAccessFlags getNegatedAccessFlags() { return negatedAccessFlags; } @@ -162,8 +161,8 @@ public class ProguardMemberRule { case ALL: case ALL_FIELDS: // Access flags check. - if (!field.accessFlags.containsAllOf(getAccessFlags()) || - !field.accessFlags.containsNoneOf(getNegatedAccessFlags())) { + if (!getAccessFlags().containsAll(field.accessFlags) + || !getNegatedAccessFlags().containsNone(field.accessFlags)) { break; } // Annotations check. @@ -175,8 +174,8 @@ public class ProguardMemberRule { break; } // Access flags check. - if (!(field.accessFlags.containsAllOf(getAccessFlags()) && - field.accessFlags.containsNoneOf(getNegatedAccessFlags()))) { + if (!getAccessFlags().containsAll(field.accessFlags) + || !getNegatedAccessFlags().containsNone(field.accessFlags)) { break; } // Type check. @@ -206,8 +205,8 @@ public class ProguardMemberRule { // Fall through for all other methods. case ALL: // Access flags check. - if (!method.accessFlags.containsAllOf(getAccessFlags()) || - !method.accessFlags.containsNoneOf(getNegatedAccessFlags())) { + if (!getAccessFlags().containsAll(method.accessFlags) + || !getNegatedAccessFlags().containsNone(method.accessFlags)) { break; } // Annotations check. @@ -226,8 +225,8 @@ public class ProguardMemberRule { break; } // Access flags check. - if (!(method.accessFlags.containsAllOf(getAccessFlags()) && - method.accessFlags.containsNoneOf(getNegatedAccessFlags()))) { + if (!getAccessFlags().containsAll(method.accessFlags) + || !getNegatedAccessFlags().containsNone(method.accessFlags)) { break; } // Annotations check. diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardWhyAreYouKeepingRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardWhyAreYouKeepingRule.java index e029b77fe..ef839265d 100644 --- a/src/main/java/com/android/tools/r8/shaking/ProguardWhyAreYouKeepingRule.java +++ b/src/main/java/com/android/tools/r8/shaking/ProguardWhyAreYouKeepingRule.java @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. package com.android.tools.r8.shaking; -import com.android.tools.r8.graph.DexAccessFlags; import java.util.Set; public class ProguardWhyAreYouKeepingRule extends ProguardConfigurationRule { @@ -22,8 +21,8 @@ public class ProguardWhyAreYouKeepingRule extends ProguardConfigurationRule { private ProguardWhyAreYouKeepingRule( ProguardTypeMatcher classAnnotation, - DexAccessFlags classAccessFlags, - DexAccessFlags negatedClassAccessFlags, + ProguardAccessFlags classAccessFlags, + ProguardAccessFlags negatedClassAccessFlags, boolean classTypeNegated, ProguardClassType classType, ProguardClassNameList classNames, diff --git a/src/main/java/com/android/tools/r8/shaking/ReasonPrinter.java b/src/main/java/com/android/tools/r8/shaking/ReasonPrinter.java index 47893e563..604cf5109 100644 --- a/src/main/java/com/android/tools/r8/shaking/ReasonPrinter.java +++ b/src/main/java/com/android/tools/r8/shaking/ReasonPrinter.java @@ -112,11 +112,7 @@ public class ReasonPrinter { private void printReasonFor(DexEncodedField item) { KeepReason reason = liveFields.get(item); if (reason == null) { - if (item.accessFlags.isAbstract()) { - printOnlyAbstractShell(item, formatter); - } else { - printNoIdeaWhy(item.field, formatter); - } + printNoIdeaWhy(item.field, formatter); } else { formatter.startItem(item.field); formatter.pushIsLivePrefix(); diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java index 177493adc..bb8c08a08 100644 --- a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java +++ b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java @@ -117,10 +117,10 @@ public class RootSetBuilder { // Process a class with the keep rule. private void process(DexClass clazz, ProguardConfigurationRule rule) { - if (!clazz.accessFlags.containsAllOf(rule.getClassAccessFlags())) { + if (!rule.getClassAccessFlags().containsAll(clazz.accessFlags)) { return; } - if (!clazz.accessFlags.containsNoneOf(rule.getNegatedClassAccessFlags())) { + if (!rule.getNegatedClassAccessFlags().containsNone(clazz.accessFlags)) { return; } if (!containsAnnotation(rule.getClassAnnotation(), clazz.annotations)) { |