|  | // Copyright (c) 2020, 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.references.FieldReference; | 
|  |  | 
|  | public abstract class DexClassAndField extends DexClassAndMember<DexEncodedField, DexField> { | 
|  |  | 
|  | DexClassAndField(DexClass holder, DexEncodedField field) { | 
|  | super(holder, field); | 
|  | assert holder.isClasspathClass() == (this instanceof ClasspathField); | 
|  | assert holder.isLibraryClass() == (this instanceof LibraryField); | 
|  | assert holder.isProgramClass() == (this instanceof ProgramField); | 
|  | } | 
|  |  | 
|  | public static DexClassAndField create(DexClass holder, DexEncodedField field) { | 
|  | if (holder.isProgramClass()) { | 
|  | return new ProgramField(holder.asProgramClass(), field); | 
|  | } | 
|  | if (holder.isLibraryClass()) { | 
|  | return new LibraryField(holder.asLibraryClass(), field); | 
|  | } | 
|  | assert holder.isClasspathClass(); | 
|  | return new ClasspathField(holder.asClasspathClass(), field); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public FieldAccessFlags getAccessFlags() { | 
|  | return getDefinition().getAccessFlags(); | 
|  | } | 
|  |  | 
|  | public FieldReference getFieldReference() { | 
|  | return getReference().asFieldReference(); | 
|  | } | 
|  |  | 
|  | public DexType getType() { | 
|  | return getReference().getType(); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public boolean isField() { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | @Override | 
|  | public DexClassAndField asField() { | 
|  | return this; | 
|  | } | 
|  |  | 
|  | public boolean isClasspathField() { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public ClasspathField asClasspathField() { | 
|  | return null; | 
|  | } | 
|  |  | 
|  | public boolean isLibraryField() { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public LibraryField asLibraryField() { | 
|  | return null; | 
|  | } | 
|  |  | 
|  | public boolean isProgramField() { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public ProgramField asProgramField() { | 
|  | return null; | 
|  | } | 
|  | } |