protected void detailedLog(InstanceObject obj, double budget, double actual, String msg) {
   if (doDetailedLog) {
     String budgetmsg = budget + " " + AadlProject.KBYTESPS_LITERAL + ",";
     String actualmsg = actual + " " + AadlProject.KBYTESPS_LITERAL + ",";
     String objname =
         (obj instanceof ConnectionInstance)
             ? obj.getFullName()
             : ((ComponentInstance) obj).getComponentInstancePath();
     errManager.logInfo(obj.getFullName() + ", " + budgetmsg + actualmsg + msg);
   }
 }
 /**
  * Get an InstanceObject from an instance reference value. Throws an exception if no property
  * value exists or an error occurs.
  *
  * @param io The instance object from which to retrieve the property value. (We don't use a
  *     property holder because we can only get an instance reference value as a property value
  *     from an instance object.)
  * @param pd The property to retrieve.
  * @return The instance object of the property.
  */
 public static InstanceObject getInstanceObjectReference(
     final InstanceObject io, final Property pd) {
   if (io == null) {
     return null;
   }
   try {
     final PropertyExpression pv = io.getSimplePropertyValue(pd);
     final InstanceObject ref = ((InstanceReferenceValue) pv).getReferencedInstanceObject();
     return ref;
   } catch (PropertyLookupException e) {
     return null;
   }
 }