diff options
Diffstat (limited to 'dx/src/com/android/dx/dex/file/ProtoIdItem.java')
-rw-r--r-- | dx/src/com/android/dx/dex/file/ProtoIdItem.java | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/dx/src/com/android/dx/dex/file/ProtoIdItem.java b/dx/src/com/android/dx/dex/file/ProtoIdItem.java deleted file mode 100644 index a144c304e..000000000 --- a/dx/src/com/android/dx/dex/file/ProtoIdItem.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.dx.dex.file; - -import com.android.dx.rop.cst.CstType; -import com.android.dx.rop.cst.CstUtf8; -import com.android.dx.rop.type.Prototype; -import com.android.dx.rop.type.StdTypeList; -import com.android.dx.rop.type.Type; -import com.android.dx.util.AnnotatedOutput; -import com.android.dx.util.Hex; - -/** - * Representation of a method prototype reference inside a Dalvik file. - */ -public final class ProtoIdItem extends IndexedItem { - /** size of instances when written out to a file, in bytes */ - public static final int WRITE_SIZE = 12; - - /** non-null; the wrapped prototype */ - private final Prototype prototype; - - /** non-null; the short-form of the prototype */ - private final CstUtf8 shortForm; - - /** - * null-ok; the list of parameter types or <code>null</code> if this - * prototype has no parameters - */ - private TypeListItem parameterTypes; - - /** - * Constructs an instance. - * - * @param prototype non-null; the constant for the prototype - */ - public ProtoIdItem(Prototype prototype) { - if (prototype == null) { - throw new NullPointerException("prototype == null"); - } - - this.prototype = prototype; - this.shortForm = makeShortForm(prototype); - - StdTypeList parameters = prototype.getParameterTypes(); - this.parameterTypes = (parameters.size() == 0) ? null - : new TypeListItem(parameters); - } - - /** - * Creates the short-form of the given prototype. - * - * @param prototype non-null; the prototype - * @return non-null; the short form - */ - private static CstUtf8 makeShortForm(Prototype prototype) { - StdTypeList parameters = prototype.getParameterTypes(); - int size = parameters.size(); - StringBuilder sb = new StringBuilder(size + 1); - - sb.append(shortFormCharFor(prototype.getReturnType())); - - for (int i = 0; i < size; i++) { - sb.append(shortFormCharFor(parameters.getType(i))); - } - - return new CstUtf8(sb.toString()); - } - - /** - * Gets the short-form character for the given type. - * - * @param type non-null; the type - * @return the corresponding short-form character - */ - private static char shortFormCharFor(Type type) { - char descriptorChar = type.getDescriptor().charAt(0); - - if (descriptorChar == '[') { - return 'L'; - } - - return descriptorChar; - } - - /** {@inheritDoc} */ - @Override - public ItemType itemType() { - return ItemType.TYPE_PROTO_ID_ITEM; - } - - /** {@inheritDoc} */ - @Override - public int writeSize() { - return WRITE_SIZE; - } - - /** {@inheritDoc} */ - @Override - public void addContents(DexFile file) { - StringIdsSection stringIds = file.getStringIds(); - TypeIdsSection typeIds = file.getTypeIds(); - MixedItemSection typeLists = file.getTypeLists(); - - typeIds.intern(prototype.getReturnType()); - stringIds.intern(shortForm); - - if (parameterTypes != null) { - parameterTypes = typeLists.intern(parameterTypes); - } - } - - /** {@inheritDoc} */ - @Override - public void writeTo(DexFile file, AnnotatedOutput out) { - int shortyIdx = file.getStringIds().indexOf(shortForm); - int returnIdx = file.getTypeIds().indexOf(prototype.getReturnType()); - int paramsOff = OffsettedItem.getAbsoluteOffsetOr0(parameterTypes); - - if (out.annotates()) { - StringBuilder sb = new StringBuilder(); - sb.append(prototype.getReturnType().toHuman()); - sb.append(" proto("); - - StdTypeList params = prototype.getParameterTypes(); - int size = params.size(); - - for (int i = 0; i < size; i++) { - if (i != 0) { - sb.append(", "); - } - sb.append(params.getType(i).toHuman()); - } - - sb.append(")"); - out.annotate(0, indexString() + ' ' + sb.toString()); - out.annotate(4, " shorty_idx: " + Hex.u4(shortyIdx) + - " // " + shortForm.toQuoted()); - out.annotate(4, " return_type_idx: " + Hex.u4(returnIdx) + - " // " + prototype.getReturnType().toHuman()); - out.annotate(4, " parameters_off: " + Hex.u4(paramsOff)); - } - - out.writeInt(shortyIdx); - out.writeInt(returnIdx); - out.writeInt(paramsOff); - } -} |