blob: d426b96f04af49890d007ae60c0d102d09b317d6 [file] [log] [blame]
// Copyright (c) 2021, 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.tracereferences.internal;
import com.android.tools.r8.diagnostic.DefinitionContext;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedReference;
abstract class TracedReferenceBase<T, F> implements TracedReference<T, F> {
private final T reference;
private final DefinitionContext referencedFrom;
private final F accessFlags;
private final boolean missingDefinition;
TracedReferenceBase(
T reference, DefinitionContext referencedFrom, F accessFlags, boolean missingDefinition) {
assert accessFlags != null || missingDefinition;
this.reference = reference;
this.referencedFrom = referencedFrom;
this.accessFlags = accessFlags;
this.missingDefinition = missingDefinition;
}
@Override
public T getReference() {
return reference;
}
@Override
public DefinitionContext getReferencedFromContext() {
return referencedFrom;
}
@Override
public boolean isMissingDefinition() {
return missingDefinition;
}
@Override
public F getAccessFlags() {
return accessFlags;
}
@Override
public int hashCode() {
// Equality is only based on the reference.
return reference.hashCode();
}
@Override
public boolean equals(Object other) {
// Equality is only based on the reference.
if (!(other instanceof TracedReferenceBase)) {
return false;
}
return reference.equals(((TracedReferenceBase<?, ?>) other).reference);
}
}