/// <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) } } }; } }