1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/*
2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc.
3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License");
5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License.
6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at
7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0
9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software
11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS,
12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and
14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License.
15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */
16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava;
18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
19d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sappersteinimport java.util.ArrayList;
20d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein
21920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpublic abstract class MemberInfo extends DocInfo implements Comparable, Scoped {
22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public MemberInfo(String rawCommentText, String name, String signature,
23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      ClassInfo containingClass, ClassInfo realContainingClass, boolean isPublic,
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      boolean isProtected, boolean isPackagePrivate, boolean isPrivate, boolean isFinal,
25920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      boolean isStatic, boolean isSynthetic, String kind, SourcePositionInfo position,
26d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      ArrayList<AnnotationInstanceInfo> annotations) {
27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    super(rawCommentText, position);
28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mName = name;
29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mSignature = signature;
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mContainingClass = containingClass;
31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mRealContainingClass = realContainingClass;
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsPublic = isPublic;
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsProtected = isProtected;
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsPackagePrivate = isPackagePrivate;
35920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsPrivate = isPrivate;
36920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsFinal = isFinal;
37920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsStatic = isStatic;
38920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mIsSynthetic = isSynthetic;
39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mKind = kind;
40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mAnnotations = annotations;
41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
43920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public abstract boolean isExecutable();
44920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
45ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton  @Override
46ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton  public boolean isHidden() {
47ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton    if (mAnnotations != null) {
48ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton      for (AnnotationInstanceInfo info : mAnnotations) {
49ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton        if (Doclava.showAnnotations.contains(info.type().qualifiedName())) {
50ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton          return false;
51ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton        }
52ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton      }
53ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton    }
54ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton    return super.isHidden();
55ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton  }
56ca151a9bbea066b0efd0e423bcade8895a83db71Jeff Hamilton
57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String anchor() {
58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (mSignature != null) {
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return mName + mSignature;
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return mName;
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String htmlPage() {
66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mContainingClass.htmlPage() + "#" + anchor();
67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public int compareTo(Object that) {
70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return this.htmlPage().compareTo(((MemberInfo) that).htmlPage());
71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String name() {
74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mName;
75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String signature() {
78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mSignature;
79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ClassInfo realContainingClass() {
82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mRealContainingClass;
83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ClassInfo containingClass() {
86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mContainingClass;
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isPublic() {
90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsPublic;
91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isProtected() {
94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsProtected;
95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isPackagePrivate() {
98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsPackagePrivate;
99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isPrivate() {
102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsPrivate;
103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String scope() {
106920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (isPublic()) {
107920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "public";
108920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (isProtected()) {
109920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "protected";
110920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (isPackagePrivate()) {
111920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "";
112920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (isPrivate()) {
113920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "private";
114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      throw new RuntimeException("invalid scope for object " + this);
116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isStatic() {
120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsStatic;
121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isFinal() {
124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsFinal;
125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isSynthetic() {
128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsSynthetic;
129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  @Override
132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ContainerInfo parent() {
133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mContainingClass;
134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean checkLevel() {
137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return Doclava.checkLevel(mIsPublic, mIsProtected, mIsPackagePrivate, mIsPrivate, isHidden());
138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String kind() {
141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mKind;
142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
144d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  public ArrayList<AnnotationInstanceInfo> annotations() {
145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mAnnotations;
146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
148920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  ClassInfo mContainingClass;
149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  ClassInfo mRealContainingClass;
150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mName;
151920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mSignature;
152920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsPublic;
153920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsProtected;
154920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsPackagePrivate;
155920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsPrivate;
156920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsFinal;
157920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsStatic;
158920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsSynthetic;
159920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mKind;
160d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  private ArrayList<AnnotationInstanceInfo> mAnnotations;
161920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
162920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
163