Browse Source

Added code completion for the "My" namespace.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@213 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
90a5e40aa7
  1. 1
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAmbience.cs
  2. 74
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/MyNamespaceBuilder.cs
  3. 7
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  4. 6
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetAmbience.cs
  5. 1
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj
  6. 0
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt
  7. 5
      src/Main/Base/Project/Src/Dom/ClassType.cs
  8. 5
      src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
  9. 15
      src/Main/Base/Project/Src/Dom/LanguageProperties.cs
  10. 5
      src/Main/Base/Project/Src/Dom/ModifierEnum.cs
  11. 6
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  12. 29
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  13. 23
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  14. 1
      src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
  15. 9
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  16. 6
      src/Main/Base/Project/Src/Project/IProject.cs
  17. 5
      src/Main/Base/Project/Src/Services/AmbienceService/NetAmbience.cs
  18. 14
      src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs
  19. 2
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

1
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAmbience.cs

@ -151,6 +151,7 @@ namespace ICSharpCode.Core
builder.Append("delegate"); builder.Append("delegate");
break; break;
case ClassType.Class: case ClassType.Class:
case ClassType.Module:
builder.Append("class"); builder.Append("class");
break; break;
case ClassType.Struct: case ClassType.Struct:

74
src/AddIns/BackendBindings/VBNetBinding/Project/Src/MyNamespaceBuilder.cs

@ -0,0 +1,74 @@
/*
* Created by SharpDevelop.
* User: Daniel Grunwald
* Date: 19.07.2005
* Time: 18:01
*/
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace VBNetBinding
{
public static class MyNamespaceBuilder
{
public static void BuildNamespace(IProject project, IProjectContent pc)
{
ICompilationUnit cu = new DefaultCompilationUnit(pc);
const string ns = "My";
IClass myApp = CreateMyApplication(cu, project, ns);
IClass myComp = CreateMyComputer(cu, project, ns);
cu.Classes.Add(myApp);
cu.Classes.Add(myComp);
DefaultClass c = new DefaultClass(cu, ns + ".MyProject");
c.ClassType = ClassType.Module;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Partial | ModifierEnum.Sealed;
c.Properties.Add(new DefaultProperty("Application",
myApp.DefaultReturnType,
ModifierEnum.Internal | ModifierEnum.Static,
null, null, c));
c.Properties.Add(new DefaultProperty("Computer",
myComp.DefaultReturnType,
ModifierEnum.Internal | ModifierEnum.Static,
null, null, c));
c.Properties.Add(new DefaultProperty("User",
new GetClassReturnType(pc, "Microsoft.VisualBasic.ApplicationServices.User"),
ModifierEnum.Internal | ModifierEnum.Static,
null, null, c));
cu.Classes.Add(c);
pc.UpdateCompilationUnit(null, cu, "GeneratedMyNamespace.vb", false);
}
static IClass CreateMyApplication(ICompilationUnit cu, IProject project, string ns)
{
DefaultClass c = new DefaultClass(cu, ns + ".MyApplication");
c.ClassType = ClassType.Class;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Partial | ModifierEnum.Sealed;
switch (project.OutputType) {
case OutputType.WinExe:
c.BaseTypes.Add("Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase");
break;
case OutputType.Exe:
c.BaseTypes.Add("Microsoft.VisualBasic.ApplicationServices.ConsoleApplicationBase");
break;
default:
c.BaseTypes.Add("Microsoft.VisualBasic.ApplicationServices.ApplicationBase");
break;
}
return c;
}
static IClass CreateMyComputer(ICompilationUnit cu, IProject project, string ns)
{
DefaultClass c = new DefaultClass(cu, ns + ".MyComputer");
c.ClassType = ClassType.Class;
c.Modifiers = ModifierEnum.Internal | ModifierEnum.Partial | ModifierEnum.Sealed;
c.BaseTypes.Add("Microsoft.VisualBasic.Devices.Computer");
return c;
}
}
}

