@@ -201,19 +201,31 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
201
201
202
202
var originalDeclarationComponentType = originalDeclaration . QualifiedName . QualifiedModuleName . ComponentType ;
203
203
204
- // It is not possible to directly access a Parameter, UDT Member or Label declared in another component
204
+ // It is not possible to directly access a Parameter, UDT Member or Label declared in another component.
205
205
if ( originalDeclaration . DeclarationType == DeclarationType . Parameter || originalDeclaration . DeclarationType == DeclarationType . UserDefinedTypeMember ||
206
206
originalDeclaration . DeclarationType == DeclarationType . LineLabel )
207
207
{
208
208
return false ;
209
209
}
210
210
211
- // It is not possible to directly access any declarations placed inside a Class Module
211
+ // It is not possible to directly access any declarations placed inside a Class Module.
212
212
if ( originalDeclaration . DeclarationType != DeclarationType . ClassModule && originalDeclarationComponentType == ComponentType . ClassModule )
213
213
{
214
214
return false ;
215
215
}
216
216
217
+ // It is not possible to directly access any declarations placed inside a Document Module. (Document Modules have DeclarationType ClassMoodule.)
218
+ if ( originalDeclaration . DeclarationType != DeclarationType . ClassModule && originalDeclarationComponentType == ComponentType . Document )
219
+ {
220
+ return false ;
221
+ }
222
+
223
+ // It is not possible to directly access any declarations placed inside a User Form. (User Forms have DeclarationType ClassMoodule.)
224
+ if ( originalDeclaration . DeclarationType != DeclarationType . ClassModule && originalDeclarationComponentType == ComponentType . UserForm )
225
+ {
226
+ return false ;
227
+ }
228
+
217
229
if ( originalDeclaration . DeclarationType == DeclarationType . ClassModule )
218
230
{
219
231
// Syntax of instantiating a new class makes it impossible to be shadowed
@@ -234,9 +246,15 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
234
246
return false ;
235
247
}
236
248
}
237
- else if ( ! OtherComponentTypeShadowingRelations [ originalDeclaration . DeclarationType ] . Contains ( userDeclaration . DeclarationType ) )
249
+ else
238
250
{
239
- return false ;
251
+ HashSet < DeclarationType > shadowedTypes ;
252
+ if ( ! OtherComponentTypeShadowingRelations . TryGetValue ( originalDeclaration . DeclarationType ,
253
+ out shadowedTypes )
254
+ || ! shadowedTypes . Contains ( userDeclaration . DeclarationType ) )
255
+ {
256
+ return false ;
257
+ }
240
258
}
241
259
242
260
// Events don't have a body, so their parameters can't be accessed
0 commit comments