Skip to content

Commit a23f1b3

Browse files
committed
Split Documents into subclass of ClassModuleDeclaration
1 parent 1e6e40d commit a23f1b3

29 files changed

+127
-73
lines changed

Rubberduck.CodeAnalysis/Inspections/Concrete/HungarianNotationInspection.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public sealed class HungarianNotationInspection : InspectionBase
8585
DeclarationType.Constant,
8686
DeclarationType.Control,
8787
DeclarationType.ClassModule,
88+
DeclarationType.Document,
8889
DeclarationType.Member,
8990
DeclarationType.Module,
9091
DeclarationType.ProceduralModule,

Rubberduck.CodeAnalysis/Inspections/Concrete/MoveFieldCloserToUsageInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
2020
.Where(declaration =>
2121
{
2222
if (declaration.IsWithEvents
23-
|| !new[] {DeclarationType.ClassModule, DeclarationType.ProceduralModule}.Contains(declaration.ParentDeclaration.DeclarationType)
23+
|| !new[] {DeclarationType.ClassModule, DeclarationType.Document, DeclarationType.ProceduralModule}.Contains(declaration.ParentDeclaration.DeclarationType)
2424
|| IsIgnoringInspectionResultFor(declaration, AnnotationName))
2525
{
2626
return false;

Rubberduck.CodeAnalysis/Inspections/Concrete/ParameterCanBeByValInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private bool CanBeChangedToBePassedByValIndividually(ParameterDeclaration parame
7070
&& (parameter.IsByRef || parameter.IsImplicitByRef)
7171
&& !IsParameterOfDeclaredLibraryFunction(parameter)
7272
&& (parameter.AsTypeDeclaration == null
73-
|| (parameter.AsTypeDeclaration.DeclarationType != DeclarationType.ClassModule
73+
|| (!parameter.AsTypeDeclaration.DeclarationType.HasFlag(DeclarationType.ClassModule)
7474
&& parameter.AsTypeDeclaration.DeclarationType != DeclarationType.UserDefinedType
7575
&& parameter.AsTypeDeclaration.DeclarationType != DeclarationType.Enumeration))
7676
&& !parameter.References.Any(reference => reference.IsAssignment)

Rubberduck.CodeAnalysis/Inspections/Concrete/ProcedureNotUsedInspection.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
2929
{
3030
var declarations = UserDeclarations.ToList();
3131

32-
var classes = State.DeclarationFinder.UserDeclarations(DeclarationType.ClassModule).ToList(); // declarations.Where(item => item.DeclarationType == DeclarationType.ClassModule).ToList();
33-
var modules = State.DeclarationFinder.UserDeclarations(DeclarationType.ProceduralModule).ToList(); // declarations.Where(item => item.DeclarationType == DeclarationType.ProceduralModule).ToList();
32+
var classes = State.DeclarationFinder.UserDeclarations(DeclarationType.ClassModule)
33+
.Concat(State.DeclarationFinder.UserDeclarations(DeclarationType.Document))
34+
.ToList();
35+
var modules = State.DeclarationFinder.UserDeclarations(DeclarationType.ProceduralModule).ToList();
3436

3537
var handlers = State.DeclarationFinder.UserDeclarations(DeclarationType.Control)
3638
.SelectMany(control => declarations.FindEventHandlers(control)).ToList();

Rubberduck.CodeAnalysis/Inspections/Concrete/ShadowedDeclarationInspection.cs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration orig
119119
return false;
120120
}
121121

122-
var originalDeclarationComponentType = originalDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
123-
var userDeclarationComponentType = userDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
122+
var originalDeclarationEnclosingType = originalDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
123+
var userDeclarationEnclosingType = userDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
124124

125125
// It is not possible to directly access a Parameter, UDT Member or Label declared in another project
126126
if (originalDeclaration.DeclarationType == DeclarationType.Parameter || originalDeclaration.DeclarationType == DeclarationType.UserDefinedTypeMember ||
@@ -136,20 +136,20 @@ private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration orig
136136
}
137137

138138
// It is not possible to directly access a UserForm or Document declared in another project, nor any declarations placed inside them
139-
if (originalDeclarationComponentType == ComponentType.UserForm || originalDeclarationComponentType == ComponentType.Document)
139+
if (originalDeclarationEnclosingType == ComponentType.UserForm || originalDeclarationEnclosingType == ComponentType.Document)
140140
{
141141
return false;
142142
}
143143

144144
// It is not possible to directly access any declarations placed inside a Class Module
145-
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule && originalDeclarationComponentType == ComponentType.ClassModule)
145+
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule && originalDeclarationEnclosingType == ComponentType.ClassModule)
146146
{
147147
return false;
148148
}
149149

150-
if (userDeclaration.DeclarationType == DeclarationType.ClassModule)
150+
if (userDeclaration.DeclarationType == DeclarationType.ClassModule || userDeclaration.DeclarationType == DeclarationType.Document)
151151
{
152-
switch (userDeclarationComponentType)
152+
switch (userDeclarationEnclosingType)
153153
{
154154
case ComponentType.UserForm when !ReferencedProjectTypeShadowingRelations[originalDeclaration.DeclarationType].Contains(DeclarationType.UserForm):
155155
return false;
@@ -158,8 +158,8 @@ private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration orig
158158
}
159159
}
160160

161-
if (userDeclaration.DeclarationType != DeclarationType.ClassModule ||
162-
(userDeclarationComponentType != ComponentType.UserForm && userDeclarationComponentType != ComponentType.Document))
161+
if ((userDeclaration.DeclarationType != DeclarationType.ClassModule && userDeclaration.DeclarationType != DeclarationType.Document) ||
162+
(userDeclarationEnclosingType != ComponentType.UserForm && userDeclarationEnclosingType != ComponentType.Document))
163163
{
164164
if (!ReferencedProjectTypeShadowingRelations[originalDeclaration.DeclarationType].Contains(userDeclaration.DeclarationType))
165165
{
@@ -188,7 +188,7 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
188188
return false;
189189
}
190190

191-
var originalDeclarationComponentType = originalDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
191+
var originalDeclarationEnclosingType = originalDeclaration.QualifiedName.QualifiedModuleName.ComponentType;
192192

193193
// It is not possible to directly access a Parameter, UDT Member or Label declared in another component.
194194
if (originalDeclaration.DeclarationType == DeclarationType.Parameter || originalDeclaration.DeclarationType == DeclarationType.UserDefinedTypeMember ||
@@ -198,27 +198,33 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
198198
}
199199

200200
// It is not possible to directly access any declarations placed inside a Class Module.
201-
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule && originalDeclarationComponentType == ComponentType.ClassModule)
201+
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule &&
202+
originalDeclaration.DeclarationType != DeclarationType.Document &&
203+
originalDeclarationEnclosingType == ComponentType.ClassModule)
202204
{
203205
return false;
204206
}
205207

206208
// It is not possible to directly access any declarations placed inside a Document Module. (Document Modules have DeclarationType ClassMoodule.)
207-
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule && originalDeclarationComponentType == ComponentType.Document)
209+
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule &&
210+
originalDeclaration.DeclarationType != DeclarationType.Document &&
211+
originalDeclarationEnclosingType == ComponentType.Document)
208212
{
209213
return false;
210214
}
211215

