blob: 1de1144070a0a0642b0bf44c9753d6fb46b503ef [file] [log] [blame]
// 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;
}
}