@@ -119,8 +119,8 @@ private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration orig
119
119
return false ;
120
120
}
121
121
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 ;
124
124
125
125
// It is not possible to directly access a Parameter, UDT Member or Label declared in another project
126
126
if ( originalDeclaration . DeclarationType == DeclarationType . Parameter || originalDeclaration . DeclarationType == DeclarationType . UserDefinedTypeMember ||
@@ -136,20 +136,20 @@ private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration orig
136
136
}
137
137
138
138
// 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 )
140
140
{
141
141
return false ;
142
142
}
143
143
144
144
// 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 )
146
146
{
147
147
return false ;
148
148
}
149
149
150
- if ( userDeclaration . DeclarationType == DeclarationType . ClassModule )
150
+ if ( userDeclaration . DeclarationType == DeclarationType . ClassModule || userDeclaration . DeclarationType == DeclarationType . Document )
151
151
{
152
- switch ( userDeclarationComponentType )
152
+ switch ( userDeclarationEnclosingType )
153
153
{
154
154
case ComponentType . UserForm when ! ReferencedProjectTypeShadowingRelations [ originalDeclaration . DeclarationType ] . Contains ( DeclarationType . UserForm ) :
155
155
return false ;
@@ -158,8 +158,8 @@ private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration orig
158
158
}
159
159
}
160
160
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 ) )
163
163
{
164
164
if ( ! ReferencedProjectTypeShadowingRelations [ originalDeclaration . DeclarationType ] . Contains ( userDeclaration . DeclarationType ) )
165
165
{
@@ -188,7 +188,7 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
188
188
return false ;
189
189
}
190
190
191
- var originalDeclarationComponentType = originalDeclaration . QualifiedName . QualifiedModuleName . ComponentType ;
191
+ var originalDeclarationEnclosingType = originalDeclaration . QualifiedName . QualifiedModuleName . ComponentType ;
192
192
193
193
// It is not possible to directly access a Parameter, UDT Member or Label declared in another component.
194
194
if ( originalDeclaration . DeclarationType == DeclarationType . Parameter || originalDeclaration . DeclarationType == DeclarationType . UserDefinedTypeMember ||
@@ -198,27 +198,33 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
198
198
}
199
199
200
200
// 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 )
202
204
{
203
205
return false ;
204
206
}
205
207
206
208
// 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 )
208
212
{
209
213
return false ;
210
214
}
211
215
212
216
// 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 )
214
220
{
215
221
return false ;
216
222
}
217
223
218
- if ( originalDeclaration . DeclarationType == DeclarationType . ClassModule )
224
+ if ( originalDeclaration . DeclarationType == DeclarationType . ClassModule || originalDeclaration . DeclarationType == DeclarationType . Document )
219
225
{
220
226
// Syntax of instantiating a new class makes it impossible to be shadowed
221
- switch ( originalDeclarationComponentType )
227
+ switch ( originalDeclarationEnclosingType )
222
228
{
223
229
case ComponentType . ClassModule :
224
230
return false ;
@@ -250,8 +256,12 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
250
256
private static bool DeclarationInTheSameComponentCanBeShadowed ( Declaration originalDeclaration , Declaration userDeclaration )
251
257
{
252
258
// 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 )
255
265
{
256
266
return false ;
257
267
}
@@ -360,7 +370,7 @@ private static bool DeclarationIsLocal(Declaration declaration)
360
370
} . ToHashSet ( ) ,
361
371
[ DeclarationType . ClassModule ] = new [ ]
362
372
{
363
- DeclarationType . Project , DeclarationType . ProceduralModule , DeclarationType . ClassModule , DeclarationType . UserForm
373
+ DeclarationType . Project , DeclarationType . ProceduralModule , DeclarationType . ClassModule , DeclarationType . UserForm , DeclarationType . Document
364
374
} . ToHashSet ( ) ,
365
375
[ DeclarationType . Procedure ] = new [ ]
366
376
{
0 commit comments