/**
  * Constructor for the <code>CacheLabel</code> object. This is used to create a <code>Label</code>
  * that acquires details from another label in such a way that any logic involved in acquiring
  * details is performed only once.
  *
  * @param label this is the label to acquire the details from
  */
 public CacheLabel(Label label) throws Exception {
   this.annotation = label.getAnnotation();
   this.decorator = label.getDecorator();
   this.attribute = label.isAttribute();
   this.collection = label.isCollection();
   this.contact = label.getContact();
   this.depend = label.getDependent();
   this.required = label.isRequired();
   this.override = label.getOverride();
   this.inline = label.isInline();
   this.path = label.getPath();
   this.type = label.getType();
   this.name = label.getName();
   this.entry = label.getEntry();
   this.data = label.isData();
   this.label = label;
 }
 /**
  * This is used to acquire the <code>Type</code> that the type provided is represented by.
  * Typically this will return the field or method represented by the label. However, in the case
  * of unions this will provide an override type.
  *
  * @param type this is the class to acquire the type for
  * @return this returns the type represented by this class
  */
 public Type getType(Class type) throws Exception {
   return label.getType(type);
 }