7
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -239,6 +239,13 @@ namespace VBNetBinding
imports.Add(@"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets"); imports.Add(@"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets");
} }
public override ParseProjectContent CreateProjectContent()
{
ParseProjectContent pc = base.CreateProjectContent();
MyNamespaceBuilder.BuildNamespace(this, pc);
return pc;
}
void InitVB() void InitVB()
{ {
Language = "VBNet"; Language = "VBNet";

6
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetAmbience.cs

@ -147,6 +147,9 @@ namespace VBNetBinding
case ClassType.Class: case ClassType.Class:
builder.Append("Class"); builder.Append("Class");
break; break;
case ClassType.Module:
builder.Append("Module");
break;
case ClassType.Struct: case ClassType.Struct:
builder.Append("Structure"); builder.Append("Structure");
break; break;
@ -242,6 +245,9 @@ namespace VBNetBinding
case ClassType.Class: case ClassType.Class:
builder.Append("Class"); builder.Append("Class");
break; break;
case ClassType.Module:
builder.Append("Module");
break;
case ClassType.Struct: case ClassType.Struct:
builder.Append("Structure"); builder.Append("Structure");
break; break;

1
src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj

@ -52,6 +52,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<Compile Include="Src\VBNetCompletionBinding.cs" /> <Compile Include="Src\VBNetCompletionBinding.cs" />
<Compile Include="Src\MyNamespaceBuilder.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj"> <ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">

0
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/VBNetKeywordList.txt → src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt

5
src/Main/Base/Project/Src/Dom/ClassType.cs

@ -1,4 +1,4 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt"/> // <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/> // <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -12,6 +12,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Enum, Enum,
Interface, Interface,
Struct, Struct,
Delegate Delegate,
Module
} }
} }

5
src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs

@ -288,6 +288,8 @@ namespace ICSharpCode.SharpDevelop.Dom
return ReflectionReturnType.Object.GetUnderlyingClass(); return ReflectionReturnType.Object.GetUnderlyingClass();
} }
break; break;
case ClassType.Module:
return null;
case ClassType.Enum: case ClassType.Enum:
return ProjectContentRegistry.GetMscorlibContent().GetClass("System.Enum"); return ProjectContentRegistry.GetMscorlibContent().GetClass("System.Enum");
case ClassType.Delegate: case ClassType.Delegate:
@ -371,8 +373,7 @@ namespace ICSharpCode.SharpDevelop.Dom
bool isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(this); bool isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(this);
foreach (IClass c in InnerClasses) { foreach (IClass c in InnerClasses) {
if (((c.ClassType == ClassType.Class) || (c.ClassType == ClassType.Struct)) && if (c.IsAccessible(callingClass, isClassInInheritanceTree)) {
c.IsAccessible(callingClass, isClassInInheritanceTree)) {
types.Add(c); types.Add(c);
} }
} }

15
src/Main/Base/Project/Src/Dom/LanguageProperties.cs

@ -28,6 +28,12 @@ namespace ICSharpCode.SharpDevelop.Dom
return true; return true;
} }
} }
public override bool ImportModules {
get {
return true;
}
}
public override string ToString() public override string ToString()
{ {
@ -57,6 +63,15 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
/// <summary>
/// Gets if modules are imported with their namespace (i.e. Microsoft.VisualBasic.Randomize()).
/// </summary>
public virtual bool ImportModules {
get {
return false;
}
}
public virtual bool ShowMember(IMember member, bool showStatic) public virtual bool ShowMember(IMember member, bool showStatic)
{ {
return member.IsStatic == showStatic; return member.IsStatic == showStatic;

5
src/Main/Base/Project/Src/Dom/ModifierEnum.cs

@ -1,4 +1,4 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt"/> // <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/> // <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Static = 0x0080, Static = 0x0080,
Override = 0x0100, Override = 0x0100,
Readonly = 0x0200, Readonly = 0x0200,
Const = 0X0400, Const = 0x0400,
New = 0x0800, New = 0x0800,
// Special // Special
@ -39,6 +39,7 @@ namespace ICSharpCode.SharpDevelop.Dom
SpecialName = 0x20000, SpecialName = 0x20000,
Final = 0x40000, Final = 0x40000,
Partial = 0x80000,
} }
} }

6
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -242,9 +242,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return ClassType.Interface; return ClassType.Interface;
case AST.Types.Struct: case AST.Types.Struct:
return ClassType.Struct; return ClassType.Struct;
case AST.Types.Module:
return ClassType.Module;
default:
return ClassType.Class;
} }
// Class and Module
return ClassType.Class;
} }
DefaultRegion GetRegion(Point start, Point end) DefaultRegion GetRegion(Point start, Point end)

