| // Copyright (c) 2016, 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.dex; |
| |
| import com.android.tools.r8.graph.DexCallSite; |
| import com.android.tools.r8.graph.DexField; |
| import com.android.tools.r8.graph.DexItem; |
| import com.android.tools.r8.graph.DexMethod; |
| import com.android.tools.r8.graph.DexMethodHandle; |
| import com.android.tools.r8.graph.DexProgramClass; |
| import com.android.tools.r8.graph.DexProto; |
| import com.android.tools.r8.graph.DexString; |
| import com.android.tools.r8.graph.DexType; |
| import com.android.tools.r8.graph.GraphLens; |
| import com.android.tools.r8.graph.IndexedDexItem; |
| import com.android.tools.r8.graph.InitClassLens; |
| |
| /** |
| * Common interface for constant pools. |
| * |
| * <p>This is semantically a wrapper around a number of sets for all subtypes of |
| * {@link IndexedDexItem}. <b>Items should not be added directly to this collection.</b> Instead see |
| * {@link DexItem#collectIndexedItems}. |
| * |
| * <p>Note that the various add methods of this class are not transitive, i.e., they do not add |
| * components of the {@link IndexedDexItem} itself. Use a call to |
| * {@link IndexedDexItem#collectIndexedItems} for this. |
| */ |
| public interface IndexedItemCollection { |
| |
| /** |
| * Adds the given class to the collection. |
| * |
| * <p>Does not add the class' components. |
| * |
| * @return true if the class was not in the pool before. |
| */ |
| boolean addClass(DexProgramClass dexProgramClass); |
| |
| /** |
| * Adds the given field to the collection. |
| * |
| * <p>Does not add the field's components. |
| * |
| * @return true if the field was not in the pool before. |
| */ |
| boolean addField(DexField field); |
| |
| /** |
| * Adds the given method to the collection. |
| * |
| * <p>Does not add the method's components. |
| * |
| * @return true if the method was not in the pool before. |
| */ |
| boolean addMethod(DexMethod method); |
| |
| /** |
| * Adds the given string to the collection. |
| * |
| * <p>Does not add the string's components. |
| * |
| * @return true if the string was not in the pool before. |
| */ |
| boolean addString(DexString string); |
| |
| /** |
| * Adds the given proto to the collection. |
| * |
| * <p>Does not add the proto's components. |
| * |
| * @return true if the proto was not in the pool before. |
| */ |
| boolean addProto(DexProto proto); |
| |
| /** |
| * Adds the given type to the collection. |
| * |
| * <p>Does not add the type's components. |
| * |
| * @return true if the type was not in the pool before. |
| */ |
| boolean addType(DexType type); |
| |
| /** |
| * Adds the given call site to the collection. |
| * |
| * <p>Does not add the call site's components. |
| * |
| * @return true if the call site was not in the pool before. |
| */ |
| boolean addCallSite(DexCallSite callSite); |
| |
| /** |
| * Adds the given method handle to the collection. |
| * |
| * <p>Does not add the method handle site's components. |
| * |
| * @return true if the method handle was not in the pool before. |
| */ |
| boolean addMethodHandle(DexMethodHandle methodHandle); |
| |
| default GraphLens getGraphLens() { |
| return GraphLens.getIdentityLens(); |
| } |
| |
| default InitClassLens getInitClassLens() { |
| return InitClassLens.getThrowingInstance(); |
| } |
| |
| default DexString getRenamedName(DexMethod method) { |
| return method.name; |
| } |
| |
| default DexString getRenamedName(DexField field) { |
| return field.name; |
| } |
| |
| default DexString getRenamedDescriptor(DexType type) { |
| return type.descriptor; |
| } |
| } |