blob: cce38fd0d5c936c16ddeacea69109aa699e5e597 [file] [log] [blame]
// 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.TraversalContinuation;
import java.util.Collection;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
public abstract class FieldCollectionBacking {
// Internal consistency.
static boolean belongsInStaticPool(DexEncodedField field) {
return field.isStatic();
}
static boolean belongsInInstancePool(DexEncodedField field) {
return !belongsInStaticPool(field);
}
abstract boolean verify();
// Traversal methods.
abstract <BT, CT> TraversalContinuation<BT, CT> traverse(
DexClass holder, Function<? super DexClassAndField, TraversalContinuation<BT, CT>> fn);
abstract <BT, CT> TraversalContinuation<BT, CT> traverse(
DexClass holder,
BiFunction<? super DexClassAndField, ? super CT, TraversalContinuation<BT, CT>> fn,
CT initialValue);
abstract <BT, CT> TraversalContinuation<BT, CT> traverseInstanceFields(
DexClass holder, Function<? super DexClassAndField, TraversalContinuation<BT, CT>> fn);
abstract <BT, CT> TraversalContinuation<BT, CT> traverseInstanceFields(
DexClass holder,
BiFunction<? super DexClassAndField, ? super CT, TraversalContinuation<BT, CT>> fn,
CT initialValue);
abstract <BT, CT> TraversalContinuation<BT, CT> traverseStaticFields(
DexClass holder, Function<? super DexClassAndField, TraversalContinuation<BT, CT>> fn);
abstract <BT, CT> TraversalContinuation<BT, CT> traverseStaticFields(
DexClass holder,
BiFunction<? super DexClassAndField, ? super CT, TraversalContinuation<BT, CT>> fn,
CT initialValue);
// Collection methods.
abstract int size();
abstract Iterable<DexEncodedField> fields(Predicate<? super DexEncodedField> predicate);
// Specialized to static fields.
abstract int numberOfStaticFields();
abstract List<DexEncodedField> staticFieldsAsList();
abstract void appendStaticField(DexEncodedField field);
abstract void appendStaticFields(Collection<DexEncodedField> fields);
abstract void clearStaticFields();
abstract void setStaticFields(DexEncodedField[] fields);
// Specialized to instance fields.
abstract int numberOfInstanceFields();
abstract List<DexEncodedField> instanceFieldsAsList();
abstract void appendInstanceField(DexEncodedField field);
abstract void appendInstanceFields(Collection<DexEncodedField> fields);
abstract void clearInstanceFields();
abstract void setInstanceFields(DexEncodedField[] fields);
abstract DexEncodedField lookupField(DexField field);
abstract DexEncodedField lookupStaticField(DexField field);
abstract DexEncodedField lookupInstanceField(DexField field);
abstract void replaceFields(Function<DexEncodedField, DexEncodedField> replacement);
}