Пример #1
0
        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(");");
        }
Пример #2
0
        public override void Generate(TextWriter writer, CakeScriptAlias alias)
        {
            if (alias == null)
            {
                throw new ArgumentNullException(nameof(alias));
            }

            Generate(new IndentedTextWriter(writer), alias);
        }
Пример #3
0
        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);
        }
Пример #4
0
 public void Generate(TextWriter writer, CakeScriptAlias alias)
 {
     if (alias.Type == ScriptAliasType.Method)
     {
         _methodGenerator.Generate(writer, alias);
     }
     else
     {
         _propertyGenerator.Generate(writer, alias);
     }
 }
Пример #5
0
        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);
        }
Пример #6
0
        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("}");
        }
Пример #7
0
        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();
        }
Пример #8
0
        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);");
        }
Пример #9
0
        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));
            }
        }
Пример #10
0
        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("}");
        }
Пример #11
0
 public override void Generate(TextWriter writer, CakeScriptAlias alias)
 {
     Generate(new IndentedTextWriter(writer), alias);
 }
Пример #12
0
 public abstract void Generate(TextWriter writer, CakeScriptAlias alias);
Пример #13
0
        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("}");
        }