Browse Source

Added support for accessor modifiers to C# parser (public int Property { get {} protected set {}})

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@391 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
d4f2825721
  1. 46
      data/options/TextLib/SharpDevelop.xml
  2. 1764
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  3. 26
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  4. 11
      src/Libraries/NRefactory/Test/Parser/TypeLevel/PropertyDeclarationTests.cs

46
data/options/TextLib/SharpDevelop.xml

@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
<TextLibrary name = "#develop">
<Text display = "Get StringParserService"
value = "StringParserService stringParserService = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));"/>
<Text display = "Get PropertyService"
value = "PropertyService propertyService = (PropertyService)ServiceManager.Services.GetService(typeof(PropertyService));"/>
<Text display = "Get FileUtilityService"
value = "FileUtilityService fileUtilityService = (FileUtilityService)ServiceManager.Services.GetService(typeof(FileUtilityService));"/>
<Text display = "Get IconService"
value = "IconService iconService = (IconService)ServiceManager.Services.GetService(typeof(IconService));"/>
<Text display = "Get MessageService"
value = "IMessageService messageService =(IMessageService)ServiceManager.Services.GetService(typeof(IMessageService));"/>
<Text display = "Get MenuService"
value = "MenuService menuService = (MenuService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(MenuService));"/>
<Text display = "Get ClassBrowserIconsService"
value = "ClassBrowserIconsService classBrowserIconService = (ClassBrowserIconsService)ServiceManager.Services.GetService(typeof(ClassBrowserIconsService));"/>
<Text display = "Get FileService"
value = "IFileService fileService = (IFileService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IFileService));"/>
<Text display = "Get ProjectService"
value = "IProjectService projectService = (IProjectService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IProjectService));"/>
<Text display = "Get TaskService"
value = "TaskService taskService = (TaskService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(TaskService));"/>
<Text display = "Get StatusBarService"
value = "IStatusBarService statusBarService = (IStatusBarService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IStatusBarService));"/>
<Text display = "Get ToolbarService"
value = "ToolbarService toolBarService = (ToolbarService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(ToolbarService));"/>
<Text display = "Get ParserService"
value = "IParserService parserService = (IParserService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IParserService));"/>
<Text display = "Get DebuggerService"
value = "DebuggerService debuggerService = (DebuggerService)ServiceManager.Services.GetService(typeof(DebuggerService));"/>
<Text display = "Get AmbienceService"
value = "AmbienceService ambienceService = (AmbienceService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(AmbienceService));
"/>
</TextLibrary>

1764
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

File diff suppressed because it is too large Load Diff

26
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -1002,6 +1002,16 @@ ParameterArray<out ParameterDeclarationExpression p> @@ -1002,6 +1002,16 @@ ParameterArray<out ParameterDeclarationExpression p>
"params" Type<out type> ident (. p = new ParameterDeclarationExpression(type, t.val, ParamModifier.Params); .)
.
AccessorModifiers<out Modifiers m>
(. m = new Modifiers(); .)
=
"private" (. m.Add(Modifier.Private, t.Location); .)
| "protected" (. m.Add(Modifier.Protected, t.Location); .)
["internal" (. m.Add(Modifier.Internal, t.Location); .)]
| "internal" (. m.Add(Modifier.Internal, t.Location); .)
["protected" (. m.Add(Modifier.Protected, t.Location); .)]
.
TypeModifier<Modifiers m>
=
"new" (. m.Add(Modifier.New, t.Location); .)
@ -1396,21 +1406,29 @@ AccessorDecls<out PropertyGetRegion getBlock, out PropertySetRegion setBlock> @@ -1396,21 +1406,29 @@ AccessorDecls<out PropertyGetRegion getBlock, out PropertySetRegion setBlock>
AttributeSection section;
getBlock = null;
setBlock = null;
Modifiers modifiers = null;
.)
=
{ AttributeSection<out section> (. attributes.Add(section); .) }
[ AccessorModifiers<out modifiers> ]
(
IF (IdentIsGet())
GetAccessorDecl<out getBlock, attributes>
[ (. attributes = new List<AttributeSection>(); .)
(. if (modifiers != null) {getBlock.Modifier = modifiers.Modifier; } .)
[ (. attributes = new List<AttributeSection>(); modifiers = null; .)
{ AttributeSection<out section> (. attributes.Add(section); .) }
[ AccessorModifiers<out modifiers> ]
SetAccessorDecl<out setBlock, attributes>
(. if (modifiers != null) {setBlock.Modifier = modifiers.Modifier; } .)
]
| IF (IdentIsSet())
SetAccessorDecl<out setBlock, attributes>
[ (. attributes = new List<AttributeSection>(); .)
(. if (modifiers != null) {setBlock.Modifier = modifiers.Modifier; } .)
[ (. attributes = new List<AttributeSection>(); modifiers = null; .)
{ AttributeSection<out section> (. attributes.Add(section); .) }
[ AccessorModifiers<out modifiers> ]
GetAccessorDecl<out getBlock, attributes>
(. if (modifiers != null) {getBlock.Modifier = modifiers.Modifier; } .)
]
| ident (. Error("get or set accessor declaration expected"); .)
)
@ -1419,7 +1437,7 @@ AccessorDecls<out PropertyGetRegion getBlock, out PropertySetRegion setBlock> @@ -1419,7 +1437,7 @@ AccessorDecls<out PropertyGetRegion getBlock, out PropertySetRegion setBlock>
GetAccessorDecl<out PropertyGetRegion getBlock, List<AttributeSection> attributes>
(. Statement stmt = null; .)
=
ident /* "get" is not a keyword!? */
ident /* "get" is not a keyword! */
(. if (t.val != "get") Error("get expected"); .)
(. Point startLocation = t.Location; .)
( Block<out stmt> | ";" )
@ -1430,7 +1448,7 @@ GetAccessorDecl<out PropertyGetRegion getBlock, List<AttributeSection> attribute @@ -1430,7 +1448,7 @@ GetAccessorDecl<out PropertyGetRegion getBlock, List<AttributeSection> attribute
SetAccessorDecl<out PropertySetRegion setBlock, List<AttributeSection> attributes>
(. Statement stmt = null; .)
=
ident /* "set" is not a keyword!? */
ident /* "set" is not a keyword! */
(. if (t.val != "set") Error("set expected"); .)
(. Point startLocation = t.Location; .)
( Block<out stmt> | ";" )

11
src/Libraries/NRefactory/Test/Parser/TypeLevel/PropertyDeclarationTests.cs

@ -29,6 +29,15 @@ namespace ICSharpCode.NRefactory.Tests.AST @@ -29,6 +29,15 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.IsTrue(pd.HasSetRegion);
}
[Test]
public void CSharpGetSetPropertyDeclarationWithAccessorModifiers()
{
PropertyDeclaration pd = (PropertyDeclaration)ParseUtilCSharp.ParseTypeMember("int MyProperty { private get {} protected internal set {} } ", typeof(PropertyDeclaration));
Assert.AreEqual("MyProperty", pd.Name);
Assert.IsTrue(pd.HasGetRegion);
Assert.IsTrue(pd.HasSetRegion);
}
[Test]
public void CSharpSimpleGetPropertyDeclarationTest()
{
@ -75,6 +84,6 @@ namespace ICSharpCode.NRefactory.Tests.AST @@ -75,6 +84,6 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.IsFalse(pd.HasGetRegion);
Assert.IsTrue(pd.HasSetRegion);
}
#endregion
#endregion
}
}

Loading…
Cancel
Save