Browse Source

work on custom events

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@272 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Markus Palme 20 years ago
parent
commit
18a9bd0a26
  1. 2
      src/Libraries/NRefactory/Project/NRefactory.csproj
  2. 6
      src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs
  3. 32
      src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs
  4. 61
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeLevel/EventAddRemoveRegion.cs
  5. 99
      src/Libraries/NRefactory/Project/Src/Parser/AST/VBNet/TypeLevel/CustomEventDeclaration.cs
  6. 90
      src/Libraries/NRefactory/Project/Src/Parser/AST/VBNet/TypeLevel/EventAccessorDeclaration.cs
  7. 1817
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  8. 1736
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  9. 30
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  10. 16
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractASTVisitor.cs
  11. 1
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/IASTVisitor.cs
  12. 2
      src/Libraries/NRefactory/Test/Parser/TypeLevel/CustomEventTests.cs

2
src/Libraries/NRefactory/Project/NRefactory.csproj

@ -187,8 +187,6 @@
<Compile Include="Src\Parser\Visitors\CSharpToVBNetConvertVisitor.cs" /> <Compile Include="Src\Parser\Visitors\CSharpToVBNetConvertVisitor.cs" />
<Compile Include="Src\Parser\Visitors\PrefixFieldsVisitor.cs" /> <Compile Include="Src\Parser\Visitors\PrefixFieldsVisitor.cs" />
<Compile Include="Src\Parser\Visitors\VBNetToCSharpConvertVisitor.cs" /> <Compile Include="Src\Parser\Visitors\VBNetToCSharpConvertVisitor.cs" />
<Compile Include="Src\Parser\AST\VBNet\TypeLevel\CustomEventDeclaration.cs" />
<Compile Include="Src\Parser\AST\VBNet\TypeLevel\EventAccessorDeclaration.cs" />
<Compile Include="Src\Parser\AST\General\TypeLevel\OperatorDeclaration.cs" /> <Compile Include="Src\Parser\AST\General\TypeLevel\OperatorDeclaration.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

6
src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs

@ -543,6 +543,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
return null; return null;
} }
public object Visit(EventRaiseRegion eventRaiseRegion, object data)
{
// VB.NET only
return null;
}
public object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data) public object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data)
{ {
VisitAttributes(parameterDeclarationExpression.Attributes, data); VisitAttributes(parameterDeclarationExpression.Attributes, data);

32
src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs

@ -689,6 +689,38 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
return null; return null;
} }
public object Visit(EventRaiseRegion eventRaiseRegion, object data)
{
VisitAttributes(eventRaiseRegion.Attributes, data);
outputFormatter.Indent();
outputFormatter.PrintText("RaiseEvent");
outputFormatter.PrintToken(Tokens.OpenParenthesis);
if (eventRaiseRegion.Parameters.Count == 0) {
outputFormatter.PrintToken(Tokens.ByVal);
outputFormatter.Space();
outputFormatter.PrintIdentifier("value");
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.As);
outputFormatter.Space();
nodeTracker.TrackedVisit(currentEventType, data);
} else {
this.AppendCommaSeparatedList(eventRaiseRegion.Parameters);
}
outputFormatter.PrintToken(Tokens.CloseParenthesis);
outputFormatter.NewLine();
++outputFormatter.IndentationLevel;
nodeTracker.TrackedVisit(eventRaiseRegion.Block, data);
--outputFormatter.IndentationLevel;
outputFormatter.Indent();
outputFormatter.PrintToken(Tokens.End);
outputFormatter.Space();
outputFormatter.PrintText("RaiseEvent");
outputFormatter.NewLine();
return null;
}
public object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data) public object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data)
{ {
VisitAttributes(parameterDeclarationExpression.Attributes, data); VisitAttributes(parameterDeclarationExpression.Attributes, data);

61
src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeLevel/EventAddRemoveRegion.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
public abstract class EventAddRemoveRegion : AttributedNode, INullable public abstract class EventAddRemoveRegion : AttributedNode, INullable
{ {
BlockStatement block = BlockStatement.Null; BlockStatement block = BlockStatement.Null;
ArrayList parameters; List<ParameterDeclarationExpression> parameters;
public BlockStatement Block { public BlockStatement Block {
get { get {
@ -27,12 +27,12 @@ namespace ICSharpCode.NRefactory.Parser.AST
} }
} }
public ArrayList Parameters { public List<ParameterDeclarationExpression> Parameters {
get { get {
return parameters; return parameters;
} }
set { set {
parameters = value == null ? new ArrayList(1) : value; parameters = value == null ? new List<ParameterDeclarationExpression>(1) : value;
} }
} }
@ -98,6 +98,30 @@ namespace ICSharpCode.NRefactory.Parser.AST
Block); Block);
} }
} }
public class EventRaiseRegion : EventAddRemoveRegion
{
public static EventRaiseRegion Null {
get {
return NullEventRaiseRegion.Instance;
}
}
public EventRaiseRegion(List<AttributeSection> attributes) : base (attributes)
{}
public override object AcceptVisitor(IASTVisitor visitor, object data)
{
return visitor.Visit(this, data);
}
public override string ToString()
{
return String.Format("[EventRaiseRegion: Attributes = {0}, Block = {1}]",
GetCollectionString(Attributes),
Block);
}
}
public class NullEventAddRegion : EventAddRegion public class NullEventAddRegion : EventAddRegion
{ {
static NullEventAddRegion nullEventAddRegion = new NullEventAddRegion(); static NullEventAddRegion nullEventAddRegion = new NullEventAddRegion();
@ -159,4 +183,35 @@ namespace ICSharpCode.NRefactory.Parser.AST
return String.Format("[NullEventRemoveRegion]"); return String.Format("[NullEventRemoveRegion]");
} }
} }
public class NullEventRaiseRegion : EventRaiseRegion
{
static NullEventRaiseRegion nullEventRaiseRegion = new NullEventRaiseRegion();
public static NullEventRaiseRegion Instance {
get {
return nullEventRaiseRegion;
}
}
NullEventRaiseRegion() : base(new List<AttributeSection>(1))
{
}
public override bool IsNull {
get {
return true;
}
}
public override object AcceptVisitor(IASTVisitor visitor, object data)
{
return data;
}
public override string ToString()
{
return String.Format("[NullEventRaiseRegion]");
}
}
} }

