@Override
 public int hashCode() {
   if (hashCache != null) return hashCache;
   int result = super.hashCode();
   final int prime = 31;
   result = (prime * result) + ((hIf == null) ? 0 : hIf.hashCode());
   hashCache = result;
   return result;
 }
 @Override
 public boolean equals(Object obj) {
   if (this == obj) return true;
   if (obj == null) return false;
   if (!(obj instanceof AbstractHDLInterfaceDeclaration)) return false;
   if (!super.equals(obj)) return false;
   final AbstractHDLInterfaceDeclaration other = (AbstractHDLInterfaceDeclaration) obj;
   if (hIf == null) {
     if (other.hIf != null) return false;
   } else if (!hIf.equals(other.hIf)) return false;
   return true;
 }
 @Override
 public String toConstructionString(String spacing) {
   final boolean first = true;
   final StringBuilder sb = new StringBuilder();
   sb.append('\n').append(spacing).append("new HDLInterfaceDeclaration()");
   if (annotations != null) {
     if (annotations.size() > 0) {
       sb.append('\n').append(spacing);
       for (final HDLAnnotation o : annotations) {
         sb.append(".addAnnotations(").append(o.toConstructionString(spacing + "\t\t"));
         sb.append('\n').append(spacing).append(")");
       }
     }
   }
   if (hIf != null) {
     sb.append(".setHIf(").append(hIf.toConstructionString(spacing + "\t")).append(")");
   }
   return sb.toString();
 }