Browse Source

Fixed ctrl-space code completion.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@181 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
e5a82b82bc
  1. 3
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 11
      src/Main/Base/Project/Src/Dom/IClass.cs
  3. 2
      src/Main/Base/Project/Src/Dom/IResolver.cs
  4. 23
      src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
  5. 59
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  6. 10
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  7. 6
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.cs

3
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -200,7 +200,7 @@
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\TreeViewOptions.cs"> <Compile Include="Src\Gui\Dialogs\TreeViewOptions.cs">
<SubType>Component</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\ViewGPLDialog.cs"> <Compile Include="Src\Gui\Dialogs\ViewGPLDialog.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
@ -669,6 +669,7 @@
<Compile Include="Src\Services\ProjectService\ParseableFileContentEnumerator.cs" /> <Compile Include="Src\Services\ProjectService\ParseableFileContentEnumerator.cs" />
<Compile Include="Src\Services\ParserService\ParseProjectContent.cs" /> <Compile Include="Src\Services\ParserService\ParseProjectContent.cs" />
<Compile Include="Src\Services\ParserService\ReflectionProjectContent.cs" /> <Compile Include="Src\Services\ParserService\ReflectionProjectContent.cs" />
<Compile Include="Src\Dom\IMethod.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

11
src/Main/Base/Project/Src/Dom/IClass.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"/>
@ -102,14 +102,13 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
IClass GetInnermostClass(int caretLine, int caretColumn); IClass GetInnermostClass(int caretLine, int caretColumn);
//List<IClass> GetAccessibleTypes(IClass callingClass);
//bool IsTypeInInheritanceTree(IClass possibleBaseClass); List<IClass> GetAccessibleTypes(IClass callingClass);
//IMember SearchMember(string memberName); //IMember SearchMember(string memberName);
/* bool IsTypeInInheritanceTree(IClass possibleBaseClass);
ArrayList GetAccessibleMembers(IClass callingClass, bool showStatic);
*/ List<IMember> GetAccessibleMembers(IClass callingClass, bool showStatic);
} }
} }

2
src/Main/Base/Project/Src/Dom/IResolver.cs

@ -30,6 +30,6 @@ namespace ICSharpCode.SharpDevelop.Dom
string fileName, string fileName,
string fileContent); string fileContent);
ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName); ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName, string fileContent);
} }
} }

