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
45920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String anchor() {
46920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (mSignature != null) {
47920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return mName + mSignature;
48920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
49920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return mName;
50920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
51920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
52920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
53920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String htmlPage() {
54920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mContainingClass.htmlPage() + "#" + anchor();
55920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
56920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
57920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public int compareTo(Object that) {
58920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return this.htmlPage().compareTo(((MemberInfo) that).htmlPage());
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String name() {
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mName;
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String signature() {
66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mSignature;
67920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
68920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
69920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ClassInfo realContainingClass() {
70920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mRealContainingClass;
71920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
72920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
73920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ClassInfo containingClass() {
74920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mContainingClass;
75920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
76920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isPublic() {
78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsPublic;
79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isProtected() {
82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsProtected;
83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isPackagePrivate() {
86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsPackagePrivate;
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
88920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
89920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isPrivate() {
90920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsPrivate;
91920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
92920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
93920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String scope() {
94920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (isPublic()) {
95920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "public";
96920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (isProtected()) {
97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "protected";
98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (isPackagePrivate()) {
99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "";
100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else if (isPrivate()) {
101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      return "private";
102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    } else {
103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      throw new RuntimeException("invalid scope for object " + this);
104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
106920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
107920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isStatic() {
108920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsStatic;
109920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
110920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
111920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isFinal() {
112920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsFinal;
113920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
114920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
115920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isSynthetic() {
116920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mIsSynthetic;
117920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
118920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  @Override
120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public ContainerInfo parent() {
121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mContainingClass;
122920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean checkLevel() {
125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return Doclava.checkLevel(mIsPublic, mIsProtected, mIsPackagePrivate, mIsPrivate, isHidden());
126920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String kind() {
129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mKind;
130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
132d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  public ArrayList<AnnotationInstanceInfo> annotations() {
133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mAnnotations;
134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  ClassInfo mContainingClass;
137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  ClassInfo mRealContainingClass;
138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mName;
139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mSignature;
140920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsPublic;
141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsProtected;
142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsPackagePrivate;
143920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsPrivate;
144920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsFinal;
145920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsStatic;
146920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  boolean mIsSynthetic;
147920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  String mKind;
148d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  private ArrayList<AnnotationInstanceInfo> mAnnotations;
149920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
150920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
151