Browse Source

Ctrl-Space completion now shows generic type parameters after class name.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@123 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
f49f5b9f04
  1. 24
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAmbience.cs
  2. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  3. 6
      src/Main/Base/Project/Src/Dom/IClass.cs
  4. 22
      src/Main/Base/Project/Src/Dom/ITypeParameter.cs
  5. 14
      src/Main/Base/Project/Src/Dom/Implementations/DefaultClass.cs
  6. 37
      src/Main/Base/Project/Src/Dom/Implementations/DefaultTypeParameter.cs
  7. 22
      src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
  8. 7
      src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs
  9. 8
      src/Main/Base/Project/Src/Services/AmbienceService/NetAmbience.cs
  10. 5
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionData.cs

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

@ -78,7 +78,7 @@ namespace ICSharpCode.Core @@ -78,7 +78,7 @@ namespace ICSharpCode.Core
}
string GetModifier(IDecoration decoration)
{
{
string ret = "";
if (IncludeHTMLMarkup) {
@ -122,7 +122,7 @@ namespace ICSharpCode.Core @@ -122,7 +122,7 @@ namespace ICSharpCode.Core
case ClassType.Struct:
case ClassType.Enum:
break;
default:
builder.Append("sealed ");
break;
@ -169,7 +169,7 @@ namespace ICSharpCode.Core @@ -169,7 +169,7 @@ namespace ICSharpCode.Core
builder.Append("<b>");
}
if (UseFullyQualifiedMemberNames) {
if (UseFullyQualifiedMemberNames) {
builder.Append(c.FullyQualifiedName);
} else {
builder.Append(c.Name);
@ -178,6 +178,14 @@ namespace ICSharpCode.Core @@ -178,6 +178,14 @@ namespace ICSharpCode.Core
if (IncludeHTMLMarkup) {
builder.Append("</b>");
}
if (c.TypeParameters.Count > 0) {
builder.Append('<');
for (int i = 0; i < c.TypeParameters.Count; ++i) {
if (i > 0) builder.Append(", ");
builder.Append(c.TypeParameters[i].Name);
}
builder.Append('>');
}
if (c.ClassType == ClassType.Delegate) {
builder.Append(" (");
@ -213,7 +221,7 @@ namespace ICSharpCode.Core @@ -213,7 +221,7 @@ namespace ICSharpCode.Core
builder.Append("\n{");
}
return builder.ToString();
return builder.ToString();
}
public override string ConvertEnd(IClass c)
@ -268,7 +276,7 @@ namespace ICSharpCode.Core @@ -268,7 +276,7 @@ namespace ICSharpCode.Core
if (IncludeBodies) builder.Append(";");
return builder.ToString();
return builder.ToString();
}
public override string Convert(IProperty property)
@ -303,7 +311,7 @@ namespace ICSharpCode.Core @@ -303,7 +311,7 @@ namespace ICSharpCode.Core
if (property.Parameters.Count > 0) {
builder.Append("(");
if (IncludeHTMLMarkup) builder.Append("<br>");
for (int i = 0; i < property.Parameters.Count; ++i) {
if (IncludeHTMLMarkup) builder.Append("&nbsp;&nbsp;&nbsp;");
builder.Append(Convert(property.Parameters[i]));
@ -502,7 +510,7 @@ namespace ICSharpCode.Core @@ -502,7 +510,7 @@ namespace ICSharpCode.Core
bool linkSet = false;
if (UseLinkArrayList) {
// TODO: #Assembly dependance:
// TODO: #Assembly dependance:
// SharpAssemblyReturnType ret = returnType as SharpAssemblyReturnType;
// if (ret != null) {
// if (ret.UnderlyingClass != null) {
@ -548,7 +556,7 @@ namespace ICSharpCode.Core @@ -548,7 +556,7 @@ namespace ICSharpCode.Core
if (IncludeHTMLMarkup) {
builder.Append("<i>");
}
if (param.IsRef) {
builder.Append("ref ");
} else if (param.IsOut) {

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

@ -639,6 +639,8 @@ @@ -639,6 +639,8 @@
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\Publish.cs" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\DebugOptions.cs" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\BuildEvents.cs" />
<Compile Include="Src\Dom\ITypeParameter.cs" />
<Compile Include="Src\Dom\Implementations\DefaultTypeParameter.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

6
src/Main/Base/Project/Src/Dom/IClass.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Dom
ClassType ClassType {
get;
}
}
/// <summary>
/// The project content in which this class is defined.
@ -73,6 +73,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -73,6 +73,10 @@ namespace ICSharpCode.SharpDevelop.Dom
List<IEvent> Events {
get;
}
List<ITypeParameter> TypeParameters {
get;
}
IEnumerable ClassInheritanceTree {
get;

22
src/Main/Base/Project/Src/Dom/ITypeParameter.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version value="$version"/>
// </file>
using System;
using System.Reflection;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Type parameter of a generic class/method.
/// </summary>
public interface ITypeParameter
{
string Name { get; }
// TODO: Constraint
}
}

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

@ -31,6 +31,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -31,6 +31,7 @@ namespace ICSharpCode.SharpDevelop.Dom
List<IMethod> methods = null;
List<IEvent> events = null;
List<IIndexer> indexer = null;
List<ITypeParameter> typeParameters = null;
public DefaultClass(ICompilationUnit compilationUnit, string fullyQualifiedName) : base(null)
{
@ -142,6 +143,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -142,6 +143,15 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public virtual List<ITypeParameter> TypeParameters {
get {
if (typeParameters == null) {
typeParameters = new List<ITypeParameter>();
}
return typeParameters;
}
}
public virtual int CompareTo(IClass value)
{
int cmp;
@ -191,7 +201,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -191,7 +201,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return DiffUtility.Compare(Events, value.Events);
}
int IComparable.CompareTo(object o)
int IComparable.CompareTo(object o)
{
return CompareTo((IClass)o);
}
@ -328,7 +338,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -328,7 +338,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)) {
c.IsAccessible(callingClass, isClassInInheritanceTree)) {
types.Add(c);
}
}

37
src/Main/Base/Project/Src/Dom/Implementations/DefaultTypeParameter.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version value="$version"/>
// </file>
using System;
using System.Reflection;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Type parameter of a generic class/method.
/// </summary>
public class DefaultTypeParameter : ITypeParameter
{
string name;
public string Name {
get {
return name;
}
}
public DefaultTypeParameter(string name)
{
this.name = name;
}
public DefaultTypeParameter(Type type)
{
this.name = type.Name;
}
}
}

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

@ -19,10 +19,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -19,10 +19,10 @@ namespace ICSharpCode.SharpDevelop.Dom
Type type;
BindingFlags flags = BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.NonPublic |
BindingFlags.DeclaredOnly |
BindingFlags.Public;
BindingFlags.Static |
BindingFlags.NonPublic |
BindingFlags.DeclaredOnly |
BindingFlags.Public;
public override List<IClass> InnerClasses {
get {
@ -137,7 +137,12 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -137,7 +137,12 @@ namespace ICSharpCode.SharpDevelop.Dom
public ReflectionClass(ICompilationUnit compilationUnit, Type type, IClass declaringType) : base(compilationUnit, declaringType)
{
this.type = type;
FullyQualifiedName = type.FullName.Replace('+', '.');
string name = type.FullName.Replace('+', '.');
if (name.Length > 2 && name[name.Length - 2] == '`') {
FullyQualifiedName = name.Substring(0, name.Length - 2);
} else {
FullyQualifiedName = name;
}
// set classtype
if (IsDelegate(type)) {
@ -154,6 +159,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -154,6 +159,11 @@ namespace ICSharpCode.SharpDevelop.Dom
} else {
this.ClassType = ClassType.Class;
}
if (type.IsGenericTypeDefinition) {
foreach (Type g in type.GetGenericArguments()) {
this.TypeParameters.Add(new DefaultTypeParameter(g));
}
}
ModifierEnum modifiers = ModifierEnum.None;
@ -192,7 +202,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -192,7 +202,7 @@ namespace ICSharpCode.SharpDevelop.Dom
foreach (Type iface in type.GetInterfaces()) {
BaseTypes.Add(iface.FullName);
}
}
}
}

7
src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs

@ -95,9 +95,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -95,9 +95,6 @@ namespace ICSharpCode.SharpDevelop.Gui
public STAThreadCaller()
{
performCallDelegate = new PerformCallDelegate(DoPerformCall);
#if DEBUG
callerStack = Environment.StackTrace;
#endif
}
public object Call(object target, string methodName, params object[] arguments)
@ -110,6 +107,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -110,6 +107,10 @@ namespace ICSharpCode.SharpDevelop.Gui
this.methodName = methodName;
this.arguments = arguments;
#if DEBUG
callerStack = Environment.StackTrace;
#endif
// TODO: This doesn't look like it's thread-safe, we're calling the target directly!
return DoPerformCall();
}

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

@ -48,6 +48,14 @@ namespace ICSharpCode.Core @@ -48,6 +48,14 @@ namespace ICSharpCode.Core
} else {
builder.Append(c.Name);
}
if (c.TypeParameters.Count > 0) {
builder.Append('<');
for (int i = 0; i < c.TypeParameters.Count; ++i) {
if (i > 0) builder.Append(", ");
builder.Append(c.TypeParameters[i].Name);
}
builder.Append('>');
}
if (c.ClassType == ClassType.Delegate) {
builder.Append('(');

5
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionData.cs

@ -114,8 +114,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -114,8 +114,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
// save class (for the delegate description shortcut
this.c = c;
imageIndex = ClassBrowserIconService.GetIcon(c);
text = c.Name;
completionString = c.Name;
ambience.ConversionFlags = ConversionFlags.None;
text = ambience.Convert(c);
completionString = text;
ambience.ConversionFlags = ConversionFlags.UseFullyQualifiedNames | ConversionFlags.ShowReturnType | ConversionFlags.ShowModifiers;
// Console.WriteLine("Convert : " + c);
description = ambience.Convert(c);

Loading…
Cancel
Save