public static bool HasDerived(this OdcmObject odcmObject)
 {
     if (odcmObject.AsOdcmClass() != null)
     {
         return(odcmObject.AsOdcmClass().Derived.Any());
     }
     else if (odcmObject.AsOdcmProperty() != null && odcmObject.AsOdcmProperty().Projection.Type.AsOdcmClass() != null)
     {
         return(odcmObject.AsOdcmProperty().Projection.Type.AsOdcmClass().Derived.Any());
     }
     else if (odcmObject.AsOdcmMethod() != null && odcmObject.AsOdcmMethod().ReturnType.AsOdcmClass() != null)
     {
         return(odcmObject.AsOdcmMethod().ReturnType.AsOdcmClass().Derived.Any());
     }
     return(false);
 }
 public static OdcmClass BaseClass(this OdcmObject odcmObject)
 {
     if (odcmObject.AsOdcmProperty() != null && odcmObject.AsOdcmProperty().Projection.Type.AsOdcmClass() != null)
     {
         var baseClass = odcmObject.AsOdcmProperty().Projection.Type.AsOdcmClass().Base;
         if (baseClass != null && !baseClass.IsAbstract)
         {
             return(baseClass);
         }
     }
     else if (odcmObject.AsOdcmClass() != null && odcmObject.AsOdcmClass().Base != null)
     {
         if (!odcmObject.AsOdcmClass().Base.IsAbstract)
         {
             return(odcmObject.AsOdcmClass().Base);
         }
     }
     return(null);
 }