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.rop;
18917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
19917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.rop.cst.CstNat;
20917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.rop.cst.CstType;
21917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulimport com.android.dexgen.rop.cst.CstUtf8;
22917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
23917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul/**
24917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * Standard implementation of {@link Member}, which directly stores
25917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul * all the associated data.
26917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul */
27917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgulpublic abstract class StdMember implements Member {
28917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@code non-null;} the defining class */
29917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    private final CstType definingClass;
30917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
31917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** access flags */
32917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    private final int accessFlags;
33917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
34917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@code non-null;} member name and type */
35917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    private final CstNat nat;
36917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
37917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@code non-null;} list of associated attributes */
38917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    private final AttributeList attributes;
39917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
40917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /**
41917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * Constructs an instance.
42917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     *
43917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param definingClass {@code non-null;} the defining class
44917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param accessFlags access flags
45917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param nat {@code non-null;} member name and type (descriptor)
46917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     * @param attributes {@code non-null;} list of associated attributes
47917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul     */
48917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public StdMember(CstType definingClass, int accessFlags, CstNat nat,
49917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul                     AttributeList attributes) {
50917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        if (definingClass == null) {
51917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            throw new NullPointerException("definingClass == null");
52917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        }
53917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
54917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        if (nat == null) {
55917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            throw new NullPointerException("nat == null");
56917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        }
57917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
58917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        if (attributes == null) {
59917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul            throw new NullPointerException("attributes == null");
60917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        }
61917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
62917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        this.definingClass = definingClass;
63917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        this.accessFlags = accessFlags;
64917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        this.nat = nat;
65917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        this.attributes = attributes;
66917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
67917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
68917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
69917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    @Override
70917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public String toString() {
71917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        StringBuffer sb = new StringBuffer(100);
72917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
73917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        sb.append(getClass().getName());
74917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        sb.append('{');
75917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        sb.append(nat.toHuman());
76917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        sb.append('}');
77917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
78917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return sb.toString();
79917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
80917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
81917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
82917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final CstType getDefiningClass() {
83917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return definingClass;
84917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
85917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
86917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
87917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final int getAccessFlags() {
88917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return accessFlags;
89917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
90917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
91917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
92917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final CstNat getNat() {
93917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return nat;
94917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
95917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
96917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
97917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final CstUtf8 getName() {
98917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return nat.getName();
99917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
100917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
101917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
102917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final CstUtf8 getDescriptor() {
103917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return nat.getDescriptor();
104917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
105917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul
106917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    /** {@inheritDoc} */
107917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    public final AttributeList getAttributes() {
108917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul        return attributes;
109917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul    }
110917cb222329ee8c035c3ffaf947e4265761b9367Piotr Gurgul}
111