public override void SetUp() { base.SetUp(); AddUsing("System"); AddUsing("System.Collections.Generic"); AddUsing("System.Linq"); resolver.CurrentTypeDefinition = new DefaultTypeDefinition(project, string.Empty, "MyClass"); convertVisitor = new CodeDomConvertVisitor(); convertVisitor.UseFullyQualifiedTypeNames = true; }
public override void SetUp() { base.SetUp(); parsedFile = new CSharpParsedFile("test.cs", new UsingScope()); parsedFile.RootUsingScope.Usings.Add(MakeReference("System")); parsedFile.RootUsingScope.Usings.Add(MakeReference("System.Collections.Generic")); parsedFile.RootUsingScope.Usings.Add(MakeReference("System.Linq")); convertVisitor = new CodeDomConvertVisitor(); convertVisitor.UseFullyQualifiedTypeNames = true; }
static CodeCompileUnit ParseInternal (TextReader codeStream) { var cs = codeStream.ReadToEnd (); var tree = SyntaxTree.Parse (cs, "a.cs"); if (tree.Errors.Count > 0) throw new ArgumentException ("Stream contained errors."); var convertVisitor = new CodeDomConvertVisitor (); return convertVisitor.Convert (Compilation.Value, tree, tree.ToTypeSystem ()); }
public override void SetUp() { base.SetUp(); unresolvedFile = new CSharpUnresolvedFile(); unresolvedFile.RootUsingScope.Usings.Add(MakeReference("System")); unresolvedFile.RootUsingScope.Usings.Add(MakeReference("System.Collections.Generic")); unresolvedFile.RootUsingScope.Usings.Add(MakeReference("System.Linq")); convertVisitor = new CodeDomConvertVisitor(); convertVisitor.AllowSnippetNodes = false; convertVisitor.UseFullyQualifiedTypeNames = true; }
public override void SetUp() { base.SetUp(); unresolvedFile = new CSharpUnresolvedFile("test.cs"); unresolvedFile.RootUsingScope.Usings.Add(MakeReference("System")); unresolvedFile.RootUsingScope.Usings.Add(MakeReference("System.Collections.Generic")); unresolvedFile.RootUsingScope.Usings.Add(MakeReference("System.Linq")); convertVisitor = new CodeDomConvertVisitor(); convertVisitor.AllowSnippetNodes = false; convertVisitor.UseFullyQualifiedTypeNames = true; }
static CodeCompileUnit ParseInternal(TextReader codeStream) { var cs = codeStream.ReadToEnd(); var tree = SyntaxTree.Parse(cs, "a.cs"); if (tree.Errors.Count > 0) { throw new ArgumentException("Stream contained errors."); } var convertVisitor = new CodeDomConvertVisitor(); return(convertVisitor.Convert(Compilation.Value, tree, tree.ToTypeSystem())); }
private static string CSharpToPowerShell(string csharp) { CSharpParser parser = new CSharpParser(); SyntaxTree syntaxTree = parser.Parse(csharp); CodeDomConvertVisitor visitor = new CodeDomConvertVisitor(); var codeObject = syntaxTree.AcceptVisitor(visitor); var stringWriter = new StringWriter(); var powerShellProvider = new PowerShellCodeDomProvider(); powerShellProvider.GenerateCodeFromCompileUnit(codeObject as CodeCompileUnit, stringWriter, new CodeGeneratorOptions()); return(stringWriter.ToString()); }
static CodeCompileUnit ParseInternal (TextReader codeStream) { var tree = SyntaxTree.Parse (codeStream); if (tree.Errors.Count > 0) throw new ArgumentException ("Stream contained errors."); var convertVisitor = new CodeDomConvertVisitor (); CodeCompileUnit ccu = convertVisitor.Convert (Compilation.Value, tree, tree.ToTypeSystem ()); //C# parser seems to insist on putting imports in the "Global" namespace; fix it up for (int i = 0; i < ccu.Namespaces.Count; i++) { CodeNamespace global = ccu.Namespaces [i]; if ((global.Name == "Global") && (global.Types.Count == 0)) { global.Name = ""; ccu.Namespaces.RemoveAt (i); ccu.Namespaces.Insert (0, global); //clear out repeat imports... for (int j = 1; j < ccu.Namespaces.Count; j++) { CodeNamespace cn = ccu.Namespaces [j]; //why can't we remove imports? will have to collect ones to keep //then clear and refill CodeNamespaceImportCollection imps = new CodeNamespaceImportCollection (); for (int m = 0; m < cn.Imports.Count; m++) { bool found = false; for (int n = 0; n < global.Imports.Count; n++) if (global.Imports [n] == cn.Imports [m]) found = true; if (!found) imps.Add (cn.Imports [m]); } cn.Imports.Clear (); foreach (CodeNamespaceImport imp in imps) cn.Imports.Add (imp); } break; } } return ccu; }
// Steps to load the designer: // - Parse main file // - Find other files containing parts of the form // - Parse all files and look for fields (for controls) and InitializeComponents method // - Create CodeDom objects for fields and InitializeComponents statements // - If debug build and Ctrl pressed, output CodeDom to console // - Return CodeDom objects to the .NET designer protected override CodeCompileUnit Parse() { SD.Log.Debug("AlDesignerLoader.Parse()"); lastTextContentVersion = context.DesignerCodeFileDocument.Version; var primaryParseInfo = context.GetPrimaryFileParseInformation(); var compilation = context.GetCompilation(); // Find designer class ITypeDefinition designerClass = FormsDesignerSecondaryDisplayBinding.GetDesignableClass(primaryParseInfo.UnresolvedFile, compilation, out primaryPart); IMethod initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(designerClass); if (initializeComponents == null) { throw new FormsDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded."); } Debug.Assert(primaryPart != null); Debug.Assert(designerClass != null); bool isFirstClassInFile = primaryParseInfo.UnresolvedFile.TopLevelTypeDefinitions[0] == primaryPart; // TODO: translate const string missingReferenceMessage = "Your project is missing a reference to '${Name}' - please add it using 'Project > Add Reference'."; if (compilation.FindType(typeof(System.Drawing.Point)).Kind == TypeKind.Unknown) { throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name", "System.Drawing"))); } if (compilation.FindType(typeof(System.Windows.Forms.Form)).Kind == TypeKind.Unknown) { throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name", "System.Windows.Forms"))); } CodeDomConvertVisitor cv = new CodeDomConvertVisitor(); cv.UseFullyQualifiedTypeNames = true; AlFullParseInformation designerParseInfo; MethodDeclaration initializeComponentsDeclaration = initializeComponents.GetDeclaration(out designerParseInfo) as MethodDeclaration; if (initializeComponentsDeclaration == null) { throw new FormsDesignerLoadException("Could not find source code for InitializeComponents"); } var resolver = designerParseInfo.GetResolver(compilation); var codeMethod = (CodeMemberMethod)cv.Convert(initializeComponentsDeclaration, resolver); var codeClass = new CodeTypeDeclaration(designerClass.Name); codeClass.Attributes = MemberAttributes.Public; codeClass.BaseTypes.AddRange(designerClass.DirectBaseTypes.Select(cv.Convert).ToArray()); codeClass.Members.Add(codeMethod); foreach (var field in designerClass.Fields) { var codeField = new CodeMemberField(cv.Convert(field.Type), field.Name); codeField.Attributes = GetAccessibility(field); codeClass.Members.Add(codeField); } var codeNamespace = new CodeNamespace(designerClass.Namespace); codeNamespace.Types.Add(codeClass); var codeUnit = new CodeCompileUnit(); codeUnit.Namespaces.Add(codeNamespace); // output generated CodeDOM to the console : #if DEBUG if ((Control.ModifierKeys & Keys.Control) == Keys.Control) { CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator(); outputGenerator.GenerateCodeFromMember(codeMethod, Console.Out, null); this.CodeDomProvider.GenerateCodeFromCompileUnit(codeUnit, Console.Out, null); } #endif LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished"); if (!isFirstClassInFile) { MessageService.ShowWarning("The form must be the first class in the file in order for form resources to be compiled correctly.\n" + "Please move other classes below the form class definition or move them to other files."); } return(codeUnit); }
// Steps to load the designer: // - Parse main file // - Find other files containing parts of the form // - Parse all files and look for fields (for controls) and InitializeComponents method // - Create CodeDom objects for fields and InitializeComponents statements // - If debug build and Ctrl pressed, output CodeDom to console // - Return CodeDom objects to the .NET designer protected override CodeCompileUnit Parse() { SD.Log.Debug("CSharpDesignerLoader.Parse()"); lastTextContentVersion = context.DesignerCodeFileDocument.Version; var primaryParseInfo = context.GetPrimaryFileParseInformation(); var compilation = context.GetCompilation(); // Find designer class ITypeDefinition designerClass = FormsDesignerSecondaryDisplayBinding.GetDesignableClass(primaryParseInfo.UnresolvedFile, compilation, out primaryPart); IMethod initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(designerClass); if (initializeComponents == null) { throw new FormsDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded."); } Debug.Assert(primaryPart != null); Debug.Assert(designerClass != null); bool isFirstClassInFile = primaryParseInfo.UnresolvedFile.TopLevelTypeDefinitions[0] == primaryPart; // TODO: translate const string missingReferenceMessage = "Your project is missing a reference to '${Name}' - please add it using 'Project > Add Reference'."; if (compilation.FindType(typeof(System.Drawing.Point)).Kind == TypeKind.Unknown) { throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name", "System.Drawing"))); } if (compilation.FindType(typeof(System.Windows.Forms.Form)).Kind == TypeKind.Unknown) { throw new FormsDesignerLoadException(StringParser.Parse(missingReferenceMessage, new StringTagPair("Name" , "System.Windows.Forms"))); } CodeDomConvertVisitor cv = new CodeDomConvertVisitor(); cv.UseFullyQualifiedTypeNames = true; CSharpFullParseInformation designerParseInfo; MethodDeclaration initializeComponentsDeclaration = initializeComponents.GetDeclaration(out designerParseInfo) as MethodDeclaration; if (initializeComponentsDeclaration == null) throw new FormsDesignerLoadException("Could not find source code for InitializeComponents"); var resolver = designerParseInfo.GetResolver(compilation); var codeMethod = (CodeMemberMethod) cv.Convert(initializeComponentsDeclaration, resolver); var codeClass = new CodeTypeDeclaration(designerClass.Name); codeClass.Attributes = MemberAttributes.Public; codeClass.BaseTypes.AddRange(designerClass.DirectBaseTypes.Select(cv.Convert).ToArray()); codeClass.Members.Add(codeMethod); foreach (var field in designerClass.Fields) { var codeField = new CodeMemberField(cv.Convert(field.Type), field.Name); codeClass.Members.Add(codeField); } var codeNamespace = new CodeNamespace(designerClass.Namespace); codeNamespace.Types.Add(codeClass); var codeUnit = new CodeCompileUnit(); codeUnit.Namespaces.Add(codeNamespace); // output generated CodeDOM to the console : #if DEBUG if ((Control.ModifierKeys & Keys.Control) == Keys.Control) { CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator(); outputGenerator.GenerateCodeFromMember(codeMethod, Console.Out, null); this.CodeDomProvider.GenerateCodeFromCompileUnit(codeUnit, Console.Out, null); } #endif LoggingService.Debug("NRefactoryDesignerLoader.Parse() finished"); if (!isFirstClassInFile) { MessageService.ShowWarning("The form must be the first class in the file in order for form resources to be compiled correctly.\n" + "Please move other classes below the form class definition or move them to other files."); } return codeUnit; }
private static string CSharpToPowerShell(string csharp) { CSharpParser parser = new CSharpParser(); SyntaxTree syntaxTree = parser.Parse(csharp); CodeDomConvertVisitor visitor = new CodeDomConvertVisitor(); var codeObject = syntaxTree.AcceptVisitor(visitor); var stringWriter = new StringWriter(); var powerShellProvider = new PowerShellCodeDomProvider(); powerShellProvider.GenerateCodeFromCompileUnit(codeObject as CodeCompileUnit, stringWriter, new CodeGeneratorOptions()); return stringWriter.ToString(); }