From 4aa100ffdfc577f9a49933e71fdb270aa4a67829 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 7 Oct 2005 17:35:47 +0000 Subject: [PATCH] Boo implicitly references System.dll and Boo.Lang.dll. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@543 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Boo/BooBinding/Project/BooBinding.csproj | 1 + .../Project/Src/BooLanguageProperties.cs | 37 +++++++++++++++++++ .../Boo/BooBinding/Project/Src/BooProject.cs | 15 ++++++++ .../Project/Src/CodeCompletion/BooResolver.cs | 1 + .../Src/CodeCompletion/ConvertVisitor.cs | 2 +- .../Src/CodeCompletion/ResolveVisitor.cs | 12 +----- .../Project/Templates/ConsoleProject.xpt | 1 - .../Project/Templates/FormsProject.xpt | 1 - .../BooBinding/Project/Templates/Library.xpt | 1 - .../NRefactoryResolver/NRefactoryResolver.cs | 18 +++++++++ .../ParserService/ParseProjectContent.cs | 13 ++++++- 11 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooLanguageProperties.cs diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj index 55d9ea0786..d744d75ac6 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj @@ -62,6 +62,7 @@ + diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooLanguageProperties.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooLanguageProperties.cs new file mode 100644 index 0000000000..6fb5b1a59f --- /dev/null +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooLanguageProperties.cs @@ -0,0 +1,37 @@ +// +// 2002-2005 AlphaSierraPapa +// GNU General Public License +// +// $Revision$ +// + +using System; +using ICSharpCode.SharpDevelop.Dom; + +namespace Grunwald.BooBinding +{ + public class BooLanguageProperties : LanguageProperties + { + public readonly static BooLanguageProperties Instance = new BooLanguageProperties(); + + public BooLanguageProperties() : base(StringComparer.InvariantCulture) {} + + public override bool ImportNamespaces { + get { + return true; + } + } + + public override bool ImportModules { + get { + return true; + } + } + + public override bool CanImportClasses { + get { + return true; + } + } + } +} diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs index d7c5caf28c..999b6cbf30 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs @@ -7,6 +7,7 @@ using System; using System.ComponentModel; +using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Internal.Templates; using ICSharpCode.SharpDevelop.Project; using ICSharpCode.Core; @@ -19,6 +20,7 @@ namespace Grunwald.BooBinding { this.Name = projectName; Language = "Boo"; + LanguageProperties = BooLanguageProperties.Instance; SetupProject(fileName); IdGuid = BaseConfiguration["ProjectGuid"]; } @@ -26,6 +28,7 @@ namespace Grunwald.BooBinding public BooProject(ProjectCreateInformation info) { Language = "Boo"; + LanguageProperties = BooLanguageProperties.Instance; Create(info); imports.Add("$(BooBinPath)\\MsBuild.Boo.Targets"); } @@ -35,6 +38,18 @@ namespace Grunwald.BooBinding return new BooLanguageBinding().CanCompile(fileName); } + public override ParseProjectContent CreateProjectContent() + { + ParseProjectContent pc = base.CreateProjectContent(); + ReferenceProjectItem systemItem = new ReferenceProjectItem(this, "System"); + pc.ReferencedContents.Add(ProjectContentRegistry.GetProjectContentForReference(systemItem)); + ReferenceProjectItem booLangItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Builtins).Assembly.Location); + pc.ReferencedContents.Add(ProjectContentRegistry.GetProjectContentForReference(booLangItem)); + pc.DefaultImports = new DefaultUsing(pc); + pc.DefaultImports.Usings.Add("Boo.Lang.Builtins"); + return pc; + } + [Browsable(false)] public override IAmbience Ambience { get { 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 7140a79315..c91d2e5a21 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs @@ -157,6 +157,7 @@ namespace Grunwald.BooBinding.CodeCompletion { if (!Initialize(fileName, caretLine, caretColumn)) return null; + ArrayList result = GetImportedNamespaceContents(); NRResolver.AddContentsFromCalling(result, callingClass, callingMember); diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs index 0eb747c704..97d6c70330 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs @@ -203,7 +203,7 @@ namespace Grunwald.BooBinding.CodeCompletion } else if (reference is AST.SimpleTypeReference) { string name = ((AST.SimpleTypeReference)reference).Name; if (BooAmbience.ReverseTypeConversionTable.ContainsKey(name)) - return new GetClassReturnType(ProjectContentRegistry.Mscorlib, BooAmbience.ReverseTypeConversionTable[name], 0); + return new GetClassReturnType(projectContent, BooAmbience.ReverseTypeConversionTable[name], 0); return new SearchClassReturnType(projectContent, callingClass, caretLine, caretColumn, name, 0); } else if (reference is AST.CallableTypeReference) { 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 507dc29cc0..c701ca81b9 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs @@ -168,17 +168,7 @@ namespace Grunwald.BooBinding.CodeCompletion return true; } - // Boo can import classes: - foreach (IUsing @using in cu.Usings) { - foreach (string import in @using.Usings) { - IClass c = projectContent.GetClass(import); - if (c != null) { - if (ResolveMember(c.DefaultReturnType, identifier)) - return true; - } - } - } - // Boo can import modules: + // Boo can import classes+modules: foreach (object o in resolver.GetImportedNamespaceContents()) { IClass c = o as IClass; if (c != null && IsSameName(identifier, c.Name)) { diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/ConsoleProject.xpt b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/ConsoleProject.xpt index 317a100834..65d821e43f 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/ConsoleProject.xpt +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/ConsoleProject.xpt @@ -21,7 +21,6 @@ - diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt index da0c8403ad..2ed459f472 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt @@ -21,7 +21,6 @@ - diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt index 3634404633..25481edcbd 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt @@ -21,7 +21,6 @@ - diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs index a6e834cfb3..1d81f86c0a 100644 --- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs @@ -996,7 +996,25 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver return; } bool importNamespaces = projectContent.Language.ImportNamespaces; + bool importClasses = projectContent.Language.CanImportClasses; foreach (string name in u.Usings) { + if (importClasses) { + IClass c = projectContent.GetClass(name, 0); + if (c != null) { + ArrayList members = new ArrayList(); + IReturnType t = c.DefaultReturnType; + members.AddRange(t.GetMethods()); + members.AddRange(t.GetFields()); + members.AddRange(t.GetEvents()); + members.AddRange(t.GetProperties()); + foreach (IMember m in members) { + if (m.IsStatic && m.IsPublic) { + result.Add(m); + } + } + continue; + } + } if (importNamespaces) { projectContent.AddNamespaceContents(result, name, projectContent.Language, true); } else { diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs index 3143b9bfbc..5ee1445b68 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs @@ -112,9 +112,20 @@ namespace ICSharpCode.Core } } + int languageDefaultImportCount = -1; + void UpdateDefaultImports(ProjectItem[] items) { - DefaultImports = null; + if (languageDefaultImportCount < 0) { + languageDefaultImportCount = (DefaultImports != null) ? DefaultImports.Usings.Count : 0; + } + if (languageDefaultImportCount == 0) { + DefaultImports = null; + } else { + while (DefaultImports.Usings.Count > languageDefaultImportCount) { + DefaultImports.Usings.RemoveAt(languageDefaultImportCount); + } + } foreach (ProjectItem item in items) { if (item.ItemType == ItemType.Import) { if (DefaultImports == null) {