public void 设置名字() { const string constCode = @" namespace MySpace { }"; string name = "MySpace"; var builder = CodeSyntax.CreateNamespace(); builder.WithName(name); var code = builder.ToFullCode(); #if Log _tempOutput.WriteLine(code); #endif Assert.Equal(constCode, code); builder = new NamespaceBuilder(name); code = builder.ToFormatCode(); #if Log _tempOutput.WriteLine(code); #endif Assert.Equal(constCode, code); }
internal NamespaceBuilder GetNamespace(string uri) { NamespaceBuilder result = null; this.namespaces.TryGetValue(uri, out result); return(result); }
internal NamespaceBuilder CreateNamespace(Importer.XmlReader reader, string uri, string prefix, string qualifiedName) { if (qualifiedName == null) { qualifiedName = "Ns" + (++this.namespaceCounter); } NamespaceBuilder result = this.GetNamespace(uri); if (result != null) { if (result.Uri != uri) { this.AddWarning("Namespace '" + result.FullName + "' has conflicting URIs: '" + result.FullName + "' and '" + uri + "'", reader.Uri, LinePositionSpan.Zero); } return(result); } string[] names = qualifiedName.Split('.'); int i = 0; NamespaceBuilder currentNs = null; while (i < names.Length) { if (i == 0) { NamespaceBuilder rootNs = this.Model.Symbols.OfType <NamespaceBuilder>().FirstOrDefault(ns => ns.Name == names[0] && ns.Namespace == null); currentNs = rootNs; } else { currentNs = currentNs.Declarations.OfType <NamespaceBuilder>().FirstOrDefault(ns => ns.Name == names[i]); } if (currentNs != null) { ++i; } else { NamespaceBuilder parentNs = currentNs; while (i < names.Length) { NamespaceBuilder ns = this.Factory.Namespace(); ns.Name = names[i]; ns.Namespace = parentNs; ++i; if (i == names.Length) { ns.Prefix = prefix; ns.Uri = uri; result = ns; this.namespaces.Add(uri, ns); } parentNs = ns; } } } return(result); }
public void ItBuildsWithAClass() { var builder = new NamespaceBuilder(); builder.WithClass(); var result = builder.Build(); Assert.AreEqual(1, result.Types.Length); }
public void ItBuildsWithCorrectName() { var builder = new NamespaceBuilder(); builder.WithName("FooBar"); var result = builder.Build(); Assert.AreEqual("FooBar", result.Name); }
public string[] Start() { // 编译选项 // 编译选项可以不配置 DomainOptionBuilder option = new DomainOptionBuilder() .WithPlatform(Platform.AnyCpu) // 生成可移植程序集 .WithDebug(false) // 使用 Release 编译 .WithKind(OutputKind.DynamicallyLinkedLibrary) // 生成动态库 .WithLanguageVersion(LanguageVersion.CSharp7_3); // 使用 C# 7.3 string dllName = "N" + Guid.NewGuid().ToString() + ".dll"; CompilationBuilder builder = CodeSyntax.CreateCompilation(dllName) .WithPath(Directory.GetParent(typeof(Program).Assembly.Location).FullName) .WithOption(option) // 可以省略 .WithAutoAssembly() // 自动添加程序集引用 .WithNamespace(NamespaceBuilder.FromCode(Code)); try { if (builder.CreateDomain(out var messages)) { Messages.Add("编译成功!开始执行程序集进行验证!"); var assembly = Assembly.LoadFile(Directory.GetParent(typeof(Program).Assembly.Location).FullName + "/" + dllName); var type = assembly.GetType("MySpace.Test"); var method = type.GetMethod("MyMethod"); object obj = Activator.CreateInstance(type); string result = (string)method.Invoke(obj, null); if (result.Equals("测试成功")) { Messages.Add("执行程序集测试成功!"); } else { Messages.Add("执行程序集测试失败!"); } } else { _ = messages.Execute(item => { Messages.Add(@$ "ID:{item.Id} 严重程度:{item.Severity} 位置:{item.Location.SourceSpan.Start}~{item.Location.SourceSpan.End} 消息:{item.Descriptor.Title} {item}"); }); } } catch (Exception ex) { Console.WriteLine($"{ex.ToString()}"); } return(Messages.ToArray()); }
/// <inheritdoc /> protected override Namespace Bind(NamespaceStatementContext node, IDocument parent) { var builder = new NamespaceBuilder() .SetNode(node) .SetParent(parent) .SetBinderProvider(this.binderProvider) .SetScope(node.namespaceScope?.Text) .SetNamespaceName(node.ns?.Text); return(builder.Build()); }
public void Build_WhenBuildingNamespace_CodeShouldContainMembers() { var @namespace = new NamespaceBuilder("MyNamespace") .WithUsings("System") .With(new EnumBuildMember("MyEnum", new List <EnumMember> { new EnumMember("SomeEnum", 2) })) .With(new ClassBuildMember(new ClassBuilder("MyClass", null).BuildWithoutNamespace())) .Build(); Assert.AreEqual("usingSystem;namespaceMyNamespace{enumMyEnum{SomeEnum=2}publicclassMyClass{}}", @namespace.ToString()); }
protected Namespace SetupNamespace(NamespaceStatementContext namespaceNode, string scope, string name, Document document) { var @namespace = new NamespaceBuilder() .SetNode(namespaceNode) .SetScope(scope) .SetNamespaceName(name) .Build(); this.BinderProvider.GetBinder(namespaceNode).Returns(this.namespaceBinder); this.NamespaceBinder.Bind <Namespace>(namespaceNode, document).Returns(@namespace); return(@namespace); }
public HashSet <DocumentViewModel> BuildExport() { var attachedMembers = new AttachedMemberCache(_utilities.FindAllTypes()); var commentParser = new CommentParser(); var builder = new NamespaceBuilder(new EntityNaming(), new SyntaxGenerator(new ExportableCheck(commentParser), new EntityNaming()), new ExportableCheck(commentParser), attachedMembers, commentParser); var result = new HashSet <DocumentViewModel>(new DocumentViewModelEqualityComparer()); _rootNamespace.Namespaces.ForEach(ns => builder.Build(ns, result)); return(result); }
public void Given_Namespace_Generate_CSharp( string testName, List <string> @namespace, string expectedCode) { Debug.Write(testName); var codeFormatter = new CodeFormatterWorkerspace(@"../../../CSharpTools.CodeGenerator.Tests.csproj"); var sut = new NamespaceBuilder(); var res = codeFormatter.Format(sut.Build(@namespace)); Assert.Equal(expectedCode, res.ToFullString()); }
public void HasKnownScope_ScopesProvided_ReturnsCorrectValue( string scope, bool expected) { // Arrange var ns = new NamespaceBuilder() .SetScope(scope) .Build(); // Act var canGenerate = ns.HasKnownScope; // Assert Assert.Equal(expected, canGenerate); }
public void AppliesToAllTargets_ScopesProvided_ReturnsCorrectValue( string scope, bool expected) { // Arrange var ns = new NamespaceBuilder() .SetScope(scope) .Build(); // Act var canGenerate = ns.AppliesToAllTargets; // Assert Assert.Equal(expected, canGenerate); }
internal SoalTypeBuilder ResolveXsdType(XName name) { SoalTypeBuilder result = null; if (name.NamespaceName == XsdReader.XsdNamespace) { result = this.ResolveXsdPrimitiveType(name); if (result != null) { return(result); } } NamespaceBuilder ns = this.GetNamespace(name.NamespaceName); if (ns != null) { SoalTypeBuilder type = ns.Declarations.FirstOrDefault(d => d.Name == name.LocalName) as SoalTypeBuilder; return(this.ResolveXsdReplacementType(type)); } return(null); }
public static NamespaceBuilder Add(string name) => NamespaceBuilder.AddNamespace(name);
public override IReadOnlyList <NamedElementBuilder> Namespace_ComputeProperty_Member(NamespaceBuilder _this) { return(new List <NamedElementBuilder>()); }
/// <summary> /// <b>自动</b>添加 using 命名空间 /// </summary> /// <param name="builder"></param> /// <returns></returns> public static NamespaceBuilder WithAutoUsing(this NamespaceBuilder builder) { builder.WithUsing(DependencyContext.Default.CompileLibraries.Select(x => x.Name).ToArray()); return(builder); }
public void 编译程序集() { // 编译选项 DomainOptionBuilder option = new DomainOptionBuilder() .WithPlatform(Platform.AnyCpu) // 生成可移植程序集 .WithDebug(false) // 使用 Release 编译 .WithKind(OutputKind.DynamicallyLinkedLibrary) // 生成动态库 .WithLanguageVersion(LanguageVersion.CSharp7_3); // 使用 C# 7.3 CompilationBuilder builder = CodeSyntax.CreateCompilation("Test.dll") .WithPath(Directory.GetParent(typeof(CompilationTests).Assembly.Location).FullName) .WithOption(option) .WithAutoAssembly() // 自动添加程序集引用 .WithNamespace(NamespaceBuilder.FromCode(@"using System; namespace MySpace { public class Test { public string MyMethod() { Console.WriteLine(""程序集运行成功""); return ""测试成功""; } } } ")); try { if (builder.CreateDomain(out var messages)) { Console.WriteLine("编译成功!开始执行程序集进行验证!"); var assembly = Assembly.LoadFile(Directory.GetParent(typeof(CompilationTests).Assembly.Location).FullName + "/Test.dll"); var type = assembly.GetType("MySpace.Test"); var method = type.GetMethod("MyMethod"); object obj = Activator.CreateInstance(type); string result = (string)method.Invoke(obj, null); if (result.Equals("测试成功")) { Console.WriteLine("执行程序集测试成功!"); } else { Console.WriteLine("执行程序集测试失败!"); } } else { _ = messages.Execute(item => { Console.WriteLine(@$ "ID:{item.Id} 严重程度:{item.Severity} 位置:{item.Location.SourceSpan.Start}~{item.Location.SourceSpan.End} 消息:{item.Descriptor.Title} {item}"); }); } } catch (Exception ex) { Console.WriteLine($"{ex.ToString()}"); } }
static void Main(string[] args) { PropertyInfo info = typeof(Program).GetProperty("a"); Console.WriteLine(info.Attributes.ToString()); // 编译选项 // 编译选项可以不配置 DomainOptionBuilder option = new DomainOptionBuilder() .WithPlatform(Platform.AnyCpu) // 生成可移植程序集 .WithDebug(false) // 使用 Release 编译 .WithKind(OutputKind.DynamicallyLinkedLibrary) // 生成动态库 .WithLanguageVersion(LanguageVersion.CSharp7_3); // 使用 C# 7.3 CompilationBuilder builder = CodeSyntax.CreateCompilation("Test.dll") .WithPath(Directory.GetParent(typeof(Program).Assembly.Location).FullName) .WithOption(option) // 可以省略 .WithAutoAssembly() // 自动添加程序集引用 .WithNamespace(NamespaceBuilder.FromCode(@"using System; namespace MySpace { public class Test { public string MyMethod() { Console.WriteLine(""程序集运行成功""); return ""测试成功""; } } } ")); try { if (builder.CreateDomain(out var messages)) { Console.WriteLine("编译成功!开始执行程序集进行验证!"); var assembly = Assembly.LoadFile(Directory.GetParent(typeof(Program).Assembly.Location).FullName + "/Test.dll"); var type = assembly.GetType("MySpace.Test"); var method = type.GetMethod("MyMethod"); object obj = Activator.CreateInstance(type); string result = (string)method.Invoke(obj, null); if (result.Equals("测试成功")) { Console.WriteLine("执行程序集测试成功!"); } else { Console.WriteLine("执行程序集测试失败!"); } } else { _ = messages.Execute(item => { Console.WriteLine(@$ "ID:{item.Id} 严重程度:{item.Severity} 位置:{item.Location.SourceSpan.Start}~{item.Location.SourceSpan.End} 消息:{item.Descriptor.Title} {item}"); }); } } catch (Exception ex) { Console.WriteLine($"{ex.ToString()}"); } //List<PortableExecutableReference> references = assemblies.Select(c => MetadataReference.CreateFromStream(c)).ToList(); //var tmp = DependencyContext.Default.RuntimeLibraries // .Execute(item => // { // item.Dependencies.Execute(itemNode => // { // var t = $"{itemNode.Name}.dll"; // Console.WriteLine(item.Path + "|" + item.HashPath + "|" + item.Path); // var c = MetadataReference.CreateFromFile(t); // references.Add(c); // }); // }).ToArray(); //PortableExecutableReference[] mscorlibs = references.ToArray(); //PortableExecutableReference mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location); //CSharpCompilation compilation = CSharpCompilation.Create("MyCompilation", // syntaxTrees: new[] { tree }, references: mscorlibs); ////Emitting to file is available through an extension method in the Microsoft.CodeAnalysis namespace //EmitResult emitResult = compilation.Emit("output.dll", "output.pdb"); ////If our compilation failed, we can discover exactly why. //if (!emitResult.Success) //{ // foreach (var diagnostic in emitResult.Diagnostics) // { // Console.WriteLine(diagnostic.ToString()); // } //} //var a = DependencyContext.Default.CompileLibraries; //var b = a.Count; //foreach (var item in DependencyContext.Default.CompileLibraries.SelectMany(cl=>cl.ResolveReferencePaths())) //{ // Console.WriteLine(item); //} //GenericBuilder generic = new GenericBuilder(); //generic.AddConstarint(new GenericScheme("T1", GenericConstraintsType.Struct)); //generic.AddConstarint(new GenericScheme("T2", GenericConstraintsType.Class)); //generic.AddConstarint(new GenericScheme("T3", GenericConstraintsType.Notnull)); //generic.AddConstarint(new GenericScheme("T4", GenericConstraintsType.Unmanaged)); //generic.AddConstarint(new GenericScheme("T5", GenericConstraintsType.New)); //// 如果能够反射拿到 Type //generic.AddConstarint(new GenericScheme("T6", GenericConstraintsType.BaseClass, typeof(int))); //// 如果要以字符串定义基类类型,请使用 此API //generic.AddBaseClassConstarint("T7", " IEnumerable<int>"); //generic.AddTUConstarint("T8", "T2"); //generic.AddConstarint(new GenericScheme("T9", GenericConstraintsType.Class, GenericConstraintsType.New)); //var syntax = generic.Build(); //var result = syntax.ToFullString(); //Console.WriteLine(result); //ClassBuilder buidler = new ClassBuilder(); //var build = buidler.SetVisibility(ClassVisibilityType.Public) // .SetName("Test") // .AddMethodMember(b => // { // b.SetVisibility(MemberVisibilityType.Public) // .SetRondomName() // .SetBlock("System.Console.WriteLine(\"111\");"); // }) // .Build(); // CompilationBuilder compilation = new CompilationBuilder(); //compilation.Test(build); Console.ReadKey(); }
public void OnWizardCreate() { //save settting if (!string.IsNullOrEmpty(folder) && !string.IsNullOrEmpty(namespaceName)) { List <string> filesPaths = new List <string>(); filesPaths.AddRange( Directory.GetFiles(Path.GetFullPath(".") + Path.DirectorySeparatorChar + folder, "*.cs", SearchOption.AllDirectories) ); Dictionary <string, bool> scripts = new Dictionary <string, bool>(); int counter = -1; foreach (string filePath in filesPaths) { scripts[filePath] = true; EditorUtility.DisplayProgressBar("Add Namespace", filePath, counter / (float)filesPaths.Count); counter++; string contents = File.ReadAllText(filePath); string res = NamespaceBuilder.AddNameSpace(contents, namespaceName); File.WriteAllText(filePath, res); } //处理加了命名空间后出现方法miss filesPaths.AddRange( Directory.GetFiles(Path.GetFullPath(".") + Path.DirectorySeparatorChar + folder, "*.unity", SearchOption.AllDirectories) ); filesPaths.AddRange( Directory.GetFiles(Path.GetFullPath(".") + Path.DirectorySeparatorChar + folder, "*.prefab", SearchOption.AllDirectories) ); counter = -1; foreach (string filePath in filesPaths) { EditorUtility.DisplayProgressBar("Modify Script Ref", filePath, counter / (float)filesPaths.Count); counter++; string contents = File.ReadAllText(filePath); string result = ""; using (TextReader reader = new StringReader(contents)) { int index = 0; while (reader.Peek() != -1) { string line = reader.ReadLine(); if (line.IndexOf("m_ObjectArgumentAssemblyTypeName:") > -1 && !line.Contains(namespaceName)) { string scriptName = line.Split(':')[1].Split(',')[0].Trim(); if (scripts.ContainsKey(scriptName)) { line = line.Replace(scriptName, "namespaceName." + scriptName); } result += line + "\n"; } else { result += line + "\n"; } ++index; } reader.Close(); } File.WriteAllText(filePath, result); } EditorUtility.ClearProgressBar(); AssetDatabase.Refresh(); } }