blob: 527565fa53a598c86dc06d0307974d1ea8ca6c81 [file] [log] [blame]
// 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;
}
}