From 738f985f034ef400e9c304c19e1869e75b7ccece Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 16 Oct 2005 20:51:04 +0000 Subject: [PATCH] Fixed BOO-347 (BooBinding does not detect methods generated by AST Attributes) Fixed bug when switching layout configurations. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@585 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Boo/BooBinding/Project/BooBinding.csproj | 4 ++ .../Boo/BooBinding/Project/PostBuildEvent.bat | 1 - .../BooBinding/Project/Src/AssemblyInfo.cs | 2 +- .../Boo/BooBinding/Project/Src/BooProject.cs | 3 +- .../Project/Src/CodeCompletion/BooParser.cs | 1 + .../Project/Src/CodeCompletion/BooResolver.cs | 39 +++++++++++++++---- .../Src/CodeCompletion/ResolveVisitor.cs | 18 ++++++--- .../Project/Templates/FormsProject.xpt | 2 +- .../BooBinding/Project/Templates/Library.xpt | 4 +- .../Project/AssemblyInfo.cs | 2 +- .../Boo/StandaloneConverter/AssemblyInfo.cs | 2 +- .../Test/AssemblyInfo.cs | 2 +- src/Main/Base/Project/Src/Dom/XmlDoc.cs | 2 + .../Workbench/Layouts/SdiWorkspaceLayout.cs | 17 ++++++-- 14 files changed, 72 insertions(+), 27 deletions(-) diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj index 295bd96aa5..41afea9523 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj @@ -55,6 +55,10 @@ ..\..\RequiredLibraries\Boo.Lang.CodeDom.dll False + + ..\..\RequiredLibraries\Boo.Lang.Useful.dll + False + diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/PostBuildEvent.bat b/src/AddIns/BackendBindings/Boo/BooBinding/Project/PostBuildEvent.bat index 316d01bea6..b35b024d08 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/PostBuildEvent.bat +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/PostBuildEvent.bat @@ -9,6 +9,5 @@ popd :copyFiles copy "%1\..\..\RequiredLibraries\booc.*" . copy "%1\..\..\RequiredLibraries\*.targets" . -copy "%1\..\..\RequiredLibraries\Boo.Lang.Useful.dll" . copy "%1\..\..\RequiredLibraries\Boo.Microsoft.Build.Tasks.dll" . :BooPostBuildEventEnd diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/AssemblyInfo.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/AssemblyInfo.cs index e817ce439e..8b2e1e5d35 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/AssemblyInfo.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// +// // 2002-2005 AlphaSierraPapa // GNU General Public License // diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs index ec656c1d9d..8e8fa4b01d 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs @@ -57,8 +57,7 @@ namespace Grunwald.BooBinding pc.ReferencedContents.Add(ProjectContentRegistry.GetProjectContentForReference(systemItem)); ReferenceProjectItem booLangItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Builtins).Assembly.Location); pc.ReferencedContents.Add(ProjectContentRegistry.GetProjectContentForReference(booLangItem)); - string booDir = Path.GetDirectoryName(typeof(Boo.Lang.Builtins).Assembly.Location); - ReferenceProjectItem booUsefulItem = new ReferenceProjectItem(this, Path.Combine(booDir, "Boo.Lang.Useful.dll")); + ReferenceProjectItem booUsefulItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Useful.Attributes.SingletonAttribute).Assembly.Location); pc.ReferencedContents.Add(ProjectContentRegistry.GetProjectContentForReference(booUsefulItem)); pc.DefaultImports = new DefaultUsing(pc); pc.DefaultImports.Usings.Add("Boo.Lang.Builtins"); diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs index 0f897d05f6..26a3a01bd9 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooParser.cs @@ -109,6 +109,7 @@ namespace Grunwald.BooBinding.CodeCompletion compilePipe.BreakOnErrors = false; compiler.Parameters.Pipeline = compilePipe; + compiler.Parameters.References.Add(typeof(Boo.Lang.Useful.Attributes.SingletonAttribute).Assembly); int errorCount = 0; compilePipe.AfterStep += delegate(object sender, CompilerStepEventArgs args) { diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs index 9a41fd58ca..bd419b0185 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs @@ -73,23 +73,41 @@ namespace Grunwald.BooBinding.CodeCompletion return false; } this.cu = parseInfo.MostRecentCompilationUnit; + if (cu == null) { + return false; + } this.pc = cu.ProjectContent; this.caretLine = caretLine; this.caretColumn = caretColumn; - this.callingClass = cu.GetInnermostClass(caretLine, caretColumn); + this.callingClass = GetCallingClass(pc); + callingMember = ResolveCurrentMember(callingClass); + if (callingMember == null) { + if (cu != parseInfo.BestCompilationUnit) { + IClass olderClass = GetCallingClass(parseInfo.BestCompilationUnit.ProjectContent); + if (olderClass != null && callingClass == null) { + this.callingClass = olderClass; + } + callingMember = ResolveCurrentMember(olderClass); + } + } + return true; + } + + IClass GetCallingClass(IProjectContent pc) + { + IClass callingClass = cu.GetInnermostClass(caretLine, caretColumn); if (callingClass == null) { - if (cu.Classes.Count == 0) return false; + if (cu.Classes.Count == 0) return null; callingClass = cu.Classes[cu.Classes.Count - 1]; if (!callingClass.Region.IsEmpty) { if (callingClass.Region.BeginLine > caretLine) - return false; + callingClass = null; } } - callingMember = ResolveCurrentMember(); - return true; + return callingClass; } - IMember ResolveCurrentMember() + IMember ResolveCurrentMember(IClass callingClass) { LoggingService.DebugFormatted("Getting current method... caretLine = {0}, caretColumn = {1}", caretLine, caretColumn); if (callingClass == null) return null; @@ -120,7 +138,14 @@ namespace Grunwald.BooBinding.CodeCompletion #region GetTypeOfExpression public IReturnType GetTypeOfExpression(AST.Expression expr) { - if (!Initialize(expr.LexicalInfo.FileName, expr.LexicalInfo.Line, expr.LexicalInfo.Column)) + AST.Node node = expr; + AST.LexicalInfo lexInfo; + do { + if (node == null) return null; + lexInfo = node.LexicalInfo; + node = node.ParentNode; + } while (lexInfo == null || lexInfo.FileName == null); + if (!Initialize(lexInfo.FileName, lexInfo.Line, lexInfo.Column)) return null; ResolveVisitor visitor = new ResolveVisitor(this); visitor.Visit(expr); diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs index 88072f58eb..0c78bd8d5d 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs @@ -162,10 +162,10 @@ namespace Grunwald.BooBinding.CodeCompletion } } } - if (callingClass == null) - return false; - if (ResolveMember(callingClass.DefaultReturnType, identifier)) - return true; + if (callingClass != null) { + if (ResolveMember(callingClass.DefaultReturnType, identifier)) + return true; + } string namespaceName = projectContent.SearchNamespace(identifier, callingClass, cu, resolver.CaretLine, resolver.CaretColumn); if (namespaceName != null && namespaceName.Length > 0) { @@ -488,12 +488,18 @@ namespace Grunwald.BooBinding.CodeCompletion public override void OnSelfLiteralExpression(SelfLiteralExpression node) { - MakeResult(callingClass.DefaultReturnType); + if (callingClass == null) + resolveResult = null; + else + MakeResult(callingClass.DefaultReturnType); } public override void OnSuperLiteralExpression(SuperLiteralExpression node) { - MakeResult(callingClass.BaseType); + if (callingClass == null) + resolveResult = null; + else + MakeResult(callingClass.BaseType); } public override void OnSimpleTypeReference(SimpleTypeReference node) diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt index 6a0d955f4e..e29886f163 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt @@ -86,7 +86,7 @@ import System.Runtime.CompilerServices // You can specify all values by your own or you can build default build and revision // numbers with the '*' character (the default): -[assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] ]]> diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt index cd1480d53b..85ccb7eb14 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt @@ -36,7 +36,7 @@ class MyClass: def constructor(): pass -}]]> +]]> diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/AssemblyInfo.cs b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/AssemblyInfo.cs index 8bfbd040e6..d14f7b20d7 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/AssemblyInfo.cs +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// +// // 2002-2005 AlphaSierraPapa // GNU General Public License // diff --git a/src/AddIns/BackendBindings/Boo/StandaloneConverter/AssemblyInfo.cs b/src/AddIns/BackendBindings/Boo/StandaloneConverter/AssemblyInfo.cs index c3bc972392..c521d108fe 100644 --- a/src/AddIns/BackendBindings/Boo/StandaloneConverter/AssemblyInfo.cs +++ b/src/AddIns/BackendBindings/Boo/StandaloneConverter/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// +// // 2002-2005 AlphaSierraPapa // GNU General Public License // diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Test/AssemblyInfo.cs b/src/Libraries/ICSharpCode.Build.Tasks/Test/AssemblyInfo.cs index 8db737e269..3ab496709a 100644 --- a/src/Libraries/ICSharpCode.Build.Tasks/Test/AssemblyInfo.cs +++ b/src/Libraries/ICSharpCode.Build.Tasks/Test/AssemblyInfo.cs @@ -1,4 +1,4 @@ -// +// // 2002-2005 AlphaSierraPapa // GNU General Public License // diff --git a/src/Main/Base/Project/Src/Dom/XmlDoc.cs b/src/Main/Base/Project/Src/Dom/XmlDoc.cs index d6d793bdbc..4441e1ece2 100644 --- a/src/Main/Base/Project/Src/Dom/XmlDoc.cs +++ b/src/Main/Base/Project/Src/Dom/XmlDoc.cs @@ -68,6 +68,8 @@ namespace ICSharpCode.SharpDevelop.Dom public string GetDocumentation(string key) { + if (xmlDescription == null) + throw new ObjectDisposedException("XmlDoc"); lock (xmlDescription) { string result; if (xmlDescription.TryGetValue(key, out result)) diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs index 2d6e6c9f7c..14f446e8d9 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceLayout.cs @@ -113,10 +113,12 @@ namespace ICSharpCode.SharpDevelop.Gui LoadLayoutConfiguration(); ShowPads(); + // ShowPads could create new pads if new addins have been installed, so we + // need to call AllowInitialize again foreach (PadContentWrapper content in contentHash.Values) { content.AllowInitialize(); } - + ShowViewContents(); RedrawAllComponents(); @@ -145,9 +147,9 @@ namespace ICSharpCode.SharpDevelop.Gui wbForm.ResumeLayout(false); Properties fullscreenProperties = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.FullscreenOptions", new Properties()); - fullscreenProperties.PropertyChanged += TrackFullscreenPropertyChanges; + fullscreenProperties.PropertyChanged += TrackFullscreenPropertyChanges; } - + void TrackFullscreenPropertyChanges(object sender, PropertyChangedEventArgs e) { if (e.OldValue != e.NewValue && wbForm.FullScreen) { @@ -187,6 +189,9 @@ namespace ICSharpCode.SharpDevelop.Gui } catch { // ignore errors loading configuration } + foreach (PadContentWrapper content in contentHash.Values) { + content.AllowInitialize(); + } } void LoadDefaultLayoutConfiguration() @@ -378,6 +383,10 @@ namespace ICSharpCode.SharpDevelop.Gui ActivateContent(); } + /// + /// Enables initializing the content. This is used to prevent initializing all view + /// contents when the layout configuration is changed. + /// public void AllowInitialize() { allowInitialize = true; @@ -489,7 +498,7 @@ namespace ICSharpCode.SharpDevelop.Gui RedrawToolbars(); RedrawStatusBar(); } - + void RedrawMainMenu() { Properties fullscreenProperties = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.FullscreenOptions", new Properties());