1 /* gnu.classpath.tools.gjdoc.SeeTagImpl
2 Copyright (C) 2001 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21 package gnu
.classpath
.tools
.gjdoc
;
23 import com
.sun
.javadoc
.*;
27 public class SeeTagImpl
extends AbstractTagImpl
implements SeeTag
{
29 protected String reference
;
30 private String referencedClassName
;
31 private String referencedMemberName
;
32 private ClassDoc referencedClass
;
33 private MemberDoc referencedMember
;
34 private PackageDoc referencedPackage
;
36 private ClassDocImpl contextClass
;
38 public SeeTagImpl(String text
, ClassDocImpl contextClass
) {
40 this.contextClass
=contextClass
;
43 public void resolve() {
49 if (text
.startsWith("<") || text
.startsWith("\"")) {
54 int labelNdx
=text
.indexOf(';');
60 for (int i
=0; i
<text
.length(); ++i
) {
61 if (" \t\r\n".indexOf(text
.charAt(i
)) >= 0) {
67 int openParenNdx
= text
.indexOf('(');
68 if (openParenNdx
>= 0 && openParenNdx
< labelNdx
) {
69 labelNdx
=text
.indexOf(')', openParenNdx
);
75 if (labelNdx
<0 || labelNdx
>=text
.length()) {
76 reference
=text
.trim();
80 reference
=text
.substring(0,labelNdx
).trim();
81 label
=text
.substring(labelNdx
).trim();
84 int mspecNdx
=reference
.indexOf('#');
85 String referencedFqName
;
87 referencedFqName
=reference
;
90 referencedFqName
=reference
.substring(0,mspecNdx
);
91 referencedMemberName
=reference
.substring(mspecNdx
+1);
94 // the following is in contradiction to the api docs, but
95 // conform to sun javadoc: return fully qualified classname
96 // with referencedClassName().
97 if (referencedFqName
.trim().length()>0) {
98 referencedClassName
=referencedFqName
;
99 if (contextClass
==null)
100 referencedClass
=Main
.getRootDoc().classNamed(referencedFqName
);
102 referencedClass
=contextClass
.findClass(referencedFqName
);
105 referencedClassName
="";
106 referencedClass
=contextClass
;
109 if (referencedClass
==null) {
110 referencedClass
= Main
.getRootDoc().classNamed("java.lang." + referencedFqName
);
113 if (referencedClass
!=null && !referencedClass
.isIncluded()) referencedClass
=null;
115 if (referencedClass
!=null) {
116 referencedPackage
=referencedClass
.containingPackage();
117 referencedClassName
=referencedClass
.qualifiedName();
119 if (referencedMemberName
!=null) {
121 if (referencedMemberName
.indexOf('(')<0) {
122 referencedMember
=((ClassDocImpl
)referencedClass
).findFieldRec(referencedMemberName
);
123 if (null == referencedMember
) {
124 MethodDoc
[] methods
= ((ClassDocImpl
)referencedClass
).methods();
125 for (int i
=0; i
<methods
.length
; ++i
) {
126 if (methods
[i
].name().equals(referencedMemberName
)) {
127 if (null == referencedMember
) {
128 referencedMember
= methods
[i
];
131 referencedClass
= null;
132 referencedMember
= null;
140 referencedClass
= referencedMember
.containingClass();
144 referencedMember
=((ClassDocImpl
)referencedClass
).findExecutableRec(referencedMemberName
);
145 if (referencedMember
==null) {
146 //System.err.println("cannot find member for '"+referencedMemberName+"'");
147 referencedClass
= null;
154 System.err.println("class not found: '"+referencedFqName + "' in context class " + contextClass + " in " + this);
159 public ClassDoc
referencedClass() {
160 return referencedClass
;
163 public String
referencedClassName() {
164 return referencedClassName
;
167 public MemberDoc
referencedMember() {
168 return referencedMember
;
171 public String
referencedMemberName() {
172 return referencedMemberName
;
175 public PackageDoc
referencedPackage() {
176 return referencedPackage
;
179 public String
label() {
183 public String
kind() {
187 public String
name() {
191 public Tag
[] firstSentenceTags() {
195 public Tag
[] inlineTags() {
196 return new Tag
[]{new TextTagImpl(referencedClassName
)};