Browse Source

XAML binding now uses correct modifiers for classes and fields (implemented x:ClassModifier and x:FieldModifier support)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5485 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 16 years ago
parent
commit
cf9d7e4766
  1. 12
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooAmbience.cs
  2. 25
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompilationUnitCreatorVisitor.cs
  3. 5
      src/AddIns/Misc/UnitTesting/Test/Utils/MockAmbience.cs
  4. 5
      src/Main/Base/Project/Src/Services/AmbienceService/NetAmbience.cs
  5. 5
      src/Main/Base/Test/Utils/MockAmbience.cs
  6. 3
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Ambience.cs
  7. 12
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/CSharpAmbience.cs
  8. 12
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetAmbience.cs

12
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooAmbience.cs

@ -95,18 +95,18 @@ namespace Grunwald.BooBinding
return (modifier & query) == query; return (modifier & query) == query;
} }
string ConvertAccessibility(ModifierEnum modifier) public override string ConvertAccessibility(ModifierEnum accessibility)
{ {
if (ShowAccessibility) { if (ShowAccessibility) {
if (ModifierIsSet(modifier, ModifierEnum.Public)) { if (ModifierIsSet(accessibility, ModifierEnum.Public)) {
return "public "; return "public ";
} else if (ModifierIsSet(modifier, ModifierEnum.Private)) { } else if (ModifierIsSet(accessibility, ModifierEnum.Private)) {
return "private "; return "private ";
} else if (ModifierIsSet(modifier, ModifierEnum.ProtectedAndInternal)) { } else if (ModifierIsSet(accessibility, ModifierEnum.ProtectedAndInternal)) {
return "protected internal "; return "protected internal ";
} else if (ModifierIsSet(modifier, ModifierEnum.Internal)) { } else if (ModifierIsSet(accessibility, ModifierEnum.Internal)) {
return "internal "; return "internal ";
} else if (ModifierIsSet(modifier, ModifierEnum.Protected)) { } else if (ModifierIsSet(accessibility, ModifierEnum.Protected)) {
return "protected "; return "protected ";
} }
} }

25
src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompilationUnitCreatorVisitor.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.XamlBinding
IClass generatedClass; IClass generatedClass;
IProjectContent projectContent; IProjectContent projectContent;
Stack<NodeWrapper> nodeStack; Stack<NodeWrapper> nodeStack;
IAmbience currentAmbience;
/// <summary> /// <summary>
/// string representation of the document, used to create DOM regions. /// string representation of the document, used to create DOM regions.
@ -39,6 +40,7 @@ namespace ICSharpCode.XamlBinding
this.fileContent = fileContent; this.fileContent = fileContent;
this.lexerTags = lexerTags; this.lexerTags = lexerTags;
this.projectContent = projectContent; this.projectContent = projectContent;
this.currentAmbience = projectContent.Language.GetAmbience();
this.nodeStack = new Stack<NodeWrapper>(); this.nodeStack = new Stack<NodeWrapper>();
} }
@ -66,7 +68,16 @@ namespace ICSharpCode.XamlBinding
IReturnType type = TypeFromXmlNode(CompilationUnit, attribute.ParentElement); IReturnType type = TypeFromXmlNode(CompilationUnit, attribute.ParentElement);
DomRegion position = CreateRegion(attribute.ParentElement.StartOffset, attribute.ParentElement.StartOffset + attribute.ParentElement.Name.Length); DomRegion position = CreateRegion(attribute.ParentElement.StartOffset, attribute.ParentElement.StartOffset + attribute.ParentElement.Name.Length);
generatedClass.Fields.Add(new DefaultField(type, name, ModifierEnum.Internal, position, generatedClass)); ModifierEnum fieldModifier = ModifierEnum.Internal;
string modifierValue = (attribute.ParentElement.GetAttributeValue(CompletionDataHelper.XamlNamespace, "FieldModifier") ?? string.Empty).Trim();
string publicString = currentAmbience.ConvertAccessibility(ModifierEnum.Public).Trim();
if (projectContent.Language.NameComparer.Compare(modifierValue, publicString) == 0)
fieldModifier = ModifierEnum.Public;
generatedClass.Fields.Add(new DefaultField(type, name, fieldModifier, position, generatedClass));
} }
} }
} }
@ -100,7 +111,7 @@ namespace ICSharpCode.XamlBinding
{ {
AXmlTag tag = element.Children.FirstOrDefault() as AXmlTag; AXmlTag tag = element.Children.FirstOrDefault() as AXmlTag;
if (tag != null && tag.IsStartOrEmptyTag) { if (tag != null && tag.IsStartOrEmptyTag) {
NodeWrapper node = new NodeWrapper() { NodeWrapper node = new NodeWrapper() {
ElementName = element.LocalName, ElementName = element.LocalName,
StartOffset = element.StartOffset, StartOffset = element.StartOffset,
@ -128,7 +139,17 @@ namespace ICSharpCode.XamlBinding
IClass AddClass(string className, AXmlElement element) { IClass AddClass(string className, AXmlElement element) {
DefaultClass c = new DefaultClass(CompilationUnit, className); DefaultClass c = new DefaultClass(CompilationUnit, className);
string modifierValue = (element.GetAttributeValue(CompletionDataHelper.XamlNamespace, "ClassModifier") ?? string.Empty).Trim();
c.Modifiers = ModifierEnum.Partial; c.Modifiers = ModifierEnum.Partial;
string internalString = currentAmbience.ConvertAccessibility(ModifierEnum.Internal).Trim();
if (projectContent.Language.NameComparer.Compare(modifierValue, internalString) == 0)
c.Modifiers |= ModifierEnum.Internal;
else
c.Modifiers |= ModifierEnum.Public;
c.Region = CreateRegion(element.StartOffset, element.EndOffset); c.Region = CreateRegion(element.StartOffset, element.EndOffset);
c.BaseTypes.Add(TypeFromXmlNode(CompilationUnit, element)); c.BaseTypes.Add(TypeFromXmlNode(CompilationUnit, element));
CompilationUnit.Classes.Add(c); CompilationUnit.Classes.Add(c);

5
src/AddIns/Misc/UnitTesting/Test/Utils/MockAmbience.cs

@ -93,5 +93,10 @@ namespace UnitTesting.Tests.Utils
{ {
return String.Empty; return String.Empty;
} }
public string ConvertAccessibility(ModifierEnum accessibility)
{
return String.Empty;
}
} }
} }

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

@ -284,5 +284,10 @@ namespace ICSharpCode.SharpDevelop
{ {
return dotNetTypeName; return dotNetTypeName;
} }
public override string ConvertAccessibility(ModifierEnum accessibility)
{
return string.Empty;
}
} }
} }

