1917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/*
2917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Copyright (C) 2007 The Android Open Source Project
3917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *
4917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Licensed under the Apache License, Version 2.0 (the "License");
5917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * you may not use this file except in compliance with the License.
6917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * You may obtain a copy of the License at
7917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *
8917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *      http://www.apache.org/licenses/LICENSE-2.0
9917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul *
10917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Unless required by applicable law or agreed to in writing, software
11917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * distributed under the License is distributed on an "AS IS" BASIS,
12917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * See the License for the specific language governing permissions and
14917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * limitations under the License.
15917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */
16917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
17917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpackage com.android.dexgen.dex.file;
18917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
19917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.rop.cst.CstUtf8;
20917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.util.AnnotatedOutput;
21917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.util.ToHuman;
22917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
23917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport java.io.PrintWriter;
24917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
25917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/**
26917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Representation of a member (field or method) of a class, for the
27917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * purposes of encoding it inside a {@link ClassDataItem}.
28917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */
29917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpublic abstract class EncodedMember implements ToHuman {
30917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** access flags */
31917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    private final int accessFlags;
32917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
33917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
34917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Constructs an instance.
35917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
36917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param accessFlags access flags for the member
37917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
38917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public EncodedMember(int accessFlags) {
39917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        this.accessFlags = accessFlags;
40917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
41917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
42917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
43917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Gets the access flags.
44917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
45917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @return the access flags
46917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
47917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final int getAccessFlags() {
48917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return accessFlags;
49917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
50917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
51917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
52917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Gets the name.
53917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
54917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @return {@code non-null;} the name
55917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
56917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public abstract CstUtf8 getName();
57917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
58917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
59917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Does a human-friendly dump of this instance.
60917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
61917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param out {@code non-null;} where to dump
62917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param verbose whether to be verbose with the output
63917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
64917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public abstract void debugPrint(PrintWriter out, boolean verbose);
65917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
66917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
67917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Populates a {@link DexFile} with items from within this instance.
68917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
69917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param file {@code non-null;} the file to populate
70917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
71917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public abstract void addContents(DexFile file);
72917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
73917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
74917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Encodes this instance to the given output.
75917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
76917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param file {@code non-null;} file this instance is part of
77917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param out {@code non-null;} where to write to
78917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param lastIndex {@code >= 0;} the previous member index value encoded, or
79917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * {@code 0} if this is the first element to encode
80917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param dumpSeq {@code >= 0;} sequence number of this instance for
81917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * annotation purposes
82917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @return {@code >= 0;} the member index value that was encoded
83917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
84917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public abstract int encode(DexFile file, AnnotatedOutput out,
85917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            int lastIndex, int dumpSeq);
86917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul}
87