示例#1
0
        /// <summary>
        /// Appends Delphi source code for a uses clause.
        /// </summary>
        /// <param name="references">List of unit references in the uses clause</param>
        /// <returns><c>this</c></returns>
        public DelphiSourceCodeWriter AppendUsesClause(IList <ConditionalUnitReference> references)
        {
            // No clause required without references
            if (references.Count == 0)
            {
                return(this);
            }
            AppendDelphiCode(
                $@"uses
"
                );
            Action?appendReferenceAction(UnitReference?reference, bool last)
            {
                if (reference is null)
                {
                    return(null);
                }
                return(() => AppendDelphiCode(
                           $@"{reference.Unit.ToSourceCode()}{(last ? ";" : ",")}
"
                           , 1));
            }

            for (int i = 0; i < references.Count; i++)
            {
                bool last = i == references.Count - 1;
                ConditionalUnitReference conditionalReference = references[i];
                AppendConditionallyCompiled(conditionalReference.Condition, appendReferenceAction(conditionalReference.Element, last),
                                            appendReferenceAction(conditionalReference.AlternativeElement, last));
            }
            return(AppendLine());
        }
 /// <summary>
 ///  Adds compiler feature abstraction to a unit reference.
 /// </summary>
 /// <param name="unitReference">The unit reference</param>
 private static void AddCompilerAbstraction(ConditionalUnitReference unitReference)
 {
     if (unitReference.Condition is null &&
         unitReference.Element.Unit.Namespace.Count > 0 &&
         unitReference.Element.Unit.Namespace[0] == "System")
     {
         unitReference.Condition          = compilerSupportsUnitScopeNamesCondition.Clone();
         unitReference.AlternativeElement = new UnitReference()
         {
             Unit = new UnitIdentifier()
             {
                 Unit      = unitReference.Element.Unit.Unit,
                 Namespace = { unitReference.Element.Unit.Namespace.Skip(1) }
             }
         };
     }
 }