@Override
 public int compareTo(VersionNumber o) {
   int index = Double.compare(this.majorNumber, o.majorNumber);
   if (index != 0) {
     return index;
   } else {
     index = Double.compare(this.minorNumber, o.minorNumber);
     if (index != 0) {
       return index;
     } else {
       index = Double.compare(this.patchLevel, o.patchLevel);
       if (index != 0) {
         return index;
       }
       // prefer release versions over development builds
       return Boolean.compare(!isDevelopmentBuild(), !o.isDevelopmentBuild());
     }
   }
 }