29
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -252,21 +252,28 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ResolveResult ResolveMemberReferenceExpression(IReturnType type, FieldReferenceExpression fieldReferenceExpression) ResolveResult ResolveMemberReferenceExpression(IReturnType type, FieldReferenceExpression fieldReferenceExpression)
{ {
IClass c; IClass c;
string name = SearchNamespace(type.FullyQualifiedName, this.CompilationUnit); IMember member;
// TODO: Test directly for NamespaceReturnType TypeVisitor.NamespaceReturnType namespaceRT = type as TypeVisitor.NamespaceReturnType;
if (name != null) { if (namespaceRT != null) {
name += "." + fieldReferenceExpression.FieldName; string combinedName = namespaceRT.FullyQualifiedName + "." + fieldReferenceExpression.FieldName;
string n = SearchNamespace(name, null); if (projectContent.NamespaceExists(combinedName)) {
if (n != null) { return new NamespaceResolveResult(callingClass, callingMember, combinedName);
return new NamespaceResolveResult(callingClass, callingMember, n); }
} c = projectContent.GetClass(combinedName);
c = SearchType(name, this.CallingClass, this.CompilationUnit);
if (c != null) { if (c != null) {
return new TypeResolveResult(callingClass, callingMember, c); return new TypeResolveResult(callingClass, callingMember, c);
} }
if (languageProperties.ImportModules) {
// go through the members of the modules
foreach (object o in projectContent.GetNamespaceContents(namespaceRT.FullyQualifiedName)) {
member = o as IMember;
if (member != null && IsSameName(member.Name, fieldReferenceExpression.FieldName))
return CreateMemberResolveResult(member);
}
}
return null; return null;
} }
IMember member = GetMember(type, fieldReferenceExpression.FieldName); member = GetMember(type, fieldReferenceExpression.FieldName);
if (member != null) if (member != null)
return CreateMemberResolveResult(member); return CreateMemberResolveResult(member);
c = type.GetUnderlyingClass(); c = type.GetUnderlyingClass();
@ -471,7 +478,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null; return null;
} }
bool IsSameName(string name1, string name2) public bool IsSameName(string name1, string name2)
{ {
return languageProperties.NameComparer.Equals(name1, name2); return languageProperties.NameComparer.Equals(name1, name2);
} }

23
src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs

