blob: 63a111b9f95fbf27abe46af28138733773fdc37c [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;
public abstract class KeepItemReference {
public static KeepItemReference fromBindingReference(String bindingReference) {
return new BindingReference(bindingReference);
}
public static KeepItemReference fromItemPattern(KeepItemPattern itemPattern) {
return new SomeItem(itemPattern);
}
public boolean isBindingReference() {
return asBindingReference() != null;
}
public boolean isItemPattern() {
return asItemPattern() != null;
}
public String asBindingReference() {
return null;
}
public KeepItemPattern asItemPattern() {
return null;
}
public abstract KeepItemPattern lookupItemPattern(KeepBindings bindings);
private static class BindingReference extends KeepItemReference {
private final String bindingReference;
private BindingReference(String bindingReference) {
assert bindingReference != null;
this.bindingReference = bindingReference;
}
@Override
public String asBindingReference() {
return bindingReference;
}
@Override
public KeepItemPattern lookupItemPattern(KeepBindings bindings) {
return bindings.get(bindingReference).getItem();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
BindingReference that = (BindingReference) o;
return bindingReference.equals(that.bindingReference);
}
@Override
public int hashCode() {
return bindingReference.hashCode();
}
@Override
public String toString() {
return "reference='" + bindingReference + "'";
}
}
private static class SomeItem extends KeepItemReference {
private final KeepItemPattern itemPattern;
private SomeItem(KeepItemPattern itemPattern) {
assert itemPattern != null;
this.itemPattern = itemPattern;
}
@Override
public KeepItemPattern asItemPattern() {
return itemPattern;
}
@Override
public KeepItemPattern lookupItemPattern(KeepBindings bindings) {
return asItemPattern();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
SomeItem someItem = (SomeItem) o;
return itemPattern.equals(someItem.itemPattern);
}
@Override
public int hashCode() {
return itemPattern.hashCode();
}
@Override
public String toString() {
return itemPattern.toString();
}
}
}