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

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

@ -0,0 +1,74 @@ @@ -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 @@ -239,6 +239,13 @@ namespace VBNetBinding
imports.Add(@"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets");
}
public override ParseProjectContent CreateProjectContent()
{
ParseProjectContent pc = base.CreateProjectContent();
MyNamespaceBuilder.BuildNamespace(this, pc);
return pc;
}
void InitVB()
{
Language = "VBNet";

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

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

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

@ -52,6 +52,7 @@ @@ -52,6 +52,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Compile Include="Src\VBNetCompletionBinding.cs" />
<Compile Include="Src\MyNamespaceBuilder.cs" />
</ItemGroup>
<ItemGroup>
<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 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -12,6 +12,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -12,6 +12,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Enum,
Interface,
Struct,
Delegate
Delegate,
Module
}
}

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

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

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

@ -28,6 +28,12 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -28,6 +28,12 @@ namespace ICSharpCode.SharpDevelop.Dom
return true;
}
}
public override bool ImportModules {
get {
return true;
}
}
public override string ToString()
{
@ -57,6 +63,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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)
{
return member.IsStatic == showStatic;

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

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

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

@ -242,9 +242,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -242,9 +242,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return ClassType.Interface;
case AST.Types.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)

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

@ -252,21 +252,28 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -252,21 +252,28 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ResolveResult ResolveMemberReferenceExpression(IReturnType type, FieldReferenceExpression fieldReferenceExpression)
{
IClass c;
string name = SearchNamespace(type.FullyQualifiedName, this.CompilationUnit);
// TODO: Test directly for NamespaceReturnType
if (name != null) {
name += "." + fieldReferenceExpression.FieldName;
string n = SearchNamespace(name, null);
if (n != null) {
return new NamespaceResolveResult(callingClass, callingMember, n);
}
c = SearchType(name, this.CallingClass, this.CompilationUnit);
IMember member;
TypeVisitor.NamespaceReturnType namespaceRT = type as TypeVisitor.NamespaceReturnType;
if (namespaceRT != null) {
string combinedName = namespaceRT.FullyQualifiedName + "." + fieldReferenceExpression.FieldName;
if (projectContent.NamespaceExists(combinedName)) {
return new NamespaceResolveResult(callingClass, callingMember, combinedName);
}
c = projectContent.GetClass(combinedName);
if (c != null) {
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;
}
IMember member = GetMember(type, fieldReferenceExpression.FieldName);
member = GetMember(type, fieldReferenceExpression.FieldName);
if (member != null)
return CreateMemberResolveResult(member);
c = type.GetUnderlyingClass();
@ -471,7 +478,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -471,7 +478,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null;
}
bool IsSameName(string name1, string name2)
public bool IsSameName(string name1, string 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 @@ -227,16 +227,25 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
}
IReturnType returnType = fieldReferenceExpression.TargetObject.AcceptVisitor(this, data) as IReturnType;
if (returnType != null) {
string name = resolver.SearchNamespace(returnType.FullyQualifiedName, resolver.CompilationUnit);
if (name != null) {
string n = resolver.SearchNamespace(name + "." + fieldReferenceExpression.FieldName, null);
if (n != null) {
return new NamespaceReturnType(n);
NamespaceReturnType namespaceRT = returnType as NamespaceReturnType;
if (namespaceRT != null) {
string name = namespaceRT.FullyQualifiedName;
string combinedName = name + "." + fieldReferenceExpression.FieldName;
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) {
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 resolver.SearchMember(returnType, fieldReferenceExpression.FieldName);
@ -500,7 +509,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -500,7 +509,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return t;
}
class NamespaceReturnType : AbstractReturnType
public class NamespaceReturnType : AbstractReturnType
{
public NamespaceReturnType(string fullName)
{

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

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

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

@ -363,7 +363,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -363,7 +363,14 @@ namespace ICSharpCode.SharpDevelop.Project
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>
/// 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 @@ -103,6 +103,12 @@ namespace ICSharpCode.SharpDevelop.Project
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 Rebuild();
CompilerResults Clean();

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

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

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

@ -391,7 +391,19 @@ namespace ICSharpCode.Core @@ -391,7 +391,19 @@ namespace ICSharpCode.Core
Dictionary<string, NamespaceStruct> dict = GetNamespaces(language);
if (dict.ContainsKey(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) {
if (!list.Contains(subns))
list.Add(subns);

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

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

Loading…
Cancel
Save