blob: 09de861e4da65a5e114d2441cadb7d3f77b0735e [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.utils.TraversalContinuation;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public abstract class MethodCollectionBacking {
// Internal consistency.
abstract boolean verify();
// Collection methods.
abstract int size();
// Traversal methods.
abstract TraversalContinuation traverse(Function<DexEncodedMethod, TraversalContinuation> fn);
void forEachMethod(Consumer<DexEncodedMethod> fn) {
traverse(
method -> {
fn.accept(method);
return TraversalContinuation.CONTINUE;
});
}
abstract Iterable<DexEncodedMethod> methods();
abstract List<DexEncodedMethod> directMethods();
abstract List<DexEncodedMethod> virtualMethods();
// Lookup methods.
abstract DexEncodedMethod getMethod(DexMethod method);
abstract DexEncodedMethod getDirectMethod(DexMethod method);
abstract DexEncodedMethod getDirectMethod(Predicate<DexEncodedMethod> predicate);
abstract DexEncodedMethod getVirtualMethod(DexMethod method);
abstract DexEncodedMethod getVirtualMethod(Predicate<DexEncodedMethod> predicate);
// Amendment methods.
abstract void addMethod(DexEncodedMethod method);
abstract void addDirectMethod(DexEncodedMethod method);
abstract void addVirtualMethod(DexEncodedMethod method);
abstract void addDirectMethods(Collection<DexEncodedMethod> methods);
abstract void addVirtualMethods(Collection<DexEncodedMethod> methods);
// Removal methods.
abstract void removeDirectMethod(DexMethod method);
// Replacement/mutation methods.
abstract void setDirectMethods(DexEncodedMethod[] methods);
abstract void setVirtualMethods(DexEncodedMethod[] methods);
abstract void replaceMethods(Function<DexEncodedMethod, DexEncodedMethod> replacement);
abstract void replaceDirectMethods(Function<DexEncodedMethod, DexEncodedMethod> replacement);
abstract void replaceVirtualMethods(Function<DexEncodedMethod, DexEncodedMethod> replacement);
abstract DexEncodedMethod replaceDirectMethod(
DexMethod method, Function<DexEncodedMethod, DexEncodedMethod> replacement);
abstract DexEncodedMethod replaceDirectMethodWithVirtualMethod(
DexMethod method, Function<DexEncodedMethod, DexEncodedMethod> replacement);
abstract void virtualizeMethods(Set<DexEncodedMethod> privateInstanceMethods);
}