diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 1489ee3620..676c7ceb18 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -200,7 +200,7 @@
Form
- Component
+ Form
Form
@@ -669,6 +669,7 @@
+
diff --git a/src/Main/Base/Project/Src/Dom/IClass.cs b/src/Main/Base/Project/Src/Dom/IClass.cs
index 369204844a..3a4ab280ec 100644
--- a/src/Main/Base/Project/Src/Dom/IClass.cs
+++ b/src/Main/Base/Project/Src/Dom/IClass.cs
@@ -1,4 +1,4 @@
-//
+//
//
//
//
@@ -102,14 +102,13 @@ namespace ICSharpCode.SharpDevelop.Dom
}
IClass GetInnermostClass(int caretLine, int caretColumn);
- //List GetAccessibleTypes(IClass callingClass);
- //bool IsTypeInInheritanceTree(IClass possibleBaseClass);
+ List GetAccessibleTypes(IClass callingClass);
//IMember SearchMember(string memberName);
- /*
- ArrayList GetAccessibleMembers(IClass callingClass, bool showStatic);
- */
+ bool IsTypeInInheritanceTree(IClass possibleBaseClass);
+
+ List GetAccessibleMembers(IClass callingClass, bool showStatic);
}
}
diff --git a/src/Main/Base/Project/Src/Dom/IResolver.cs b/src/Main/Base/Project/Src/Dom/IResolver.cs
index 188126b56b..8e1861c40e 100644
--- a/src/Main/Base/Project/Src/Dom/IResolver.cs
+++ b/src/Main/Base/Project/Src/Dom/IResolver.cs
@@ -30,6 +30,6 @@ namespace ICSharpCode.SharpDevelop.Dom
string fileName,
string fileContent);
- ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName);
+ ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName, string fileContent);
}
}
diff --git a/src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs b/src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
index 822588899c..c9457b342a 100644
--- a/src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
+++ b/src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
@@ -1,4 +1,4 @@
-//
+//
//
//
//
@@ -280,7 +280,6 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
- /*
public bool IsTypeInInheritanceTree(IClass possibleBaseClass)
{
if (possibleBaseClass == null) {
@@ -299,7 +298,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
return false;
}
- */
+
/*
public IMember SearchMember(string memberName)
{
@@ -366,7 +365,6 @@ namespace ICSharpCode.SharpDevelop.Dom
return this;
}
- /*
public List GetAccessibleTypes(IClass callingClass)
{
List types = new List();
@@ -385,26 +383,14 @@ namespace ICSharpCode.SharpDevelop.Dom
return types;
}
-
- public ArrayList GetAccessibleMembers(IClass callingClass, bool showStatic)
+ public List GetAccessibleMembers(IClass callingClass, bool showStatic)
{
- ArrayList members = new ArrayList();
-
- DateTime now = DateTime.Now;
-
+ List members = new List();
bool isClassInInheritanceTree = false;
if (callingClass != null)
isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(this);
- if (showStatic) {
- foreach (IClass c in InnerClasses) {
- if (c.IsAccessible(callingClass, isClassInInheritanceTree)) {
- members.Add(c);
- }
- }
- }
-
foreach (IProperty p in Properties) {
if (p.MustBeShown(callingClass, showStatic, isClassInInheritanceTree)) {
members.Add(p);
@@ -445,7 +431,6 @@ namespace ICSharpCode.SharpDevelop.Dom
return members;
}
- */
public class ClassInheritanceEnumerator : IEnumerator, IEnumerable
{
diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
index b8b737e73e..a011f0b734 100644
--- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
+++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
@@ -659,7 +659,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
#endregion
#endregion
- public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName)
+ public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName, string fileContent)
{
ArrayList result;
if (language == SupportedLanguages.VBNet) {
@@ -671,34 +671,51 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
result = new ArrayList(TypeReference.GetPrimitiveTypes());
}
ParseInformation parseInfo = ParserService.GetParseInformation(fileName);
- ICSharpCode.NRefactory.Parser.AST.CompilationUnit fileCompilationUnit = parseInfo.MostRecentCompilationUnit.Tag as ICSharpCode.NRefactory.Parser.AST.CompilationUnit;
- if (fileCompilationUnit == null) {
+ if (parseInfo == null) {
return null;
}
+
+ this.caretLine = caretLine;
+ this.caretColumn = caretColumn;
+
lookupTableVisitor = new LookupTableVisitor(languageProperties.NameComparer);
- lookupTableVisitor.Visit(fileCompilationUnit, null);
- NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null);
- cu = (ICompilationUnit)cSharpVisitor.Visit(fileCompilationUnit, null);
+ cu = parseInfo.MostRecentCompilationUnit;
+
if (cu != null) {
callingClass = cu.GetInnermostClass(caretLine, caretColumn);
- if (callingClass != null) {
- IMethod method = callingMember as IMethod;
- if (method != null) {
- foreach (IParameter p in method.Parameters) {
- result.Add(new DefaultField(p.ReturnType, p.Name, ModifierEnum.None, method.Region, callingClass));
- }
- }
- result.AddRange(projectContent.GetNamespaceContents(callingClass.Namespace));
- bool inStatic = true;
- if (callingMember != null)
- inStatic = callingMember.IsStatic;
- //result.AddRange(callingClass.GetAccessibleMembers(callingClass, inStatic).ToArray());
- //if (inStatic == false) {
- // result.AddRange(callingClass.GetAccessibleMembers(callingClass, !inStatic).ToArray());
- //}
+ cu.FileName = fileName;
+ }
+
+ callingMember = GetCurrentMember();
+ if (callingMember != null) {
+ System.IO.TextReader content = ExtractMethod(fileContent, callingMember);
+ if (content != null) {
+ ICSharpCode.NRefactory.Parser.IParser p = ParserFactory.CreateParser(language, content);
+ p.Parse();
+ lookupTableVisitor.Visit(p.CompilationUnit, null);
}
}
+
+ IMethod method = callingMember as IMethod;
+ if (method != null) {
+ foreach (IParameter p in method.Parameters) {
+ result.Add(new DefaultField(p.ReturnType, p.Name, ModifierEnum.None, method.Region, callingClass));
+ }
+ }
+ if (callingClass != null) {
+ result.AddRange(projectContent.GetNamespaceContents(callingClass.Namespace));
+ }
+
+ bool inStatic = true;
+ if (callingMember != null)
+ inStatic = callingMember.IsStatic;
+
+ if (!inStatic) {
+ result.AddRange(callingClass.GetAccessibleMembers(callingClass, false));
+ }
+ result.AddRange(callingClass.GetAccessibleMembers(callingClass, true));
+ result.AddRange(callingClass.GetAccessibleTypes(callingClass));
foreach (KeyValuePair> pair in lookupTableVisitor.Variables) {
if (pair.Value != null && pair.Value.Count > 0) {
foreach (LocalLookupVariable v in pair.Value) {
diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
index be7b290c9b..dbe97790ed 100644
--- a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
+++ b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
@@ -413,11 +413,11 @@ namespace ICSharpCode.Core
////////////////////////////////////
- public static ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName)
+ public static ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName, string fileContent)
{
IParser parser = GetParser(fileName);
if (parser != null) {
- return parser.CreateResolver().CtrlSpace(caretLine, caretColumn, fileName);
+ return parser.CreateResolver().CtrlSpace(caretLine, caretColumn, fileName, fileContent);
}
return null;
}
@@ -428,17 +428,11 @@ namespace ICSharpCode.Core
string fileName,
string fileContent)
{
- // added exception handling here to prevent silly parser exceptions from
- // being thrown and corrupting the textarea control
- //try {
IParser parser = GetParser(fileName);
if (parser != null) {
return parser.CreateResolver().Resolve(expression, caretLineNumber, caretColumn, fileName, fileContent);
}
return null;
- //} catch {
-// return null;
- //}
}
static void OnParseInformationUpdated(ParseInformationEventArgs e)
diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs
index d0936a8511..7f9f86dc66 100644
--- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs
+++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs
@@ -1,4 +1,4 @@
-//
+//
//
//
//
@@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
if (charTyped != '\0') {
preSelection = null;
}
- AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName));
+ AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, document.TextContent));
return (ICompletionData[])completionData.ToArray(typeof(ICompletionData));
}
@@ -100,7 +100,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
if (charTyped != '\0') {
preSelection = null;
}
- AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName));
+ AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, document.TextContent));
return (ICompletionData[])completionData.ToArray(typeof(ICompletionData));
}
}