Browse Source

Fixed NRefactory bugs: VB partial class declarations and attributes with "Global." or "global::" caused parser errors.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@527 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
46038417a5
  1. 2035
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  2. 17
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  3. 1952
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  4. 21
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  5. 25
      src/Libraries/NRefactory/Test/Parser/GlobalScope/AttributeSectionTests.cs
  6. 13
      src/Libraries/NRefactory/Test/Parser/GlobalScope/TypeDeclarationTests.cs
  7. 2
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

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

File diff suppressed because it is too large Load Diff

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

@ -652,12 +652,19 @@ GlobalAttributeSection @@ -652,12 +652,19 @@ GlobalAttributeSection
.
Attribute<out ASTAttribute attribute>
(. string qualident; .)
(. string qualident;
string alias = null;
.)
=
Qualident<out qualident> (. List<Expression> positional = new List<Expression>();
List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
string name = qualident;
.)
[ IF (la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon)
ident (. alias = t.val; .)
"::"
]
Qualident<out qualident>
(. List<Expression> positional = new List<Expression>();
List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
string name = (alias != null && alias != "global") ? alias + "." + qualident : qualident;
.)
[ AttributeArguments<positional, named> ] (. attribute = new ICSharpCode.NRefactory.Parser.AST.Attribute(name, positional, named);.)
.

1952
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

21
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -600,7 +600,6 @@ NonModuleDeclaration<Modifiers m, List<AttributeSection> attributes> @@ -600,7 +600,6 @@ NonModuleDeclaration<Modifiers m, List<AttributeSection> attributes>
.) =
(. m.Check(Modifier.Classes); .)
/* Spec, 7.5 */
["Partial" (. m.Add(Modifier.Partial, t.Location); .)]
"Class"
(. TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes);
newType.StartLocation = t.Location;
@ -2046,16 +2045,15 @@ GlobalAttributeSection = @@ -2046,16 +2045,15 @@ GlobalAttributeSection =
/* Spec, 5. */
Attribute<out ICSharpCode.NRefactory.Parser.AST.Attribute attribute>
(. string name; .) =
(. string name;
List<Expression> positional = new List<Expression>();
List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
.) =
[ "Global" "." ]
Qualident<out name>
(. List<Expression> positional = new List<Expression>();
List<NamedArgumentExpression> named = new List<NamedArgumentExpression>();
.)
[ AttributeArguments<positional, named> ]
(.
attribute = new ICSharpCode.NRefactory.Parser.AST.Attribute(name, positional, named);
.)
.
(. attribute = new ICSharpCode.NRefactory.Parser.AST.Attribute(name, positional, named); .)
.
/* Spec, 5.2.2 */
AttributeArguments<List<Expression> positional, List<NamedArgumentExpression> named>
@ -2805,7 +2803,7 @@ ParameterModifier<ParamModifiers m> @@ -2805,7 +2803,7 @@ ParameterModifier<ParamModifiers m>
.
TypeModifier<Modifiers m>
= "Public" (. m.Add(Modifier.Public, t.Location); .)
= "Public" (. m.Add(Modifier.Public, t.Location); .)
| "Protected" (. m.Add(Modifier.Protected, t.Location); .)
| "Friend" (. m.Add(Modifier.Internal, t.Location); .)
| "Private" (. m.Add(Modifier.Private, t.Location); .)
@ -2813,7 +2811,8 @@ TypeModifier<Modifiers m> @@ -2813,7 +2811,8 @@ TypeModifier<Modifiers m>
| "Shadows" (. m.Add(Modifier.New, t.Location); .)
| "MustInherit" (. m.Add(Modifier.Abstract, t.Location); .)
| "NotInheritable" (. m.Add(Modifier.Sealed, t.Location); .)
.
| "Partial" (. m.Add(Modifier.Partial, t.Location); .)
.
MemberModifier<Modifiers m> =
"MustInherit" (.m.Add(Modifier.Abstract, t.Location);.)

25
src/Libraries/NRefactory/Test/Parser/GlobalScope/AttributeSectionTests.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -48,5 +48,28 @@ End Module @@ -48,5 +48,28 @@ End Module
TypeDeclaration decl = (TypeDeclaration)ParseUtilVBNet.ParseGlobal(program, typeof(TypeDeclaration));
Assert.AreEqual("HideModule", decl.Attributes[0].Attributes[0].Name);
}
[Test]
public void GlobalAttributeVB()
{
string program = @"<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Form1
End Class";
TypeDeclaration decl = (TypeDeclaration)ParseUtilVBNet.ParseGlobal(program, typeof(TypeDeclaration));
Assert.AreEqual("Microsoft.VisualBasic.CompilerServices.DesignerGenerated", decl.Attributes[0].Attributes[0].Name);
}
[Test]
public void GlobalAttributeCSharp()
{
string program = @"[global::Microsoft.VisualBasic.CompilerServices.DesignerGenerated()]
[someprefix::DesignerGenerated()]
public class Form1 {
}";
TypeDeclaration decl = (TypeDeclaration)ParseUtilCSharp.ParseGlobal(program, typeof(TypeDeclaration));
Assert.AreEqual("Microsoft.VisualBasic.CompilerServices.DesignerGenerated", decl.Attributes[0].Attributes[0].Name);
Assert.AreEqual("someprefix.DesignerGenerated", decl.Attributes[1].Attributes[0].Name);
}
}
}

13
src/Libraries/NRefactory/Test/Parser/GlobalScope/TypeDeclarationTests.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -211,6 +211,17 @@ public abstract class MyClass : MyBase, Interface1, My.Test.Interface2 @@ -211,6 +211,17 @@ public abstract class MyClass : MyBase, Interface1, My.Test.Interface2
Assert.AreEqual(Modifier.Partial, td.Modifier);
}
[Test]
public void VBNetPartialPublicClass()
{
string program = "Partial Public Class TestClass\nEnd Class\n";
TypeDeclaration td = (TypeDeclaration)ParseUtilVBNet.ParseGlobal(program, typeof(TypeDeclaration));
Assert.AreEqual("TestClass", td.Name);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual(Modifier.Partial | Modifier.Public, td.Modifier);
}
[Test]
public void VBNetGenericClassTypeDeclarationTest()
{

2
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -502,9 +502,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -502,9 +502,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
DefaultProperty property = new DefaultProperty(propertyDeclaration.Name, type, ConvertModifier(propertyDeclaration.Modifier), region, bodyRegion, GetCurrentClass());
if (propertyDeclaration.GetRegion != null) {
property.GetterRegion = GetRegion(propertyDeclaration.GetRegion.StartLocation, propertyDeclaration.GetRegion.EndLocation);
property.CanGet = true;
}
if (propertyDeclaration.SetRegion != null) {
property.SetterRegion = GetRegion(propertyDeclaration.SetRegion.StartLocation, propertyDeclaration.SetRegion.EndLocation);
property.CanSet = true;
}
property.Documentation = GetDocumentation(region.BeginLine);
property.Attributes.AddRange(VisitAttributes(propertyDeclaration.Attributes));

Loading…
Cancel
Save