<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: introspection code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 06 Oct 2008 16:53:32 GMT</pubDate>
    <description>DZone Snippets: introspection code</description>
    <item>
      <title>Get all classes within a package</title>
      <link>http://snippets.dzone.com/posts/show/4831</link>
      <description>The code below gets all classes within a given package. Notice that it should only work for classes found locally, getting really ALL classes is impossible.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Scans all classes accessible from the context class loader which belong to the given package and subpackages.&lt;br /&gt;     *&lt;br /&gt;     * @param packageName The base package&lt;br /&gt;     * @return The classes&lt;br /&gt;     * @throws ClassNotFoundException&lt;br /&gt;     * @throws IOException&lt;br /&gt;     */&lt;br /&gt;    private static Class[] getClasses(String packageName)&lt;br /&gt;            throws ClassNotFoundException, IOException {&lt;br /&gt;        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();&lt;br /&gt;        assert classLoader != null;&lt;br /&gt;        String path = packageName.replace('.', '/');&lt;br /&gt;        Enumeration&lt;URL&gt; resources = classLoader.getResources(path);&lt;br /&gt;        List&lt;File&gt; dirs = new ArrayList&lt;File&gt;();&lt;br /&gt;        while (resources.hasMoreElements()) {&lt;br /&gt;            URL resource = resources.nextElement();&lt;br /&gt;            dirs.add(new File(resource.getFile()));&lt;br /&gt;        }&lt;br /&gt;        ArrayList&lt;Class&gt; classes = new ArrayList&lt;Class&gt;();&lt;br /&gt;        for (File directory : dirs) {&lt;br /&gt;            classes.addAll(findClasses(directory, packageName));&lt;br /&gt;        }&lt;br /&gt;        return classes.toArray(new Class[classes.size()]);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Recursive method used to find all classes in a given directory and subdirs.&lt;br /&gt;     *&lt;br /&gt;     * @param directory   The base directory&lt;br /&gt;     * @param packageName The package name for classes found inside the base directory&lt;br /&gt;     * @return The classes&lt;br /&gt;     * @throws ClassNotFoundException&lt;br /&gt;     */&lt;br /&gt;    private static List&lt;Class&gt; findClasses(File directory, String packageName) throws ClassNotFoundException {&lt;br /&gt;        List&lt;Class&gt; classes = new ArrayList&lt;Class&gt;();&lt;br /&gt;        if (!directory.exists()) {&lt;br /&gt;            return classes;&lt;br /&gt;        }&lt;br /&gt;        File[] files = directory.listFiles();&lt;br /&gt;        for (File file : files) {&lt;br /&gt;            if (file.isDirectory()) {&lt;br /&gt;                assert !file.getName().contains(".");&lt;br /&gt;                classes.addAll(findClasses(file, packageName + "." + file.getName()));&lt;br /&gt;            } else if (file.getName().endsWith(".class")) {&lt;br /&gt;                classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return classes;&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 30 Nov 2007 15:28:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4831</guid>
      <author>vtatai (Victor Tatai)</author>
    </item>
    <item>
      <title>Object introspection</title>
      <link>http://snippets.dzone.com/posts/show/269</link>
      <description>&lt;code&gt;&lt;br /&gt;dir(obj)&lt;br /&gt;vars(obj)&lt;br /&gt;obj.__dict__&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There are more information when call it again with&lt;br /&gt;obj.__class__ and klass.__bases__</description>
      <pubDate>Wed, 11 May 2005 16:24:55 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/269</guid>
      <author>korakot (Korakot Chaovavanich)</author>
    </item>
  </channel>
</rss>