@ -227,16 +227,25 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
} }
IReturnType returnType = fieldReferenceExpression.TargetObject.AcceptVisitor(this, data) as IReturnType; IReturnType returnType = fieldReferenceExpression.TargetObject.AcceptVisitor(this, data) as IReturnType;
if (returnType != null) { if (returnType != null) {
string name = resolver.SearchNamespace(returnType.FullyQualifiedName, resolver.CompilationUnit); NamespaceReturnType namespaceRT = returnType as NamespaceReturnType;
if (name != null) { if (namespaceRT != null) {
string n = resolver.SearchNamespace(name + "." + fieldReferenceExpression.FieldName, null); string name = namespaceRT.FullyQualifiedName;
if (n != null) { string combinedName = name + "." + fieldReferenceExpression.FieldName;
return new NamespaceReturnType(n); if (resolver.ProjectContent.NamespaceExists(combinedName)) {
return new NamespaceReturnType(combinedName);
} }
IClass c = resolver.SearchType(name + "." + fieldReferenceExpression.FieldName, resolver.CallingClass, resolver.CompilationUnit); IClass c = resolver.ProjectContent.GetClass(combinedName);
if (c != null) { if (c != null) {
return c.DefaultReturnType; return c.DefaultReturnType;
} }
if (resolver.LanguageProperties.ImportModules) {
// go through the members of the modules
foreach (object o in resolver.ProjectContent.GetNamespaceContents(name)) {
IMember member = o as IMember;
if (member != null && resolver.IsSameName(member.Name, fieldReferenceExpression.FieldName))
return member.ReturnType;
}
}
return null; return null;
} }
return resolver.SearchMember(returnType, fieldReferenceExpression.FieldName); return resolver.SearchMember(returnType, fieldReferenceExpression.FieldName);
@ -500,7 +509,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return t; return t;
} }
class NamespaceReturnType : AbstractReturnType public class NamespaceReturnType : AbstractReturnType
{ {
public NamespaceReturnType(string fullName) public NamespaceReturnType(string fullName)
{ {

1
src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs

@ -175,6 +175,7 @@ namespace ICSharpCode.SharpDevelop.Dom
} else if (IsDelegate(type)) { } else if (IsDelegate(type)) {
this.ClassType = ClassType.Delegate; this.ClassType = ClassType.Delegate;
} else { } else {
// TODO: Check if class is a module.
this.ClassType = ClassType.Class; this.ClassType = ClassType.Class;
} }
if (type.IsGenericTypeDefinition) { if (type.IsGenericTypeDefinition) {

9
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -363,7 +363,14 @@ namespace ICSharpCode.SharpDevelop.Project
return null; return null;
} }
/// <summary>
/// Creates a new project content for this project.
/// This method should only be called by ParserService.LoadSolutionProjectsInternal()!
/// </summary>
public virtual ParseProjectContent CreateProjectContent()
{
return ParseProjectContent.CreateUninitalized(this);
}
/// <summary> /// <summary>
/// Saves project preferences (currently opened files, bookmarks etc.) to the /// Saves project preferences (currently opened files, bookmarks etc.) to the

6
src/Main/Base/Project/Src/Project/IProject.cs

@ -103,6 +103,12 @@ namespace ICSharpCode.SharpDevelop.Project
void Start(bool withDebugging); void Start(bool withDebugging);
/// <summary>
/// Creates a new project content for this project.
/// This method should only be called by ParserService.LoadSolutionProjectsInternal()!
/// </summary>
ParseProjectContent CreateProjectContent();
CompilerResults Build(); CompilerResults Build();
CompilerResults Rebuild(); CompilerResults Rebuild();
CompilerResults Clean(); CompilerResults Clean();

5
src/Main/Base/Project/Src/Services/AmbienceService/NetAmbience.cs

@ -1,4 +1,4 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt"/> // <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/> // <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -30,6 +30,9 @@ namespace ICSharpCode.Core
case ClassType.Class: case ClassType.Class:
builder.Append("Class"); builder.Append("Class");
break; break;
case ClassType.Module:
builder.Append("Module");
break;
case ClassType.Struct: case ClassType.Struct:
builder.Append("Structure"); builder.Append("Structure");
break; break;

14
src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs

@ -391,7 +391,19 @@ namespace ICSharpCode.Core
Dictionary<string, NamespaceStruct> dict = GetNamespaces(language); Dictionary<string, NamespaceStruct> dict = GetNamespaces(language);
if (dict.ContainsKey(nameSpace)) { if (dict.ContainsKey(nameSpace)) {
NamespaceStruct ns = dict[nameSpace]; NamespaceStruct ns = dict[nameSpace];
list.AddRange(ns.Classes); int newCapacity = list.Count + ns.Classes.Count + ns.SubNamespaces.Count;
if (list.Capacity < newCapacity)
list.Capacity = newCapacity;
if (language.ImportModules) {
foreach (IClass c in ns.Classes) {
list.Add(c);
if (c.ClassType == ClassType.Module) {
list.AddRange(c.GetAccessibleMembers(null, true));
}
}
} else {
list.AddRange(ns.Classes);
}
foreach (string subns in ns.SubNamespaces) { foreach (string subns in ns.SubNamespaces) {
if (!list.Contains(subns)) if (!list.Contains(subns))
list.Add(subns); list.Add(subns);

2
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -125,7 +125,7 @@ namespace ICSharpCode.Core
List<ParseProjectContent> createdContents = new List<ParseProjectContent>(); List<ParseProjectContent> createdContents = new List<ParseProjectContent>();
foreach (IProject project in ProjectService.OpenSolution.Projects) { foreach (IProject project in ProjectService.OpenSolution.Projects) {
try { try {
ParseProjectContent newContent = ParseProjectContent.CreateUninitalized(project); ParseProjectContent newContent = project.CreateProjectContent();
lock (projectContents) { lock (projectContents) {
projectContents[project] = newContent; projectContents[project] = newContent;
} }

Loading…
Cancel
Save