/
CRake.cs
101 lines (85 loc) · 4 KB
/
CRake.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Unahi.CRake.Code;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
namespace Unahi.CRake {
class CRake : Base<CRake> {
public override void Run() {
if (Arguments.IsHelp) {
Console.Write(Arguments.ToHelp("crake [-p | --port numport][-u] [-t | --tasks] namespace:task"));
return;
}
var files = Configuration.Load();
var compiler = new Compiler();
foreach (var file in files) {
FileParser.Parse(compiler, file);
}
var binary = compiler.Compile();
if (ShowTasks) {
foreach (var task in binary.Tasks) {
Console.WriteLine(string.Format("{0}\t{1}", task.Key, task.Description));
}
return;
}
if (Arguments.Values.Count > 0) {
//CodeNamespace codeNamespace = new CodeNamespace("Unahi.CRake.RuntimeGenerated");
//CodeCompileUnit codeUnit = new CodeCompileUnit();
//codeUnit.Namespaces.Add(codeNamespace);
//CodeDomProvider compiler2 = CodeDomProvider.CreateProvider("CSharp");
//string[] references = new string[2] { "System.Web.dll", "System.dll" };
//CompilerParameters parameters = new CompilerParameters(references);
//codeNamespace.Imports.Add(new CodeNamespaceImport("System"));
//CodeTypeDeclaration type = new CodeTypeDeclaration();
//type.IsClass = true;
//type.Name = "Namespace";
//type.Attributes = MemberAttributes.Public;
//codeNamespace.Types.Add(type);
//CodeMemberMethod testMethod = new CodeMemberMethod();
//testMethod.Name = "DynamicMethod";
//testMethod.Attributes = MemberAttributes.Public;
//testMethod.Statements.Add(new CodeSnippetStatement("Console.WriteLine(\"oi\");"));
//type.Members.Add(testMethod);
//CompilerResults results = compiler2.CompileAssemblyFromDom(parameters, codeUnit);
//var objectTask2 = results.CompiledAssembly.CreateInstance("Unahi.CRake.RuntimeGenerated.Namespace");
//objectTask2.GetType().InvokeMember("DynamicMethod", BindingFlags.InvokeMethod, null, objectTask2, null);
if (binary.CompiledResult.Errors.HasErrors) {
foreach (CompilerError error in binary.CompiledResult.Errors) {
Console.WriteLine(error.ErrorText);
}
return;
}
var key = Arguments.Values[0];
try {
binary.InvokeMember(key);
} catch (Exception ex) {
Console.WriteLine("CRake aborted!");
Console.WriteLine(ex.Message);
}
//foreach (var task in binary.Tasks) {
// if (task.Key == key) {
// if (task.Compiled.Errors.HasErrors) {
// foreach (CompilerError error in task.Compiled.Errors) {
// Console.WriteLine(error.ErrorText);
// }
// return;
// }
// var objectTask = task.CompiledAssembly.CreateInstance("Unahi.CRake.RuntimeGenerated.Namespace");
// objectTask.GetType().InvokeMember("DynamicMethod", BindingFlags.InvokeMethod, null, objectTask, null);
// }
//}
}
}
public bool ShowTasks {
get {
return (bool)Arguments["t"];
}
}
public override void Init() {
Arguments.AddArgument('t', "tasks", "List all tasks available to CRake", ArgumentType.Bit, false);
}
}
}