Skip to content
This repository has been archived by the owner on Oct 16, 2020. It is now read-only.

Commit

Permalink
Revert "[AST] Handled protected and/or internal on AST level."
Browse files Browse the repository at this point in the history
"protected internal" and "internal protected" are the same thing in C#.
Both map to ProtectedOrInternal; the ProtectedAndInternal accessibility is
not usable from C#.
This reverts commit b5ad288.
  • Loading branch information
dgrunwald committed Sep 13, 2012
1 parent 89ef0ae commit f558b30
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 84 deletions.
4 changes: 1 addition & 3 deletions ICSharpCode.NRefactory.CSharp/Ast/CSharpModifierToken.cs
Expand Up @@ -61,7 +61,7 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma
// Not worth using a dictionary for such few elements.
// This table is sorted in the order that modifiers should be output when generating code.
static readonly Modifiers[] allModifiers = {
Modifiers.Public, Modifiers.Internal, Modifiers.Protected, Modifiers.Private, Modifiers.ProtectedAndInternal,
Modifiers.Public, Modifiers.Protected, Modifiers.Private, Modifiers.Internal,
Modifiers.New,
Modifiers.Unsafe,
Modifiers.Abstract, Modifiers.Virtual, Modifiers.Sealed, Modifiers.Static, Modifiers.Override,
Expand Down Expand Up @@ -89,8 +89,6 @@ public static string GetModifierName(Modifiers modifier)
return "internal";
case Modifiers.Protected:
return "protected";
case Modifiers.ProtectedAndInternal:
return "internal protected";
case Modifiers.Public:
return "public";
case Modifiers.Abstract:
Expand Down
6 changes: 2 additions & 4 deletions ICSharpCode.NRefactory.CSharp/Ast/Modifiers.cs
Expand Up @@ -54,10 +54,8 @@ public enum Modifiers
Volatile = 0x4000,
Unsafe = 0x8000,
Async = 0x10000,

ProtectedOrInternal = Protected | Internal,
ProtectedAndInternal = 0x20000,
VisibilityMask = Private | Internal | Protected | Public | ProtectedAndInternal,

VisibilityMask = Private | Internal | Protected | Public,

/// <summary>
/// Special value used to match any modifiers during pattern matching.
Expand Down
37 changes: 6 additions & 31 deletions ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EntityDeclaration.cs
Expand Up @@ -76,11 +76,7 @@ internal static Modifiers GetModifiers(AstNode node)
{
Modifiers m = 0;
foreach (CSharpModifierToken t in node.GetChildrenByRole (ModifierRole)) {
if (t.Modifier == Modifiers.Internal && m.HasFlag (Modifiers.Protected)) {
m = (m & ~Modifiers.Protected) | Modifiers.ProtectedAndInternal;
} else {
m |= t.Modifier;
}
m |= t.Modifier;
}
return m;
}
Expand All @@ -93,38 +89,17 @@ internal static void SetModifiers(AstNode node, Modifiers newValue)
if ((m & newValue) != 0) {
if ((m & oldValue) == 0) {
// Modifier was added
if (m == Modifiers.ProtectedAndInternal) {
// This modifier is a special case - it consists out of 2 tokens.
// note that protected or internal is handled by the ordering of the AllModifiers array.
var newToken = new CSharpModifierToken(TextLocation.Empty, Modifiers.Protected);
node.InsertChildAfter(insertionPos, newToken, ModifierRole);
insertionPos = newToken;

newToken = new CSharpModifierToken(TextLocation.Empty, Modifiers.Internal);
node.InsertChildAfter(insertionPos, newToken, ModifierRole);
insertionPos = newToken;
} else {
var newToken = new CSharpModifierToken(TextLocation.Empty, m);
node.InsertChildAfter(insertionPos, newToken, ModifierRole);
insertionPos = newToken;
}
var newToken = new CSharpModifierToken(TextLocation.Empty, m);
node.InsertChildAfter(insertionPos, newToken, ModifierRole);
insertionPos = newToken;
} else {
// Modifier already exists
if (m == Modifiers.ProtectedAndInternal) {
insertionPos = node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == Modifiers.Internal);
} else {
insertionPos = node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == m);
}
insertionPos = node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == m);
}
} else {
if ((m & oldValue) != 0) {
// Modifier was removed
if (m == Modifiers.ProtectedAndInternal) {
node.GetChildrenByRole (ModifierRole).First(t => t.Modifier == Modifiers.Protected).Remove();
node.GetChildrenByRole (ModifierRole).First(t => t.Modifier == Modifiers.Internal).Remove();
} else {
node.GetChildrenByRole (ModifierRole).First(t => t.Modifier == m).Remove();
}
node.GetChildrenByRole (ModifierRole).First(t => t.Modifier == m).Remove();
}
}
}
Expand Down
8 changes: 0 additions & 8 deletions ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
Expand Up @@ -1093,22 +1093,14 @@ void AddModifiers (EntityDeclaration parent, LocationsBag.MemberLocations locati
{
if (location == null || location.Modifiers == null)
return;
Modifiers entityModifierMask = Modifiers.None;
foreach (var modifier in location.Modifiers) {
ICSharpCode.NRefactory.CSharp.Modifiers mod;
if (!modifierTable.TryGetValue (modifier.Item1, out mod)) {
Console.WriteLine ("modifier " + modifier.Item1 + " can't be converted,");
}

if (mod == Modifiers.Internal && entityModifierMask.HasFlag (Modifiers.Protected)) {
entityModifierMask = (entityModifierMask & ~Modifiers.Protected) | Modifiers.ProtectedAndInternal;
} else {
entityModifierMask |= mod;
}

parent.AddChild (new CSharpModifierToken (Convert (modifier.Item2), mod), EntityDeclaration.ModifierRole);
}
parent.Modifiers |= entityModifierMask;
}

public override void Visit (Property p)
Expand Down
Expand Up @@ -753,9 +753,8 @@ static Modifiers ModifierFromAccessibility(Accessibility accessibility)
case Accessibility.Internal:
return Modifiers.Internal;
case Accessibility.ProtectedOrInternal:
return Modifiers.ProtectedOrInternal;
case Accessibility.ProtectedAndInternal:
return Modifiers.ProtectedAndInternal;
return Modifiers.Protected | Modifiers.Internal;
default:
return Modifiers.None;
}
Expand Down
Expand Up @@ -829,12 +829,10 @@ static void ApplyModifiers(AbstractUnresolvedMember m, Modifiers modifiers)
switch (modifiers & Modifiers.VisibilityMask) {
case Modifiers.Private:
return Accessibility.Private;
case Modifiers.ProtectedOrInternal: // Modifiers.Protected | Modifiers.Internal
return Accessibility.ProtectedOrInternal;
case Modifiers.ProtectedAndInternal:
return Accessibility.ProtectedAndInternal;
case Modifiers.Internal:
return Accessibility.Internal;
case Modifiers.Protected | Modifiers.Internal:
return Accessibility.ProtectedOrInternal;
case Modifiers.Protected:
return Accessibility.Protected;
case Modifiers.Public:
Expand Down
Expand Up @@ -206,7 +206,7 @@ int GetInt()
void DoStuff()
{
System.Func<int> getInt = GetInt;
if (getInt() == 0) {
if (getInt () == 0) {
}
}
Expand Down
Expand Up @@ -30,9 +30,9 @@ public void SimpleFieldDeclarationTest()
ParseUtilCSharp.AssertTypeMember(
"int[,,,] myField;",
new FieldDeclaration {
ReturnType = new PrimitiveType("int").MakeArrayType(4),
Variables = { new VariableInitializer("myField") }
});
ReturnType = new PrimitiveType("int").MakeArrayType(4),
Variables = { new VariableInitializer("myField") }
});
}

