Browse Source

Fixed SD2-440: Icon for local variables and parameters

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@525 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
820f9a21b7
  1. 3
      data/resources/image/BitmapResources/BitmapResources.res
  2. BIN
      data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Local.png
  3. BIN
      data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Parameter.png
  4. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpAmbience.cs
  5. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetAmbience.cs
  6. 29
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/LookupTableVisitor.cs
  7. 4
      src/Main/Base/Project/Src/Dom/IDecoration.cs
  8. 6
      src/Main/Base/Project/Src/Dom/IField.cs
  9. 6
      src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs
  10. 34
      src/Main/Base/Project/Src/Dom/Implementations/DefaultField.cs
  11. 26
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  12. 7
      src/Main/Base/Project/Src/Dom/ResolveResult.cs
  13. 28
      src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs
  14. BIN
      src/Main/StartUp/Project/Resources/BitmapResources.resources

3
data/resources/image/BitmapResources/BitmapResources.res

@ -258,6 +258,9 @@ Icons.16x16.Indexer = ClassBrowserIcons\Icons.16x1
Icons.16x16.Field = ClassBrowserIcons\Icons.16x16.Field.png Icons.16x16.Field = ClassBrowserIcons\Icons.16x16.Field.png
Icons.16x16.Event = ClassBrowserIcons\Icons.16x16.Event.png Icons.16x16.Event = ClassBrowserIcons\Icons.16x16.Event.png
Icons.16x16.Local = ClassBrowserIcons\Icons.16x16.Local.png
Icons.16x16.Parameter = ClassBrowserIcons\Icons.16x16.Parameter.png
Icons.16x16.PrivateClass = ClassBrowserIcons\Icons.16x16.PrivateClass.png Icons.16x16.PrivateClass = ClassBrowserIcons\Icons.16x16.PrivateClass.png
Icons.16x16.PrivateStruct = ClassBrowserIcons\Icons.16x16.PrivateStruct.png Icons.16x16.PrivateStruct = ClassBrowserIcons\Icons.16x16.PrivateStruct.png
Icons.16x16.PrivateEnum = ClassBrowserIcons\Icons.16x16.PrivateEnum.png Icons.16x16.PrivateEnum = ClassBrowserIcons\Icons.16x16.PrivateEnum.png

BIN
data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Local.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 B

BIN
data/resources/image/BitmapResources/ClassBrowserIcons/Icons.16x16.Parameter.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

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

