You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by le...@apache.org on 2005/12/04 10:06:04 UTC
svn commit: r353837 -
/jakarta/commons/proper/attributes/trunk/compiler/src/java/org/apache/commons/attributes/javadoc/CATaglet.java
Author: leosutic
Date: Sun Dec 4 01:05:52 2005
New Revision: 353837
URL: http://svn.apache.org/viewcvs?rev=353837&view=rev
Log:
Fixes bug 37691: CATaglet don't work with Javadoc tool of JDK1.5
Javadoc can not be generated with JDK1.5 because in 1.5
there is a new taglet interface
(com.sun.tools.doclets.internal.toolkit.taglets). I
wrote a wrapper that if the legacy taglet class
(com.sun.tools.doclets.internal.toolkit.taglets.LegacyTaglet)
exists, CATaglets will be wrapped. See modified CATaglet
class that I will attach.
Modified:
jakarta/commons/proper/attributes/trunk/compiler/src/java/org/apache/commons/attributes/javadoc/CATaglet.java
Modified: jakarta/commons/proper/attributes/trunk/compiler/src/java/org/apache/commons/attributes/javadoc/CATaglet.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/attributes/trunk/compiler/src/java/org/apache/commons/attributes/javadoc/CATaglet.java?rev=353837&r1=353836&r2=353837&view=diff
==============================================================================
--- jakarta/commons/proper/attributes/trunk/compiler/src/java/org/apache/commons/attributes/javadoc/CATaglet.java (original)
+++ jakarta/commons/proper/attributes/trunk/compiler/src/java/org/apache/commons/attributes/javadoc/CATaglet.java Sun Dec 4 01:05:52 2005
@@ -15,249 +15,313 @@
*/
package org.apache.commons.attributes.javadoc;
-import com.sun.tools.doclets.Taglet;
-import com.sun.javadoc.*;
-import java.io.File;
import java.io.BufferedReader;
+import java.io.File;
import java.io.FileReader;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.TreeMap;
-import java.util.Set;
+import java.lang.reflect.Constructor;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.Collection;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.StringTokenizer;
import java.util.List;
-import java.util.ArrayList;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+import com.sun.javadoc.Tag;
+import com.sun.tools.doclets.Taglet;
public class CATaglet implements Taglet {
-
+
public static class AttributeTaglet extends CATaglet {
-
+
private final String name;
private final CATaglet caTaglet;
-
- public AttributeTaglet (String name, CATaglet caTaglet) {
+
+ public AttributeTaglet(String name, CATaglet caTaglet) {
this.name = name;
this.caTaglet = caTaglet;
}
-
+
public String getName() {
return name;
}
-
+
public String toString(Tag[] tags) {
- caTaglet.addTags (tags);
+ caTaglet.addTags(tags);
return null;
}
}
+
+ /**
+ * Name of custom tag.
+ */
+ public static final String NAME
+ = "org.apache.commons.attributes.CATaglet";
- private List tagList = new ArrayList ();
- private static final String NAME = "org.apache.commons.attributes.CATaglet";
+ /**
+ * Fully qualified class name of the legacy taglet class of JDK1.5.
+ */
+ public static final String LEGACY_TAGLET_CLASS_NAME
+ = "com.sun.tools.doclets.internal.toolkit.taglets.LegacyTaglet";
+
+ /**
+ * List of tags.
+ */
+ private List tagList = new ArrayList();
- public CATaglet () {
- }
+ /**
+ * Jdk1.5 legacy taglet class constructor.
+ */
+ private Constructor legacyTagletClassConstructor = null;
- public void addTags (Tag[] tags) {
+ /**
+ * Default constructor.
+ */
+ public CATaglet() {
+ try {
+ Class legacyTagletClass = Class.forName(LEGACY_TAGLET_CLASS_NAME);
+ legacyTagletClassConstructor
+ = legacyTagletClass.getConstructor(new Class[] {Taglet.class});
+ //System.err.println("CATaglet will be wrapped.");
+ } catch (Exception e) {
+ /**
+ * Legacy taglet class not available. Seams that JDK1.4 is used to
+ * generate javadoc. No wrapping of taglets necessary.
+ */
+
+ //System.err.println("CATaglet will not be wrapped. See stack trace.");
+ //e.printStackTrace();
+ }
+ }
+
+ public void addTags(Tag[] tags) {
for (int i = 0; i < tags.length; i++) {
- tagList.add (tags[i].name() + " " + tags[i].text ());
+ tagList.add(tags[i].name() + " " + tags[i].text());
}
}
-
+
/**
* Return the name of this custom tag.
*/
public String getName() {
return NAME;
}
-
+
public boolean inField() {
return true;
}
-
+
public boolean inConstructor() {
return true;
}
-
+
public boolean inMethod() {
return true;
}
-
+
public boolean inOverview() {
return false;
}
-
+
public boolean inPackage() {
return false;
}
-
+
public boolean inType() {
return true;
}
-
+
public boolean isInlineTag() {
return false;
}
-
+
public static void register(Map tagletMap) {
- CATaglet caTaglet = new CATaglet ();
- caTaglet.registerTags (tagletMap);
+ CATaglet caTaglet = new CATaglet();
+ caTaglet.registerTags(tagletMap);
}
-
- public void registerTags (Map tagletMap) {
- Set tagNames = new HashSet ();
-
- StringTokenizer tok = new StringTokenizer (System.getProperty ("org.apache.commons.attributes.javadoc.CATaglet.sources"), File.pathSeparator);
- while (tok.hasMoreTokens ()) {
+
+ public void registerTags(Map tagletMap) {
+ Set tagNames = new HashSet();
+
+ StringTokenizer tok = new StringTokenizer(
+ System.getProperty(
+ "org.apache.commons.attributes.javadoc.CATaglet.sources"),
+ File.pathSeparator);
+ while (tok.hasMoreTokens()) {
try {
- scanFiles (new File (tok.nextToken ()), tagNames);
+ scanFiles(new File(tok.nextToken()), tagNames);
} catch (Exception e) {
- System.err.println ("Caught " + e.toString () + " trying to scan Java sources. Javadoc of attributes may be incomplete.");
+ System.err.println("Caught " + e.toString() + " trying to scan "
+ + "Java sources. Javadoc of attributes may be incomplete.");
}
}
- if (tagNames.size () > 0) {
- Iterator iter = tagNames.iterator ();
- while (iter.hasNext ()) {
- String name = (String) iter.next ();
+ if (tagNames.size() > 0) {
+ Iterator iter = tagNames.iterator();
+ while (iter.hasNext()) {
+ String name = (String) iter.next();
register(name, tagletMap);
}
- tagletMap.put (NAME, this);
+
+ if (tagletMap.containsKey(NAME)) {
+ tagletMap.remove(NAME);
+ }
+ tagletMap.put(NAME, wrapTaglet(this));
}
}
-
- private void scanFiles (File directory, Collection tagNames) throws Exception {
- File[] files = directory.listFiles ();
+
+ private void scanFiles(File directory, Collection tagNames)
+ throws Exception {
+ File[] files = directory.listFiles();
if (files == null) {
return;
}
-
+
for (int i = 0; i < files.length; i++) {
- if (files[i].isDirectory ()) {
- scanFiles (files[i], tagNames);
+ if (files[i].isDirectory()) {
+ scanFiles(files[i], tagNames);
} else {
- scanFile (files[i], tagNames);
+ scanFile(files[i], tagNames);
}
}
}
-
- private void scanFile (File file, Collection tagNames) throws Exception {
- BufferedReader br = new BufferedReader (new FileReader (file));
+
+ private void scanFile(File file, Collection tagNames) throws Exception {
+ BufferedReader br = new BufferedReader(new FileReader(file));
try {
String line = null;
- while ((line = br.readLine ()) != null) {
- scanLine (line, tagNames);
+ while ((line = br.readLine()) != null) {
+ scanLine(line, tagNames);
}
} finally {
- br.close ();
+ br.close();
}
}
-
- private void scanLine (String line, Collection tagNames) throws Exception {
- int start = line.indexOf ("@@");
+
+ private void scanLine(String line, Collection tagNames) throws Exception {
+ int start = line.indexOf("@@");
while (start != -1) {
- int end = line.indexOf (" ", start);
+ int end = line.indexOf(" ", start);
if (end == -1) {
- end = line.length ();
+ end = line.length();
}
- tagNames.add (line.substring (start + 1, end));
- start = line.indexOf ("@@", end);
+ tagNames.add(line.substring(start + 1, end));
+ start = line.indexOf("@@", end);
}
}
-
- private void register (String name, Map tagletMap) {
- Taglet tag = new AttributeTaglet ("@" + name, this);
- if (tagletMap.get (name) != null) {
+
+ private void register(String name, Map tagletMap) {
+ Taglet tag = new AttributeTaglet("@" + name, this);
+ if (tagletMap.containsKey(name)) {
tagletMap.remove(name);
}
- tagletMap.put (name, tag);
+ tagletMap.put(name, wrapTaglet(tag));
}
-
+
+ /**
+ * Wraps a JDK1.4 taglet with a JDK1.5 legacy taglet. This is only done if
+ * class <code>com.sun.tools.doclets.internal.toolkit.taglets.LegacyTaglet</code>
+ * exists, what means that JDK1.5 is used to generate Javadoc.
+ *
+ * @param tag Is the taglet to wrap.
+ * @return Returns the wrapped taglet.
+ */
+ private Object wrapTaglet(Taglet taglet) {
+ Object wrappedTaglet = taglet;
+ if (legacyTagletClassConstructor != null) {
+ try {
+ wrappedTaglet = legacyTagletClassConstructor.newInstance(
+ new Object[] {taglet});
+ } catch (Exception e) {
+ System.err.println("Wrapping of CATaglet failed.");
+ e.printStackTrace();
+ }
+ }
+ return wrappedTaglet;
+ }
+
public String toString(Tag tag) {
return null;
}
-
- public String toString (Tag[] _t) {
- String[] tags = (String[]) tagList.toArray (new String[0]);
-
+
+ public String toString(Tag[] _t) {
+ String[] tags = (String[]) tagList.toArray(new String[0]);
+
if (tags.length == 0) {
return null;
}
-
+
// Sort by target
- Map targets = new TreeMap ();
+ Map targets = new TreeMap();
for (int i = 0; i < tags.length; i++) {
String target = "";
String attribute = tags[i];
- if (tags[i].startsWith ("@@.")) {
- int targetEnd = tags[i].indexOf (" ", 3);
+ if (tags[i].startsWith("@@.")) {
+ int targetEnd = tags[i].indexOf(" ", 3);
if (targetEnd != -1) {
- target = tags[i].substring (3, targetEnd);
- attribute = "@@" + tags[i].substring (targetEnd).trim ();
- } else {
-
+ target = tags[i].substring(3, targetEnd);
+ attribute = "@@" + tags[i].substring(targetEnd).trim();
}
}
-
- if (!targets.containsKey (target)) {
- targets.put (target, new ArrayList ());
+
+ if (!targets.containsKey(target)) {
+ targets.put(target, new ArrayList());
}
-
- List tagsForTarget = (List) targets.get (target);
- tagsForTarget.add (attribute);
+
+ List tagsForTarget = (List) targets.get(target);
+ tagsForTarget.add(attribute);
}
-
- StringBuffer result = new StringBuffer ();
- result.append ("<DT><B>Attributes:</B>");
- List attrs = (List) targets.remove ("");
+
+ StringBuffer result = new StringBuffer();
+ result.append("<DT><B>Attributes:</B>");
+ List attrs = (List) targets.remove("");
if (attrs != null) {
- result.append ("<DD><CODE>");
- Iterator iter = attrs.iterator ();
- while (iter.hasNext ()) {
- result.append (iter.next ());
- if (iter.hasNext ()) {
- result.append ("<BR>");
+ result.append("<DD><CODE>");
+ Iterator iter = attrs.iterator();
+ while (iter.hasNext()) {
+ result.append(iter.next());
+ if (iter.hasNext()) {
+ result.append("<BR>");
}
}
- result.append ("</CODE>");
+ result.append("</CODE>");
}
-
- List returnAttrs = (List) targets.remove ("return");
- if (targets.size () > 0) {
- result.append ("<DT><B>Parameter Attributes:</B>");
- Iterator parameterTargets = targets.keySet ().iterator ();
- while (parameterTargets.hasNext ()) {
- String target = (String) parameterTargets.next ();
- attrs = (List) targets.remove (target);
- result.append ("<DD><CODE>" + target + "</CODE> - <BR><CODE>");
- Iterator iter = attrs.iterator ();
- while (iter.hasNext ()) {
- result.append ("    " + iter.next ());
- if (iter.hasNext ()) {
- result.append ("<BR>");
+
+ List returnAttrs = (List) targets.remove("return");
+ if (targets.size() > 0) {
+ result.append("<DT><B>Parameter Attributes:</B>");
+ Iterator parameterTargets = targets.keySet().iterator();
+ while (parameterTargets.hasNext()) {
+ String target = (String) parameterTargets.next();
+ attrs = (List) targets.remove(target);
+ result.append("<DD><CODE>" + target + "</CODE> - <BR><CODE>");
+ Iterator iter = attrs.iterator();
+ while (iter.hasNext()) {
+ result.append("    " + iter.next());
+ if (iter.hasNext()) {
+ result.append("<BR>");
}
}
- result.append ("</CODE>");
+ result.append("</CODE>");
}
}
-
+
if (returnAttrs != null) {
- result.append ("<DT><B>Return Value Attributes:</B>");
- result.append ("<DD><CODE>");
- Iterator iter = returnAttrs.iterator ();
- while (iter.hasNext ()) {
- result.append (iter.next ());
- if (iter.hasNext ()) {
- result.append ("<BR>");
+ result.append("<DT><B>Return Value Attributes:</B>");
+ result.append("<DD><CODE>");
+ Iterator iter = returnAttrs.iterator();
+ while (iter.hasNext()) {
+ result.append(iter.next());
+ if (iter.hasNext()) {
+ result.append("<BR>");
}
}
- result.append ("</CODE>");
+ result.append("</CODE>");
}
-
- tagList.clear ();
-
- return result.toString ();
+
+ tagList.clear();
+
+ return result.toString();
}
}
-
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org