[Test]
Expand Down Expand Up @@ -77,8 +77,8 @@ public void FieldWithFixedSize()
ParseUtilCSharp.AssertTypeMember(
"public unsafe fixed int Field[100];",
new FixedFieldDeclaration() {
Modifiers = Modifiers.Public | Modifiers.Unsafe,
ReturnType = new PrimitiveType("int"),
Modifiers = Modifiers.Public | Modifiers.Unsafe,
ReturnType = new PrimitiveType("int"),
Variables = {
new FixedVariableInitializer {
Name = "Field",
Expand All @@ -87,31 +87,5 @@ public void FieldWithFixedSize()
}
});
}

[Test]
public void InternalAndProtectedFieldTest()
{
ParseUtilCSharp.AssertTypeMember(
"protected internal int myField;",
new FieldDeclaration {
Modifiers = Modifiers.ProtectedAndInternal,
ReturnType = new PrimitiveType("int"),
Variables = { new VariableInitializer("myField") }
}
);
}

[Test]
public void InternalOrProtectedFieldTest()
{
ParseUtilCSharp.AssertTypeMember(
"internal protected int myField;",
new FieldDeclaration {
Modifiers = Modifiers.ProtectedOrInternal,
ReturnType = new PrimitiveType("int"),
Variables = { new VariableInitializer("myField") }
}
);
}
}
}

0 comments on commit f558b30

Please sign in to comment.