212216
// It is not possible to directly access any declarations placed inside a User Form. (User Forms have DeclarationType ClassMoodule.)
213-
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule && originalDeclarationComponentType == ComponentType.UserForm)
217+
if (originalDeclaration.DeclarationType != DeclarationType.ClassModule &&
218+
originalDeclaration.DeclarationType != DeclarationType.Document &&
219+
originalDeclarationEnclosingType == ComponentType.UserForm)
214220
{
215221
return false;
216222
}
217223

218-
if (originalDeclaration.DeclarationType == DeclarationType.ClassModule)
224+
if (originalDeclaration.DeclarationType == DeclarationType.ClassModule || originalDeclaration.DeclarationType == DeclarationType.Document)
219225
{
220226
// Syntax of instantiating a new class makes it impossible to be shadowed
221-
switch (originalDeclarationComponentType)
227+
switch (originalDeclarationEnclosingType)
222228
{
223229
case ComponentType.ClassModule:
224230
return false;
@@ -250,8 +256,12 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
250256
private static bool DeclarationInTheSameComponentCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration)
251257
{
252258
// Shadowing the component containing the declaration is not a problem, because it is possible to directly access declarations inside that component
253-
if (originalDeclaration.DeclarationType == DeclarationType.ProceduralModule || originalDeclaration.DeclarationType == DeclarationType.ClassModule ||
254-
userDeclaration.DeclarationType == DeclarationType.ProceduralModule || userDeclaration.DeclarationType == DeclarationType.ClassModule)
259+
if (originalDeclaration.DeclarationType == DeclarationType.ProceduralModule ||
260+
originalDeclaration.DeclarationType == DeclarationType.ClassModule ||
261+
originalDeclaration.DeclarationType == DeclarationType.Document ||
262+
userDeclaration.DeclarationType == DeclarationType.ProceduralModule ||
263+
userDeclaration.DeclarationType == DeclarationType.ClassModule ||
264+
userDeclaration.DeclarationType == DeclarationType.Document)
255265
{
256266
return false;
257267
}
@@ -360,7 +370,7 @@ private static bool DeclarationIsLocal(Declaration declaration)
360370
}.ToHashSet(),
361371
[DeclarationType.ClassModule] = new[]
362372
{
363-
DeclarationType.Project, DeclarationType.ProceduralModule, DeclarationType.ClassModule, DeclarationType.UserForm
373+
DeclarationType.Project, DeclarationType.ProceduralModule, DeclarationType.ClassModule, DeclarationType.UserForm, DeclarationType.Document
364374
}.ToHashSet(),
365375
[DeclarationType.Procedure] = new[]
366376
{

Rubberduck.CodeAnalysis/Inspections/Concrete/UnderscoreInPublicClassModuleMemberInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
1919
var eventHandlers = State.DeclarationFinder.FindEventHandlers().ToList();
2020

2121
var names = State.DeclarationFinder.UserDeclarations(Parsing.Symbols.DeclarationType.Member)
22-
.Where(w => w.ParentDeclaration.DeclarationType == Parsing.Symbols.DeclarationType.ClassModule)
22+
.Where(w => w.ParentDeclaration.DeclarationType.HasFlag(Parsing.Symbols.DeclarationType.ClassModule))
2323
.Where(w => !interfaceMembers.Contains(w) && !eventHandlers.Contains(w))
2424
.Where(w => w.Accessibility == Parsing.Symbols.Accessibility.Public || w.Accessibility == Parsing.Symbols.Accessibility.Implicit)
2525
.Where(w => w.IdentifierName.Contains('_'))

Rubberduck.CodeAnalysis/QuickFixes/IsMissingOnInappropriateArgumentQuickFix.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ private string UninitializedComparisonForParameter(ParameterDeclaration paramete
107107
switch (parameter.AsTypeDeclaration.DeclarationType)
108108
{
109109
case DeclarationType.ClassModule:
110+
case DeclarationType.Document:
110111
return $"{parameter.IdentifierName} Is {Tokens.Nothing}";
111112
case DeclarationType.Enumeration:
112113
var members = _declarationFinderProvider.DeclarationFinder.AllDeclarations.OfType<ValuedDeclaration>()

Rubberduck.Core/UI/CodeExplorer/Commands/OpenDesignerCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ protected override bool EvaluateCanExecute(object parameter)
4848
// ReSharper disable once SwitchStatementMissingSomeCases
4949
switch (declaration.DeclarationType)
5050
{
51-
case DeclarationType.ClassModule when qualifiedModuleName.ComponentType != ComponentType.Document:
52-
return _projectsProvider.Component(qualifiedModuleName).HasDesigner;
5351
case DeclarationType.ClassModule:
52+
return _projectsProvider.Component(qualifiedModuleName).HasDesigner;
53+
case DeclarationType.Document:
5454
using (var app = _vbe.HostApplication())
5555
{
5656
return app?.CanOpenDocumentDesigner(qualifiedModuleName) ?? false;
@@ -71,7 +71,7 @@ protected override void OnExecute(object parameter)
7171
if (!base.EvaluateCanExecute(parameter) ||
7272
!(parameter is CodeExplorerItemViewModel node) ||
7373
node.Declaration == null ||
74-
node.Declaration.DeclarationType != DeclarationType.ClassModule)
74+
!node.Declaration.DeclarationType.HasFlag(DeclarationType.ClassModule))
7575
{
7676
return;
7777
}

Rubberduck.Core/UI/Command/Refactorings/RefactorExtractInterfaceCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ public RefactorExtractInterfaceCommand(RubberduckParserState state, IMessageBox
3232
private static readonly IReadOnlyList<DeclarationType> ModuleTypes = new[]
3333
{
3434
DeclarationType.ClassModule,
35+
DeclarationType.Document,
3536
DeclarationType.UserForm,
36-
DeclarationType.ProceduralModule,
37+
DeclarationType.ProceduralModule
3738
};
3839

3940
protected override bool EvaluateCanExecute(object parameter)

Rubberduck.Parsing/Binding/Bindings/IndexDefaultBinding.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,13 +201,9 @@ private IBoundExpression ResolveDefaultMember(IBoundExpression lExpression, stri
201201
The declared type of <l-expression> is a specific class, which has a public default Property
202202
Get, Property Let, function or subroutine, and one of the following is true:
203203
*/
204-
bool hasDefaultMember = asTypeDeclaration != null
205-
&& asTypeDeclaration.DeclarationType == DeclarationType.ClassModule
206-
&& ((ClassModuleDeclaration)asTypeDeclaration).DefaultMember != null;
207-
if (hasDefaultMember)
204+
if (asTypeDeclaration is ClassModuleDeclaration classModule
205+
&& classModule.DefaultMember is Declaration defaultMember)
208206
{
209-
ClassModuleDeclaration classModule = (ClassModuleDeclaration)asTypeDeclaration;
210-
Declaration defaultMember = classModule.DefaultMember;
211207
bool isPropertyGetLetFunctionProcedure =
212208
defaultMember.DeclarationType == DeclarationType.PropertyGet
213209
|| defaultMember.DeclarationType == DeclarationType.PropertyLet

0 commit comments

Comments
 (0)