blob: 45cdc948003183fbe4fb677f134132f02248e532 [file] [log] [blame]
/*
* Copyright (C) 2007 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.dexgen.dex.file;
import com.android.dexgen.util.AnnotatedOutput;
/**
* Base class for any structurally-significant and (potentially)
* repeated piece of a Dalvik file.
*/
public abstract class Item {
/**
* Constructs an instance.
*/
public Item() {
// This space intentionally left blank.
}
/**
* Returns the item type for this instance.
*
* @return {@code non-null;} the item type
*/
public abstract ItemType itemType();
/**
* Returns the human name for the particular type of item this
* instance is.
*
* @return {@code non-null;} the name
*/
public final String typeName() {
return itemType().toHuman();
}
/**
* Gets the size of this instance when written, in bytes.
*
* @return {@code >= 0;} the write size
*/
public abstract int writeSize();
/**
* Populates a {@link DexFile} with items from within this instance.
* This will <i>not</i> add an item to the file for this instance itself
* (which should have been done by whatever refers to this instance).
*
* <p><b>Note:</b> Subclasses must override this to do something
* appropriate.</p>
*
* @param file {@code non-null;} the file to populate
*/
public abstract void addContents(DexFile file);
/**
* Writes the representation of this instance to the given data section,
* using the given {@link DexFile} to look things up as needed.
* If this instance keeps track of its offset, then this method will
* note the written offset and will also throw an exception if this
* instance has already been written.
*
* @param file {@code non-null;} the file to use for reference
* @param out {@code non-null;} where to write to
*/
public abstract void writeTo(DexFile file, AnnotatedOutput out);
}