private void WriteInvocation(TextWriter writer, CakeScriptAlias alias) { // Has return type? var hasReturnValue = !(alias.Method.ReturnType.Namespace.Name == "System" && alias.Method.ReturnType.Name == "Void"); if (hasReturnValue) { writer.Write("return "); } // Method name. _typeEmitter.Write(writer, alias.Method.DeclaringType); writer.Write("."); writer.Write(alias.Method.Name); // Generic arguments? if (alias.Method.GenericParameters.Count > 0) { writer.Write("<"); writer.Write(string.Join(",", alias.Method.GenericParameters.Select(p => p.Name))); writer.Write(">"); } // Arguments writer.Write("("); WriteMethodParameters(writer, alias, invocation: true); writer.Write(");"); }
public override void Generate(TextWriter writer, CakeScriptAlias alias) { if (alias == null) { throw new ArgumentNullException(nameof(alias)); } Generate(new IndentedTextWriter(writer), alias); }
protected static string GetObsoleteMessage(CakeScriptAlias alias) { var message = string.Concat(" ", alias.Obsolete.Message ?? string.Empty).TrimEnd(); if (string.IsNullOrWhiteSpace(message)) { message = string.Empty; } message = $"The alias {alias.Method.Name} has been made obsolete.{message}"; return(message); }
public void Generate(TextWriter writer, CakeScriptAlias alias) { if (alias.Type == ScriptAliasType.Method) { _methodGenerator.Generate(writer, alias); } else { _propertyGenerator.Generate(writer, alias); } }
public void Generate(TextWriter writer, CakeScriptAlias alias) { if (!_cache.TryGetValue(alias, out string result)) { using (var w = new StringWriter()) { _aliasGenerator.Generate(w, alias); result = w.ToString(); _cache.Add(alias, result); } } writer.Write(result); }
private void WriteCachedInvocation(IndentedTextWriter writer, CakeScriptAlias alias) { // If writer.Write("if (_"); writer.Write(alias.Method.Name); writer.Write("==null)"); writer.WriteLine(); writer.Write("{"); using (writer.BeginScope()) { // Assignment writer.Write("_"); writer.Write(alias.Method.Name); writer.Write(" = "); WriteInvocation(writer, alias); } writer.Write("}"); }
private void WriteBackingField(TextWriter writer, CakeScriptAlias alias) { // Access modifier writer.Write("private "); // Return type _typeEmitter.Write(writer, alias.Method.ReturnType); if (alias.Method.ReturnType.IsValueType) { writer.Write("?"); } writer.Write(" "); // Name writer.Write("_"); writer.Write(alias.Method.Name); writer.Write(";"); writer.WriteLine(); }
private void WriteInvocation(IndentedTextWriter writer, CakeScriptAlias alias) { // Declaring type _typeEmitter.Write(writer, alias.Method.DeclaringType); writer.Write("."); // Method name writer.Write(alias.Method.Name); // Generic arguments if (alias.Method.GenericParameters.Count > 0) { writer.Write("<"); writer.Write(string.Join(",", alias.Method.GenericParameters)); writer.Write(">"); } // Arguments writer.Write("(Context);"); }
private void WriteMethodParameters(TextWriter writer, CakeScriptAlias alias, bool invocation) { var options = ParameterEmitOptions.Default; if (invocation) { options = options | ParameterEmitOptions.Invocation; } var parameterResult = alias.Method.Parameters .Select(p => string.Join(" ", _parameterEmitter.GetString(p, options))) .ToList(); if (parameterResult.Count > 0) { parameterResult.RemoveAt(0); if (invocation) { parameterResult.Insert(0, "Context"); } writer.Write(string.Join(", ", parameterResult)); } }
private void Generate(IndentedTextWriter writer, CakeScriptAlias alias) { // XML documentation WriteDocs(writer, alias.Documentation); // Access modifier writer.Write("public "); // Return type if (alias.Method.ReturnType != null) { if (alias.Method.ReturnType.Namespace.Name == "System" && alias.Method.ReturnType.Name == "Void") { writer.Write("void"); } else { _typeEmitter.Write(writer, alias.Method.ReturnType); } writer.Write(" "); } // Render the method signature. writer.Write(alias.Method.Name); // Generic arguments? if (alias.Method.GenericParameters.Count > 0) { writer.Write("<"); writer.Write(string.Join(",", alias.Method.GenericParameters.Select(p => p.Name))); writer.Write(">"); } // Arguments writer.Write("("); WriteMethodParameters(writer, alias, invocation: false); writer.Write(")"); // Generic constraints if (alias.Method.GenericParameters.Count > 0) { foreach (var genericParameter in alias.Method.GenericParameters) { if (genericParameter.Constraints.Count > 0) { writer.Write(" where "); writer.Write(genericParameter.Name); writer.Write(" : "); writer.Write(string.Join(",", genericParameter.Constraints)); } } } // Block start writer.WriteLine(); writer.Write("{"); using (writer.BeginScope()) { // Method is obsolete? var performInvocation = true; if (alias.Obsolete != null) { var message = GetObsoleteMessage(alias); if (alias.Obsolete.IsError) { // Error performInvocation = false; writer.Write($"throw new Cake.ScriptServer.CakeException(\"{message}\");"); } else { // Warning writer.Write($"Context.Log.Warning(\"Warning: {message}\");"); } } // Render the method invocation? if (performInvocation) { if (alias.Obsolete != null) { writer.WriteLine(); writer.Write("#pragma warning disable 0618"); writer.WriteLine(); } WriteInvocation(writer, alias); if (alias.Obsolete != null) { writer.WriteLine(); writer.Write("#pragma warning restore 0618"); } } } writer.Write("}"); }
public override void Generate(TextWriter writer, CakeScriptAlias alias) { Generate(new IndentedTextWriter(writer), alias); }
public abstract void Generate(TextWriter writer, CakeScriptAlias alias);
private void Generate(IndentedTextWriter writer, CakeScriptAlias alias) { // XML documentation WriteDocs(writer, alias.Documentation); var shouldThrow = alias.Obsolete?.IsError ?? false; if (alias.Cached && !shouldThrow) { WriteBackingField(writer, alias); } // Access modifier writer.Write("public "); // Return type _typeEmitter.Write(writer, alias.Method.ReturnType); writer.Write(" "); // Name writer.Write(alias.Method.Name); writer.WriteLine(); writer.Write("{"); using (writer.BeginScope()) { writer.Write("get"); writer.WriteLine(); writer.Write("{"); using (writer.BeginScope()) { // Obsolete warning? if (alias.Obsolete != null) { var message = GetObsoleteMessage(alias); if (!alias.Obsolete.IsError) { writer.Write($"Context.Log.Warning(\"Warning: {message}\");"); writer.WriteLine(); } } if (shouldThrow) { var message = GetObsoleteMessage(alias); writer.Write($"throw new Cake.ScriptServer.CakeException(\"{message}\");"); } else if (alias.Cached) { WriteCachedInvocation(writer, alias); // Return writer.WriteLine(); writer.Write("return "); writer.Write("_"); writer.Write(alias.Method.Name); if (alias.Method.ReturnType.IsValueType) { writer.Write(".Value"); } writer.Write(";"); } else { // Return writer.Write("return "); WriteInvocation(writer, alias); } } writer.Write("}"); } writer.Write("}"); }