@@ -1015,21 +1015,6 @@ private List<Declaration> FindAllEventHandlers()
1015
1015
return handlers . ToList ( ) ;
1016
1016
}
1017
1017
1018
- private IEnumerable < Declaration > GetAccessibleUserDeclarations ( Declaration target )
1019
- {
1020
- if ( target == null )
1021
- {
1022
- return Enumerable . Empty < Declaration > ( ) ;
1023
- }
1024
-
1025
- return _userDeclarationsByType . AllValues ( )
1026
- . Where ( callee => AccessibilityCheck . IsAccessible (
1027
- Declaration . GetProjectParent ( target ) ,
1028
- Declaration . GetModuleParent ( target ) ,
1029
- target . ParentDeclaration ,
1030
- callee ) ) ;
1031
- }
1032
-
1033
1018
public IEnumerable < Declaration > FindNewDeclarationNameConflicts ( string newName , Declaration renameTarget )
1034
1019
{
1035
1020
if ( newName . Equals ( renameTarget . IdentifierName ) )
@@ -1045,49 +1030,37 @@ public IEnumerable<Declaration> FindNewDeclarationNameConflicts(string newName,
1045
1030
1046
1031
if ( IsEnumOrUDTMemberDeclaration ( renameTarget ) )
1047
1032
{
1048
- identifierMatches = identifierMatches . Where ( idm =>
1033
+ var memberMatches = identifierMatches . Where ( idm =>
1049
1034
IsEnumOrUDTMemberDeclaration ( idm ) && idm . ParentDeclaration == renameTarget . ParentDeclaration ) ;
1050
- if ( identifierMatches . Any ( ) )
1035
+ if ( memberMatches . Any ( ) )
1051
1036
{
1052
- return identifierMatches ;
1037
+ return memberMatches ;
1053
1038
}
1054
1039
}
1055
1040
1056
1041
identifierMatches = identifierMatches . Where ( nc => ! IsEnumOrUDTMemberDeclaration ( nc ) ) ;
1057
- #if DEBUG
1058
- foreach ( var idMatch in identifierMatches )
1059
- {
1060
- var predicate1 = renameTarget . References . Any ( renameTargetRef => renameTargetRef . ParentScoping == idMatch . ParentDeclaration ) ;
1061
- var predicate2 = renameTarget . References . Any ( renameTargetRefs => renameTarget . ParentDeclaration . DeclarationType != DeclarationType . ClassModule
1062
- && idMatch == renameTargetRefs . ParentScoping
1063
- && ! UsesScopeResolution ( renameTargetRefs . Context . Parent ) ) ;
1064
- var predicate3 = renameTarget . References
1065
- . Any ( renameTargetRef => idMatch . References
1066
- . Any ( idmRefs => idmRefs . ParentScoping == renameTargetRef . ParentScoping
1067
- && ! UsesScopeResolution ( renameTargetRef . Context . Parent ) ) ) ;
1068
- var predicate4 = RenameTargetReferencedInConflictingNameDeclaringModule ( renameTarget , idMatch ) ;
1069
- var predicate5 = renameTarget == idMatch . ParentDeclaration ;
1070
- var isLocalConflict = predicate1 || predicate2 || predicate3 || predicate4 || predicate5 ;
1071
- }
1072
- #endif
1073
- var referenceConflicts = identifierMatches . Where ( idm => renameTarget . References . Any ( renameTargetRef => renameTargetRef . ParentScoping == idm . ParentDeclaration )
1074
- || renameTarget . References . Any ( renameTargetRef => renameTarget . ParentDeclaration . DeclarationType != DeclarationType . ClassModule
1075
- && idm == renameTargetRef . ParentScoping
1076
- && ! UsesScopeResolution ( renameTargetRef . Context . Parent ) )
1077
- || renameTarget . References
1078
- . Any ( renameTargetRef => idm . References
1079
- . Any ( idmRefs => idmRefs . ParentScoping == renameTargetRef . ParentScoping
1080
- && ! UsesScopeResolution ( renameTargetRef . Context . Parent ) ) )
1081
- || RenameTargetReferencedInConflictingNameDeclaringModule ( renameTarget , idm )
1082
- || renameTarget == idm . ParentDeclaration ) ;
1042
+ var referenceConflicts = identifierMatches . Where ( idm =>
1043
+ renameTarget . References
1044
+ . Any ( renameTargetRef => renameTargetRef . ParentScoping == idm . ParentDeclaration
1045
+ || renameTarget . ParentDeclaration . DeclarationType != DeclarationType . ClassModule
1046
+ && idm == renameTargetRef . ParentScoping
1047
+ && ! UsesScopeResolution ( renameTargetRef . Context . Parent )
1048
+ || idm . References
1049
+ . Any ( idmRef => idmRef . ParentScoping == renameTargetRef . ParentScoping
1050
+ && ! UsesScopeResolution ( renameTargetRef . Context . Parent ) ) )
1051
+ || idm . DeclarationType . HasFlag ( DeclarationType . Variable )
1052
+ && idm . ParentDeclaration . DeclarationType . HasFlag ( DeclarationType . Module ) //?
1053
+ && renameTarget . References . Any ( renameTargetRef => renameTargetRef . QualifiedModuleName == idm . ParentDeclaration . QualifiedModuleName ) ) ;
1054
+
1083
1055
if ( referenceConflicts . Any ( ) )
1084
1056
{
1085
1057
return referenceConflicts ;
1086
1058
}
1087
1059
1088
1060
var renameTargetModule = Declaration . GetModuleParent ( renameTarget ) ;
1089
1061
var declarationConflicts = identifierMatches . Where ( idm =>
1090
- AccessibilityCheck . IsAccessible (
1062
+ renameTarget == idm . ParentDeclaration
1063
+ || AccessibilityCheck . IsAccessible (
1091
1064
Declaration . GetProjectParent ( renameTarget ) ,
1092
1065
renameTargetModule ,
1093
1066
renameTarget . ParentDeclaration ,
@@ -1103,107 +1076,13 @@ private bool IsEnumOrUDTMemberDeclaration(Declaration candidate)
1103
1076
|| candidate . DeclarationType == DeclarationType . UserDefinedTypeMember ;
1104
1077
}
1105
1078
1106
- public bool IsConflictingMember ( Declaration renameTarget , Declaration renameTargetModule , Declaration candidate )
1079
+ private bool IsConflictingMember ( Declaration renameTarget , Declaration renameTargetModule , Declaration candidate )
1107
1080
{
1108
1081
var candidateModule = Declaration . GetModuleParent ( candidate ) ;
1109
- return renameTargetModule == candidateModule //member of same module
1110
- || renameTargetModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule )
1082
+ return renameTargetModule == candidateModule
1083
+ || renameTargetModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule )
1111
1084
&& candidate . Accessibility != Accessibility . Private
1112
- && candidateModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule )
1113
- ;
1114
- }
1115
-
1116
- public bool RenameTargetReferencedInConflictingNameDeclaringModule ( Declaration renameTarget , Declaration conflictCandidate )
1117
- {
1118
- if ( conflictCandidate . DeclarationType != DeclarationType . Variable )
1119
- {
1120
- return false ;
1121
- }
1122
- var candidateModule = Declaration . GetModuleParent ( conflictCandidate ) ;
1123
- if ( candidateModule != conflictCandidate . ParentDeclaration )
1124
- {
1125
- return false ;
1126
- }
1127
- return renameTarget . References . Any ( renameTargetRef => renameTargetRef . QualifiedModuleName == candidateModule . QualifiedModuleName ) ;
1128
- }
1129
-
1130
- public IEnumerable < Declaration > GetDeclarationsWithIdentifiersToAvoid ( Declaration target )
1131
- {
1132
- if ( target == null )
1133
- {
1134
- return Enumerable . Empty < Declaration > ( ) ;
1135
- }
1136
-
1137
- var declarationsToAvoid = GetNameCollisionDeclarations ( target ) . ToList ( ) ;
1138
-
1139
- declarationsToAvoid . AddRange ( GetNameCollisionDeclarations ( target . References ) ) ;
1140
-
1141
- return declarationsToAvoid ;
1142
- }
1143
-
1144
- private HashSet < Declaration > GetNameCollisionDeclarations ( Declaration declaration )
1145
- {
1146
- if ( declaration is null )
1147
- {
1148
- return new HashSet < Declaration > ( ) ;
1149
- }
1150
-
1151
- //Filter accessible declarations to those that would result in name collisions or hiding
1152
- var declarationsToAvoid = GetAccessibleUserDeclarations ( declaration ) . Where ( candidate =>
1153
- ( ! ( candidate . DeclarationType == DeclarationType . UserDefinedTypeMember
1154
- || candidate . DeclarationType == DeclarationType . EnumerationMember )
1155
- && ( IsAccessibleInOtherProcedureModule ( candidate , declaration )
1156
- || IsAccessibleInSameProcedureModule ( candidate , declaration )
1157
- || candidate . DeclarationType == DeclarationType . Project
1158
- || candidate . DeclarationType . HasFlag ( DeclarationType . Module )
1159
- || IsDeclarationInSameProcedureScope ( candidate , declaration )
1160
- )
1161
- ) ) . ToHashSet ( ) ;
1162
-
1163
- //Add local variables when the target is a method or property
1164
- if ( IsSubroutineOrProperty ( declaration ) )
1165
- {
1166
- var localVariableDeclarations = _declarations . AllValues ( )
1167
- . Where ( dec => ReferenceEquals ( declaration , dec . ParentDeclaration ) ) ;
1168
- declarationsToAvoid . UnionWith ( localVariableDeclarations ) ;
1169
- }
1170
-
1171
- declarationsToAvoid = AddRelatedMembers ( declaration , declarationsToAvoid ) ;
1172
- return declarationsToAvoid ;
1173
- }
1174
-
1175
- private IEnumerable < Declaration > GetNameCollisionDeclarations ( IEnumerable < IdentifierReference > references )
1176
- {
1177
- var declarationsToAvoid = new HashSet < Declaration > ( ) ;
1178
- foreach ( var reference in references )
1179
- {
1180
- if ( ! UsesScopeResolution ( reference . Context . Parent ) )
1181
- {
1182
- declarationsToAvoid . UnionWith ( GetNameCollisionDeclarations ( reference . ParentNonScoping ) ) ;
1183
- }
1184
- }
1185
- return declarationsToAvoid ;
1186
- }
1187
-
1188
- private bool IsAccessibleInOtherProcedureModule ( Declaration candidate , Declaration declaration )
1189
- => AreProceduralModules ( candidate , declaration , out bool isSameModule )
1190
- && ! isSameModule && candidate . Accessibility != Accessibility . Private ;
1191
-
1192
- private bool IsAccessibleInSameProcedureModule ( Declaration candidate , Declaration declaration )
1193
- => AreProceduralModules ( candidate , declaration , out bool isSameModule )
1194
- && isSameModule ;
1195
-
1196
- private bool AreProceduralModules ( Declaration candidate , Declaration declaration , out bool sameModule )
1197
- {
1198
- sameModule = false ;
1199
- var candidateModuleDeclaration = Declaration . GetModuleParent ( candidate ) ;
1200
-
1201
- var decModuleDeclaration = Declaration . GetModuleParent ( declaration ) ;
1202
-
1203
- sameModule = candidateModuleDeclaration != null && candidateModuleDeclaration == decModuleDeclaration ;
1204
-
1205
- return candidateModuleDeclaration ? . DeclarationType == DeclarationType . ProceduralModule
1206
- && decModuleDeclaration ? . DeclarationType == DeclarationType . ProceduralModule ;
1085
+ && candidateModule . DeclarationType . HasFlag ( DeclarationType . ProceduralModule ) ;
1207
1086
}
1208
1087
1209
1088
private bool UsesScopeResolution ( RuleContext ruleContext )
@@ -1212,43 +1091,6 @@ private bool UsesScopeResolution(RuleContext ruleContext)
1212
1091
|| ( ruleContext is VBAParser . MemberAccessExprContext ) ;
1213
1092
}
1214
1093
1215
- private bool IsInProceduralModule ( Declaration candidateDeclaration )
1216
- {
1217
- var candidateModuleDeclaration = Declaration . GetModuleParent ( candidateDeclaration ) ;
1218
-
1219
- return candidateModuleDeclaration ? . DeclarationType == DeclarationType . ProceduralModule ;
1220
- }
1221
-
1222
- private bool IsDeclarationInSameProcedureScope ( Declaration candidateDeclaration , Declaration scopingDeclaration )
1223
- {
1224
- return candidateDeclaration . ParentScope == scopingDeclaration . ParentScope ;
1225
- }
1226
-
1227
- private HashSet < Declaration > AddRelatedMembers ( Declaration candidateDeclaration , HashSet < Declaration > conflictingMembers )
1228
- {
1229
- if ( candidateDeclaration . DeclarationType == DeclarationType . UserDefinedTypeMember
1230
- || candidateDeclaration . DeclarationType == DeclarationType . EnumerationMember )
1231
- {
1232
- var relatedMembers = Members ( candidateDeclaration . ParentDeclaration ) . Where ( m =>
1233
- ( m . DeclarationType == DeclarationType . EnumerationMember
1234
- || m . DeclarationType == DeclarationType . UserDefinedTypeMember )
1235
- && ! m . IdentifierName . Equals ( candidateDeclaration . IdentifierName )
1236
- ) ;
1237
- foreach ( var rm in relatedMembers )
1238
- {
1239
- conflictingMembers . Add ( rm ) ;
1240
- }
1241
- }
1242
- return conflictingMembers ;
1243
- }
1244
-
1245
- private static bool IsSubroutineOrProperty ( Declaration declaration )
1246
- {
1247
- return declaration . DeclarationType . HasFlag ( DeclarationType . Property )
1248
- || declaration . DeclarationType == DeclarationType . Function
1249
- || declaration . DeclarationType == DeclarationType . Procedure ;
1250
- }
1251
-
1252
1094
/// <summary>
1253
1095
/// Creates a dictionary of identifier references, keyed by module.
1254
1096
/// </summary>
0 commit comments