private void writeInterfaceList <T1>(IList <T1> list, bool isGeneric) where T1 : VhdlObjectProvider
        {
            writer.BeginAlign();

            bool first = true;

            foreach (VhdlObjectProvider objectProvider in list)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    writer.Append(";").NewLine();
                }

                if (objectProvider is VhdlObjectGroup <VhdlObject> )
                {
                    VhdlObjectGroup <VhdlObject> group = (VhdlObjectGroup <VhdlObject>)objectProvider;
                    VhdlOutputHelper.handleAnnotationsBefore(group, writer);
                }

                //TODO: check for equal types etc.
                VhdlObject obj0 = objectProvider.VhdlObjects[0];

                InterfaceDeclarationFormat format = Annotations.getAnnotation <InterfaceDeclarationFormat>(obj0);

                if (format != null && format.UseObjectClass)
                {
                    writer.Append(obj0.ObjectClass.ToString()).Append(' ');
                }

                writer.AppendIdentifiers(objectProvider.VhdlObjects, ", ");
                writer.Align();

                writer.Append(" : ");

                if (format != null)
                {
                    if (format.UseMode || (obj0.Mode != VhdlObject.ModeEnum.IN))
                    {
                        writer.Append(obj0.Mode.ToString()).Append(' ');
                    }
                }
                else
                {
                    if (!isGeneric || obj0.Mode != VhdlObject.ModeEnum.IN)
                    {
                        writer.Append(obj0.Mode.ToString()).Append(' ');
                    }
                }

                VhdlObjectOutputHelper.interfaceSuffix(obj0, writer, output);
            }

            writer.NewLine().EndAlign();
        }