| // Copyright (c) 2019, 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.google.common.base.Equivalence; |
| import com.google.common.collect.Iterables; |
| import java.util.Objects; |
| |
| public class IfRuleClassPartEquivalence extends Equivalence<ProguardIfRule> { |
| |
| @Override |
| protected boolean doEquivalent(ProguardIfRule p1, ProguardIfRule p2) { |
| if (!p1.getClassAnnotations().equals(p2.getClassAnnotations())) { |
| return false; |
| } |
| if (!p1.getClassAccessFlags().equals(p2.getClassAccessFlags()) |
| || !p1.getNegatedClassAccessFlags().equals(p2.getNegatedClassAccessFlags())) { |
| return false; |
| } |
| if (p1.getClassType() != p2.getClassType() |
| || p1.getClassTypeNegated() != p2.getClassTypeNegated()) { |
| return false; |
| } |
| if (p1.getInheritanceIsExtends() != p2.getInheritanceIsExtends()) { |
| return false; |
| } |
| if (!p1.getInheritanceAnnotations().equals(p2.getInheritanceAnnotations())) { |
| return false; |
| } |
| if (!Objects.equals(p1.getInheritanceClassName(), p2.getInheritanceClassName())) { |
| return false; |
| } |
| if (!p1.getClassNames().equals(p2.getClassNames())) { |
| return false; |
| } |
| return true; |
| } |
| |
| @Override |
| protected int doHash(ProguardIfRule rule) { |
| int result = rule.getClassAnnotations().hashCode(); |
| result = 3 * result + rule.getClassAccessFlags().hashCode(); |
| result = 3 * result + rule.getNegatedClassAccessFlags().hashCode(); |
| result = 3 * result + (rule.getClassTypeNegated() ? 1 : 0); |
| result = 3 * result + (rule.getClassType() != null ? rule.getClassType().hashCode() : 0); |
| result = 3 * result + rule.getClassNames().hashCode(); |
| result = 3 * result + rule.getInheritanceAnnotations().hashCode(); |
| result = |
| 3 * result |
| + (rule.getInheritanceClassName() != null |
| ? rule.getInheritanceClassName().hashCode() |
| : 0); |
| result = 3 * result + (rule.getInheritanceIsImplements() ? 1 : 0); |
| result = 3 * result + Iterables.size(rule.subsequentRule.getWildcards()); |
| return result; |
| } |
| } |