public override bool ShowMethod(EventDescription eventDescription, string methodName) { CodeDomDocDataAdapter adapter = GetDocDataAdapterForXSharpFile(); List <CodeTypeMember> methodsToShow = GetHandlersFromActiveFile(methodName); if (methodsToShow == null || methodsToShow.Count < 1) { return(false); } Point point = new Point(); if (methodsToShow[0] != null) { //We can't navigate to every method, so just take the first one in the list. object pt = methodsToShow[0].UserData[typeof(Point)]; if (pt != null) { point = (Point)pt; } } //Get IVsTextManager to navigate to the code IVsTextManager mgr = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(VsTextManagerClass)) as IVsTextManager; Guid logViewCode = VSConstants.LOGVIEWID_Code; return(ErrorHandler.Succeeded(mgr.NavigateToLineAndColumn(adapter.DocData.Buffer, ref logViewCode, point.Y - 1, point.X, point.Y - 1, point.X))); }
/// <summary> /// This method will get the CodeDomDocDataAdapter corresponding to the active XAML file in /// the designer. /// </summary> /// <returns>The CodeDomDocDataAdapter for the .py file that corresponds to the active xaml file</returns> public CodeDomDocDataAdapter GetDocDataAdapterForPyFile() { IVSMDCodeDomProvider codeDom = (new ServiceProvider(pyFile.OleServiceProvider, true)).GetService(typeof(SVSMDCodeDomProvider)) as IVSMDCodeDomProvider; DocData data = new DocData((project as PythonProjectNode).ProjectMgr.Site, pyFile.Url); CodeDomDocDataAdapter cdDocDataAdapter = new CodeDomDocDataAdapter((project as PythonProjectNode).ProjectMgr.Site, data); return(cdDocDataAdapter); }
/// <summary> /// This method will get the CodeTypeDeclaration corresponding to the active XAML file in /// the designer. /// </summary> /// <returns>The CodeTypeDeclaration for the .prg file that corresponds to the active xaml file</returns> CodeTypeDeclaration GetCodeDomForXSharpFile() { CodeDomDocDataAdapter cdda = GetDocDataAdapterForXSharpFile(); // That will call the Parse method in VSXSharpCodeDomProvider class CodeTypeDeclaration ctd = cdda.TypeDeclaration; // CodeCompileUnit ccu = cdda.CompileUnit; // return(ctd); }
/// <summary> /// This method will get the CodeDomDocDataAdapter corresponding to the active XAML file in /// the designer. /// </summary> /// <returns>The CodeDomDocDataAdapter for the .prg file that corresponds to the active xaml file</returns> CodeDomDocDataAdapter GetDocDataAdapterForXSharpFile() { if (_cdda == null) { var codeDom = (IVSMDCodeDomProvider)(new ServiceProvider(_xsFile.OleServiceProvider, true)).GetService(typeof(SVSMDCodeDomProvider)); var data = new DocData(((XSharpProjectNode)_project).ProjectMgr.Site, _xsFile.Url); _cdda = new CodeDomDocDataAdapter((_project as XSharpProjectNode).ProjectMgr.Site, data); } return(_cdda); }
public override bool CreateMethod(EventDescription eventDescription, string methodName) { CodeMemberMethod method = new CodeMemberMethod(); method.Name = methodName; foreach (EventParameter param in eventDescription.Parameters) { method.Parameters.Add(new CodeParameterDeclarationExpression(param.TypeName, param.Name)); } //Finally, add the new method to the class CodeDomDocDataAdapter adapter = GetDocDataAdapterForPyFile(); adapter.TypeDeclaration.Members.Add(method); adapter.Generate(); return(true); }
public override bool AddEventHandler(EventDescription eventDescription, string objectName, string methodName) { //FixMe: VladD2: Какая-то питоновская чушь! Надо разобраться и переписать. const string Init = "__init__"; //This is not the most optimal solution for WPF since we will call FindLogicalNode for each event handler, //but it simplifies the code generation for now. CodeDomDocDataAdapter adapter = GetDocDataAdapterForNemerleFile(); CodeMemberMethod method = null; //Find the __init__ method foreach (CodeTypeMember ctMember in adapter.TypeDeclaration.Members) { if (ctMember is CodeConstructor) { if (ctMember.Name == Init) { method = ctMember as CodeMemberMethod; break; } } } if (method == null) { method = new CodeConstructor(); method.Name = Init; } //Create a code statement which looks like: LogicalTreeHelper.FindLogicalNode(self.Root, "button1").Click += self.button1_Click var logicalTreeHelper = new CodeTypeReferenceExpression("LogicalTreeHelper"); var findLogicalNodeMethod = new CodeMethodReferenceExpression(logicalTreeHelper, "FindLogicalNode"); var selfWindow = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Root"); var findLogicalNodeInvoke = new CodeMethodInvokeExpression(findLogicalNodeMethod, selfWindow, new CodeSnippetExpression("\'" + objectName + "\'")); var createDelegateExpression = new CodeDelegateCreateExpression(new CodeTypeReference("System.EventHandler"), new CodeThisReferenceExpression(), methodName); var attachEvent = new CodeAttachEventStatement(findLogicalNodeInvoke, eventDescription.Name, createDelegateExpression); method.Statements.Add(attachEvent); adapter.Generate(); return(true); }
/// <summary> /// This method will get the CodeDomDocDataAdapter corresponding to the active XAML file in /// the designer. /// </summary> /// <returns>The CodeDomDocDataAdapter for the .py file that corresponds to the active xaml file</returns> public CodeDomDocDataAdapter GetDocDataAdapterForPyFile() { IVSMDCodeDomProvider codeDom = (new ServiceProvider(pyFile.OleServiceProvider, true)).GetService(typeof(SVSMDCodeDomProvider)) as IVSMDCodeDomProvider; DocData data = new DocData((project as PythonProjectNode).ProjectMgr.Site, pyFile.Url); CodeDomDocDataAdapter cdDocDataAdapter = new CodeDomDocDataAdapter((project as PythonProjectNode).ProjectMgr.Site, data); return cdDocDataAdapter; }