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

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

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

@ -30,6 +30,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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);
}
}

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

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

@ -659,7 +659,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -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 @@ -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<string, List<LocalLookupVariable>> pair in lookupTableVisitor.Variables) {
if (pair.Value != null && pair.Value.Count > 0) {
foreach (LocalLookupVariable v in pair.Value) {

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

@ -413,11 +413,11 @@ namespace ICSharpCode.Core @@ -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 @@ -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)

6
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataProvider.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"/>
@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -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 @@ -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));
}
}

Loading…
Cancel
Save