@ -250,7 +250,7 @@ namespace ICSharpCode.Core
} }
if (ShowModifiers) { if (ShowModifiers) {
if (field.IsStatic && field.IsLiteral) { if (field.IsConst) {
builder.Append("const "); builder.Append("const ");
} else if (field.IsStatic) { } else if (field.IsStatic) {
builder.Append("static "); builder.Append("static ");

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

@ -273,7 +273,7 @@ namespace VBNetBinding
} }
if (ShowModifiers) { if (ShowModifiers) {
if (field.IsStatic && field.IsLiteral) { if (field.IsConst) {
builder.Append("Const "); builder.Append("Const ");
} else if (field.IsStatic) { } else if (field.IsStatic) {
builder.Append("Shared "); builder.Append("Shared ");

29
src/Libraries/NRefactory/Project/Src/Parser/Visitors/LookupTableVisitor.cs

@ -16,8 +16,9 @@ namespace ICSharpCode.NRefactory.Parser
public class LocalLookupVariable public class LocalLookupVariable
{ {
TypeReference typeRef; TypeReference typeRef;
Point startPos; Point startPos;
Point endPos; Point endPos;
bool isConst;
public TypeReference TypeRef { public TypeReference TypeRef {
get { get {
@ -35,11 +36,18 @@ namespace ICSharpCode.NRefactory.Parser
} }
} }
public LocalLookupVariable(TypeReference typeRef, Point startPos, Point endPos) public bool IsConst {
get {
return isConst;
}
}
public LocalLookupVariable(TypeReference typeRef, Point startPos, Point endPos, bool isConst)
{ {
this.typeRef = typeRef; this.typeRef = typeRef;
this.startPos = startPos; this.startPos = startPos;
this.endPos = endPos; this.endPos = endPos;
this.isConst = isConst;
} }
} }
@ -58,7 +66,7 @@ namespace ICSharpCode.NRefactory.Parser
variables = new Dictionary<string, List<LocalLookupVariable>>(nameComparer); variables = new Dictionary<string, List<LocalLookupVariable>>(nameComparer);
} }
public void AddVariable(TypeReference typeRef, string name, Point startPos, Point endPos) public void AddVariable(TypeReference typeRef, string name, Point startPos, Point endPos, bool isConst)
{ {
if (name == null || name.Length == 0) { if (name == null || name.Length == 0) {
return; return;
@ -69,7 +77,7 @@ namespace ICSharpCode.NRefactory.Parser
} else { } else {
list = (List<LocalLookupVariable>)variables[name]; list = (List<LocalLookupVariable>)variables[name];
} }
list.Add(new LocalLookupVariable(typeRef, startPos, endPos)); list.Add(new LocalLookupVariable(typeRef, startPos, endPos, isConst));
} }
// todo: move this method to a better place. // todo: move this method to a better place.
@ -105,7 +113,8 @@ namespace ICSharpCode.NRefactory.Parser
AddVariable(localVariableDeclaration.GetTypeForVariable(i), AddVariable(localVariableDeclaration.GetTypeForVariable(i),
varDecl.Name, varDecl.Name,
localVariableDeclaration.StartLocation, localVariableDeclaration.StartLocation,
CurrentBlock == null ? new Point(-1, -1) : CurrentBlock.EndLocation); CurrentBlock == null ? new Point(-1, -1) : CurrentBlock.EndLocation,
(localVariableDeclaration.Modifier & Modifier.Const) == Modifier.Const);
} }
return data; return data;
} }
@ -113,7 +122,7 @@ namespace ICSharpCode.NRefactory.Parser
public override object Visit(AnonymousMethodExpression anonymousMethodExpression, object data) public override object Visit(AnonymousMethodExpression anonymousMethodExpression, object data)
{ {
foreach (ParameterDeclarationExpression p in anonymousMethodExpression.Parameters) { foreach (ParameterDeclarationExpression p in anonymousMethodExpression.Parameters) {
AddVariable(p.TypeReference, p.ParameterName, anonymousMethodExpression.StartLocation, anonymousMethodExpression.EndLocation); AddVariable(p.TypeReference, p.ParameterName, anonymousMethodExpression.StartLocation, anonymousMethodExpression.EndLocation, false);
} }
return base.Visit(anonymousMethodExpression, data); return base.Visit(anonymousMethodExpression, data);
} }
@ -126,7 +135,8 @@ namespace ICSharpCode.NRefactory.Parser
AddVariable(foreachStatement.TypeReference, AddVariable(foreachStatement.TypeReference,
foreachStatement.VariableName, foreachStatement.VariableName,
foreachStatement.StartLocation, foreachStatement.StartLocation,
foreachStatement.EndLocation); foreachStatement.EndLocation,
false);
if (foreachStatement.Expression != null) { if (foreachStatement.Expression != null) {
foreachStatement.Expression.AcceptVisitor(this, data); foreachStatement.Expression.AcceptVisitor(this, data);
@ -154,7 +164,8 @@ namespace ICSharpCode.NRefactory.Parser
AddVariable(catchClause.TypeReference, AddVariable(catchClause.TypeReference,
catchClause.VariableName, catchClause.VariableName,
catchClause.StatementBlock.StartLocation, catchClause.StatementBlock.StartLocation,
catchClause.StatementBlock.EndLocation); catchClause.StatementBlock.EndLocation,
false);
} }
catchClause.StatementBlock.AcceptVisitor(this, data); catchClause.StatementBlock.AcceptVisitor(this, data);
} }

4
src/Main/Base/Project/Src/Dom/IDecoration.cs

@ -83,10 +83,6 @@ namespace ICSharpCode.SharpDevelop.Dom
get; get;
} }
bool IsLiteral {
get;
}
bool IsOverride { bool IsOverride {
get; get;
} }

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

@ -12,6 +12,10 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
public interface IField : IMember public interface IField : IMember
{ {
/// <summary>Gets if this field is a local variable that has been converted into a field.</summary>
bool IsLocalVariable { get; }
/// <summary>Gets if this field is a parameter that has been converted into a field.</summary>
bool IsParameter { get; }
} }
} }

6
src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs

