blob: de4b742498dfe116c83ef3aec0dfd432604126d2 [file] [log] [blame]
// Copyright (c) 2022, 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.keepanno.ast;
/**
* A keep condition is the content of an item in the set of preconditions.
*
* <p>It can be trivially true, or represent some program item pattern that must be present in the
* program residual. When an condition is denoted by a program item, the condition also specifies
* the extent of the item for which it is predicated on. The extent is given by a "usage kind" that
* can be either its "symbolic reference" or its "actual use".
*/
public final class KeepCondition {
public static Builder builder() {
return new Builder();
}
public static class Builder {
private KeepItemReference item;
private Builder() {}
public Builder setItemReference(KeepItemReference item) {
this.item = item;
return this;
}
public Builder setItemPattern(KeepItemPattern itemPattern) {
return setItemReference(KeepItemReference.fromItemPattern(itemPattern));
}
public KeepCondition build() {
return new KeepCondition(item);
}
}
private final KeepItemReference item;
private KeepCondition(KeepItemReference item) {
assert item != null;
this.item = item;
}
public KeepItemReference getItem() {
return item;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
KeepCondition that = (KeepCondition) o;
return item.equals(that.item);
}
@Override
public int hashCode() {
return item.hashCode();
}
@Override
public String toString() {
return item.toString();
}
}