5
src/Main/Base/Test/Utils/MockAmbience.cs

@ -78,5 +78,10 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils
{ {
return String.Empty; return String.Empty;
} }
public override string ConvertAccessibility(ModifierEnum accessibility)
{
return String.Empty;
}
} }
} }

3
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Ambience.cs

@ -99,6 +99,8 @@ namespace ICSharpCode.SharpDevelop.Dom
string Convert(IParameter param); string Convert(IParameter param);
string Convert(IReturnType returnType); string Convert(IReturnType returnType);
string ConvertAccessibility(ModifierEnum accessibility);
string WrapAttribute(string attribute); string WrapAttribute(string attribute);
string WrapComment(string comment); string WrapComment(string comment);
@ -239,5 +241,6 @@ namespace ICSharpCode.SharpDevelop.Dom
public abstract string WrapAttribute(string attribute); public abstract string WrapAttribute(string attribute);
public abstract string WrapComment(string comment); public abstract string WrapComment(string comment);
public abstract string GetIntrinsicTypeName(string dotNetTypeName); public abstract string GetIntrinsicTypeName(string dotNetTypeName);
public abstract string ConvertAccessibility(ModifierEnum accessibility);
} }
} }

12
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CSharp/CSharpAmbience.cs

@ -24,18 +24,18 @@ namespace ICSharpCode.SharpDevelop.Dom.CSharp
return (modifier & query) == query; return (modifier & query) == query;
} }
string ConvertAccessibility(ModifierEnum modifier) public override string ConvertAccessibility(ModifierEnum accessibility)
{ {
if (ShowAccessibility) { if (ShowAccessibility) {
if (ModifierIsSet(modifier, ModifierEnum.Public)) { if (ModifierIsSet(accessibility, ModifierEnum.Public)) {
return "public "; return "public ";
} else if (ModifierIsSet(modifier, ModifierEnum.Private)) { } else if (ModifierIsSet(accessibility, ModifierEnum.Private)) {
return "private "; return "private ";
} else if (ModifierIsSet(modifier, ModifierEnum.ProtectedAndInternal)) { } else if (ModifierIsSet(accessibility, ModifierEnum.ProtectedAndInternal)) {
return "protected internal "; return "protected internal ";
} else if (ModifierIsSet(modifier, ModifierEnum.Internal)) { } else if (ModifierIsSet(accessibility, ModifierEnum.Internal)) {
return "internal "; return "internal ";
} else if (ModifierIsSet(modifier, ModifierEnum.Protected)) { } else if (ModifierIsSet(accessibility, ModifierEnum.Protected)) {
return "protected "; return "protected ";
} }
} }

12
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetAmbience.cs

@ -50,19 +50,19 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
return builder.ToString(); return builder.ToString();
} }
string ConvertAccessibility(ModifierEnum modifier) public override string ConvertAccessibility(ModifierEnum accessibility)
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
if (ShowAccessibility) { if (ShowAccessibility) {
if ((modifier & ModifierEnum.Public) == ModifierEnum.Public) { if ((accessibility & ModifierEnum.Public) == ModifierEnum.Public) {
builder.Append("Public"); builder.Append("Public");
} else if ((modifier & ModifierEnum.Private) == ModifierEnum.Private) { } else if ((accessibility & ModifierEnum.Private) == ModifierEnum.Private) {
builder.Append("Private"); builder.Append("Private");
} else if ((modifier & (ModifierEnum.Protected | ModifierEnum.Internal)) == (ModifierEnum.Protected | ModifierEnum.Internal)) { } else if ((accessibility & (ModifierEnum.Protected | ModifierEnum.Internal)) == (ModifierEnum.Protected | ModifierEnum.Internal)) {
builder.Append("Protected Friend"); builder.Append("Protected Friend");
} else if ((modifier & ModifierEnum.Internal) == ModifierEnum.Internal) { } else if ((accessibility & ModifierEnum.Internal) == ModifierEnum.Internal) {
builder.Append("Friend"); builder.Append("Friend");
} else if ((modifier & ModifierEnum.Protected) == ModifierEnum.Protected) { } else if ((accessibility & ModifierEnum.Protected) == ModifierEnum.Protected) {
builder.Append("Protected"); builder.Append("Protected");
} }
builder.Append(' '); builder.Append(' ');

Loading…
Cancel
Save