@ -150,12 +150,6 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
public bool IsLiteral {
get {
return (modifiers & ModifierEnum.Const) == ModifierEnum.Const;
}
}
public bool IsReadonly { public bool IsReadonly {
get { get {
return (modifiers & ModifierEnum.Readonly) == ModifierEnum.Readonly; return (modifiers & ModifierEnum.Readonly) == ModifierEnum.Readonly;

34
src/Main/Base/Project/Src/Dom/Implementations/DefaultField.cs

@ -54,5 +54,39 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
return CompareTo((IField)value); return CompareTo((IField)value);
} }
/// <summary>Gets if this field is a local variable that has been converted into a field.</summary>
public virtual bool IsLocalVariable {
get { return false; }
}
/// <summary>Gets if this field is a parameter that has been converted into a field.</summary>
public virtual bool IsParameter {
get { return false; }
}
public class LocalVariableField : DefaultField
{
public override bool IsLocalVariable {
get { return true; }
}
public LocalVariableField(IReturnType type, string name, DomRegion region, IClass callingClass)
: base(type, name, ModifierEnum.None, region, callingClass)
{
}
}
public class ParameterField : DefaultField
{
public override bool IsParameter {
get { return true; }
}
public ParameterField(IReturnType type, string name, DomRegion region, IClass callingClass)
: base(type, name, ModifierEnum.None, region, callingClass)
{
}
}
} }
} }

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

@ -476,25 +476,33 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return new MixedResolveResult(result, result2); return new MixedResolveResult(result, result2);
} }
IField CreateLocalVariableField(LocalLookupVariable var, string identifier)
{
IReturnType type = GetVariableType(var);
IField f = new DefaultField.LocalVariableField(type, identifier, new DomRegion(var.StartPos, var.EndPos), callingClass);
if (var.IsConst) {
f.Modifiers |= ModifierEnum.Const;
}
return f;
}
ResolveResult ResolveIdentifierInternal(string identifier) ResolveResult ResolveIdentifierInternal(string identifier)
{ {
if (callingMember != null) { // LocalResolveResult requires callingMember to be set if (callingMember != null) { // LocalResolveResult requires callingMember to be set
LocalLookupVariable var = SearchVariable(identifier); LocalLookupVariable var = SearchVariable(identifier);
if (var != null) { if (var != null) {
IReturnType type = GetVariableType(var); return new LocalResolveResult(callingMember, CreateLocalVariableField(var, identifier));
IField field = new DefaultField(type, identifier, ModifierEnum.None, new DomRegion(var.StartPos, var.EndPos), callingClass);
return new LocalResolveResult(callingMember, field, false);
} }
IParameter para = SearchMethodParameter(identifier); IParameter para = SearchMethodParameter(identifier);
if (para != null) { if (para != null) {
IField field = new DefaultField(para.ReturnType, para.Name, ModifierEnum.None, para.Region, callingClass); IField field = new DefaultField.ParameterField(para.ReturnType, para.Name, para.Region, callingClass);
return new LocalResolveResult(callingMember, field, true); return new LocalResolveResult(callingMember, field);
} }
if (IsSameName(identifier, "value")) { if (IsSameName(identifier, "value")) {
IProperty property = callingMember as IProperty; IProperty property = callingMember as IProperty;
if (property != null && property.SetterRegion.IsInside(caretLine, caretColumn)) { if (property != null && property.SetterRegion.IsInside(caretLine, caretColumn)) {
IField field = new DefaultField(property.ReturnType, "value", ModifierEnum.None, property.Region, callingClass); IField field = new DefaultField.ParameterField(property.ReturnType, "value", property.Region, callingClass);
return new LocalResolveResult(callingMember, field, true); return new LocalResolveResult(callingMember, field);
} }
} }
} }
@ -899,7 +907,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
IMethod method = callingMember as IMethod; IMethod method = callingMember as IMethod;
if (method != null) { if (method != null) {
foreach (IParameter p in method.Parameters) { foreach (IParameter p in method.Parameters) {
result.Add(new DefaultField(p.ReturnType, p.Name, ModifierEnum.None, method.Region, callingClass)); result.Add(new DefaultField.ParameterField(p.ReturnType, p.Name, method.Region, callingClass));
} }
} }
@ -939,7 +947,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
foreach (LocalLookupVariable v in pair.Value) { foreach (LocalLookupVariable v in pair.Value) {
if (IsInside(new Point(caretColumn, caretLine), v.StartPos, v.EndPos)) { if (IsInside(new Point(caretColumn, caretLine), v.StartPos, v.EndPos)) {
// convert to a field for display // convert to a field for display
result.Add(new DefaultField(TypeVisitor.CreateReturnType(v.TypeRef, this), pair.Key, ModifierEnum.None, new DomRegion(v.StartPos, v.EndPos), callingClass)); result.Add(CreateLocalVariableField(v, pair.Key));
break; break;
} }
} }

7
src/Main/Base/Project/Src/Dom/ResolveResult.cs

@ -169,7 +169,7 @@ namespace ICSharpCode.SharpDevelop.Dom
IField field; IField field;
bool isParameter; bool isParameter;
public LocalResolveResult(IMember callingMember, IField field, bool isParameter) public LocalResolveResult(IMember callingMember, IField field)
: base(callingMember.DeclaringType, callingMember, field.ReturnType) : base(callingMember.DeclaringType, callingMember, field.ReturnType)
{ {
if (callingMember == null) if (callingMember == null)
@ -177,7 +177,10 @@ namespace ICSharpCode.SharpDevelop.Dom
if (field == null) if (field == null)
throw new ArgumentNullException("field"); throw new ArgumentNullException("field");
this.field = field; this.field = field;
this.isParameter = isParameter; this.isParameter = field.IsParameter;
if (!isParameter && !field.IsLocalVariable) {
throw new ArgumentException("the field must either be a local variable-field or a parameter-field");
}
} }
/// <summary> /// <summary>

28
src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs

@ -23,13 +23,13 @@ namespace ICSharpCode.Core
{ {
public const int NamespaceIndex = 3; public const int NamespaceIndex = 3;
public const int CombineIndex = 14; public const int CombineIndex = 14;
public const int LiteralIndex = 15; public const int ConstIndex = 15;
public const int GotoArrowIndex = 13; public const int GotoArrowIndex = 13;
public const int LocalVariableIndex = FieldIndex + privateModifierOffset; public const int LocalVariableIndex = 16;
public const int ParameterIndex = FieldIndex + privateModifierOffset; public const int ParameterIndex = 17;
public const int ClassIndex = 16; public const int ClassIndex = 18;
public const int StructIndex = ClassIndex + 1 * 4; public const int StructIndex = ClassIndex + 1 * 4;
public const int InterfaceIndex = ClassIndex + 2 * 4; public const int InterfaceIndex = ClassIndex + 2 * 4;
public const int EnumIndex = ClassIndex + 3 * 4; public const int EnumIndex = ClassIndex + 3 * 4;
@ -95,10 +95,15 @@ namespace ICSharpCode.Core
public static int GetIcon(IField field) public static int GetIcon(IField field)
{ {
if (field.IsLiteral) { if (field.IsConst) {
return LiteralIndex; return ConstIndex;
} else if (field.IsParameter) {
return ParameterIndex;
} else if (field.IsLocalVariable) {
return LocalVariableIndex;
} else {
return FieldIndex + GetModifierOffset(field.Modifiers);
} }
return FieldIndex + GetModifierOffset(field.Modifiers);
} }
public static int GetIcon(IEvent evt) public static int GetIcon(IEvent evt)
@ -155,7 +160,7 @@ namespace ICSharpCode.Core
public static int GetIcon(FieldInfo fieldinfo) public static int GetIcon(FieldInfo fieldinfo)
{ {
if (fieldinfo.IsLiteral) { if (fieldinfo.IsLiteral) {
return LiteralIndex; return ConstIndex;
} }
if (fieldinfo.IsAssembly) { if (fieldinfo.IsAssembly) {
@ -236,9 +241,12 @@ namespace ICSharpCode.Core
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.SelectionArrow")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.SelectionArrow"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.CombineIcon")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.CombineIcon"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Literal")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Literal")); // const
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Class")); //16 imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Local"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Parameter"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Class")); //18
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.InternalClass")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.InternalClass"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedClass")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedClass"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateClass")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateClass"));

BIN
src/Main/StartUp/Project/Resources/BitmapResources.resources

Binary file not shown.
Loading…
Cancel
Save