|  | // Copyright (c) 2023, 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.graph; | 
|  |  | 
|  | import com.android.tools.r8.utils.structural.Equatable; | 
|  | import com.android.tools.r8.utils.structural.StructuralItem; | 
|  | import com.android.tools.r8.utils.structural.StructuralMapping; | 
|  | import com.android.tools.r8.utils.structural.StructuralSpecification; | 
|  | import java.util.Objects; | 
|  |  | 
|  | public class DexFieldSignature implements StructuralItem<DexFieldSignature> { | 
|  |  | 
|  | private final DexString name; | 
|  | private final DexType type; | 
|  |  | 
|  | private static void specify(StructuralSpecification<DexFieldSignature, ?> spec) { | 
|  | spec.withItem(DexFieldSignature::getName).withItem(DexFieldSignature::getType); | 
|  | } | 
|  |  | 
|  | public static DexFieldSignature fromField(DexField field) { | 
|  | return new DexFieldSignature(field.getName(), field.getType()); | 
|  | } | 
|  |  | 
|  | private DexFieldSignature(DexString name, DexType type) { | 
|  | this.name = name; | 
|  | this.type = type; | 
|  | } | 
|  |  | 
|  | public DexString getName() { | 
|  | return name; | 
|  | } | 
|  |  | 
|  | public DexType getType() { | 
|  | return type; | 
|  | } | 
|  |  | 
|  | public boolean match(DexField field) { | 
|  | return getName().equals(field.getName()) && getType().equals(field.getType()); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public DexFieldSignature self() { | 
|  | return this; | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public StructuralMapping<DexFieldSignature> getStructuralMapping() { | 
|  | return DexFieldSignature::specify; | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public boolean isEqualTo(DexFieldSignature other) { | 
|  | return getName() == other.getName() && getType() == other.getType(); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public boolean equals(Object o) { | 
|  | return Equatable.equalsImpl(this, o); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public int hashCode() { | 
|  | return Objects.hash(name, type); | 
|  | } | 
|  | } |