Note that there are some explanatory texts on larger screens.

plurals
  1. POLoading the class in a custom JavaDoc Taglet?
    primarykey
    data
    text
    <p>I am writing a custom JavaDoc Taglet, and want to load and create an instance of the class for which the JavaDoc is being processed. This is the code I have (public class CDKIOOptionsTaglet implements Taglet):</p> <pre><code>public String toString(Tag tag) { return "&lt;DT&gt;&lt;B&gt;IO options: &lt;/B&gt;&lt;DD&gt;" + expand(tag) + "&lt;/DD&gt;\n"; } public String toString(Tag[] tags) { if (tags.length == 0) { return null; } else { return toString(tags[0]); } } private String expand(Tag tag) { // create a table with IOOptions StringBuffer tableContent = new StringBuffer(); SourcePosition file = tag.position(); String pathAndFile = file.file().toString(); pathAndFile = pathAndFile.replaceAll("/", "."); pathAndFile = pathAndFile.substring(pathAndFile.indexOf("src.main") + 9); pathAndFile = pathAndFile.substring(0, pathAndFile.indexOf(".java")); try { Class ioClass = Class.forName(pathAndFile); Object ioInstance = ioClass.newInstance(); if (ioInstance instanceof IChemObjectIO) { IChemObjectIO objectIO = (IChemObjectIO)ioInstance; tableContent.append("&lt;table&gt;"); for (IOSetting setting : objectIO.getIOSettings()) { tableContent.append("&lt;tr&gt;"); tableContent.append("&lt;td&gt;" + setting.getName() + "&lt;/td&gt;"); tableContent.append("&lt;td&gt;&lt;/td&gt;"); tableContent.append("&lt;/tr&gt;"); } tableContent.append("&lt;/table&gt;"); } } catch (Exception e) { e.printStackTrace(); return ""; } return tableContent.toString(); } </code></pre> <p>And this is the Ant script including the jars in which the class to be loaded is added to the classpath used during the call:</p> <pre><code>&lt;classpath&gt; &lt;pathelement location="." /&gt; &lt;fileset dir="dist/jar"&gt; &lt;include name="*.jar" /&gt; &lt;/fileset&gt; &lt;javadoc ...&gt; &lt;/classpath&gt; </code></pre> <p>The jars where the classes I am creating JavaDoc for reside in dist/jar. For completeness (and upon request), here's the full call:</p> <pre><code> &lt;javadoc destdir="${javadoc.dir}" author="true" version="true" use="true" public="true" windowtitle="CDK API - version ${TODAY_SVN}"&gt; &lt;classpath&gt; &lt;pathelement location="." /&gt; &lt;fileset dir="dist/jar"&gt; &lt;include name="*.jar" /&gt; &lt;/fileset&gt; &lt;fileset dir="jar"&gt; &lt;include name="*.jar" /&gt; &lt;/fileset&gt; &lt;fileset dir="jar/jena"&gt; &lt;include name="*.jar" /&gt; &lt;/fileset&gt; &lt;dirset dir="src/main"&gt; &lt;include name="net/**/*"/&gt; &lt;/dirset&gt; &lt;/classpath&gt; &lt;tag name="cdk.set" scope="all" description="Belongs to the set:" /&gt; &lt;tag name="cdk.keyword" scope="all" description="Keywords:" /&gt; &lt;tag name="cdk.created" scope="all" description="Created on:" /&gt; &lt;tag name="cdk.require" scope="all" description="Requires:" /&gt; &lt;tag name="cdk.depends" scope="all" description="Required library to be able to run this class:" /&gt; &lt;tag name="cdk.builddepends" scope="all" description="Required library to be able to compile this class:" /&gt; &lt;tag name="cdk.todo" scope="all" description="To do:" /&gt; &lt;tag name="cdk.license" scope="all" description="License:" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKCiteTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKModuleTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKBugTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKDictRefTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKInChITaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKThreadSafeTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKThreadNonSafeTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKGitTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;taglet name="net.sf.cdk.tools.doclets.CDKIOOptionsTaglet" path="jar/xom-1.1.jar:src/main" /&gt; &lt;packageset dir="${src}/main" defaultexcludes="yes"&gt; &lt;include name="org/openscience/cdk/**" /&gt; &lt;/packageset&gt; &lt;link href="${javaURL}"/&gt; &lt;/javadoc&gt; </code></pre> <p>I confirmed with "ant -v" that the appropriate jar indeed included the class that is being loaded. Still, I get this stacktrace:</p> <pre><code>[javadoc] java.lang.ClassNotFoundException: org.openscience.cdk.Atom [javadoc] at java.net.URLClassLoader$1.run(URLClassLoader.java:217) [javadoc] at java.security.AccessController.doPrivileged(Native Method) [javadoc] at java.net.URLClassLoader.findClass(URLClassLoader.java:205) [javadoc] at java.lang.ClassLoader.loadClass(ClassLoader.java:321) [javadoc] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) [javadoc] at java.lang.ClassLoader.loadClass(ClassLoader.java:266) [javadoc] at net.sf.cdk.tools.doclets.CDKIOOptionsTaglet.expand(CDKIOOptionsTaglet.java:104) [javadoc] at net.sf.cdk.tools.doclets.CDKIOOptionsTaglet.toString(CDKIOOptionsTaglet.java:83) [javadoc] at net.sf.cdk.tools.doclets.CDKIOOptionsTaglet.toString(CDKIOOptionsTaglet.java:91) [javadoc] at com.sun.tools.doclets.internal.toolkit.taglets.LegacyTaglet.getTagletOutput(LegacyTaglet.java:130) [javadoc] at com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter.genTagOuput(TagletWriter.java:185) [javadoc] at com.sun.tools.doclets.formats.html.HtmlDocletWriter.printTags(HtmlDocletWriter.java:230) [javadoc] at com.sun.tools.doclets.formats.html.ClassWriterImpl.writeClassTagInfo(ClassWriterImpl.java:246) [javadoc] at com.sun.tools.doclets.internal.toolkit.builders.ClassBuilder.buildClassTagInfo(ClassBuilder.java:287) </code></pre> <p>How can I get the Taglet to load the class for which it is creating JavaDoc so that I can use reflection (etc) to learn more about that class, and return that as part of the Taglet output?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload