blob: aec6be022190ff8cd6482bddc4c8871f592be6eb [file] [log] [blame]
// 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.dex.IndexedItemCollection;
import com.android.tools.r8.kotlin.KotlinFieldLevelInfo;
public class ProgramField extends DexClassAndField
implements ProgramMember<DexEncodedField, DexField> {
public ProgramField(DexProgramClass holder, DexEncodedField field) {
super(holder, field);
}
public void collectIndexedItems(IndexedItemCollection indexedItems) {
getReference().collectIndexedItems(indexedItems);
DexEncodedField definition = getDefinition();
definition.annotations().collectIndexedItems(indexedItems);
if (definition.isStatic() && definition.hasExplicitStaticValue()) {
definition.getStaticValue().collectIndexedItems(indexedItems);
}
}
public boolean isStructurallyEqualTo(ProgramField other) {
return getDefinition() == other.getDefinition() && getHolder() == other.getHolder();
}
@Override
public ProgramField getContext() {
return this;
}
@Override
public boolean isProgramField() {
return true;
}
@Override
public ProgramField asProgramField() {
return this;
}
@Override
public boolean isProgramMember() {
return true;
}
@Override
public ProgramField asProgramMember() {
return this;
}
@Override
public DexProgramClass getHolder() {
DexClass holder = super.getHolder();
assert holder.isProgramClass();
return holder.asProgramClass();
}
@Override
public KotlinFieldLevelInfo getKotlinInfo() {
return getDefinition().getKotlinInfo();
}
}