libjava/ChangeLog:
[official-gcc.git] / libjava / classpath / tools / gnu / classpath / tools / gjdoc / SeeTagImpl.java
blobf126c21aec38482be32000b93109c046fa03fef9
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)
9 any later version.
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
19 02111-1307 USA. */
21 package gnu.classpath.tools.gjdoc;
23 import com.sun.javadoc.*;
24 import java.util.*;
25 import java.text.*;
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;
35 private String label;
36 private ClassDocImpl contextClass;
38 public SeeTagImpl(String text, ClassDocImpl contextClass) {
39 super(text);
40 this.contextClass=contextClass;
43 public void resolve() {
45 super.resolve();
47 text = text.trim();
49 if (text.startsWith("<") || text.startsWith("\"")) {
50 label = text;
51 return;
54 int labelNdx=text.indexOf(';');
55 if (labelNdx>=0) {
56 label="";
57 return;
60 for (int i=0; i<text.length(); ++i) {
61 if (" \t\r\n".indexOf(text.charAt(i)) >= 0) {
62 labelNdx = i;
63 break;
67 int openParenNdx = text.indexOf('(');
68 if (openParenNdx >= 0 && openParenNdx < labelNdx) {
69 labelNdx=text.indexOf(')', openParenNdx);
70 if (labelNdx >= 0) {
71 ++ labelNdx;
75 if (labelNdx<0 || labelNdx>=text.length()) {
76 reference=text.trim();
77 label="";
79 else {
80 reference=text.substring(0,labelNdx).trim();
81 label=text.substring(labelNdx).trim();
84 int mspecNdx=reference.indexOf('#');
85 String referencedFqName;
86 if (mspecNdx<0) {
87 referencedFqName=reference;
89 else {
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);
101 else
102 referencedClass=contextClass.findClass(referencedFqName);
104 else {
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];
130 else {
131 referencedClass = null;
132 referencedMember = null;
133 //print warning here
134 break;
139 else {
140 referencedClass = referencedMember.containingClass();
143 else {
144 referencedMember=((ClassDocImpl)referencedClass).findExecutableRec(referencedMemberName);
145 if (referencedMember==null) {
146 //System.err.println("cannot find member for '"+referencedMemberName+"'");
147 referencedClass = null;
153 else {
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() {
180 return label;
183 public String kind() {
184 return "@see";
187 public String name() {
188 return "@see";
191 public Tag[] firstSentenceTags() {
192 return inlineTags();
195 public Tag[] inlineTags() {
196 return new Tag[]{new TextTagImpl(referencedClassName)};