Skip to content

Commit 75b54b3

Browse files
committed
Create EventDeclaration
1 parent 2beda59 commit 75b54b3

17 files changed

+121
-29
lines changed

RetailCoder.VBE/Inspections/QuickFixes/WriteOnlyPropertyQuickFix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public WriteOnlyPropertyQuickFix(ParserRuleContext context, Declaration target)
2020

2121
public override void Fix()
2222
{
23-
var parameters = ((IDeclarationWithParameter) _target).Parameters.Cast<ParameterDeclaration>().ToList();
23+
var parameters = ((IParameterizedDeclaration) _target).Parameters.Cast<ParameterDeclaration>().ToList();
2424

2525
var signatureParams = parameters.Except(new[] {parameters.Last()}).Select(GetParamText);
2626
var propertyGet = "Public Property Get " + _target.IdentifierName + "(" + string.Join(", ", signatureParams) +

RetailCoder.VBE/Refactorings/ExtractInterface/InterfaceMember.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public InterfaceMember(Declaration member, IEnumerable<Declaration> declarations
4646

4747
GetMethodType();
4848

49-
var memberWithParams = member as IDeclarationWithParameter;
49+
var memberWithParams = member as IParameterizedDeclaration;
5050
if (memberWithParams != null)
5151
{
5252
MemberParams = memberWithParams.Parameters

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersModel.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,7 @@ private void LoadParameters()
5252

5353
private IEnumerable<Declaration> GetParameters()
5454
{
55-
var targetSelection = new Selection(TargetDeclaration.Context.Start.Line,
56-
TargetDeclaration.Context.Start.Column,
57-
TargetDeclaration.Context.Stop.Line,
58-
TargetDeclaration.Context.Stop.Column);
59-
60-
return Declarations.Where(d => d.DeclarationType == DeclarationType.Parameter
61-
&& d.ComponentName == TargetDeclaration.ComponentName
62-
&& d.ProjectId == TargetDeclaration.ProjectId
63-
&& targetSelection.Contains(d.Selection))
64-
.OrderBy(item => item.Selection.StartLine)
65-
.ThenBy(item => item.Selection.StartColumn);
55+
return ((IParameterizedDeclaration) TargetDeclaration).Parameters;
6656
}
6757

6858
public static readonly DeclarationType[] ValidDeclarationTypes =

Rubberduck.Parsing/Binding/IndexDefaultBinding.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ with a parameter list that cannot accept any parameters and an <argument-list> t
125125
empty, and one of the following is true (see below):
126126
*/
127127
bool isVariable = lExpression.Classification == ExpressionClassification.Variable;
128-
bool propertyWithParameters = lExpression.Classification == ExpressionClassification.Property && !((IDeclarationWithParameter)lExpression.ReferencedDeclaration).Parameters.Any();
129-
bool functionWithParameters = lExpression.Classification == ExpressionClassification.Function && !((IDeclarationWithParameter)lExpression.ReferencedDeclaration).Parameters.Any();
128+
bool propertyWithParameters = lExpression.Classification == ExpressionClassification.Property && !((IParameterizedDeclaration)lExpression.ReferencedDeclaration).Parameters.Any();
129+
bool functionWithParameters = lExpression.Classification == ExpressionClassification.Function && !((IParameterizedDeclaration)lExpression.ReferencedDeclaration).Parameters.Any();
130130
if (isVariable || ((propertyWithParameters || functionWithParameters) && _argumentList.HasArguments))
131131
{
132132
IBoundExpression boundExpression = null;
@@ -195,7 +195,7 @@ declared type.
195195
196196
TODO: Primitive argument compatibility checking for now.
197197
*/
198-
if (((IDeclarationWithParameter)defaultMember).Parameters.Count() == _argumentList.Arguments.Count)
198+
if (((IParameterizedDeclaration)defaultMember).Parameters.Count() == _argumentList.Arguments.Count)
199199
{
200200
return new IndexExpression(defaultMember, lExpression.Classification, _expression, lExpression, _argumentList);
201201
}
@@ -205,7 +205,7 @@ declared type.
205205
recursively, as if this default member was specified instead for <l-expression> with the
206206
same <argument-list>.
207207
*/
208-
if (((IDeclarationWithParameter)defaultMember).Parameters.Count() == 0)
208+
if (((IParameterizedDeclaration)defaultMember).Parameters.Count() == 0)
209209
{
210210
// Recursion limit reached, abort.
211211
if (DEFAULT_MEMBER_RECURSION_LIMIT == _defaultMemberRecursionLimitCounter)

Rubberduck.Parsing/Binding/SimpleNameDefaultBinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ private bool IsValidMatch(Declaration match, string name)
369369
{
370370
return true;
371371
}
372-
if (((IDeclarationWithParameter)match).Parameters.Any())
372+
if (((IParameterizedDeclaration)match).Parameters.Any())
373373
{
374374
return true;
375375
}

Rubberduck.Parsing/ComReflection/ReferencedDeclarationsCollector.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ private void CreateMemberDeclarations(IEnumerable<ComMember> members, QualifiedM
229229
var memberTree = new SerializableDeclarationTree(memberDeclaration);
230230
moduleTree.AddChildTree(memberTree);
231231

232-
var hasParams = memberDeclaration as IDeclarationWithParameter;
232+
var hasParams = memberDeclaration as IParameterizedDeclaration;
233233
if (hasParams != null)
234234
{
235235
_declarations.AddRange(hasParams.Parameters);
@@ -283,6 +283,8 @@ private Declaration CreateMemberDeclaration(ComMember member, QualifiedModuleNam
283283
return new SubroutineDeclaration(member, parent, module, attributes, handler);
284284
case DeclarationType.Function:
285285
return new FunctionDeclaration(member, parent, module, attributes);
286+
case DeclarationType.Event:
287+
return new EventDeclaration(member, parent, module, attributes);
286288
case DeclarationType.PropertyGet:
287289
return new PropertyGetDeclaration(member, parent, module, attributes);
288290
case DeclarationType.PropertySet:

Rubberduck.Parsing/ComReflection/SerializableDeclaration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ public Declaration Unwrap(Declaration parent)
233233
return new SubroutineDeclaration(QualifiedMemberName, parent, parent, AsTypeName, Accessibility, null, Selection.Empty, true, annotations, attributes);
234234
case DeclarationType.Function:
235235
return new FunctionDeclaration(QualifiedMemberName, parent, parent, AsTypeName, null, TypeHint, Accessibility, null, Selection.Empty, IsArray, true, annotations, attributes);
236+
case DeclarationType.Event:
237+
return new EventDeclaration(QualifiedMemberName, parent, parent, AsTypeName, null, TypeHint, Accessibility, null, Selection.Empty, IsArray, true, annotations, attributes);
236238
case DeclarationType.PropertyGet:
237239
return new PropertyGetDeclaration(QualifiedMemberName, parent, parent, AsTypeName, null, TypeHint, Accessibility, null, Selection.Empty, IsArray, true, annotations, attributes);
238240
case DeclarationType.PropertyLet:

Rubberduck.Parsing/Rubberduck.Parsing.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@
156156
<Compile Include="Symbols\DeclarationLoaders\AliasDeclarations.cs" />
157157
<Compile Include="Symbols\DeclarationLoaders\FormEventDeclarations.cs" />
158158
<Compile Include="Symbols\DeclarationLoaders\ICustomDeclarationLoader.cs" />
159+
<Compile Include="Symbols\EventDeclaration.cs" />
159160
<Compile Include="Symbols\Identifier.cs" />
160161
<Compile Include="Binding\IBindingContext.cs" />
161162
<Compile Include="Binding\IBoundExpression.cs" />
@@ -258,7 +259,7 @@
258259
<Compile Include="Symbols\DeclarationFinder.cs" />
259260
<Compile Include="Symbols\ExceptionErrorListener.cs" />
260261
<Compile Include="Symbols\ICanBeDefaultMember.cs" />
261-
<Compile Include="Symbols\IDeclarationWithParameter.cs" />
262+
<Compile Include="Symbols\IParameterizedDeclaration.cs" />
262263
<Compile Include="Symbols\PropertyLetDeclaration.cs" />
263264
<Compile Include="Symbols\PropertySetDeclaration.cs" />
264265
<Compile Include="Symbols\PropertyGetDeclaration.cs" />

Rubberduck.Parsing/Symbols/DeclarationSymbolsListener.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,9 @@ private Declaration CreateDeclaration(
231231
isByRef,
232232
isArray,
233233
isParamArray);
234-
if (_parentDeclaration is IDeclarationWithParameter)
234+
if (_parentDeclaration is IParameterizedDeclaration)
235235
{
236-
((IDeclarationWithParameter)_parentDeclaration).AddParameter(result);
236+
((IParameterizedDeclaration)_parentDeclaration).AddParameter(result);
237237
}
238238
}
239239
else
@@ -267,6 +267,23 @@ private Declaration CreateDeclaration(
267267
annotations,
268268
attributes);
269269
}
270+
else if (declarationType == DeclarationType.Event)
271+
{
272+
result = new EventDeclaration(
273+
new QualifiedMemberName(_qualifiedName, identifierName),
274+
_parentDeclaration,
275+
_currentScopeDeclaration,
276+
asTypeName,
277+
asTypeContext,
278+
typeHint,
279+
accessibility,
280+
context,
281+
selection,
282+
isArray,
283+
false,
284+
annotations,
285+
attributes);
286+
}
270287
else if (declarationType == DeclarationType.LibraryProcedure || declarationType == DeclarationType.LibraryFunction)
271288
{
272289
result = new ExternalProcedureDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, declarationType, asTypeName, asTypeContext, accessibility, context, selection, false, annotations);
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using Antlr4.Runtime;
2+
using Rubberduck.Parsing.Annotations;
3+
using Rubberduck.Parsing.ComReflection;
4+
using Rubberduck.Parsing.Grammar;
5+
using Rubberduck.Parsing.VBA;
6+
using Rubberduck.VBEditor;
7+
using System.Collections.Generic;
8+
using System.Linq;
9+
10+
namespace Rubberduck.Parsing.Symbols
11+
{
12+
public sealed class EventDeclaration : Declaration, IParameterizedDeclaration
13+
{
14+
private readonly List<Declaration> _parameters;
15+
16+
public EventDeclaration(
17+
QualifiedMemberName name,
18+
Declaration parent,
19+
Declaration parentScope,
20+
string asTypeName,
21+
VBAParser.AsTypeClauseContext asTypeContext,
22+
string typeHint,
23+
Accessibility accessibility,
24+
ParserRuleContext context,
25+
Selection selection,
26+
bool isArray,
27+
bool isBuiltIn,
28+
IEnumerable<IAnnotation> annotations,
29+
Attributes attributes)
30+
: base(
31+
name,
32+
parent,
33+
parentScope,
34+
asTypeName,
35+
typeHint,
36+
false,
37+
false,
38+
accessibility,
39+
DeclarationType.Event,
40+
context,
41+
selection,
42+
isArray,
43+
asTypeContext,
44+
isBuiltIn,
45+
annotations,
46+
attributes)
47+
{
48+
_parameters = new List<Declaration>();
49+
}
50+
51+
public EventDeclaration(ComMember member, Declaration parent, QualifiedModuleName module,
52+
Attributes attributes) : this(
53+
module.QualifyMemberName(member.Name),
54+
parent,
55+
parent,
56+
member.ReturnType.TypeName,
57+
null,
58+
null,
59+
Accessibility.Global,
60+
null,
61+
Selection.Home,
62+
member.ReturnType.IsArray,
63+
true,
64+
null,
65+
attributes)
66+
{
67+
_parameters =
68+
member.Parameters.Select(decl => new ParameterDeclaration(decl, this, module))
69+
.Cast<Declaration>()
70+
.ToList();
71+
}
72+
73+
public IEnumerable<Declaration> Parameters => _parameters.ToList();
74+
75+
public void AddParameter(Declaration parameter)
76+
{
77+
_parameters.Add(parameter);
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)