From b2440d8b20318ba332250443193f8d46fa6ca523 Mon Sep 17 00:00:00 2001
From: Erich Schubert <schube@dbs.ifi.lmu.de>
Date: Fri, 27 Nov 2015 15:10:31 +0100
Subject: [PATCH] Robustness: allow default package for user extensions.

---
 .../de/lmu/ifi/dbs/elki/gui/util/ClassTree.java    | 27 +++++++++++-----------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java
index 8c524cd..2cc1769 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java
@@ -31,15 +31,15 @@
 
 /**
  * Build a tree of available classes for use in Swing UIs.
- * 
+ *
  * @author Erich Schubert
- * 
+ *
  * @apiviz.has TreeNode
  */
 public class ClassTree {
   /**
    * Build the class tree for a given set of choices.
-   * 
+   *
    * @param choices Class choices
    * @param rootpkg Root package name (to strip / hide)
    * @return Root node.
@@ -59,7 +59,8 @@ public static TreeNode build(List<Class<?>> choices, String rootpkg) {
     for(Class<?> impl : choices) {
       String name = impl.getName();
       name = (prefix != null && name.startsWith(prefix)) ? name.substring(prefix.length()) : name;
-      MutableTreeNode c = new ClassNode(impl.getName().substring(impl.getPackage().getName().length() + 1), name);
+      int plen = (impl.getPackage() != null) ? impl.getPackage().getName().length() + 1 : 0;
+      MutableTreeNode c = new ClassNode(impl.getName().substring(plen), name);
 
       MutableTreeNode p = null;
       int l = name.lastIndexOf('.');
@@ -96,7 +97,7 @@ public static TreeNode build(List<Class<?>> choices, String rootpkg) {
 
   /**
    * Simplify the tree.
-   * 
+   *
    * @param cur Current node
    * @param prefix Prefix to add
    * @return Replacement node
@@ -133,9 +134,9 @@ else if(cur instanceof ClassNode) {
 
   /**
    * Tree node representing a single class.
-   * 
+   *
    * @author Erich Schubert
-   * 
+   *
    * @apiviz.exclude
    */
   public static class PackageNode extends DefaultMutableTreeNode {
@@ -151,7 +152,7 @@ else if(cur instanceof ClassNode) {
 
     /**
      * Current class name.
-     * 
+     *
      * @param display Displayed name
      * @param pkgname Actual class name
      */
@@ -162,7 +163,7 @@ public PackageNode(String display, String pkgname) {
 
     /**
      * Return the package name.
-     * 
+     *
      * @return Package name
      */
     public String getPackageName() {
@@ -172,9 +173,9 @@ public String getPackageName() {
 
   /**
    * Tree node representing a single class.
-   * 
+   *
    * @author Erich Schubert
-   * 
+   *
    * @apiviz.exclude
    */
   public static class ClassNode extends DefaultMutableTreeNode {
@@ -190,7 +191,7 @@ public String getPackageName() {
 
     /**
      * Current class name.
-     * 
+     *
      * @param display Displayed name
      * @param clsname Actual class name
      */
@@ -201,7 +202,7 @@ public ClassNode(String display, String clsname) {
 
     /**
      * Return the class name.
-     * 
+     *
      * @return Class name
      */
     public String getClassName() {