23
src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.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"/>
@ -280,7 +280,6 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
/*
public bool IsTypeInInheritanceTree(IClass possibleBaseClass) public bool IsTypeInInheritanceTree(IClass possibleBaseClass)
{ {
if (possibleBaseClass == null) { if (possibleBaseClass == null) {
@ -299,7 +298,7 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
return false; return false;
} }
*/
/* /*
public IMember SearchMember(string memberName) public IMember SearchMember(string memberName)
{ {
@ -366,7 +365,6 @@ namespace ICSharpCode.SharpDevelop.Dom
return this; return this;
} }
/*
public List<IClass> GetAccessibleTypes(IClass callingClass) public List<IClass> GetAccessibleTypes(IClass callingClass)
{ {
List<IClass> types = new List<IClass>(); List<IClass> types = new List<IClass>();
@ -385,26 +383,14 @@ namespace ICSharpCode.SharpDevelop.Dom
return types; return types;
} }
public List<IMember> GetAccessibleMembers(IClass callingClass, bool showStatic)
public ArrayList GetAccessibleMembers(IClass callingClass, bool showStatic)
{ {
ArrayList members = new ArrayList(); List<IMember> members = new List<IMember>();
DateTime now = DateTime.Now;
bool isClassInInheritanceTree = false; bool isClassInInheritanceTree = false;
if (callingClass != null) if (callingClass != null)
isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(this); isClassInInheritanceTree = callingClass.IsTypeInInheritanceTree(this);
if (showStatic) {
foreach (IClass c in InnerClasses) {
if (c.IsAccessible(callingClass, isClassInInheritanceTree)) {
members.Add(c);
}
}
}
foreach (IProperty p in Properties) { foreach (IProperty p in Properties) {
if (p.MustBeShown(callingClass, showStatic, isClassInInheritanceTree)) { if (p.MustBeShown(callingClass, showStatic, isClassInInheritanceTree)) {
members.Add(p); members.Add(p);
@ -445,7 +431,6 @@ namespace ICSharpCode.SharpDevelop.Dom
return members; return members;
} }
*/
public class ClassInheritanceEnumerator : IEnumerator, IEnumerable public class ClassInheritanceEnumerator : IEnumerator, IEnumerable
{ {

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

@ -659,7 +659,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
#endregion #endregion
#endregion #endregion
public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName) public ArrayList CtrlSpace(int caretLine, int caretColumn, string fileName, string fileContent)
{ {
ArrayList result; ArrayList result;
if (language == SupportedLanguages.VBNet) { if (language == SupportedLanguages.VBNet) {
@ -671,34 +671,51 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
result = new ArrayList(TypeReference.GetPrimitiveTypes()); result = new ArrayList(TypeReference.GetPrimitiveTypes());
} }
ParseInformation parseInfo = ParserService.GetParseInformation(fileName); ParseInformation parseInfo = ParserService.GetParseInformation(fileName);
ICSharpCode.NRefactory.Parser.AST.CompilationUnit fileCompilationUnit = parseInfo.MostRecentCompilationUnit.Tag as ICSharpCode.NRefactory.Parser.AST.CompilationUnit; if (parseInfo == null) {
if (fileCompilationUnit == null) {
return null; return null;
} }
this.caretLine = caretLine;
this.caretColumn = caretColumn;
lookupTableVisitor = new LookupTableVisitor(languageProperties.NameComparer); lookupTableVisitor = new LookupTableVisitor(languageProperties.NameComparer);
lookupTableVisitor.Visit(fileCompilationUnit, null);
NRefactoryASTConvertVisitor cSharpVisitor = new NRefactoryASTConvertVisitor(parseInfo.MostRecentCompilationUnit != null ? parseInfo.MostRecentCompilationUnit.ProjectContent : null); cu = parseInfo.MostRecentCompilationUnit;
cu = (ICompilationUnit)cSharpVisitor.Visit(fileCompilationUnit, null);
if (cu != null) { if (cu != null) {
callingClass = cu.GetInnermostClass(caretLine, caretColumn); callingClass = cu.GetInnermostClass(caretLine, caretColumn);
if (callingClass != null) { cu.FileName = fileName;
IMethod method = callingMember as IMethod; }
if (method != null) {
foreach (IParameter p in method.Parameters) { callingMember = GetCurrentMember();
result.Add(new DefaultField(p.ReturnType, p.Name, ModifierEnum.None, method.Region, callingClass)); if (callingMember != null) {
} System.IO.TextReader content = ExtractMethod(fileContent, callingMember);
} if (content != null) {
result.AddRange(projectContent.GetNamespaceContents(callingClass.Namespace)); ICSharpCode.NRefactory.Parser.IParser p = ParserFactory.CreateParser(language, content);
bool inStatic = true; p.Parse();
if (callingMember != null) lookupTableVisitor.Visit(p.CompilationUnit, null);
inStatic = callingMember.IsStatic;
//result.AddRange(callingClass.GetAccessibleMembers(callingClass, inStatic).ToArray());
//if (inStatic == false) {
// result.AddRange(callingClass.GetAccessibleMembers(callingClass, !inStatic).ToArray());
//}
} }
} }
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<string, List<LocalLookupVariable>> pair in lookupTableVisitor.Variables) { foreach (KeyValuePair<string, List<LocalLookupVariable>> pair in lookupTableVisitor.Variables) {
if (pair.Value != null && pair.Value.Count > 0) { if (pair.Value != null && pair.Value.Count > 0) {
foreach (LocalLookupVariable v in pair.Value) { foreach (LocalLookupVariable v in pair.Value) {

10
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); IParser parser = GetParser(fileName);
if (parser != null) { if (parser != null) {
return parser.CreateResolver().CtrlSpace(caretLine, caretColumn, fileName); return parser.CreateResolver().CtrlSpace(caretLine, caretColumn, fileName, fileContent);
} }
return null; return null;
} }
@ -428,17 +428,11 @@ namespace ICSharpCode.Core
string fileName, string fileName,
string fileContent) string fileContent)
{ {
// added exception handling here to prevent silly parser exceptions from
// being thrown and corrupting the textarea control
//try {
IParser parser = GetParser(fileName); IParser parser = GetParser(fileName);
if (parser != null) { if (parser != null) {
return parser.CreateResolver().Resolve(expression, caretLineNumber, caretColumn, fileName, fileContent); return parser.CreateResolver().Resolve(expression, caretLineNumber, caretColumn, fileName, fileContent);
} }
return null; return null;
//} catch {
// return null;
//}
} }
static void OnParseInformationUpdated(ParseInformationEventArgs e) static void OnParseInformationUpdated(ParseInformationEventArgs e)

6
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.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"/>
@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
if (charTyped != '\0') { if (charTyped != '\0') {
preSelection = null; preSelection = null;
} }
AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName)); AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, document.TextContent));
return (ICompletionData[])completionData.ToArray(typeof(ICompletionData)); return (ICompletionData[])completionData.ToArray(typeof(ICompletionData));
} }
@ -100,7 +100,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
if (charTyped != '\0') { if (charTyped != '\0') {
preSelection = null; preSelection = null;
} }
AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName)); AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, document.TextContent));
return (ICompletionData[])completionData.ToArray(typeof(ICompletionData)); return (ICompletionData[])completionData.ToArray(typeof(ICompletionData));
} }
} }

Loading…
Cancel
Save