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 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("}"); }
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("}"); }