| // 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 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); | |
| return result; | |
| } | |
| } |