99
src/Libraries/NRefactory/Project/Src/Parser/AST/VBNet/TypeLevel/CustomEventDeclaration.cs

@ -1,99 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Markus Palme" email="MarkusPalme@gmx.de"/>
// <version>$Revision: 230 $</version>
// </file>
using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
namespace ICSharpCode.NRefactory.Parser.AST
{
public class CustomEventDeclaration : AttributedNode
{
string name;
EventAccessorDeclaration addHandlerDeclaration;
EventAccessorDeclaration removeHandlerDeclaration;
EventAccessorDeclaration raiseEventDeclaration;
ArrayList implementsClause = new ArrayList();
public CustomEventDeclaration(Modifier modifier, List<AttributeSection> attributes, string name, EventAccessorDeclaration addHandlerDeclaration, EventAccessorDeclaration removeHandlerDeclaration, EventAccessorDeclaration raiseEventDeclaration, ArrayList implementsClause) : base(modifier, attributes)
{
this.modifier = modifier;
this.attributes = attributes;
this.name = name;
this.addHandlerDeclaration = addHandlerDeclaration;
this.removeHandlerDeclaration = removeHandlerDeclaration;
this.raiseEventDeclaration = raiseEventDeclaration;
this.implementsClause = implementsClause;
}
public ArrayList ImplementsClause
{
get
{
return implementsClause;
}
set
{
implementsClause = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public EventAccessorDeclaration AddHandlerDeclaration
{
get
{
return addHandlerDeclaration;
}
set
{
addHandlerDeclaration = value;
}
}
public EventAccessorDeclaration RemoveHandlerDeclaration
{
get
{
return removeHandlerDeclaration;
}
set
{
removeHandlerDeclaration = value;
}
}
public EventAccessorDeclaration RaiseEventDeclaration
{
get
{
return raiseEventDeclaration;
}
set
{
raiseEventDeclaration = value;
}
}
public override object AcceptVisitor(IASTVisitor visitor, object data)
{
return visitor.Visit(this, data);
}
}
}

90
src/Libraries/NRefactory/Project/Src/Parser/AST/VBNet/TypeLevel/EventAccessorDeclaration.cs

@ -1,90 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Markus Palme" email="MarkusPalme@gmx.de"/>
// <version>$Revision: 230 $</version>
// </file>
using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
namespace ICSharpCode.NRefactory.Parser.AST
{
public enum EventAccessorType
{
RemoveHandlerAccessor,
AddHandlerAccessor,
RaiseEventAccessor
}
public class EventAccessorDeclaration : AbstractNode
{
protected BlockStatement body = BlockStatement.Null;
protected EventAccessorType type;
protected List<AttributeSection> attributes;
protected List<ParameterDeclarationExpression> parameters;
public EventAccessorDeclaration(BlockStatement body, List<ParameterDeclarationExpression> parameters, EventAccessorType type, List<AttributeSection> attributes)
{
this.body = body;
this.parameters = parameters;
this.type = type;
this.attributes = attributes;
}
public List<ParameterDeclarationExpression> Parameters
{
get
{
return parameters;
}
set
{
parameters = value == null ? new List<ParameterDeclarationExpression>(1) : value;
}
}
public List<AttributeSection> Attributes
{
get
{
return attributes;
}
set
{
attributes = value == null ? new List<AttributeSection>(1) : value;
}
}
public EventAccessorType Type
{
get
{
return type;
}
set
{
type = value;
}
}
public BlockStatement Body
{
get
{
return body;
}
set
{
body = BlockStatement.CheckNull(value);
}
}
public override object AcceptVisitor(IASTVisitor visitor, object data)
{
return visitor.Visit(this, data);
}
}
}

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

File diff suppressed because it is too large Load Diff

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

File diff suppressed because it is too large Load Diff

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

@ -1197,10 +1197,10 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
"Custom" (. Point startPos = t.Location; .) "Event" "Custom" (. Point startPos = t.Location; .) "Event"
(. (.
m.Check(Modifier.VBCustomEvents); m.Check(Modifier.VBCustomEvents);
EventAccessorDeclaration eventAccessorDeclaration; EventAddRemoveRegion eventAccessorDeclaration;
EventAccessorDeclaration addHandlerAccessorDeclaration = null; EventAddRemoveRegion addHandlerAccessorDeclaration = null;
EventAccessorDeclaration removeHandlerAccessorDeclaration = null; EventAddRemoveRegion removeHandlerAccessorDeclaration = null;
EventAccessorDeclaration raiseEventAccessorDeclaration = null; EventAddRemoveRegion raiseEventAccessorDeclaration = null;
ArrayList implementsClause = null; ArrayList implementsClause = null;
.) .)
Identifier (. string customEventName = t.val; .) Identifier (. string customEventName = t.val; .)
@ -1210,15 +1210,15 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
{ {
EventAccessorDeclaration<out eventAccessorDeclaration> EventAccessorDeclaration<out eventAccessorDeclaration>
(. (.
if(eventAccessorDeclaration.Type == EventAccessorType.AddHandlerAccessor) if(eventAccessorDeclaration is EventAddRegion)
{ {
addHandlerAccessorDeclaration = eventAccessorDeclaration; addHandlerAccessorDeclaration = eventAccessorDeclaration;
} }
else if(eventAccessorDeclaration.Type == EventAccessorType.RemoveHandlerAccessor) else if(eventAccessorDeclaration is EventRemoveRegion)
{ {
removeHandlerAccessorDeclaration = eventAccessorDeclaration; removeHandlerAccessorDeclaration = eventAccessorDeclaration;
} }
else if(eventAccessorDeclaration.Type == EventAccessorType.RaiseEventAccessor) else if(eventAccessorDeclaration is EventRaiseRegion)
{ {
raiseEventAccessorDeclaration = eventAccessorDeclaration; raiseEventAccessorDeclaration = eventAccessorDeclaration;
} }
@ -1241,7 +1241,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
Error("Need to provide RaiseEvent accessor."); Error("Need to provide RaiseEvent accessor.");
} }
CustomEventDeclaration decl = new CustomEventDeclaration(m.Modifier, attributes, customEventName, addHandlerAccessorDeclaration, removeHandlerAccessorDeclaration, raiseEventAccessorDeclaration, implementsClause); EventDeclaration decl = new EventDeclaration(type, customEventName, m.Modifier, attributes);
decl.StartLocation = startPos; decl.StartLocation = startPos;
decl.EndLocation = t.EndLocation; decl.EndLocation = t.EndLocation;
compilationUnit.AddChild(decl); compilationUnit.AddChild(decl);
@ -1352,7 +1352,7 @@ OverloadableOperator<out OverloadableOperatorType operatorType>
.) .)
. .
EventAccessorDeclaration<out EventAccessorDeclaration eventAccessorDeclaration> EventAccessorDeclaration<out EventAddRemoveRegion eventAccessorDeclaration>
(. (.
Statement stmt = null; Statement stmt = null;
List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>(); List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>();
@ -1365,19 +1365,25 @@ EventAccessorDeclaration<out EventAccessorDeclaration eventAccessorDeclaration>
"AddHandler" [ "(" [ FormalParameterList<p> ] ")" ] EOL "AddHandler" [ "(" [ FormalParameterList<p> ] ")" ] EOL
Block<out stmt> "End" "AddHandler" EOL Block<out stmt> "End" "AddHandler" EOL
(. (.
eventAccessorDeclaration = new EventAccessorDeclaration((BlockStatement)stmt, p, EventAccessorType.AddHandlerAccessor, attributes); eventAccessorDeclaration = new EventAddRegion(attributes);
eventAccessorDeclaration.Block = (BlockStatement)stmt;
eventAccessorDeclaration.Parameters = p;
.) .)
| |
"RemoveHandler" [ "(" [ FormalParameterList<p> ] ")" ] EOL "RemoveHandler" [ "(" [ FormalParameterList<p> ] ")" ] EOL
Block<out stmt> "End" "RemoveHandler" EOL Block<out stmt> "End" "RemoveHandler" EOL
(. (.
eventAccessorDeclaration = new EventAccessorDeclaration((BlockStatement)stmt, p, EventAccessorType.RemoveHandlerAccessor, attributes); eventAccessorDeclaration = new EventRemoveRegion(attributes);
eventAccessorDeclaration.Block = (BlockStatement)stmt;
eventAccessorDeclaration.Parameters = p;
.) .)
| |
"RaiseEvent" [ "(" [ FormalParameterList<p> ] ")" ] EOL "RaiseEvent" [ "(" [ FormalParameterList<p> ] ")" ] EOL
Block<out stmt> "End" "RaiseEvent" EOL Block<out stmt> "End" "RaiseEvent" EOL
(. (.
eventAccessorDeclaration = new EventAccessorDeclaration((BlockStatement)stmt, p, EventAccessorType.RaiseEventAccessor, attributes); eventAccessorDeclaration = new EventRaiseRegion(attributes);
eventAccessorDeclaration.Block = (BlockStatement)stmt;
eventAccessorDeclaration.Parameters = p;
.) .)
) )
. .

16
src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractASTVisitor.cs

@ -271,6 +271,22 @@ namespace ICSharpCode.NRefactory.Parser
return data; return data;
} }
public virtual object Visit(EventRaiseRegion eventRaiseRegion, object data)
{
Debug.Assert(eventRaiseRegion != null);
Debug.Assert(eventRaiseRegion.Attributes != null);
Debug.Assert(eventRaiseRegion.Block != null);
foreach (AttributeSection section in eventRaiseRegion.Attributes) {
Debug.Assert(section != null);
section.AcceptVisitor(this, data);
}
blockStack.Push(eventRaiseRegion.Block);
eventRaiseRegion.Block.AcceptChildren(this, data);
blockStack.Pop();
return data;
}
public virtual object Visit(EventRemoveRegion eventRemoveRegion, object data) public virtual object Visit(EventRemoveRegion eventRemoveRegion, object data)
{ {
Debug.Assert(eventRemoveRegion != null); Debug.Assert(eventRemoveRegion != null);

1
src/Libraries/NRefactory/Project/Src/Parser/Visitors/IASTVisitor.cs

@ -38,6 +38,7 @@ namespace ICSharpCode.NRefactory.Parser
object Visit(EventDeclaration eventDeclaration, object data); object Visit(EventDeclaration eventDeclaration, object data);
object Visit(EventAddRegion eventAddRegion, object data); object Visit(EventAddRegion eventAddRegion, object data);
object Visit(EventRemoveRegion eventRemoveRegion, object data); object Visit(EventRemoveRegion eventRemoveRegion, object data);
object Visit(EventRaiseRegion eventRaiseRegion, object data); // VB.NET
object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data); object Visit(ParameterDeclarationExpression parameterDeclarationExpression, object data);
object Visit(MethodDeclaration methodDeclaration, object data); object Visit(MethodDeclaration methodDeclaration, object data);

2
src/Libraries/NRefactory/Test/Parser/TypeLevel/CustomEventTests.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.Tests.AST
End If End If
End RaiseEvent End RaiseEvent
End Event"; End Event";
CustomEventDeclaration customEventDecl = (CustomEventDeclaration)ParseUtilVBNet.ParseTypeMember(code, typeof(CustomEventDeclaration)); EventDeclaration customEventDecl = (EventDeclaration)ParseUtilVBNet.ParseTypeMember(code, typeof(EventDeclaration));
Assert.IsNotNull(customEventDecl); Assert.IsNotNull(customEventDecl);
Assert.AreEqual("TestEvent", customEventDecl.Name); Assert.AreEqual("TestEvent", customEventDecl.Name);
} }

Loading…
Cancel
Save